Hallo,
Ich möchte, dass mein RP6 einen Servo steuert. Den Servo habe ich an ADC0 angeschlossen und dieses Programm ausprobiert:
Das funktioniert auch gut aber jetzt wollte ich nicht mehr die RP6lib verwenden sondern selbst die sleep-Funktion schreiben. Das sieht dann so aus:Code:#include "RP6RobotBaseLib.h" int main(void) { initRobotBase(); DDRA |= 1; // ADC0 auf Ausgang while(1) // immer weiter Impuls für rechts geben { PORTA |= 1; sleep(10); PORTA &= ~1; sleep(200-10); } return(0); }
Aber leider klappt das nicht. Der Servo dreht sich garnicht.Code:#include <avr/io.h> #include <avr/interrupt.h> #include <stdlib.h> uint8_t timer=0; void timer_init(void) // Timer einstellen { TCCR0 = (0 << WGM00) | (1 << WGM01) | (0 << COM00) | (0 << COM01) | (0 << CS02) | (1 << CS01) | (0 << CS00); OCR0 = 99; } ISR(TIMER0_COMP_vect) { timer++; } void sleep(uint8_t time) { for (timer = 0; timer < time;); } int main(void) { DDRA |= 1; timer_init(); while(1) // Servomitte { PORTA |= 1; // Ausgang auf high sleep(15); // schlafe 1,5ms PORTA &= ~1; // Ausgang auf low sleep(200-15); // 20ms-1,5ms warten bis nächster Impuls gesendet wird } return(0); }
Kann mir jemand sagen was ich falsch gemacht habe? Bei der Initialisierung des Timers bin ich mir nicht sicher ob das richtig ist, weil ich die aus der RP6Lib habe aber selber nicht so ganz verstehe was die Befehle bedeuten.







Zitieren

Lesezeichen