Gast
#1427391
Hallo Leute. :-)
Wer kann mir und einem oder anderem helfen, der sich mit dem Thema
auseinander setzt.
Ich habe einen Atmega88 mit 12Mhz laufen, CKDIV8 ist ausgeschaltet.
Mein Ziel ist den Servo ansteuern.
Rechnerisch klappt es einwandfrei, praktisch dreht der Servo nur links.
Habe folgendes ausgewählt: Fast PWM mit TOP 0xFF
Non-inverting mode
Prescaler 1024
Etwas Theorie: 12Mhz / (1024*256)=45,77..Hz
Tperiode=1/45,77..Hz=21,85..ms
Ttakt=21,85..ms/256=85,3..µs
OCR0A: Servo Stellung links: 1ms/85,3..µs=11,71 aufrunden 12
Servo Mittelstellung: 1,5ms/85,3..µs=17,57 aufrunden 18
Servo Stellung rechts: 2ms/85,3..µs=23,43 aufrunden 24
Das interessante ist, der Servo dreht bei jedem OCR0A Wert nur links?
//Quelcode
#include <avr/io.h>
void init_0(void)
{
DDRD |= (1<<PD6)|(1<<PD3);
PORTD |= (0<<PD6)|(0<<PD3);
};
void Timer_0(void)
{
OCR0A = 24; // 1ms entspricht 11,71 => 12
// 1,5ms entspricht 17,57 => 18
// 2ms entspricht 23,43 => 24
TCCR0B |= (0<<WGM02)|(1<<CS02)|(0<<CS01)|(1<<CS00);
//Prescaler 1024
TCCR0A |= (1<<COM0A1)|(0<<COM0A0)|(1<<WGM01)|(1<<WGM00);
//Fast PWM, TOP 0xFF, non-iverted
};
void main(void)
{
init_0();
while(1)
{
Timer_0();
};
}