Forum: Mikrocontroller und Digitale Elektronik AVR-C-Programm (IR-Senden) tut nicht was ich will


von Dirk Schlage (Gast)


Angehängte Dateien:

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

von Karl H. (kbuchegg)


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;
        }

von Dirk Schlage (Gast)


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

von Rahul (Gast)


Lesenswert?

definiere dir on() und off() als Makro, dann wird die ISR schmeller...

von Dirk Schlage (Gast)


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

von Dirk Schlage (Gast)


Angehängte Dateien:

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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.