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


von Philipp (Gast)


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.)

von Dieter (Gast)


Lesenswert?

Versuch macht kluuch ...

von kosmonaut pirx (Gast)


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:
1
void main(..)
2
{
3
  // timer
4
    //timer wert laden
5
    // timer modus an
6
    // timer interrupt an
7
  // led 1 an
8
  // warten bis in alle ewigkeit
9
}

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








von Karl H. (kbuchegg)


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.

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.