mikrocontroller.net

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


Autor: Dirk Schlage (Gast)
Datum:
Angehängte Dateien:

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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

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

Autor: Dirk Schlage (Gast)
Datum:

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

Autor: Rahul (Gast)
Datum:

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

Autor: Dirk Schlage (Gast)
Datum:

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

Autor: Dirk Schlage (Gast)
Datum:
Angehängte Dateien:

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

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.