www.mikrocontroller.net

Forum: Compiler & IDEs RC5 senden klappt nicht


Autor: RC5 (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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)

Autor: Timmo H. (masterfx)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: RC5 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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)
  if (rc5_senden.toggle==1) {
      rc5_senden.toggle = 0;
      DDRD = (1 << PD5);
      PORTD^=(1<<PD5);    
  }
  else {rc5_senden.toggle = 1;
        DDRD = (1 << PD6);
        PORTD^=(1<<PD6);     
  }

scheint irgend ein dummer Denkfehler zu sein. Hab auch schon
rc5_senden.toggle^=rc5_senden.toggle;
 versucht.

Autor: Timmo H. (masterfx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Problem hab ich jetzt mit dem toggle bit, es ist ständig 1 (lediglich
>die LED an PD6 blinkt)
Wenn toggle immer 1 wäre würdest du immer PD5 togglen. Du sagst aber 
dass PD6 toggelt, bloß dann kann toggle ja nicht immer 1 sein!?

Autor: P. S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
RC5 wrote:

>
>   if (rc5_senden.toggle==1) {
>       rc5_senden.toggle = 0;
>       DDRD = (1 << PD5);
>       PORTD^=(1<<PD5);
>   }
>   else {rc5_senden.toggle = 1;
>         DDRD = (1 << PD6);
>         PORTD^=(1<<PD6);
>   }
> 

Du willst bestimmt nicht jedesmal das DDR komplett mit setzen. Kein 
Wunder, siehst du nur eine LED blinken ;-)

Autor: Timmo H. (masterfx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Du willst bestimmt nicht jedesmal das DDR komplett mit setzen. Kein
>Wunder, siehst du nur eine LED blinken ;-)
Hab ich doch auch glatt übersehen, eigentlich denkt man ja "sowas kann 
man doch gar nicht falsch machen". Weit gefehlt :-)

Autor: RC5 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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).
int main(void){
RC5_INIT_PORT();
rc5_senden.toggle = 0;
DDRD |= (1 << PD6)|(1 << PD5);
while(1) 
{  
  rc5_senden.unused = 0;
  rc5_senden.start = 3;
  if (rc5_senden.toggle!=0) {
      rc5_senden.toggle = 0;
      PORTD^=(1<<PD5);    
  }
  else {
      rc5_senden.toggle = 1;
      PORTD^=(1<<PD6);     
  }
  rc5_senden.address = 0;
  rc5_senden.command = 32;
  rc5_send(&rc5_senden);
  wait(2000);
  
}
return 0;
}

Autor: RC5 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ok, Fehler sebst gefunden. durch das durchshiften der 14 bits steht nach 
dem senden doch immer 0x0000 in der struct, also muss toggle ja immer 0 
sein ;)

Autor: RC5 (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
falls jemand die Lösung interessiert.

für Kritik bin ich immer offen ;)

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.