Hi leute, ich hab mit die aufgabe gestellt einen erweiterbaren ( Kannäle ) Soft-PWM zu schrieben, hier mal mein ergebnis:
Jetztz das prob, ich kann ja nur geringe PWM frequenzen erzeugen, gäbs ne bessere Lösung? Wie ist mein Code? Kann man noch was verbessern?Code:;µC-Typ bestimmen .include "2313def.inc" ; AT90S2313 ;Register definition .def tmp = r16 ; Allgem. Arbeitsregister .def pwm = r17 ; PWM Vergleichswert .def cout = r18 ; Zähler ;Interupt Config. I .org 0000 rjmp start .org OVF1addr ; Sprungvektoren einrichten rjmp ovf1 Start: ;IO Config. ldi tmp, (1<<PB0) ; Pinb.0 als Ausgan setzen out ddrb, tmp ;Interupt Config II ldi tmp, (1<<TOIE1) ; Timer1 Interrupt out timsk, tmp ; aktivieren clr tmp ; TCCR1 High auf 0 out tccr1a,tmp ldi tmp,(1<<ICNC1)|(1<<CS10) ; Noiscanceler deaktiv. out tccr1b,tmp ; Timer1 Clock = Clock ldi tmp,0xff ; Timervorgabewerte: out tcnt1h, tmp ; Highbyte= 0xff ldi tmp,0xfa ; Lowbyte = 0xfa out tcnt1l, tmp sei ; Interuptts freigeben ;Hauptprogramm main: ldi pwm, 255 rjmp main ;Timer1 Overflow Interrupt ovf1: push tmp in tmp, sreg push tmp ldi tmp,0xff ; Timervorgabewerte: out tcnt1h, tmp ; Highbyte= 0xff ldi tmp,0xfa ; Lowbyte = 0xfa out tcnt1l, tmp cpi cout,255 brne notzero cbi portb, pinb0 notzero: cp cout,pwm brne noteq sbi portb, pinb0 noteq: dec cout ; Zählerwert erhöhen pop tmp out sreg,tmp pop tmp reti
Grezzles teslanikola







Zitieren

Lesezeichen