www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik counter-Probleme mit ATtiny25


Autor: Johann (Gast)
Datum:

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

Autor: Johannes M. (johnny-m)
Datum:

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

Autor: Stefan Ernst (sternst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Glasskugel:
bf0.timer0 ist falsch deklariert (muss volatile sein).

Autor: Johann (Gast)
Datum:

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

Autor: Stefan Ernst (sternst)
Datum:

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

Autor: Johannes M. (johnny-m)
Datum:

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

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]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [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.