Guten Abend, mit der angehängten Schaltung möchte ich einen Lüfter bei Erreichen einer bestimmten Temperatur einschalten. Die Ist-Temperatur wird dabei auf 2 7-Segment-Anzeigen angezeigt. Die Temperatur, ab wann der Lüfter einschalten soll, sowie die Helligkeit der 7-Segment-Anzeigen soll durch Trimmer einstellbar sein. Ändert sich der Wert am entsprechenden Trimmer, soll die Grenztemperatur, bei der der Lüfter angeht, für 16 Sekunden nach der letzten Änderung am Trimmer angezeigt werden und dann wieder die Ist-Temperatur anzeigen. Dafür möchte ich den Timer1 benutzen. Nur wird nie das Timer-Interrupt ausgeführt. Statt Werte vom Attiny25 zu übertragen, habe ich zum Testen fest Werte festgelegt und einige Teile schon auskommentiert. Trotzdem zeigen die Anzeigen dauerhaft die Grenztemperatur von 37 an. Kann mir jemand helfen, meinen Fehler zu finden? Vielen Dank im Voraus!
Sehr Lustig ! Wenn man dies schreibe, kommt die Anweisung einem HALT gleich.
1 | while(1); |
Karl M. schrieb: > Sehr Lustig ! > > Wenn man dies schreibe, kommt die Anweisung einem HALT gleich Die while-Schleife habe ich zum Testen eingefügt. Sie wird nie erreicht. Sonst müsste eine der zwei 7-Segment-Anzeigen dauerhaft durchgeschaltet sein und die andere aus, oder?
Das sieht komisch aus. Bist du sicher, dass es syntaktisch korrekt ist?
> interrupt [TIM1_COMPA] void timer1_compa_isr(void)
Ich schreibe es immer so:
1 | ISR(TIMER1_COMPA_vect) |
2 | {
|
3 | ...
|
4 | }
|
Hi Stefan, das ist kein avr gcc, sieht nach einem IAR AVR Kompiler aus. Stefan U. schrieb: > Das sieht komisch aus. Bist du sicher, dass es syntaktisch korrekt > ist? > >> interrupt [TIM1_COMPA] void timer1_compa_isr(void) > > Ich schreibe es immer so: > ISR(TIMER1_COMPA_vect) > { > ... > }
Karl M. schrieb: > Noch etwas, > > warum wird die LED Anzeige und deren Multiplexen nicht per > Timer-Interrupt gelöst ? Daran habe ich gar nicht gedacht, werd' ich mich morgen mal mit beschäftigen. Aber mein Hauptproblem bleibt ja: Meine Timer-Interrupt-Routine wird garnicht erst aufgerufen. Ich werde mal ein neues Programm anfangen und erstmal nur versuchen, den Timer zum Laufen zu bekommen. Stefan U. schrieb: > Das sieht komisch aus. Bist du sicher, dass es syntaktisch korrekt ist? Ja, ich verwende CodeVision AVR.
Logani schrieb: > Kann mir jemand helfen, meinen Fehler zu finden? Vielen Dank im Voraus! Wie soll in Normal Mode CTC_ISR angesprungen werden ? Anstatt:
1 | TCCR1B=(0<<ICNC1) | (0<<ICES1) | (0<<WGM13) | (0<<WGM12) | (1<<CS12) | (0<<CS11) | (0<<CS10); //-> Normal Top 0xFFFF, CLK/256 |
So:
1 | TCCR1B=(0<<ICNC1) | (0<<ICES1) | (0<<WGM13) | (1<<WGM12) | (1<<CS12) | (0<<CS11) | (0<<CS10); //-> CTC, CLK/256 |
WGM12 auf 1 setzen und gut ist es.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.