Timer für Anfänger in Assembler und C

Gast #7905
Lesenswert?

Hallo Axel,

sehe ich das recht, dass die Zeit genau dann anfaengt zu laufen, wenn 
die Zeilen

ldi temp, 61
out TCNT0, temp

durchlaufen wurden und es danach weiter geht mit den Befehlen nach out 
TCNT0, temp?

Ich habe auch etwas von zwei externen Interrupts gehoert. Kann ich dann 
mit deinem Programm auch 2 Zeiten stoppen, die dadurch entstehen, dass 
INT0 und INT1 von 0 auf 1 bzw. umgekeht springen?

Ich habe Bits, die abwechselnd zwischen 1 und 0 springen und ich moechte 
die Dauer zwischen den Wechseln messen. Dein Programm muesste hierfuer 
doch eine gute Grundlage sein.

Weisst du, wie ich dort die externen Interrupts einbaue bzw. dann den 
Zeitwert auslesen kann?

Tschau und vielen Dank,

Thomas H.
Gast #7906
Lesenswert?

Hallo Thomas,
entschuldige die lange Pause. Habe leider nicht ins Forum geschaut.

Du kannst die Anzahl der Interrupts pro Zeit zählen oder die Anzahl der 
Timerinterrupts zwischen den Flanken an den Eingängen.

Anbei ein Programm zur Messung von Flanken pro Zeit. Es ist in C aber
recht einfach zu verstehen.

Grüße Axel
Angehängte Dateien:
Gast #7908
Lesenswert?

ein anfänger kennt die begriffe "outp" nicht mehr.
du arbeitest mit einer alten version. auch die timerbegriffe haben sich
geändert im namen.

ein anfänger lädt immer das aktuelle winavr-c runter.

neuer
#1825048
Lesenswert?

hallo und guten tag alle zusammen.

ich komme direkt aufm punkt.
seit eine woche arbeite ich an AVR STK525 AT90USB1287 (verbindung über 
JTAGICE mkll) und will den timer einstellen aber ich bekomme es einfach 
nicht hin!!!

ich habe früher mit infinion c515c gearbeiten und hab den timer so 
inistiallisiert dass ich es selber die zeit einfach x-beliebig eingeben 
konnte,

infinion c515c timerinit:
void warte_k_s(unsigned char k)    // Funktion für k + 1 s wait
{

unsigned int uz = 0;      // Überlaufzähler
uz = 0
TMOD = TMOD & 0xF0;  /* Timer Modus für Timer 0: Gate = 0,
                                       C/T = 0(hF0 = 240'd')*/
TMOD = TMOD | 0x01;  // Modus = 1, d.h. 16-Bit-Timer  (h01 = 1'd')

for (uz=0; uz<k*100; uz++)  /* for-Schleife bis 100 + 10 ms = 1 s */
  {
  TL0 = 0xE5;  /* 16 Bit Zähler mit BEE5h = 48869d vorbelegen */
  TH0 = 0xBE;  /* Zähler läuft damit 10 ms */
  TF0 = 0;  /* Überlauf zurücksetzen */
  TR0 = 1;  /* Timer starten */
  while (TF0 == 0);  /* Warten bis Überlauf */
  TR0 = 0;    /* Timer stoppen */
  }
}

jetzt brauche ich sowas ähnliches bei dem AVR STK525 AT90USB1287.
bitte kann mir jemand helfen?
ich bedanke mich schon im vorraus.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren