Forum: Mikrocontroller und Digitale Elektronik Timer, aber ohne Interrupt


von Benjamin K. (exs)


Lesenswert?

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

von Karl H. (kbuchegg)


Lesenswert?

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.

von Thilo (Gast)


Lesenswert?

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.

von Benjamin K. (exs)


Lesenswert?

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

von jojansen (Gast)


Lesenswert?

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

von Hannes L. (hannes)


Lesenswert?

<Eigenwerbung>www.hanneslux.de/avr/</Eigenwerbung>

...

von Karl heinz B. (kbucheg)


Lesenswert?

> 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;
}

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.