RC5 senden klappt nicht

Gast #1132081
Lesenswert?
• ▲
▼
Ich habe einmal ein ganz simples Programm zum Senden von RC5 Codes 
geschrieben. Simpel deswegen, da ich feste delays genommen hab und nicht 
den Timer.
Zum Test hab ich über Girder+Igor Plugin mir den Code meiner 
Fernbedienung anzeigen lassen und sende den nun zyklisch. Wenn ich alles 
mit dem besagten Girder mir am PC anschaue, was für einen Code gesendet 
wurde, dann scheint es zu klappen. Problem ist eben nur, dass der 
Fernseher nicht zuckt ;)
Hab mir den Code auch schon mit meinem RC5 decoder angeschaut, der 
sollte also richtig sein. Sieht evtl. jemand einen großen Bug?

thx für eventuelle Hilfe
(ach so, atmega32, 16mhz, -Os)
Angehängte Dateien:
#1132164
Lesenswert?
• ▲
▼
Vielleicht bist du einfach zu ungenau:

delay_us(14);   // 889/32/2=13,89

Warum schreibst du dann auch nicht 13.89? delay_us ist doch eh double. 
Wie siehts ansonsten mit deiner Frequenz aus? Interner RC ist ungenau, 
vielleicht zu ungenau für dein TV

EDIT:
Ah ok, 16 MHz ist also extern. Wie gesagt mach mal ruhig exakte double 
Werte. Versuch auch mal -O2 und nicht -Os. Mit O2 erziele ich bessere 
Ergebnisse.
Gast #1132252
Lesenswert?
• ▲
▼
OK, nachdem ich die delays geändert und den Vorwiderstand verkleinert 
hab - funktionierts.

Problem hab ich jetzt mit dem toggle bit, es ist ständig 1 (lediglich 
die LED an PD6 blinkt)
1
  if (rc5_senden.toggle==1) {
2
      rc5_senden.toggle = 0;
3
      DDRD = (1 << PD5);
4
      PORTD^=(1<<PD5);    
5
  }
6
  else {rc5_senden.toggle = 1;
7
        DDRD = (1 << PD6);
8
        PORTD^=(1<<PD6);     
9
  }

scheint irgend ein dummer Denkfehler zu sein. Hab auch schon
1
rc5_senden.toggle^=rc5_senden.toggle;
 versucht.
Gast #1132644
Lesenswert?
• ▲
▼
RC5 wrote:

>
1
>   if (rc5_senden.toggle==1) {
2
>       rc5_senden.toggle = 0;
3
>       DDRD = (1 << PD5);
4
>       PORTD^=(1<<PD5);
5
>   }
6
>   else {rc5_senden.toggle = 1;
7
>         DDRD = (1 << PD6);
8
>         PORTD^=(1<<PD6);
9
>   }
10
>

Du willst bestimmt nicht jedesmal das DDR komplett mit setzen. Kein 
Wunder, siehst du nur eine LED blinken ;-)
Gast #1132733
Lesenswert?
• ▲
▼
Das mit den LEDs war natürlich nur schnell so reingeschrieben.sry!!!
Und ja, es blinkt die ganze Zeit die LED an PD6 also ist toggle ständig 
0.
Es soll ja auch nur immer eine LED blinken, aber ebend im Wechsel 
(blinken ist nur zu Testzwecken eingebaut).
1
int main(void){
2
RC5_INIT_PORT();
3
rc5_senden.toggle = 0;
4
DDRD |= (1 << PD6)|(1 << PD5);
5
while(1) 
6
{  
7
  rc5_senden.unused = 0;
8
  rc5_senden.start = 3;
9
  if (rc5_senden.toggle!=0) {
10
      rc5_senden.toggle = 0;
11
      PORTD^=(1<<PD5);    
12
  }
13
  else {
14
      rc5_senden.toggle = 1;
15
      PORTD^=(1<<PD6);     
16
  }
17
  rc5_senden.address = 0;
18
  rc5_senden.command = 32;
19
  rc5_send(&rc5_senden);
20
  wait(2000);
21
  
22
}
23
return 0;
24
}

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.