Mehr als 255 passen nun mal in ein Byte nicht rein.
Nimm also ein uint16_t in der Definition.
Hallo zusammen.
Derzeit beschäftige ich mich mit Timer-Interrupts.
Dazu wurde ein Prog geschrieben - läuft nicht richtig - Fehlerursache erkenne ich leider nicht.
Ablauf:
Interrupt löst nach jeder 1ms aus.
LED schaltet nach 100ms für 400ms ein und dann wieder aus.
Danach startet die LED-Routine erneut.
Für >= habe ich mich entschieden, damit der ungefähre Zeitablauf, beim "verschlucken" eines Interrupts, erhalten bleibt.
Fehler:
LED schaltet nach 100ms ein und bleibt dauerhaft eingeschaltet.
Code:#define F_CPU 1000000UL #include <avr/interrupt.h> volatile uint8_t OverflowZaehler=0; ISR(TIM1_COMPA_vect) { OverflowZaehler++; } void OverflowZaehlerReset(void) { OverflowZaehler=0; } void LEDein(void) { PORTB |= (1<<PB0); } void LEDaus(void) { PORTB &= ~(1<<PB0); } int main(void) { DDRB |= (1<<PB0); TCCR1B |= (1<<WGM12) | (1<<CS11); TIMSK1 |= (1<<OCIE1A); OCR1A = 124; sei(); LEDaus(); while(1) { if (OverflowZaehler >= 100) LEDein(); { if(OverflowZaehler >= 500) { LEDaus(); OverflowZaehlerReset(); } } } }
__________________________________________________ _
| Sprache: C | Teensy 3.2 | Arduino 2.x | Status: EwigerAnfaenger |
Mehr als 255 passen nun mal in ein Byte nicht rein.
Nimm also ein uint16_t in der Definition.
Hey Holomino - DANKE!
Das war der Fehler - Thema "Bäume und Wald"...
Im Anschluss "verschluckte" sich die Aus-Anweisung regelmäßig.
Nach 2 korrekten Durchläufen, kam einmaling der LED-Takt, AUS für ~20ms/EIN für ~480ms - danach wieder 2* korrekter Takt, etc.
Nachdem ich beide >= gegen == ausgetauscht habe, hats auch hier geklappt.
__________________________________________________ _
| Sprache: C | Teensy 3.2 | Arduino 2.x | Status: EwigerAnfaenger |
Lesezeichen