Hallo,
ich versuche mich gerade das erste mal mit servos und der delay bib von
WinAVR.
Alles was ich momentan versuche ist in einer schleife meinem HXT900
Servo die verlangten 20ms pause und dann ein 2ms signal zu geben um ihn
damit dauerhaft auf die endstellung auszurichten.
Ich benutze einen AtMega16 und programmiere mit AVRStudio4 und WinAVR.
Der sehr kurze testcode sieht wie folgt aus:
1 | #include <avr/io.h>
|
2 | #include <util/delay.h>
|
3 |
|
4 | int main (void)
|
5 | {
|
6 | DDRA = 0xff;
|
7 | DDRB = 0xff;
|
8 | DDRC = 0xff;
|
9 | DDRD = 0xff;
|
10 |
|
11 | while (1)
|
12 | {
|
13 | _delay_ms(20);
|
14 | PORTD = 0b01000000;
|
15 | _delay_ms(2);
|
16 | PORTD = 0x00000000;
|
17 | }
|
18 | return 0;
|
19 | }
|
Ich habe am Pulspin für den servo auch eine led und die zeigt mir
folgendes:
Ein Blinken mit ungefähr 2 Hz.
Ich würde ja nun 50Hz erwarten... also habe ich in den
projekteinstellungen den Takt des Controllers explizit auf 16000000 Hz
angegeben. Es hängt auch definitv ein 16Mhz quarz dran.
Wo liegt der fehler? Der servo arbeitet natürlich nicht korrekt, die
daten kommen aber an - blos eben so wie es aussieht mit dem falschen
takt.