Forum: Mikrocontroller und Digitale Elektronik Timer1 mit Atmega8


von David V. (davidos)


Lesenswert?

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

von Sam .. (sam1994)


Lesenswert?

Mit was willst du das Programm denn schreiben? C, Asm, Bascom?

von spess53 (Gast)


Lesenswert?

Hi

>weil ich allein versucht habe,aber leider ohne Erfolg.

Dann zeige mal, was bis jetzt dabei herausgekommen ist.

MfG Spess

von David V. (davidos)


Lesenswert?

ich möchte mit C schreiben, ich habe gemeint mit (ohne erfolg), dass ich 
mit alle diese versuche kein Ergebnis gegefunden habe.
Mfg David

von Sam .. (sam1994)


Lesenswert?

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.

von Karl H. (kbuchegg)


Lesenswert?

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.

von Sam .. (sam1994)


Lesenswert?

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.

von Karl H. (kbuchegg)


Lesenswert?

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.

von spess53 (Gast)


Lesenswert?

Hi

>Das Register musst du in Echtzeit verändern: TCCR0.

Wie kommst du darauf? Hellseher?

MfG Spess

von Sam .. (sam1994)


Lesenswert?

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.

von Karl H. (kbuchegg)


Lesenswert?

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.

von spess53 (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.