Pic 16f628a için nec ir okuyucu kodum çalışmıyor.

qestin

Üye
Katılım
19 May 2019
Mesajlar
3
Puanları
1
Yaş
34
microC kullanarak başka bir kaynak üzerinde oynamalar yaparak kendi pic ime uyarladığım kodu çalıştıramadım. Nerede hata yaptığımı bulabilirseniz çok sevinirim. Bu arada kumandadan gelen kodu arduino unu ile okudum. Bastığım tuş " 807F48B7 " kodunu gönderiyor. switch case de olasılık denedim ama olmadı :( Bu arada programın başındaki kodlar çalışıyor. ilk led 1.5 sn yanıp sönüyor.

Kod:
#define IrPin RA0_bit
#define LedPin RB0_bit

char text[5];
unsigned long ir_code;
unsigned int address;
unsigned short command, inv_command;


short nec_remote_read() {
      unsigned long count = 0, i;
      // 9ms kontrol islemi
      while((IrPin == 0)&&(count<=180)) {
      count++;
      delay_us(50);
      }
      if((count > 179)||(count < 120))
      return 0;
      count = 0;
      
      // 4,5ms kontrol islemi
      while((IrPin == 0)&&(count <= 90)) {
      count++;
      delay_us(50);
      }
      if((count > 89)||(count < 40))
      return 0;

      //32 bit kod okuma islemi baslıyor
      
      for(i=0; i < 32; i++) {
               count = 0;
               while((IrPin == 0)&&(count <= 23)) {
               count++;
               delay_us(50);
               }
               if((count > 22) || (count < 4))
               return 0;
      count = 0;
      while(IrPin && (count <= 45)) {
      count++;
      delay_us(50);
      }
      if((count > 44) || (count < 8))
      return 0;
      if(count > 21)
      ir_code |= 1ul << (31 - i);
      else
        ir_code &= (1ul << (31 - i));
      }
      return 1;
      }



void main() {
  TRISA = 0x01;
  TRISB = 0x00;
 
  PORTA = 0;
  PORTB = 0;
 
  LedPin = 1;
  delay_ms(1500);
  LedPin = 0;
  delay_ms(1000);
 
   while (1) { //Loop executed infinite times

    //while (IR_PIN);                //Wait until IR pin falls
    if (nec_remote_read()) {
      address = ir_code >> 16;
      command = ir_code >> 8;
      inv_command = ir_code;
      IntToHex(address, text);       // Save address in string text with hex format
      //Lcd_Out(1, 11, text);          // Display address
      ByteToHex(command, text);      // Save command in string text with hex format
      //Lcd_Out(2, 7, text);           // Display command
      ByteToHex(inv_command, text);  // Save inverted command in string text with hex format
      //Lcd_Out(2, 15, text);          // Display inverted command

      switch (command) {
        case 0x807F:
          LedPin = 1;
          delay_ms(5000);
          LedPin = 0;
          break;
          break;
        case 0x48:
          LedPin = 1;
          delay_ms(1000);
          LedPin = 0;
          break;
        case 0xB7:
          LedPin = 1;
          delay_ms(1000);
          LedPin = 0;
          break;
        case 0x7F:
          LedPin = 1;
          delay_ms(1000);
          LedPin = 0;
          break;
        case 0x80:
          LedPin = 1;
          delay_ms(1000);
          LedPin = 0;
          break;
      }
    }
  }

}
 
Böyle programcilik yapilmaz. seri porttan bilgisayara veya bir ekrana bağlanti kurman lazim ve her aşamada debug için ekrana bilgi yazman lazim ki nerde problem çikiyor takip edebilesin.
 
Üstad ben hobi olarak uğraşıyorum. Çok fazla bir bilgimde yok. Elimde bir adet arduino unu ve K150 programlama kartı var.
Bunları kullanarak sorunu tespit edebilirmiyim. Eğer olur dersen nasıl bir yol izlemeliyim. Olmazlardan ziyade oluru nasıl olur ona bakalım.
 

Forum istatistikleri

Konular
127,958
Mesajlar
913,911
Kullanıcılar
449,606
Son üye
rasit.

Yeni konular

Geri
Üst