CCS C alıştırma Turlarım

Başlatan Mucit23, 10 Şubat 2012, 15:29:51

Mucit23

Hocam kodun tümünde birşey yok. Ana programda bir if koşuluna bağlı olarak write_counter fonksiyonunu çağırıyorum. Programda hem timer0 hemde timer1 kesmesi çalışıyor. Timer1 kesmeside 100ms aralıklarla oluşacak şekilde ayarlamışım. Bu kesmede problem oluyormu bilmiyorum.


Sanırım eeprom yazma fonksiyonu içerisinde işlemci bekliyor. Bu konuda herhangi bir bilgiye erişemedim ama beklediğini düşünüyorum.

CCS nin hazır fonksiyonlarının içeriğini görebilme imkanımız varmı?

Tagli

CCS C rehberinden baktım. write_eeprom fonksiyonu kesmeleri kapatıyormuş. Kapanmaması için programa bir ek ayar koymak gerekiyormuş. Şöyle yazmışlar:
Alıntı YapIn order to allow interrupts to occur while using the write operation, use the #DEVICE option WRITE_EEPROM = NOINT. This will allow interrupts to occur while the write_eeprom() operations is polling the done bit to check if the write operations has completed. Can be used as long as no EEPROM operations are performed during an ISR.
Gökçe Tağlıoğlu

Mucit23

Alıntı yapılan: Tagli - 29 Ekim 2013, 20:01:10
CCS C rehberinden baktım. write_eeprom fonksiyonu kesmeleri kapatıyormuş. Kapanmaması için programa bir ek ayar koymak gerekiyormuş. Şöyle yazmışlar:

Gökçe hocam evet bende farkettim. Umarım bu işlemde yazma işlemini sekteye uğratmaz. Deneyeyim şimdi.

eR2

Arkadaşlar ufak bir sıkıntım var;

analog girişe bağladığım, pot ile duty cycle ı değiştirerek dc motor hızı ayarlıyorum, lcd ekrandada duty 0-250 arasında yazdırıyorum..

sorum şu; yeni bir değişken atayıp örneğin duty cycle 250 de iken 2000rpm 125 iken 1000rpm yazdırmak istiyorum başaramadım, kodlarım aşağıdaki şekilde..

bir de merak ettiğim, elimde 2000rpm lik bir motor var programda %50 duty de ekranda 1000rpm yazdırmak yanlış mı olur? gerçek devirini nasıl yazdırabilirim?

   while(1)
   {
   
         duty=read_adc();     //adc değerini atadık
         delay_us(20);
         
         output_high(pin_c3);    //c3 high  (define da olabilir)
         output_low(pin_c4);     //c4 low motor ileri>>
         
         if(duty>250)
         duty=250;
   
         set_pwm1_duty(duty);
         
         printf(lcd_putc,"\fduty=%u"duty);   //unsigned %u
         delay_ms(50);
         
   
   }

Tagli

Hızı ölçmeden bilemezsin. Duty ile rpm arasında sabit doğrusal bir bağıntı yoktur.
Gökçe Tağlıoğlu

fatih6761

Alıntı yapılan: eR2 - 31 Ekim 2013, 17:43:46
gerçek devirini nasıl yazdırabilirim?
Ölçerek yazdırabilirsiniz mesela...

eR2

Alıntı yapılan: fatih6761 - 31 Ekim 2013, 23:11:21
Ölçerek yazdırabilirsiniz mesela...

evet, dediğiniz gibi opto transistör ile ölçerek yazdırmayı düşünüyorum

Mucit23

Alıntı yapılan: Tagli - 29 Ekim 2013, 20:01:10
CCS C rehberinden baktım. write_eeprom fonksiyonu kesmeleri kapatıyormuş. Kapanmaması için programa bir ek ayar koymak gerekiyormuş. Şöyle yazmışlar:

Yazmayı unuttum. Bu işe yaradı. Teşekkür ederim.  :)

Bir sorum daha olacak.

signed int16 şeklinde bir değişkenim var.

Bu değişkenin Değerinin negatif olup olmadığını öğrenmek istiyorum.

Şöyle birşey yaptım.

if(time_count<0); //Sayı negatif olmuşsa

Çalışmasına çalışıyor fakat bir uyarı veriyor.

Code has no effect

Üstelik Aynı if yapısına else yapısı eklediğimde hata verip derlemiyor

Yöntem yanlışmı acaba?

JKramer

Satır sonunda noktalı virgül kalmış.

Mucit23

Alıntı yapılan: JKramer - 06 Kasım 2013, 12:49:33
Satır sonunda noktalı virgül kalmış.

Bu işi bırakacağım. :-[ Normalde bu hatayı yapmam ama o noktalı virgülü görmedim.

Mucit23

Merhaba arkadaşlar

CCS C ile ufak bir kod yazdım. Usart ile kızılötesi kumanda mantığıyla haberleşiyorum. Usart'tan gönderdiğim kod direk karşıya gitmesi gerek.

Normalde Basic ile Seri iletişimde iletişim başlangıcında uyandırma sinyali vs gönderebiliyoruz.

Örnek,
SEROUT2 pin,813,[Rep $AA\5, Rep $00\5, Rep $FF\5]


CCS C de bunu nasıl yaparım.

Bir şekilde iletişim kuruyorum fakat sağlıklı değil. Datalar bazen geliyor bazen gelmiyor. Yada farklı istemediğim datalar geliyor. Nasıl çözerim bunu

kantirici

Sorunu tam anlayamadım. Usart ile IR LED sürüp kızılötesi iletişim mi yapıyorsun? Usart ile seri iletişim yapıyorsunda başta uyandırma bilgisimi gönderiyorsun?

Ayrıca basic için olan kod 5 defa AA v.s mi gönseriyor?

Mucit23

Evet, HPWM ile Yaklaşık 38Khz sabit kare dalga elde edip, bu sinyali Uart'tan çıkan sinyale bindiriyorum. Öylede sinyali IR led'e veriyorum. Karşı tarafta ise alıcı gözün data çıkışını pull-up yapıp işlemcinin RX pinine bağlamışım. IR'Ledin ve Alıcı gözün çalışmasında sıkıntı yok Fakat sanki senkronizasyon mu yakalanamıyor tam anlam veremedim bazen gelen karakterler saçmalıyor. Uyandırma sinyali ile ilgili olabileceğini düşündüm.

Basic kodu hemen hemen dediğin gibi çalışıyor.

madpic

Bende vakti zamanında böyle birşey yapmıştım.
karşıda tsop1238 vardı frekansın normalde 38khz'e ayarladığımda 2-2.5 metreden alırken
frekansı 37 küsura ayarlayınca mesafe birden 7-8 mt'ye çıktı,
birede duty oranında iletişimi etkilediğini hatırlıyorum.
biraz kurcalayınca iyi sonuçlar alınıyor.

kantirici

baudrate kaç? düşük hızda yakın mesafeden dene yine hata yapacakmı bir bakalım. mesela 2400, 4800