Hallo liebes Forum,ich bin Anfänger und versuche gerade Hardware PWM auf
dem Attiny85 ans laufen zubringen.Ich habe schon versucht mit Hilfe des
Tutorials weiter zukommen und hier gesucht hab ich auch schon.
Ich habe Led an pin5 und 6 und egal welche Werte ich in OCR0A und OCR0B
schreibe die Led´s leuchten voll durch.
.org 0x0000
rjmp main ; Reset Handler
.org OVF0addr
rjmp timer0_overflow ; Timer Overflow Handler
.def temp1 = r16
.def temp2 = r17
.def temp3 = r18
ldi temp1, HIGH(RAMEND)
out SPH, temp1
ldi temp1, LOW(RAMEND)
out SPL, temp1
ldi temp1, 1<<WGM00 | 1<<WGM01 | 1<<COM0A1 | 1<<COM0B1
out TCCR0A, temp1
ldi temp1, 1<<WGM02 | 1<<CS00 | 1<<CS01
out TCCR0B, temp1
;fast pwm modus7, non inverting mode
ldi temp1, 1<<TOIE0
out TIMSK, temp1
sei
; TOIE0: Interrupt bei Timer Overflow
ldi temp1, 0x3f
out OCR0A, temp1
ldi temp1, 0x3f
out OCR0B, temp1
ldi temp1, 0b11001111 ;Alles Ausgang Pin pb4+5 eingang
out DDRB, temp1
loop:
rjmp loop
timer0_overflow: ; Timer 0 Overflow Handler
reti
Kannst du da genauer werden was keinen sinn macht.Ich hab mich durchs
datenblatt gelesen und alle register beschrieben die in meinen augen die
pwm ausgeben
Donkey Kong schrieb:> Ich habe Led an pin5 und 6 und egal welche Werte ich in OCR0A und OCR0B> schreibe die Led´s leuchten voll durch.
Vielleicht willst du das ja auch? Wenn du nicht schreibst, was du
erwartest wenn du welche Werte nach OCR0A/OR0B schreibst, wie sollen wir
sinnvolle Vorschläge machen.
> ;fast pwm modus7, non inverting mode
Dir ist bewußt, das hier der Top Wert nicht 0xFF ist sondern durch OCR0A
bestimmt wird?
> ; TOIE0: Interrupt bei Timer Overflow
Wenn OCR0A der Top Wert ist, nimmt man den Compare 0A Interrupt, da sich
der Overflow immer mit OCR0A ändert und der TOI nur mit MAX ausgelöst
wird. (Hab noch nicht ausprobiert, ob Compare und Overflow Flags gesetzt
werden, wenn OCR0A auf 0xFF in dem Modus ist ???)
imo ist das
modus 7, inverting mode (1<<COM0A1 | 1<<COM0B1). tut aber nix zur sache.
warum schreibst du in OCR0B ?
ldi temp1, 0x3f
out OCR0B, temp1
Sollte irrelevant sein.
Schonmal zu debug zwecken geschaut ob du in der ISR landest? zweite Led
einschalten oder sowas.
Wie oben angemerkt brauchst du die ISR aber eigentlich da du deinen
Timer wie einen "koprozessor" verstehen muss. Einmal gestartet läuft er
eigenständig.
Konkret:
Di willst HW PWM realisieren. Etablierst aber eine ISR. Das macht keinen
Sinn. Entsprechend falsch konfigurierst Du auch den Timer.
Software PWM: benutzt eine ISR. In der macht man dann aber auch etwas,
bzw. muss etwas machen, damit sich was tut an den Ausgängen.
HW PWM benötigt keine ISR, will aber richtig konfiguriert werden.
lostintimer schrieb:> @Donkey Kong: Wozu sind die Interrupts gut?
Vor allem: Wo springen sie denn hin? Ich sehe zwar die Freigabe der
beiden OC Flags, aber keine ISR, die sie behandelt.
Hardware PWM bedeutet übrigens, das du eben keine Software brauchst,
während die PWM läuft. Du könntest z.B. den Timer OVF dazu nutzen, die
OC Register synchron zu laden, aber nötig sind erstmal keine ISR.