Diğer diller ve Derleyiciler => CCS => Konuyu başlatan: ete - 07 Ocak 2023, 14:18:33
Başlık: CCSC kod yardım
Gönderen: ete - 07 Ocak 2023, 14:18:33
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
Başlık: Ynt: CCSC kod yardım
Gönderen: wert - 07 Ocak 2023, 15:45:26
#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
Başlık: Ynt: CCSC kod yardım
Gönderen: ete - 07 Ocak 2023, 17:21:55
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
Başlık: Ynt: CCSC kod yardım
Gönderen: Serk@n - 07 Ocak 2023, 19:49:23
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.
Başlık: Ynt: CCSC kod yardım
Gönderen: fatih88 - 07 Ocak 2023, 21:09:29
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
Başlık: Ynt: CCSC kod yardım
Gönderen: ete - 08 Ocak 2023, 08:53:25
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
Başlık: Ynt: CCSC kod yardım
Gönderen: Serk@n - 08 Ocak 2023, 10:24:39
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.
Başlık: Ynt: CCSC kod yardım
Gönderen: fatih88 - 08 Ocak 2023, 10:41:04
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
Başlık: Ynt: CCSC kod yardım
Gönderen: ete - 08 Ocak 2023, 15:19:44
Kütüphane ekleme ile ilgili sorunum yok. Kaynak kod nereden bulunuyor diye sormuştum aslında.
Ete
Başlık: Ynt: CCSC kod yardım
Gönderen: fatih88 - 08 Ocak 2023, 15:25:25
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
Başlık: Ynt: CCSC kod yardım
Gönderen: ete - 08 Ocak 2023, 16:37:57
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
Başlık: Ynt: CCSC kod yardım
Gönderen: fatih88 - 08 Ocak 2023, 18:32:07
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