Hallo,ich möchte gern Timer1 von Atmega8 programmieren, aber mit unterschiedliche werte, d.h ich gebe die werte durch taster ( die werte werden im Display angezeigt ) , und diese werte werden automatisch weiter gegeben zu Timer1, den Timer1 muss mit einen Interrupt funktionieren, hat jemand hier solche programm geschrieben, oder hat jemand hier die Idee, wie wird das gemacht, weil ich allein versucht habe,aber leider ohne Erfolg. Mfg David
Hi
>weil ich allein versucht habe,aber leider ohne Erfolg.
Dann zeige mal, was bis jetzt dabei herausgekommen ist.
MfG Spess
ich möchte mit C schreiben, ich habe gemeint mit (ohne erfolg), dass ich mit alle diese versuche kein Ergebnis gegefunden habe. Mfg David
Dafür gibt es ja das: http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial/Die_Timer_und_Z%C3%A4hler_des_AVR. Du musst nachdem eine Taste gedrückt worden ist, das Timer register verändern. Schau dir mal das Beispiel in Tut an. Das musst du nicht nur am Anfang sondern auch dann wenn du den Timer verändern willst tun.
David Vivandis schrieb: > ich möchte mit C schreiben, ich habe gemeint mit (ohne erfolg), dass ich > mit alle diese versuche kein Ergebnis gegefunden habe. Macht nichts. Zeigs trotzdem. Dann wissen wir auf welchem Level du stehst und können die Antwort anpassen. Im übrigen: du weist die Werte, die du haben willst, einfach an das betreffende Steuerregister zu. So wie du es beim ersten mal auch gemacht hast.
Das Register musst du in Echtzeit verändern: TCCR0. z.b. so
1 | TCCR0 = (1<<CS01); // Prescaler 8 |
2 | |
3 | //oder so
|
4 | |
5 | TCCR0 = (1<<CS01 | 1 << CS00); // Prescaler 64 |
Wenn du z.b. die Geschwindigkeit verändern möchtest (wie ich glaube) musst du CS00 - CS02 im Register TCCR0 verändern um den Prescaler zu ändern. Allerdings ist die kleinstmögliche Änderung min. 4fach.
Samuel K. schrieb: > Das Register musst du in Echtzeit verändern: TCCR0. Kann sein. > Wenn du z.b. die Geschwindigkeit verändern möchtest (wie ich glaube) > musst du CS00 - CS02 im Register TCCR0 verändern um den Prescaler zu > ändern. Allerdings ist die kleinstmögliche Änderung min. 4fach. Kommt drauf an. Wenn man das ganze auf einen CTC runterbricht, kann man das Taktgenau verändern. Eventuell zwischendurch einen Prescalerwechsel, aber prinzipiell hat man beim Timer1 schon sehr gute Möglichkeiten die Interruptaufruffrequenz ziemlich exakt in einem weiten Bereich einzustellen.
Hi
>Das Register musst du in Echtzeit verändern: TCCR0.
Wie kommst du darauf? Hellseher?
MfG Spess
Karl heinz Buchegger schrieb: > Wenn man das ganze auf einen CTC runterbricht, kann man das Taktgenau > verändern. Eventuell zwischendurch einen Prescalerwechsel, aber > prinzipiell hat man beim Timer1 schon sehr gute Möglichkeiten die > Interruptaufruffrequenz ziemlich exakt in einem weiten Bereich > einzustellen. Klar allerdings wollte er das ja erstmal mit dem Timer1 machen. Ich weiß auch nicht wo so eine Änderung Sinn macht. Mit einem Zähler geht es einfacher (RTC hab ich ehrlich gesagt noch nie benutzt -> mit einer Variable + 8bit Timer kommt man auch aus, solange man nicht an der CPULeistung sparen muss). spess53 schrieb: > Wie kommst du darauf? Hellseher? Wie kommst du nicht darauf? Schwarzseher? Ich dachte wenn er sich mit Timer beschäftigt hat, muss er ihn ja nur noch ändern.
Samuel K. schrieb: > Klar allerdings wollte er das ja erstmal mit dem Timer1 machen. Ich weiß > auch nicht wo so eine Änderung Sinn macht. Na zb. Frequenzgenerator. > RTC hab ich ehrlich gesagt noch nie benutzt (CTC) Probiers mal aus. Geht trivial. > mit einer Variable + 8bit Timer kommt man auch aus, solange man nicht > an der CPULeistung sparen muss Geht auch. Alles nur eine Frage, wie fein die Abstufungen sein sollen.
Hi
>Wie kommst du nicht darauf? Ist doch logisch.
Nö. Bei CTC wäre es eher logisch OC-Register zu ändern. Bei einer PWM
auch. Beim Prescaler sind die Gestaltungsmöglichkeiten eher gering.
MfG Spess
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.