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) { } }
Lesezeichen