avatar_ete

CCSC kod yardım

Başlatan ete, 07 Ocak 2023, 14:18:33

ete

Uzun zamandır C dilini inceliyorum. Ufak ufak bir geçiş yapayım diye kendimi zorluyorum ama elim bir türlü gitmiyor. Sebebi çok basit. Bu dilde bir program yazmak gerçekten komplike bir iş. Belki bilgi eksikliğimden kaynaklanıyordur. Gerçi işin başında sayılırım . Sürekli okumak bilgi edinmek işi çözmüyor. Asıl öğrenme yazmaya başladığın an gerçekleşiyor. Ama bu safhada sürekli örneklere bakma ihtiyacı insanı yoruyor desem yalan olmaz. Kısaca ne kadar öğrenirsen öğren bir yerlere bakmadan direk programı yazamıyorsun. Bunun sebebi yazma protokolü. Ayarlamayı bir yerde tanımlamayı başka yerde ve işi yapacak kodu başka yerde yazma zorunluluğndan kaynaklanıyor. Sonuçta bu düşünce tarzına yada yazım şekline alışmak gerekiyor. Yavaş yavaşda olsa alışırım inşallah.

Gelelim yardım meselesine; ilk programımı yazdım. Programın konusu şöyle;
16F1827 işlemci kullanarak, PORTA.0 pinine bağlı bir trimpot dan okunan voltajın (ADC değerinin) 0-99 aralığına çevrilerek 2 digit 7 segment display de gösterilmesi.
Display için TMR0 kesmesi kullanıyorum ve her 3 ms de bir sistem kesmeye girerek değeri displayde göstermeye çalışıyor.
Program çalışıyor ancak display kısmında bir sorun var. Hanelerden birisi abuk subuk şeyler gösterirken maksimum değer olan 99 ile minimum değer olan 00 ları doğru gösteriyor. Ama ara değerlerde alakasız karekterler çıkıyor ve ben buna bir anlam veremiyorum.

Programı ve şemayı buraya ekliyorum. Mutlaka bir yerlerde kusur var. Yada kullandığım derleyicide kusur olsa gerek. Her neyse bilen birisi bakıp ne gibi kusur olduğunu bana söylerde bilgimi yenilerim diye düşünüyorum. Bana göre kusur yok tabiiki. Programa eklediğim bazı değişkenleri kullanarak hesaplanan değerleri eproma yazdırıp doğru hesaplanıp hesaplanmadıklarına da bakıyorum. Her şey doğru gözüküyor. Yanlızca ekrana yerleşmede bir sorun var ama nedir bilemiyorum.
Enteresan bir şey söyleyeyim. Kesme kısmında yer alan kod şöyle;
#INT_TIMER0
void  TIMER0_isr(void) 
{sira++;
if (sira==2)
   sira=0;
   
if (sira==0)
   output_low(display_2) ; //birler hanesini kapattık
   output_b(digit[onlar]); // onlar hanesini ekrana verdik
   output_high(display_1);  // onlar hanesini aktif ettik
   delay_us(20);
   
if (sira==1) 
    output_low(display_1);   // onlar hanesini kapattık
    output_b(digit[birler]); // birler hanesini displaye yazdık
    output_high(display_2);  // birler hanesini aktif hale getirdik

    set_timer0(99);     // 1/32 bölme oranı ve TMR0=68 değeri ile 3ms lik kesme süresi elde ediyoruz

Burada IF sıra==1 d,ye başlayan son kısıma onlar hanesini yazarsam onlar hanesi doğru çalışıyor. Önceden öyle idi. Sonra değiştirip birler hanesini yazdım bu seferde birler hanesi doğru çalışıyor. Demekki sorun if sıra=0 diye başlayan satırlarda.
Bu arada onlar hanesinin yazıldığı yerde yer alan 20us lik gecikmeyi sonradan ekledim. Belki o kısım biraz daha ekranda kalırsa net görülebilir diye düşündüm ama oda işe yaramadı.

Ete

wert

#1
#INT_TIMER0
void  TIMER0_isr(void) 
{
sira++;
if (sira==2)
   sira=0;
   
if (sira==0)
{
   output_low(display_2) ; //birler hanesini kapattık
   output_b(digit[onlar]); // onlar hanesini ekrana verdik
   output_high(display_1);  // onlar hanesini aktif ettik
}
   
if (sira==1) 
{
    output_low(display_1);   // onlar hanesini kapattık
    output_b(digit[birler]); // birler hanesini displaye yazdık
    output_high(display_2);  // birler hanesini aktif hale getirdik
}
 
    set_timer0(99);     // 1/32 bölme oranı ve TMR0=68 değeri ile 3ms lik kesme süresi elde ediyoruz
}

ete hocam if lerde süslü parentez olmadığı için yapıyor olabilir, isterseniz birde böyle deneyin

ete

Evet sorun süslü parantez meselesi imiş.
Basic de if le başlayan şart komutu endif ile biter ki böylece if in etki alanı belirlenmiş olur.
Burada benim yazdığım şekilde bir etki alanı belirleyicisi olmadığı için derleyicide kararsız kalmış anlaşılan.
Parantezleri ekleyince her şey doğru çalışmaya başladı.
Teşekkür ederim.

Ete

Serk@n

Alıntı yapılan: ete - 07 Ocak 2023, 17:21:55Evet sorun süslü parantez meselesi imiş.
Basic de if le başlayan şart komutu endif ile biter ki böylece if in etki alanı belirlenmiş olur.
Burada benim yazdığım şekilde bir etki alanı belirleyicisi olmadığı için derleyicide kararsız kalmış anlaşılan.
Parantezleri ekleyince her şey doğru çalışmaya başladı.
Teşekkür ederim.

Ete

Hocam eğer if sorgusunun cevabı bir satır ise süslü paranteze gerek kalmıyor.
Bildiklerimize göre hareket edersek bilmediklerimizi de öğrenebiliriz.

fatih88

#4
hocam if while de for da süslü parantez şart. Koşul doğruysa o parantezler içini işler eğer tek komut işlenecekse gerek yok mesela
unsignedint8 x=0;
if(!input(zero_sw))x=10;//zero sw basıldıya gnd ye çekildiyse x'e 10 degerini ata
//butonları beklemek icin mesela while de 
while(!input(zero_sw));//burdada buton bırakılana kadar bekler
c dilinin pbp göre biraz üstünlüğü var değişkenler konusu çok iyi pbp tüm değişkenler global hafıza kullanımı ccs c de daha iyi
birde hocam c de interrupt içinde gecikme komutu kullanmamaya çalışalım
bilgi paylaştıkça çoğalır!!

www.fayelektronik.com

ete

If satırları konusunda işin esası mantığa dayanıyor yine.
Tek satır şart varsa ve sonra yeniden bir if veya komut geliyorsa o tek satırın if'e ait olduğuna derleeyici karar verebiliyor demekki. Ama birden fazla satır olursa bir yerde if komut alanının bitirilmesi gerekir ki onuda süslü parantez yapıyor. İşin o kısmına kafam takılmıştı aslında. Bu komutun bittiğini nasıl anlayacak diyordum ve karışıklığın oradan olması ihtimalini yüksek tutuyordum. Her neyse öğreneceğiz.
Bir sorum olacak; diyelimki bazı kütüphaneler kullanmam gerekecek onları nereden bulacağım yada göreceğim? mesela grafik ekran kullanmak istersem yada Sıcaklık sensörü kullanmak istersem (DS18B20) gibi kısaca kütüphanelere nereden erişeceğim?

Bu arada kesme içinde mümkün olduğunca gecikme kullanılmayacağını biliyorum. Sorunun kaynağını bulmak için eklediğimi belirtmiştim.

Ete

Serk@n

Hocam ayrıntılı bilgim yok ama ben aradığım kütüphaneleri github sitesinde buluyorum. Oraya kütüphaneyi ekleyenler aynı zamanda yazılımlarını da lisanlamış oluyorlar. "Ticari amaçla kullanım yasak veya serbest", "atıf gerekir", "kodlarda değişiklik yapılabilir" vs. gibi şartlarla üye olan herkes kütüphanesini burada yayınlayabiliyor. Bazı kimseler yazdıkları kütüphaneler ile burada meşhur olup, büyük şirketlerden iş teklifi de alabiliyorlar.

Herhangi bir kompanentin yanına github yazıp Google'da arama yapınca genelde aradığım kütüphaneyi burada bulabiliyorum. Hatta datasheetlerde yazılan tam anladığım bazı özellikleri de buradan kodları inceleyerek daha fazla fikir sahibi olabiliyorum.
Bildiklerimize göre hareket edersek bilmediklerimizi de öğrenebiliriz.

fatih88

#7
 Hocam küçük bir şey hazırladım glcd hazırlaması çok uzun süreceği icin en azından kütüphane ekleme nasıl oldugunu görebilirsiniz
c de değer döndüren fonksiyonları anlayana kadar ne çekmiştim alaylı oldugum için öğreten yoktu pek o dönemde internette paylaşım azdı baya kitaplara para dökmüştü c ye alışırsanız güzel lakin pbp gibi kolay fonksiyonları bulamayabilirsiniz, bu aralar cok ccs c ile yazmıyorum avr ile ugraşıyorum avr nin çok  nette uygulaması yok bir çok kütüphanemi kendim oluşturmak zorunda kaldım, zorlukla bir şeyi öğrenince kalıcı oluyor
   hocam bildiğiniz üzere microchip atmel'i satın aldı pic'leri bırakmam 3 fazlı motor projelerinde neler denememe ragmen ara ara resetleme yapıyordu emk sorununu çözememiştim atmel kullanımında o kadar 3 fazlı proje yaptım hic reset sorunu yaşamadım pekte öyle çizimlerimde çok fazla filitre kullanmadım. Giriş çıkışları opto ile izole etmememe rağmen hata almadım
   Acaba yeni piclerde bu sorunlar giderildimi ki neticede şirketi alırkende know how da satın alınıyor
iyi çalışmalar
bilgi paylaştıkça çoğalır!!

www.fayelektronik.com

ete

Kütüphane ekleme ile ilgili sorunum yok. Kaynak kod nereden bulunuyor diye sormuştum aslında.


Ete

fatih88

Alıntı YapKütüphane ekleme ile ilgili sorunum yok. Kaynak kod nereden bulunuyor diye sormuştum aslında.
Hocam github tan veya kendinizin yazması gerekiyor nettede bir sürü örnek var çalıştığına emin oldugunuz kütüphaneleri kullanıyorum eğer elimde varsa istemiş olduğunuz kütüphaneleri yollayabilirim
bilgi paylaştıkça çoğalır!!

www.fayelektronik.com

ete

Ara ara kod yazıp kendimi geliştirmeye alışacağım.
Özel bir kod yada kütüphane isteğim yok bende arar bulurum gerekirse yada bir iki denemeden sonra bende kendim yazarım artık ne yapalım öyle sabit bir kütüphane kaynağı yok ise.
Teşekkür ederim.

Ete

fatih88

Yardıma her zaman açığım hocam ilk sizin pbp derslerinize yazılımı öğrendik sonra c diline geçtik mantığı bildikten sonra hepsi ögreniliyor şu ara servo motor kullanmam gerekiyor plc yazmayı ögreniyorum
bilgi paylaştıkça çoğalır!!

www.fayelektronik.com

Powered by EzPortal