Hallo,
ich habe mal mit meinem xmega mit der delay-Funktion gespielt, das
Programm gibt eine Rampe über den D/A-Wandler aus. Werte kleiner als 20
µs bewirken keine messbare Verzögerung. Die Schleife müsste alleine
schon 1ms laufen, eine Rampe dauert aber nur 22ms.
Bei Werten größer 20 µs fehlt in der Periodendauer ein Faktor 16.
Was ist da los?
1 | while (1) //Endlosschleife, gibt eine Rampe aus
|
2 | {
|
3 | DACA.CH0DATA = i; //Wert zum Ausgeben
|
4 | i++;
|
5 | for (uint8_t j=0; j<100; j++)
|
6 | {
|
7 | _delay_us(10); //Verzoegerung 100x
|
8 | }
|
9 | }
|
Den Takt habe ich auf 32MHz eingestellt.
1 | //32 MHz interne Taktfrequenz ausgewählt
|
2 | void mhz ()
|
3 | {
|
4 | OSC.CTRL = 3;
|
5 | while(OSC.STATUS != 3)
|
6 | {
|
7 | }
|
8 | CCP = 0xD8;
|
9 | CLK.CTRL = 1;
|
10 | }
|