Frage für 8 Bit Timer

Gast #948681
Lesenswert?

Hallo,
ich habe eine kleine Frage es geht um ein 8 bit Timer. Nach meiner 
Berechnung, stelle ich fest, dass ich nicht mit einem Clock-Frequenz von 
5MHz, ein Timer, das jedes 1 Sekunde eine Aktion durchführe.
Berechnung: gewälte Prescaler 1024:
5MHz/1024=4882.81
gewünschte Zeit:t= 1s
OCR0A=t*4883.81 =4884 aber das Register ist 8 bit groß.

Ich vermute, dass ich irgendwo einen Fehler mache. Kann jemanden mir 
helfen?
#948872
Lesenswert?

gast wrote:
> Hallo Zusammen,
> wenn ich gut verstanden habe, soll ich in dem TCNT0-Register der Wert 20
> schreiben. Falls ich jede 1 Sekunde zählen möchte.

Hi,
nur einfach eine Variable z.B. int counter einsetzen. In der 
Interrupt-Routine schreibst du counter++ bis counter = 19 ist 1 s 
vorbei.

Gruß
Gast #949064
Lesenswert?

Wenn nen Timer, wie oben schon gefragt wurde einen
CTC Modus besitzt, kann man sich den softwarezähler sparen, das kann der
Timer auch, und Zeiteffektiver.

Dazu im datenblatt unter den Timermodi CTC nachlesen.
Als Beispiel hier fuer einen Atmega 128:
1
TCCR0 = (1<<CS00) |(1<<CS02) | (1<<WGM01); //prescaler 128, CTC-mode
2

3
TIMSK  |= (1<<OCIE0);  //Enable Timer/Counter0 Compare Match interrupt.
4
ASSR= 0x00; //intern clock (!= from TOSC), synchronous clock
5
OCR0= 124; //timetick = 10ms: (1/(F_CPU/128) x 249 = 1ms)

Gruß
Gast #949080
Lesenswert?

Hi

@ QuizMaster:  Und? Er will 1s, nicht 10ms. Und das geht mit einem 
8Bit-Timer und 5MHz nun mal nicht in einem Rutsch.

Ich persönlich würde zwar auch CTC benutzen, mit OCR= F3H/243D. Ergibt 
49,971ms. und dann bis 20 zählen.

MfG Spess
Gast #949090
Lesenswert?

Ups...
das m von ms wurde mal schnell dazugelesen,...

Ein 16Bit timer koennte das, vorrausgesetzt der Contzroller hat sowas...

Sonst doch nen Softwaretimer,...
sorry, Besserung in Aussicht ;-)

Gruß

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