Timer Overflow Interrupt

OP #1134722
Kann mir bitte einer weiter helfen!!!
ich bin am durchdrehn.
Will einfach nur mit dem Timer Überlauf Interrupt den PIN B0 auf high 
setzen. Ich bekomm aber keinen Interrupt.
Kann mal wer den Code kontrollieren ob ich eine Fehler drin hab?
1
#define     F_CPU   3686400UL
2
#include <avr/io.h>
3
#include <avr/interrupt.h>
4
 
5
// globale Variablen
6
 
7

8
 
9
int main(void) 
10
{
11
 
12
// IO konfigurieren
13
 
14
    DDRB = 0xFF;
15
 
16
// Timer0 konfigurieren
17
 
18
    TCCR0  = 0b00000011;            // 
19
    TIMSK  = 0b00000001;      // Timer Overflow Interrupt freischalten 
20
 
21
// Interrupts freigeben
22
 
23
    sei();
24
 
25
// Endlose Hauptschleife
26
    while(1) 
27
  
28
  {
29
     
30
    }
31

32
}
33
 
34
// Timer0 overflow Interrupt
35
 
36
ISR(TIMER0_OVF_vect) 
37
{
38
    PORTB = 0b00000001;
39
}
#1134729
Wenn der Timer nicht läuft, dann kannst Du bis zum Sankt-Nimmerleinstag 
warten, dass ein Interrupt kommt.


Und das hier:
1
 TCCR0  = 0b00000011;            // 
2
 TIMSK  = 0b00000001;      // Timer Overflow Interrupt freischalten
...ist bäääh. Bitte gewöhne Dir an, die Bitnamen zu benutzen. Oder 
willst Du, dass jeder, der helfen will, erstmal im Datenblatt 
nachschlagen muss, welche Bits da überhaupt gesetzt werden und ob Du die 
richtigen Bits gesetzt hast? Kein Wunder, dass Du da selbst die 
Übersicht verlierst...

AVR-GCC-Tutorial lesen!
#1134750
Daniel P. wrote:
> Ist für nen Atmega8.
> Ich ein Schulkollege hat gemeint dass es funktionieren müsste.
Wie viele Jahre wartet Dein Schulkollege schon auf den ersten Interrupt?

> kann mir keiner ein Beispiel geben wies funktioniert.
Doch, im AVR-GCC-Tutorial stehen Beispiele drin...

> Ich hab nämlich überhaupt keinen Plan mehr.
Nicht mehr oder noch nicht?
#1134755
Johannes M. wrote:
> Johann L. wrote:
>> Schreib mal für welchen Controller.
> Naja, in dem Fall reicht es, zu wissen, dass es ein AVR ist und dass bei
> keinem AVR die Timer von selbst (Werkseinstellung) laufen...;-)

Sorry Jahannes, dass ich mal wieder nörgeln muss. ;-)
Der Timer wird gestartet.

EDIT: Oh, sehe gerade, dass du es schon selber gemerkt hast. ;-)
OP #1134801
Hab den Code ein bischen überarbeitet funktioniert jedoch wieder nicht.
1
#define     F_CPU   3686400UL
2
#include <avr/io.h>
3
#include <avr/interrupt.h>
4
 
5
// globale Variablen
6
 
7

8
 
9
int main(void) 
10
{
11
 
12
// IO konfigurieren
13
 
14
    DDRB = 0xff;
15
 
16
// Timer0 konfigurieren
17
 
18
    TCCR0 |= (1<<CS00)|(1<<CS02);           // 
19
    TIMSK |= (1<<TOIE0);          // Timer Overflow Interrupt freischalten 
20
 
21
// Interrupts freigeben
22
 
23
    sei();
24
 
25
// Endlose Hauptschleife
26
    while(1) 
27
  
28
  {
29
     
30
    }
31

32
}
33
 
34
// Timer0 overflow Interrupt
35
 
36
ISR(TIMER0_OVF_vect) 
37
{
38
    PORTB = 0b00000001;
39
}
#1134807
Daniel P. wrote:
> Nein hab das Oszi meines Vaters dranhängen.

Der Code ist grundsätzlich ok.
Bist du sicher, dass dein Problem in Wirklichkeit nicht ein Oszi Problem 
ist? Wenn du ein Voltmeter hast, dann benutz doch dieses mal. An PB0 
müssen konstant 5V anliegen. Gleich daneben, an PB1 müssen es 0V sein.
OP #1134816
Nein das ist sicherlich kein Oszi Problem.
Da wenn ich den Port in der While schleife setze dann wird dieser auch 
gesetzt. Nun müsste der Port eigentlich immer low sein und der Interrupt 
diesen dann einschalten. Nur es tut sich nichts.
ich bin fertig mit den Nerven. ;-(
#1134936
Daniel P. wrote:
> Nein 0 Warnings gar nix.
> Zum Mäusemelken!!!!!
Das kann, mit Verlaub, nicht wirklich sein...

Also:
- Du sagst, Hardware funktioniert (getestet mit Setzen des Bits in 
main() ohne Interrupt).

- Du sagst, Programm compiliert ohne jegliche Warn- oder Fehlermeldung.

Da bleibt nicht viel übrig.
- Programm für einen falschen Controller compiliert
   => würde vermutlich entweder zu Fehlermeldungen führen (unbekannter 
Interrupt-Vektor, unbekannte Register etc.) oder zu einem völligen 
nicht-Funktionieren des Codes führen (inklusive des Testcodes ohne 
Interrupt)
- sonstige Einstellungen dürften keinen Einfluss haben, es müsste 
zumindest nach recht kurzer Zeit etwas passieren...

Binde doch mal die util/delay.h ein und lasse z.B. mit _delay_ms(100) in 
der main-Schleife den Portpin wackeln (mit nem XOR).
Gast #1134961
Programmierst Du Deinen Controller aus dem AVRStudio heraus? Falls ja: 
Check mal in der Programmer-Dialogbox, ob auch wirklich die richtige 
HEX-Datei geflasht wird. Es gab Leute hier, die den Controller nach 
Fehlerberichtigungen im Code versehentlich immer wieder mit der alten 
HEX-Datei programmiert haben, und sich wunderten, warum der Fehler 
weiterhin auftrat.
#1135140
gast wrote:
> Und ob der richtige Controller in den Projekteinstellungen steht

Johannes M. wrote:
> - Programm für einen falschen Controller compiliert
>    => würde vermutlich entweder zu Fehlermeldungen führen (unbekannter
> Interrupt-Vektor, unbekannte Register etc.) oder zu einem völligen
> nicht-Funktionieren des Codes führen (inklusive des Testcodes ohne
> Interrupt)

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 17 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.