Hallo zusammen, Ich bin gerade dabei mich mit einem Atmega8 in die C Programmierung von uC einzuarbeiten. Im Datenblatt wird ersichtlich das dieser mit dem I/O Takt heraufgezählt wird, jedoch find ich nirgends wie man diesen I/O Takt mit einem Vorteiler versehen kann. Ist dies überhaupt möglich ? Vielen Dank für eure Hilfe. Gruss Jürg
:
Bearbeitet durch Moderator
kleiner Affe schrieb: > Im Datenblatt wird ersichtlich das dieser mit dem I/O > Takt heraufgezählt wird Wo ist das ersichtlich? Was bedeuted "mit Takt heraufgezählt" Würg
Unter dem Kapitel 10.3 steht ins deutsche übersetzt: Der Zähler wird bei jedem Takt von clkT0 um 1 erhöht. Der Takt clkT0 kann durch eine interne oder externe Quelle erzeugt werden, die mit den Bits CS02 bis CS00 ausgewählt wird. Wenn keine Taktquelle ausgewählt ist (CS02 bis CS00 = 0), wird der Timer/Counter angehalten.
Sorry für die Unverständlichkeit. Mein Kopf ist wohl auch nicht mehr ganz so frisch. . . Ich möchte alle 5ms mit dem Timer0 ein Interrupt erzeugen. So wies ich das verstehe kann man nun mit den CS2 bis CS0 Bits im TCCR0 Register die Taktquelle wählen, was ich auf I/O Takt gestellt habe. Nun frage ich mich jedoch, wo man diesen I/O Takt einstellen kann. (Momentan ist er gleich schnell wie der Quarz), doch hoffe ich diesen noch mit 256 teilen zu können. Gruss Jürg
Mit irgendwelchen Clocks werden irgenwelche Zähler hoch- (manchmal auch runter-) gezählt. Was willst du denn mit einem Vorteiler versehen? Die Turbo-Taste, wie damals bei 286er-PCs ist bei µCs nicht üblich. Da überlegt man sich vorher, wie schnell er sein muss und beschaltet, oder (internal RC-Oscillator) konfiguriert ihn entsprechend. Das Stromsparen geht eher über SLEEP-Modes etc.
Klar geht das, und zwar mit den Bit CS00 CS01 und CS02 im Register TCCR0.
Ja nun, wenn du schon TCCR0 gefunden hast. Da gibt es doch 5 Möglichkeiten den I/O Takt zu nutzen: 1/1, 1/8, 1/64, 1/256, 1/1024
kleiner Affe schrieb: > Ich möchte alle 5ms mit dem Timer0 ein Interrupt erzeugen. OK. > So wies ich > das verstehe kann man nun mit den CS2 bis CS0 Bits im TCCR0 Register die > Taktquelle wählen, Ja. > was ich auf I/O Takt gestellt habe. Also ohne Prescaler. > Nun frage ich > mich jedoch, wo man diesen I/O Takt einstellen kann. Der IO-Takt ist in der Frequenz immer gleich dem CPU-Takt. Der einzige Grund, beide namentlich zu unterscheiden ist, dass sie in den verschiedenen Schlaf-Möglichkeiten unterschiedlich behandelt werden. > (Momentan ist er > gleich schnell wie der Quarz), doch hoffe ich diesen noch mit 256 teilen > zu können. Der ATmega8 hat keinerlei Vorteiler für den Takt, anders als seine (pinkompatiblen) Nachfolgemodelle (ATmega88 etc.). Wenn es unbedingt der Timer0 sein muss, dann würde ich dir ernsthaft zu etwas Modernerem als einem ATmega8 raten. Der Timer0 dort hat als einzige Interruptmöglichkeit den Overflow-Interrupt. Wenn man den Interrupt nicht nur aller 256 Zählertakte auslösen lassen will, dann muss man in der ISR den Zähler neu vorladen. Jegliche Verzögerung dieser Aktion (durch vorübergehende Interruptsperre) führt zu Jitter und längeren Taktzeiten. Neuere AVRs haben hier einen so genannten CTC-Modus (Clear Timer on Compare match), bei dem sich „ungerade“ Teilerfaktoren durch die Hardware erledigen lassen.
:
Bearbeitet durch Moderator
Geniale Antwort. Kurz, und dennoch mit allen wünschenswerten Informationen. Ich danke dir :-) Gruss Jürg
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.