Forum: Mikrocontroller und Digitale Elektronik Timer2 Berechnen


von gast (Gast)


Lesenswert?

Hallo,
Ich müsste schnell einen Timer2 so berechnen, dass er alle 10ms einen 
Overflow hat. Mein Oszi Takt ist 20Mhz, PIC ist ein 16f876.

von holger (Gast)


Lesenswert?

Geht nicht! Der Prescaler kann max 16 sein.
Der Timer hat 8 Bit.

20000000Hz/16/256 = 4882.8Hz
Overflow alle 204.8 us. Mehr geht nicht.

von gast (Gast)


Lesenswert?

ok, aber 10ms sind doch 100Hz, das müsste doch gehn, oder denk ich 
gerade irgendwie falsch...

von gast (Gast)


Lesenswert?

ah, ok doch, geht nicht. habs gerade kappiert. aber noch was anderes zum 
Timer2. In der CCS Hilfe steht folgendes:
setup_timer_2(T2_DIV_BY_4,0xc0,2);
Prescaler ist 4
Postscaler ist 2
Aber was ist das dazwischen?

von holger (Gast)


Lesenswert?

>ok, aber 10ms sind doch 100Hz, das müsste doch gehn, oder denk ich
>gerade irgendwie falsch...

Der Timer2 ist zu klein für solche Sachen.
Selbst mit Postscaler kommst du nur auf 3ms.

von gast (Gast)


Lesenswert?

Ok, also 1ms wäre drin. Gibt es zur Berechnung eine Formel? Und was ist 
das zwischen bei der Timer2 Konfiguration?

von holger (Gast)


Lesenswert?

Da hab ich jetzt Unsinn erzählt :(
Der Timer läuft nur mit Takt/4.
Korrektur:

5000000Hz/16/256 = 1220.7Hz
Overflow alle 819.2 us.

Mit Postscaler 16 also 13.1ms maximal.

von gast (Gast)


Lesenswert?

Ok, aber was bedeutet dieses 0xc0 bei setup_timer_2(T2_DIV_BY_4,0xc0,2)?

von Sascha (Gast)


Lesenswert?

Das wird der Wert sein, der in PR2 geschrieben wird.

Da wie schon gesagt wurde Timer2 zu klein ist um aus 20MHz Systemtakt 
100Hz Interrupttakt zu machen, wirst du nicht darum herumkommen, mit dem 
Vor/Nachteiler etwas herumzuspielen, damit du in der Interruptroutine 
per Softwarezähler auf 100Hz kommst.

von Linebach (Gast)


Lesenswert?


von Darkleon (Gast)


Lesenswert?

Hallo!

Ich weiß, dass dieser Beitrag schon (sehr) alt ist, aber um der 
Richtigkeit genüge zu tun behaupte ich, dass mit 20MHz Systemtakt sehr 
wohl ein 100Hz (wenn auch nicht 100% genau) Interrupt durch den Timer 2 
eines PICs möglich ist.

Wie schon richtig erwähnt worden ist, wird der Timer mit FOsc/4 = 5MHz 
getaktet.
Allerdings besitzt der Timer 2 in Prescaler als auch Postscaler.

Einstellungen:
Prescaler: 1:16
Postscaler: 1:13
PR2 Register: 240

Ergibt:
5000000Hz/16/13/240 = 100,16026 Hz
Bei PR2 = 241
5000000Hz/16/13/241 = 99,74465Hz

Im Grunde stimmt die Aussage, dass keine GENAUEN 100Hz eingestellt 
werden können, allerdings ist die Aussage falsch, dass der Timer2 dazu 
zu schnell ist. (holger hat das in seinem Post richtig erkannt und das 
stimmt auch so)

Wollte das nur richtigstellen, damit "Anfänger" nach Ihren Berechnungen 
nicht verwirrt sind;)

MfG
Darkleon

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.