Hallo,
ich wollte am attiny45 mit einem Timer eine LED blinken lassen,
allerdings bleibt diese aus. (die ist nicht kaputt (das habe ich schon
getestet))
Chandler Bing schrieb:> TCCR0A = (1<<WGM01); // CTC Modus
CTC heißt: Clear Timer on Compare Match. Ein Overflow findet dann nicht
mehr statt, soweit ich das in Erinnerung habe.
Ich glaube nicht, dass CTC der MOdus ist, den du haben möchtest.
Flohzirkus schrieb:> Ich glaube nicht, dass CTC der MOdus ist, den du haben möchtest.
Und wenn er ihn doch haben möchte, muß kann er einen anderen Interrupt
nutzen und muß das Compareregister setzten.
Eigentlich ist es egal, in welchen modus der läuft (so lange es
funktioniert hätte)
aber ich habe auf den normal-modus gewechselt und es funktioniert (Habe
also die Zeile
1
TCCR0A = (1<<WGM01); // CTC Modus
komplett gelöscht.
Eine andere Frage hätte ich dann aber noch bezüglich der Interrupt-Zeit,
jetzt wechsel ich den status der LED, wenn der zähler >= 30 ist. das ist
sehr grob eine Sekunde. Aber das passt absolut nicht mit meiner
Berechnung zusammen.
Wie wird das denn berechnet?
Chandler Bing schrieb:> Wie wird das denn berechnet?
Zeich erst nochmal dein komplettes Programm. Der Tiny läuft wirklich mit
8MHz (CKDIV8 Fuse beachtet)?
Flohzirkus schrieb:> CTC heißt: Clear Timer on Compare Match. Ein Overflow findet dann nicht> mehr statt, soweit ich das in Erinnerung habe.
Fast richtig. Es gibt einen Sonderfall. Allerdings von eher geringem
Interesse, das muß man schon zugeben. ;o)
> Ich glaube nicht, dass CTC der MOdus ist, den du haben möchtest.
Um einfach nur 'ne LED mit symmetrischem Tastverhältnis blinken zu
lassen, ist CTC sogar ziemlich optimal. Man muß bloß die LED an dem
Ausgang anschließen, wo der Timer das Blinksignal direkt hinliefern
kann.
Eine ISR braucht man dafür dann nämlich gar nicht. Womit auch die
korrekte Quellenwahl für den Interupt völlig überflüssig wird.
Ahso, ja das passt dann ja.
Der Tiny sollte mit 8MHz laufen. Der Low-Fuse ist C2. Auf Enbgeded.com
konnte ich das eingeben. mit C2 wird die clock(?) nicht durch 8 geteilt,
sodass es 8MHz bleiben müssten.
@c-hater was meintest du, dass eine ISR nicht benötigt wird. Meintest
du, dass ich es auch mit delay hätte machen können? Das ist richtig,
allerdings wollte ich den Timer kennen lernen, damit ich später damit
umgehen kann und mal eine Uhr oder ähnliches machen kann.
Chandler Bing schrieb:> @c-hater was meintest du, dass eine ISR nicht benötigt wird. Meintest> du, dass ich es auch mit delay hätte machen können? Das ist richtig,> allerdings wollte ich den Timer kennen lernen, damit ich später damit> umgehen kann und mal eine Uhr oder ähnliches machen kann.
Der Timer kann selber bestimmte Ausgänge setzen/toggeln, ohne einen
Interrupt bemühen zu müssen.
der alte Hanns schrieb:> Ergänzung: auch nicht mit dem Timer1, selbst dessen Prescaler mit max.> 16384 reicht nicht.
Warum nicht wenn man den Comparematch-pin toggeln läßt?
Hi
>Ergänzung: auch nicht mit dem Timer1, selbst dessen Prescaler mit max.>16384 reicht nicht.
Bei Prescaler 1024 und 8MHz hat ein 16-Bit-Timer eine Overflow-Zeit von
8,389 s. Also lässt sich ein 1s-Takt problemlos erzielen.
MfG Spess
der alte Hanns schrieb:> Wie c-haters Vorschlag auf einem ATtiny45 (nur 8-bit-timer) umgesetzt> werden kann, ist mir unklar; es wird doch eine Umsetzung 8 MHz -> 1 Hz> verlangt.
Da habe ich wirklich nicht drauf geachtet, bei den x5-Tinys geht das
tatsächlich nicht ohne ISR.
Also: Offensichtlich falsche Controllerwahl. Wenn das Ziel ist, eine LED
mit 1Hz zu toggeln, sind die Tiny x5 nicht gut dafür geeignet.
spess53 schrieb:> Bei Prescaler 1024 und 8MHz hat ein 16-Bit-Timer eine Overflow-Zeit von> 8,389 s. Also lässt sich ein 1s-Takt problemlos erzielen.
Na ja, im Tiny45 sind die Verhältnisse anders und man schafft den
1s-Takt so eben. (Timer1 ist nur 8 Bit)
Oha, die letzten beiträge waren ein bisschen zu hoch für mich.
Ich bin froh, dass es bisher so funktioniert.
HAbe aber geguckt, wie der Timer direkt den Ausgang toggeln kann, aber
nichts gefunden. Hat da evtl einer gerade die richtige seite oder tip
parat?
@der alte Hanns
mit Sekundentakt blinken meine ich eine Sekunde an, eine Sekunde aus.
Hi
>Und welches ist der 16-bit-timer beim ATtiny45?
Mist ist ja ein ATTiny45. Aber mit Timer1 und Prescaler 16384 reicht es
trotzdem knapp (OCR= 0xF9) für einen 1s-Takt.
MfG Spess
Chandler Bing schrieb:> Oha, die letzten beiträge waren ein bisschen zu hoch für mich.> Ich bin froh, dass es bisher so funktioniert.> HAbe aber geguckt, wie der Timer direkt den Ausgang toggeln kann, aber> nichts gefunden. Hat da evtl einer gerade die richtige seite oder tip> parat?
Sie dir die OUtput Compare Unit bzw. die COM-Bits im Register TCCR0A an.
In aller Kürze:
Es gibt da zb das Register OCR0A. Wenn immer der Wert in diesem Register
mit dem Zählwert des Timers übereinstimmt, dann hat man einen Compare
Match. Mit dem COM Bits COM0A0 bzw. COM0A1 kann man dieses Ereignis mit
dem Pin OC0A (Pin 5, PB0) verknüpfen, so dass dieser Pin eine der
Tabelle 11.2 entsprechende Aktion macht.
spess53 schrieb:> Mist ist ja ein ATTiny45. Aber mit Timer1 und Prescaler 16384 reicht es> trotzdem knapp (OCR= 0xF9) für einen 1s-Takt.
OCR1A = 0xF3 dürfte hinhauen. Aber da der TO von einem 2 Sekunden Takt
redet, reicht es immer noch nicht.
Chandler Bing schrieb:> @der alte Hanns> mit Sekundentakt blinken meine ich eine Sekunde an, eine Sekunde aus.
@der alte Hanns & Chandler Bing
Hast recht gehabt Hanns. Leider reicht da der Timer1 doch nicht so wie
angedacht. Da kriegt man nur ca 0,5s an und 0,5s aus :(
Wenn ich noch ergänzen darf: mit einem Systemtakt von 1 MHz (CKDIV8
eingeschaltet) geht auch
>eine Sekunde an, eine Sekunde aus
auf dem ATtiny45.
(Und am Wochenende schalten Sie dann per clock-prescaler auf 4 MHz.)
der alte Hanns schrieb:> (Und am Wochenende schalten Sie dann per clock-prescaler auf 4 MHz.)
Hmmmm.
Montag bis Freitag 8:00 - 16:00 - SystemTakt auf 8MHz, Prescaler = 1.
Freitag 16:01 - Montag 07:59 - SystemTakt 32768KHz, Prescaler = 16384.
Und sich nach LED-blinken richten.
>Hmmmm.
Um Missverständnissen vorzubeugen: ich meinte mit fortgeschrittenem
Erkenntnisstand.
Aber ich hatte tatsächlich mal eine Anfrage für eine Uhr, die von Mo..Fr
von 08:00..17:00 einige Minuten vorgeht, und nach Feierabend diese
Differenz wieder 'zurückgibt'.