Hallo Leute,
folgendes Problem: Ich habe ein LED-Blinklicht mit 16bit Rampe basierend
auf folgendem Code (Autor: Kersten Decker) realisiert:
1 | TCCR1A |= _BV(COM1A1) | _BV(COM1B1); // Eigenschaften der Portpins
|
2 |
|
3 | TCCR1A |= _BV(WGM11); // 16 Bit Fast PWM, TOP ist ICR1:
|
4 | TCCR1B |= _BV(WGM12);
|
5 | TCCR1B |= _BV(WGM13);
|
6 |
|
7 | ICR1H = 0xFF; //Top = 0xFFFF;
|
8 | ICR1L = 0xFF; //Normalerweise über ein TEMP-Register schreiben, aber da
|
9 | der Timer noch nicht läuft sollte das nicht nötig sein
|
10 |
|
11 | TCCR1B |= _BV(CS10); // kein Prescaler und Timer starten
|
12 |
|
13 | OCR1A = 0xFFFF; //5V
|
14 | OCR1B = 0x7FFF; //die Hälfte
|
Ich wollte diesen 16bit Blinker nun in dem berühmten IRMP Programm
einbauen, dass wenn ich eine Taste (Fernbedienung) drücke, eine
Blinklichtschleife läuft und bei erneutem Drücken dieser Taste, die
Schleife beendet wird und neue "Tastendrücke" erkannt werden können.
Versucht habe ich das ganze über eine void blinker (); aber selbst wenn
ich, keine Schleife einbaue, sondern nur "einmal blinken und fertig"
anordne, bleibt er in der void hängen (so scheint es) und findet nicht
mehr ins Hauptprogramm:
1 | for (;;)
|
2 | {
|
3 | if (irmp_get_data (&irmp_data))
|
4 | {
|
5 | if (irmp_data.protocol == IRMP_NEC_PROTOCOL)
|
6 | { usw...
|
Nun nehme ich an, dass das mit den Timern usw zusammenhängt, aber da
steig ich leider nicht genug durch, um zu durchschauen, was ich tun
muss, dass es wieder in die "main" zurückfindet und dort auch seine
ursprünglichen Timer wieder findet...
Meine Idee war, in die void Blinker diese irmp_get_data Abfrage
einzubauen, aber das habe ich nicht hinbekommen.
Was wäre denn da die klügste Vorgehensweise? Vielen Dank schonmal :)