Re: Styrpuls rc servo
Postat: 23 april 2009, 18:48:00
Tänkte jag klistrar in fulkoden som gav signalen, om någon är slapp och vill klippa och klistra.
Egentligen har ju atmel mycket snyggare pwm lösningar med counters och så, men som sagt lite fulkod =)
(Koden bör funka på de flesta atmel microcontrollers i avr serien som har stöd för avr libC)
#define F_CPU 8000000UL //Skriv in vilken frekvens du har på microcontrollern här annars funkar inte delay funktionen. I detta fallet har jag 8 Mhz
#include <avr/io.h>
#include <stdio.h>
#include <util/delay.h>
int main (void)
{
DDRD=0xFF; //PORTD Ut
PORTD=0x00;
_delay_ms(15);
while(1)
{
PORTD=0x00;
_delay_ms(18);
PORTD=0x01; //Sätter första benet på PORTD hög,
_delay_ms(1.5); //i 1.5 mS innan loopen börjar nästa varv
}
return(0);
}
För den som vill ändra läget på servot, är det bara att ändra i _delay_ms(1.5) till ett värde mellan 1 och 2 =)
Egentligen har ju atmel mycket snyggare pwm lösningar med counters och så, men som sagt lite fulkod =)
(Koden bör funka på de flesta atmel microcontrollers i avr serien som har stöd för avr libC)
#define F_CPU 8000000UL //Skriv in vilken frekvens du har på microcontrollern här annars funkar inte delay funktionen. I detta fallet har jag 8 Mhz
#include <avr/io.h>
#include <stdio.h>
#include <util/delay.h>
int main (void)
{
DDRD=0xFF; //PORTD Ut
PORTD=0x00;
_delay_ms(15);
while(1)
{
PORTD=0x00;
_delay_ms(18);
PORTD=0x01; //Sätter första benet på PORTD hög,
_delay_ms(1.5); //i 1.5 mS innan loopen börjar nästa varv
}
return(0);
}
För den som vill ändra läget på servot, är det bara att ändra i _delay_ms(1.5) till ett värde mellan 1 och 2 =)