hallo!
erstmal: assembler ist sehr sehr schwierig (kann ich selber nicht wirklich).
hier mal ein beispiel in Bascom (Basic):
zur erklärung: am anfang wird timer0 intialisiert (ist ein 8 bit timer, also von 0 bis 255 und wieder zurück)Code:Timer0 = Timer, Prescale = 256 'alle 256 quarzschwingungen geht timer0 um 1 hoch do if timer0 > 204 then reset portb.0 elseif timer0 < 204 then set portb.0 end if loop
wenn jetzt timer0 über 204 ist (sind 80% von 255) dann wird portb.0 ausgeschaltet. der timer zählt noch 51 schritte bis 255 hoch, und dreht dann um (zählt rückwärts). wenn er jetzt wieder unter 204 ist, dann schaltet er portb.0 an und zählt runter bis 0 und dreht wieder um. dadurch hast du ein tastverhältnis von 408 zu 102, was genau 80% entspricht.
anstatt 204 kannst du auch eine variable nehmen, die du dann irgendwo in deinem programm änderst. auch kannst du mehr als nur einen PWM port erzeugen. theoretisch unendlich viele (mal abgesehen dass der AVR nicht unendlich viele hergibt)
mfg
schoko
Lesezeichen