Hallo,
Ich möchte, dass mein RP6 einen Servo steuert. Den Servo habe ich an ADC0 angeschlossen und dieses Programm ausprobiert:
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);
}
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 <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);
}
Aber leider klappt das nicht. Der Servo dreht sich garnicht.
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.
Lesezeichen