Forum: Mikrocontroller und Digitale Elektronik counter-Probleme mit ATtiny25


von Johann (Gast)


Lesenswert?

ich habe versucht eine Verzögerungsfunktion mithilfe von TIMER0 zu 
schreiben:

void delay_8ms(uint8_t m8s)           //@m8s max 256, @m8s=#8ms-Schritte 
// TIMER0 verwendet
{
    TCCR0B=0x00;                      //timer angehalten
    TCCR0A=0x00;                      //Ports normal, operation mode 
normal
    TIMSK&=~0x18;                     //f overflow interrupt aktiviert
    TIMSK|=0x02;
    TCNT0=0xff-m8s;                    //timer auf ausgangsposition 
gesetzt
    bf0.timer0=true;                   // bool um aus der schleife zu 
springen (global definiert)
    TCCR0B=0x05;                       // 1024 prescaler => 8ms pro 
Zählschritt (bei 128kHz)
                                       // timer gestartet
    while(bf0.timer0)                  // Warteschleife
    {
    }
    TIMSK&=~0x02;                      // Zurücksetzen der 
overflow-interrupt einstellung

}

und

ISR(TIM0_OVF_vect)
{
    bf0.timer0=false;
}

wobei das Programm immer an der Stelle der Verzögerung hängenbleibt, 
woraus ich schliesse, dass die Interruptfunktion nie aufgerufen wird, 
was ich mir nicht erklären kann. (Watchdog hab ich ausgeschaltet)

Auch eine zweite Funktion, die Timer1 braucht funktioniert nicht. 
Deshalb denke ich, dass ich irgendwas mit dem Timer-starten falsch 
mache. Aber was?

von Johannes M. (johnny-m)


Lesenswert?

Formatier Deinen Code vernünftig! Das kann kein Mensch lesen.

Außerdem gibst Du nirgends die Interrupt-Bearbeitung frei. Dann kann 
kein Interrupt auftreten!

von Stefan E. (sternst)


Lesenswert?

Glasskugel:
bf0.timer0 ist falsch deklariert (muss volatile sein).

von Johann (Gast)


Lesenswert?

vielen Dank!
ich glaub es lag tatsächlich am volatile,
abe kannst du mir auch erklären was volatile genau bedeutet, respektive 
wann ich was volatile deklarieren muss?

von Stefan E. (sternst)


Lesenswert?

Johann wrote:

> abe kannst du mir auch erklären was volatile genau bedeutet, respektive
> wann ich was volatile deklarieren muss?

Schau in das Tutorial, oder in die AVR-Libc-FAQ, oder frag Google. Dazu 
gibt es nun wirklich mehr als genug leicht zugängliche Informationen.

von Johannes M. (johnny-m)


Lesenswert?

Johann wrote:
> vielen Dank!
> ich glaub es lag tatsächlich am volatile,
> abe kannst du mir auch erklären was volatile genau bedeutet, respektive
> wann ich was volatile deklarieren muss?
http://www.lmgtfy.com/?q=volatile

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.