Hallo,
ich versuche schon länger einen Mega8 dazu zu bringen mir an seinen beiden Compare Registern vom Timer1 mir eine gegentakt PWM aus zu geben.Dazu habe ich mir gedacht man kreiert zunächst erstmal den Timer1 so,daß er an Compare1a und Compare1b eine Phasengleiche PWM erzeugt.Um eine gegentakt PWM zu erhalten ( Gegentak PWM=also wenn das eine Compareregister ein HI ausgibt muß das andere Lo sein und umgekehrt) schalte ich immer das jeweils andere Compareregister für die Zeit einfach aus.Beispiel der Ausgabe: Compare1a=LO/HI/LO/HI und Zeitgleich Compare1b=HI/LO/HI/LO.Das habe ich versucht in einen Code zu fassen.Allerdings sagt mir mein Oszi,daß die Nullsetzung der Compareregister nicht richtig funktioniert.Die Rechteckausgabe ist irgendwie "verwischt" bzw unsauber.Nun meine Frage,wo ist in Code der Fehler zu suchen bzw wie macht man das besser?

viele Grüße

Code:
$regfile = "m8def.dat" 
$crystal = 8000000 


Config Portb.1 = Output 
Config Portb.2 = Output 
Config Portc.5 = Input 


Config Timer1 = Pwm , Prescale = 1 , Pwm = 8 , _ 
Compare A Pwm = Clear Down , Compare B Pwm = Clear Down 
Enable Timer1 
Start Timer1 

Config Timer0 = Timer , Prescale = 8 
Enable Timer0 
On Timer0 Isr_von_timer0 
Enable Interrupts 



Config Adc = Single , Prescaler = Auto , Reference = Avcc 
Start Adc 

Dim B As Word 
Dim Wert As Word 
Dim Up As Bit 
Dim Pwm As Byte 



Do 
'*** ADC einlesen und auf 8 Bit umrechnen *** 

Wert = Getadc(5) 
B = Wert / 4 


Loop 
End 

Isr_von_timer0: 
Timer0 = 192                                                'Zeitbasis 

'*** Compare Register Togglen *** 

Toggle Up 

If Up = 0 Then 
Pwm1b = 0 
Pwm1a = Pwm 
Else 
Pwm1a = 0 
Pwm1b = Pwm 
End If 

'*** PWM Regelung *** 

      If B > Pwm Then 
      Pwm = Pwm + 1 
      End If 

      If B < Pwm Then 
      Pwm = Pwm - 1 
      End If 


Return