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;
  |