mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Timer, aber ohne Interrupt


Autor: Benjamin K. (exs)
Datum:

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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

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

Autor: Thilo (Gast)
Datum:

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

Autor: Benjamin K. (exs)
Datum:

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

Autor: jojansen (Gast)
Datum:

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

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
<Eigenwerbung>www.hanneslux.de/avr/</Eigenwerbung>

...

Autor: Karl heinz Buchegger (kbucheg)
Datum:

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

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.