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
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.
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.
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
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
> 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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.