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







Zitieren
. Dann hab ich wohl den Text falsch interpretiert.


Lesezeichen