mikrocontroller.net

Forum: Compiler & IDEs Brauche Hilfe mit dem Timer/Counter


Autor: Philipp (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich hoffe ihr könnt mir helfen...ich habe mich jetzt erstmals mit 
AVR-GCC
beschäftigt und komme bei den Timer/Counter nicht mehr weiter.

Habe mir schon den Abschnitt dazu im Tutorial angeschaut aber wirklich 
schlau daraus bin ich net geworden. Es ist vielleicht noch zu erwähnen 
das ich erst vor 3 Tagen begonnen habe, mich mit Mikrocontrollern zu 
beschäftigen.

Ich arbeite mit dem ATMega128 und möchte das eine LED leuchtet, solange 
bis der Timer/Counter abgelaufen ist, dann einen Interrupt ausführen in 
dem eine andere LED leuchten soll und dann wieder zurück zum Anfang.
(!!!Halt nur um es zu verstehen!!!)

Kann mir jemand vielleicht hierzu ein passendes Beispiel mit schönen 
Kommentaren hochladen und gibt es vielleicht einen bestimmten 
Algorithmus den man anwenden kann?
(Programmstart, CPU-Freuquenz einstellen, Counter deklarieren, etc.)

Autor: Dieter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Versuch macht kluuch ...

Autor: kosmonaut pirx (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo,
was meiner meinung nach immer hilft ist: Aufschreiben. Das, was man 
erreichen will. Das dann zerlegen in kleinere Teile, was man da 
erreichen will. usw.
Pseudocode reicht da schon. also:
void main(..)
{
  // timer
    //timer wert laden
    // timer modus an
    // timer interrupt an
  // led 1 an
  // warten bis in alle ewigkeit
}

dann noch die interruptserviceroutine (isr) schreiben, und gut ist. du 
hast das problem sehr allgemein gehalten, wundere Dich deshalb bitte 
nicht über allgemein gehaltene antworten.
auch solltest du überdenken, das die isr nur sehr kurz aktiv ist (bzw. 
sein sollte). wenn du da eine led an- und wieder ausschaltest, wirst du 
das vermutlich nicht bemerken.

hth ein bischen,
bye kosmo








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

Bewertung
0 lesenswert
nicht lesenswert
Nimm den 16 Bit Timer (Timer 1).
Den initialisierst du mit einem Vorteiler von 1024

Bei verschiedenen Taktfrequenzen, keine Ahnung welche du benutzt,
wird dann der Timer nach

  1 Mhz: 1000000  65536  1024 =  ~67 Sekunden
  2 Mhz: 2000000  65536  1024 =  ~33 Sekunden
  8 Mhz: 8000000  65536  1024 =   ~8 Sekunden

einen Overflow produzieren.

Dann programmierst du dir einen Overflow Interrupt in
dem du abwechselnd die eine und die andere Led einschaltest.

Ist nicht weiter schwer. Mit dem Tutorial und dem Datenblatt
des Prozessors solltest du das hinkriegen. Wenn nicht, dann
poste dein Programm und wir sagen dir wo du daneben liegst.

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.