ATMega328P + Arduino + IRMP => Timing-Probleme

OP #6586119
Schönen guten Abend,

ich nutze zusammen mit der Arduino-Platform die IRMP Library zum 
Empfangen von IR commands auf einem ATMega328P 8MHz intern.
Ich habe eine bi-color LED zwischen PD7 und PB0 angeschlossen.
In der einen Richtung dient sie als IRMP-Feedback-LED, in der anderen 
als Controller-Status-LED.
In einem bestimmten Moment möchte ich die LEDs abwechselnd blinken 
lassen.
Das klappte auch prima, solange ich direkt nach dem 
"irmp_irsnd_LEDFeedback(false)" Aufruf noch ein "Serial.print("...")" 
zum Debuggen hatte.

Als ich diesen entfernte, stellte ich fest, dass nach dem Aufruf von 
"irmp_irsnd_LEDFeedback(false)" IRMP den IRMP_FEEDBACK_LED_PIN nach 
~120ms auf LOW setzt.

Kann ich das unterbinden oder muss ich nach 
"irmp_irsnd_LEDFeedback(false)" noch einige Zeit warten – und falls ja, 
wie lange?

salute
Thomas
1
#include <Arduino.h>
2

3
#define CTRL_LED                       8
4
#define IRMP_LED                       7
5

6
#define IRMP_INPUT_PIN                 6
7
#define IRMP_FEEDBACK_LED_PIN          IRMP_LED
8
#include <irmpSelectMain15Protocols.h>
9
#include <irmp.c.h>
10
IRMP_DATA irmp_data;
11

12
int main(void) {
13
  init();
14
  pinMode(IRMP_LED, OUTPUT);
15
  pinMode(CTRL_LED, OUTPUT);
16

17
  irmp_init();
18
  irmp_irsnd_LEDFeedback(true);
19

20
  bool flipflop = 0;
21
  while (true) {
22
    irmp_irsnd_LEDFeedback(false);
23
    Serial.print("...");
24
    digitalWrite(flipflop ? CTRL_LED : IRMP_LED, HIGH);
25
    delay(1000);
26
    digitalWrite(flipflop ? CTRL_LED : IRMP_LED, LOW);
27
    irmp_irsnd_LEDFeedback(true);
28
    flipflop ^= 1;
29
  }
30
  return 0;
31
}
Hallo,

um dies zu erforschen, müßte man in der irmp.c das aufgerufene 
Unterprogramm suchen und dort schauen, ob vielleicht eine Zuweisung 
eines Wertes an den ganzen Port erfolgt und nicht nur an den einen Pin, 
an dem Deine nette zweifarbige LED ihr buntes Schauspiel zum Besten 
gibt. Das Zauberwort heißt verunden und/oder verodern.

Mfg
OP
Hallo,

Da habe ich schon nachgeschaut. Es wird sofort das statische Flag 
irmp_irsnd_LedFeedbackEnabled auf false gesetzt und dann noch der LED 
Pin auf OUTPUT und LOW gesetzt. Aber scheinbar grätscht der IRMP 
Interrupt nachträglich rein und missachtet das Flag … obwohl der Code 
für mich erst einmal gut aussieht :-/

salute
Thomas

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 5 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.