Attiny2313A - Timer Interrupt wird nicht aufgerufen (C)

Gast #4767171
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!
Angehängte Dateien:
Gast #4767187
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?
Gast #4767285
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
    }
Gast #4767292
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)
>     {
>         ...
>     }
Gast #4767361
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.
(Firma: Vescomp) #4767926
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.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 10 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.