Hallo Stefan,
ja der Osc wurde getunt, das ganze läuft ja
in einer von V-USB abgelitteten Version: (läuft hier auch mit 16.5Mhz)
1 | void calibrateOscillator(void)
|
2 | {
|
3 | uchar step = 128;
|
4 | uchar trialValue = 0, optimumValue;
|
5 | int x, optimumDev, targetValue = (unsigned)(1499 * (double)F_CPU / 10.5e6 + 0.5);
|
6 |
|
7 | do{
|
8 | OSCCAL = trialValue + step;
|
9 | x = usbMeasureFrameLength(); /* proportional to current real frequency */
|
10 | if(x < targetValue) /* frequency still too low */
|
11 | trialValue += step;
|
12 | step >>= 1;
|
13 | }while(step > 0);
|
14 |
|
15 | optimumValue = trialValue;
|
16 | optimumDev = x; /* this is certainly far away from optimum */
|
17 | for(OSCCAL = trialValue - 1; OSCCAL <= trialValue + 1; OSCCAL++)
|
18 | {
|
19 | x = usbMeasureFrameLength() - targetValue;
|
20 | if(x < 0)
|
21 | x = -x;
|
22 |
|
23 | if(x < optimumDev)
|
24 | {
|
25 | optimumDev = x;
|
26 | optimumValue = OSCCAL;
|
27 | }
|
28 | }
|
29 | OSCCAL = optimumValue;
|
30 | }
|
Ich habe dein Scr gesehen, so in etwa läuft das hier auch.
Danke für deinen Tip,
Grüße
Karsten#