Forum: Mikrocontroller und Digitale Elektronik Attiny2313A - Timer Interrupt wird nicht aufgerufen (C)


von Logani (Gast)


Angehängte Dateien:

Lesenswert?

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!

von Karl M. (Gast)


Lesenswert?

Sehr Lustig !

Wenn man dies schreibe, kommt die Anweisung einem HALT gleich.
1
while(1);

von Logani (Gast)


Lesenswert?

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?

von Karl M. (Gast)


Lesenswert?

Noch etwas,

warum wird die LED Anzeige und deren Multiplexen nicht per 
Timer-Interrupt gelöst ?

von Stefan F. (Gast)


Lesenswert?

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
    }

von Karl M. (Gast)


Lesenswert?

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)
>     {
>         ...
>     }

von Logani (Gast)


Lesenswert?

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.

von Peter D. (peda)


Lesenswert?

Was soll der Unsinn mit 2 AVRs. Was stört Dich z.B. am ATtiny261?

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

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.

von Logani (Gast)


Lesenswert?

Marc V. schrieb:
> WGM12 auf 1 setzen und gut ist es.

Das war es, danke!

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.