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