Forum: Mikrocontroller und Digitale Elektronik pic timer output compare


von schnudl (Gast)


Lesenswert?

MCU: dsPIC30F4013

Ich habe ein rätselhaftes Problem bei einem Timer-2, dem ich mit Output 
Compare verwende, um ein Steuersignal für ein SC Filter zu erzeugen.

Der Timer-2 wird bei Erreichen der angegebenen Periode (PR2 Register) 
wieder auf Null gesetzt. Gleichzeitig ist das Output Compare Modul auf 
Toggle gestellt, sodass bei jedem Match der zugeordnete Pin toggelt.

Der Timer(2) läuft geclocked mit 10MHz. Aufgrund des Toggelns ist die 
erwartete Frequenz am OC-Pin

f(erwartet) = 10MHz/(2*PR2)

Nun habe ich dies mit verschiedenen Werten für PR2 ausprobiert:
1
PR2     T (gemessen)    T(erwartet)     Verhältnis
2
10000  2,00E-03         0,002           1,00E+00
3
1000   2,00E-04         0,0002          9,99E-01
4
100    2,02E-05         0,00002         9,90E-01
5
20     4,20E-06         0,000004        9,52E-01
6
10     2,20E-06         0,000002        9,09E-01
7
5      1,20E-06         0,000001        8,33E-01
8
3      7,95E-07         0,0000006       7,55E-01

Wieso wird die Frequenz bei kleinen werten von PR2 deutlich kleiner als 
der erwartete Wert?? Der Timer und das OC läuft ja autonom und nicht 
firmwaregesteuert. Es gibt auch keinen aktivierten Interrupt. Eine 
Verzögerung beim Erkennen des OC-Kriteriums müsste doch bei der 
steigenden und fallenden Flanke gleichermassen zuschlagen. Wie kann man 
die Frequnzänderung erklären?

Nur falls das hilft:
1
T2CONbits.TON = 0;
2
TMR2  = 0x0000;
3
PR2   = t2_period;
4
T2CONbits.TCKPS = t2_prescale; // = immer uaf 0x0, d.h. Prescale = 1
5
OC1R = t2_period;
6
T2CONbits.TON = 1;

von schnudl (Gast)


Lesenswert?

hat sich geklärt. man muss natürlich eins zu der periode dazuzählen, da 
0 ja auch ein gültiger wert für den zählerstand ist.

dann stimmts perfekt.

;-)

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.