PWM Tastverhältnis stimmt nicht, warum? Atmega88
Hallo,
ich versuche gerade ein PWM Signal zu erzeugen, dazu nutze ich einen Atmega88 mit 8MHz quarz. Ich betreibe das ganz im Mode8 also mit ICR1 als TOP Wert und dual-slope.
Das Problem das ich habe ist folgendes:
Ich schreibe in OCR1A einen Wert welcher 20%-80% vom ICR1-Wert entspricht, das Signal das am Ausgnag anliegt hat aber leider nicht exakt diesen wert sondern liegt ~1% daneben!! selbst wenn ich 16Bit nutze spricht ICR1=65535 und OCR1A auf 32767 setze dann messe ich immernoch 50,7PWM% :(
Was mache ich falsch? Bin langsam total ratlos!
50%PWM ist nur Beispielhaft, der Wert soll später zwischen 20% und 80% veränderbar sein. Aber erstmal klein Anfangen ;)
Hoffe es kann mir jemand helfen! Vielen Dank schon mal
Gruß Felix
Hier mein Quellcode:
Code:
#include <avr/io.h>
#include <string.h>
#include <stdlib.h>
#include <avr/interrupt.h>
void INIT_PORTS(void)
{
DDRB=0xff;
DDRC=0xf0;
PORTB=0;
PORTC=0x00;
PORTD=0;
}
void INIT_TIMER(void)
{
TCCR1A|= (1<<COM1A1)|(0<<COM1A0)|(0<<COM1B1)|(0<<COM1B0)|(0<<WGM11)|(0<<WGM10);
TCCR1B|= (0<<WGM12) |(1<<WGM13) |(0<<CS12) |(0<<CS11) |(1<<CS10);
TIMSK1|= (0<<ICIE1) |(0<<OCIE1B)|(0<<OCIE1A)|(0<<TOIE1);
}
//################# MAIN ########################
void main (void)
{
INIT_PORTS();
INIT_TIMER();
ICR1 = 65535;
OCR1A= 32767; //50PWM%
while (1)
{
}
}