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


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Logani (Gast)


Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht lesenswert
Sehr Lustig !

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

von Logani (Gast)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht lesenswert
Noch etwas,

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

von Stefan ⛄ F. (stefanus)


Bewertung
0 lesenswert
nicht 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
    }

: Bearbeitet durch User
von Karl M. (Gast)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


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

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


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht lesenswert
Marc V. schrieb:
> WGM12 auf 1 setzen und gut ist es.

Das war es, danke!

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.