Forum: Mikrocontroller und Digitale Elektronik ATMega328P + Arduino + IRMP => Timing-Probleme


von Thomas F. (tobasco)


Lesenswert?

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
}

: Bearbeitet durch User
von Christian S. (roehrenvorheizer)


Lesenswert?

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

von Thomas F. (tobasco)


Lesenswert?

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

von Christian S. (roehrenvorheizer)


Lesenswert?

Nichts genaues über die Interna der verwendeten Unterprogramme weiß man 
als Außenstehender nicht.

MfG

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.