Timer, aber ohne Interrupt

OP #396082
Hallo,

Ich benutze einen ATTiny26. Folgendes Programm will ich realisieren,
wobei ich alles bis auf den Timer habe.

Ich will einen Wert einlesen, diesen mit einer Konstanten vergleichen,
dann eine gewisse Zeit warten und die Show beginnt von vorne.

Ich hab schon einige Beispiele zu Timern gefunden, bin aber aus keinem
richtig Schlau geworden. Kann mir jemand einen Schups in die richtige
Richtung geben und mir sagen wie man einen Timer benutzt (also
einrichten und ablaufen lassen) ohne einen Interrupt auszulösen. Falls
dies nicht möglich ist (sinnvoll oder nicht ist erstmal nebensächlich)
würde ich gerne mal den Korrekten Ablauf erklärt bekommen. Also wann
ich was, wie machen muss...

Ein gutes Tutorial würde mir auch genügen (auch in englisch). Hab
bisher leider nix passendes gefunden.

Danke im vorraus

EXS
#396083
Wo liegt das Problem?
Sobald du den Vorteiler setzt, fängt der Timer zu ticken an.
Wenn du keinen Interrupt verwenden willst, nun gut, man
kann immer auf das Timer-Zähl-Register zugreifen und den
Wert von dort lesen bzw. schreiben.
Gast #396084
Ohne Interrupt geht's schon, falls Du nichts anderes während der
Wartezeit vorhast. Du kannst einen Software-Zähler (Pause)
programmieren die die gewünschte Zeit wartet und dann neu startet. Mit
INT wird's bedeutend einfacher, siehe 'Long time delays' auf der
ATMEL-HP, falls die Zeit länger ist. Jedenfalls ist es nicht sehr
sinnvoll einen Timer ohne Interrupt zu verwenden.
OP #396085
Gibt es da irgendwo ein gut kommentiertes Codebeispiel? Weil im Grunde
ist mir klar was ich machen muss, nur bin ich mir über den Programmcode
nicht ganz im klaren.

Ich möchte noch erwähnen, dass ich mich erst seit kurzem mit
Microcontrollern, insbesondere denen von Atmel beschäftige.

Ich muss alle paar Millisekunden einen Bus über PinA einlesen, das ist
kein Problem. Mir kommt es aber so vor als sei die Timer-Geschichte
wesentlich komplizierter, ich bin da wirklich unsicher wie ich den
jetzt Register für Register und Bit für Bit richtig initialisiere,
starte und benutze.

Gibt es da ein empfehlenswertes Buch, das die Grundlegeneden Dinge gut
erklärt?

mfg

EXS
Gast #396086
Es kommt dabei darauf an, mit welcher Sprache Du arbeiten willst.
Assembler, C, Basic....
Für Bascom (www.mcselec.com) gibt es bei www.roboternetz.de im
Downloadbereich (nach der Anmeldung) irgendwo das 'rnavr' Tool.
Zeiten eintragen und heraus kommt der Beispielcode in Bascom.
Ob das nun pädagogisch sinnvoll ist, ob Bascom der Warheit letzter
Schluß ist oder ob 42 wirklich der Sinn des Lebens ist, sei mal
dahingestellt. Mir hilft es zumindest und ich bin auch noch nicht
verblödet ;-))))))))
:-) Johannes
#396088
> Gibt es da irgendwo ein gut kommentiertes Codebeispiel?

Na ja.
Das wichtigste ist das Datenblatt zur Hand zu haben.
Dort sind die ganzen Dinge erklärt.

Aber das Prinzip ist wirklich so simpel:

#include <avr/io.h>

int main()
{
  unsigned char i;

  // am Beispiel des ATMega16

  TCCR0 = ( 1 << CS00 );

  // an dieser Stelle tickt der Timer bereits. Er tut dies
  // mit derselben Frequenz wie es auch der Prozessor tut

  TCCR0 = ( 1 << CS01 );

  // jetzt tickt der Timer mit 1/8 der Frequenz des Prozessors

  TCCR0 = ( 1 << CS01 ) | ( 1 << CS00 );

  // jetzt tickt der Timer mit 1/64 der Frequenz des Prozessors

  // es gibt noch andere Vorteiler, zb. 1/256 oder 1/1024
  // ist aber im Datenblatt in Form einer Tabelle schön zusammen-
  // gestellt

  TCCR0 = 0;

  // und jetzt tickt der Timer gar nicht mehr.

  // wollen mal schauen wie weit er gekommen ist
  // da der Timer 0 ein 8 Bit Timer ist, reicht ein
  // unsigned char um den Wert zu speichern

  i = TCNT0;
}

Antwort schreiben

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