mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Erklärung zu Benutzung von Timer und DO/Loop


Autor: LJay (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi.

Das ist vielleicht ne sehr dumme Frage, aber fragen kostet nichts. ;)

Ich habe vor in einem Bascom code einen Timer (zählz millisekunden)
zu verwenden.
Wer kann mir aber erklären wie das mit dem Code innerhalb der DO/LOOP
Anweisung zusammenspielt?

Also wenn ich eine Timerfunktion habe, wird darin ja immer gezählt.
Z.B. in millisekunden. Nun will ich, wenn bestimmte Zeit erreicht ist
z.B. eine LED ansteuern.
Wie ist aber der zeitliche Ablauf in der DO/Loop ?
Wie oft geht das Programm die DO/LOOP durch in der gleichen zeit die
Timerfunktion?

Aus meiner erfahrung her mit anderen Programmiersprachen (keine hohen),
wird der code komplett von oben nach unten gelesen.
Also würde nach meiner Annahme der code in DO/LOOP immer zu ungenauen,
nicht bestimmbaren zeiten ausgeführt wobei ich den code in der Timer-
funktion zeitlich genau steuern kann.

Muss ich also alles was zeitkrittisch ist in der Timer-Funktion
ausführen lassen?

(Mit Referenz zu
http://www.mikrocontroller.net/forum/read-1-91014.html#96346   und
http://www.ravers-home.de/pk1/ )

Autor: harry (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hi,

der timer tickt los, nachdem er deklariert und enabled wurde.
wenn du jetzt noch interrupts enablest wird der timer0-int bei jedem
überlauf ausgeführt:

'config timer0 = timer, prescale = 1'
'enable timer0'
der timer läuft bei 1MHz clock ca. 3920x/sec über,
d.h. er erreicht 255, dann zählt er wieder bei 0 los.

der prescaler teilt die sysclock (z.B. 1MHz) /prescale.
'config timer0 = timer, prescale = 8'
der timer kreigt jetzt nur noch 125000 pulse/sec., läuft also ca.
490x/sec. über.

'x=timer0' würde jetzt völlig wirre ergebnisse zwischen 0 und 255
bringen, da ja x immer zum zeitpunkt der zuweisung beladen wird.
nur als zufallsgenerator zu gebrauchen.

'enable interrupts : enable int0 : on timer0 timer0_isr
jetzt wird der code in der timer0_isr routine ca. 490x/sec. ausgeführt.

hier könnte ein zähler stehen
'incr zahl'
oder eine variable geändert werden
'led = 1'
oder eine led geschaltet werden
'toggle pind.1'

das mal als anregung, fröhliches probieren noch, harry

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.