AVR-C-Programm (IR-Senden) tut nicht was ich will

Gast #277479
Lesenswert?
• ▲
▼
Hallo liebes Forum,
Ich habe eine eine Applikation, die den Ausgang eines TSOP1738
einliest, zählt, buffert und den Buffer an der seriellen Schnittstelle
ausgibt.
Nur ein Fragment, aber funktioniert mit meinen zwei Fernbedienungen
ganz prächtig.

Jetzt bin ich dabei die Gegenstelle mit einer IR-Sendediode zu bauen,
zur Kontrolle habe ich noch eine normale LED danebengehängt. Das
Programm macht was es will. Ich bin seit zwei Wochen dran und habe
heute den Sende-Interrupt nochmal neu geschrieben.

Egal wie sehr ich mit den Frequenzen noch daneben liege, oder die
Pausen, der von mir angestrebten Fernbedienung entsprechen, zumindest
sollte sich immer das gleiche Bild ergeben. Aber nix da: Mal zuckt die
LED nur kurz, wenn ich den Taster drücke, mal passiert in etwa was ich
mir vorstellen könnte, dann wieder macht sie eine Sequenz, die ewig
lang ist.
Da ist ein ganz doofer Bock drin.
Es müsste zumindes jedesmal wenn ich drücke das gleiche zu sehen
sein...

Falls jemand den Röntgenblick hat wäre das wirklich nett...

servus
    Dirk
Angehängte Dateien:
#277480
Lesenswert?
• ▲
▼
unsigned int IrArray[ARRAYLEN] = {
2,
278,
134,
18,
14,
...
...
14,
18,
14,
19
};

Haeng da noch eine 0 als letztes Element mit rein.
Dein Code moechte die 0 sehen.

      if (IrCounter == 0)
      {
        IrPulsing = !IrPulsing;
        IrPtr++;
        IrCounter = *IrPtr;
        if (IrCounter == 0) // Sequenz zuende
        {
          off();
          IrSend = 0;
        }
Gast #277481
Lesenswert?
• ▲
▼
Danke,
das Array ist im auskommentierten Teil, das andere, kürzer Array zum
Testen hat eine '0'. Funktioniert nicht.
Ich habe eben die Null reingesetzt und das lange Array - mit Null -
getestet. Jedesmal was anderes...

servus
   Dirk
Gast #277483
Lesenswert?
• ▲
▼
Das mit dem Makro werde ich heute abend sofort machen.
Ich hatte auch schon die vermutung, daß die ISR zu lange benötigt,
immerhin stehen ihr nur etwas mehr als 40 Takte zur Verfügung, bis der
nächste Interrupt kommt.
Um das zu entschärfen habe ich mal die 152000 Interrupts/Sekunde auf
15200 gesetzt, dann sollte es Zeitmässig reichen, obwohl die Frequenz
dann nicht mehr für Fernbedienung taugt, das Verhalten ist aber
deswegen nicht regelmäßiger.

Dirk
Gast #277484
Lesenswert?
• ▲
▼
Hallo nochmal,
der Hauptfehler war, daß das Array mit meiner Deklaration nicht so wie
ich es gedacht hatte initialisiert wurde. Die jetzige Arte es zu
initialisieren ist zwar etwas arg umständlich, aber ich habe damit eben
meinen DAEWOO-Fernseher mehrfach ein- und ausgeschaltet.

Meine Start-bits sind noch etwas holprig, habe ich den Verdacht. Aber
das ist erstmal ein Meilenstein. Prost.

ciao
   Dirk
Angehängte Dateien:

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.