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
Ich habe die Leds über Transistoren BC 547C angeschlossen Basiswiderstand 10Kohm (um ISP zunutzen).Einfaches ein/ausschalten geht.
Da musst Du noch mal die Grundlagen lesen. HW PWM benötigt keine ISR. Der Rest macht auch irgendwie keinen Sinn in meinen Augen.
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.
Erstmal danke für die Hilfe ich habe jetzt den fast pwm modus 3
genommen,die frequenz geändert und den interrupt geändert.
Und jetzt gehts
.org 0x0000
rjmp main ; Reset Handler
.org OVF0addr
rjmp timer0_overflow ; Timer Overflow Handler
.def temp1 = r16
.def temp2 = r17
.def temp3 = r18
main:
ldi temp1, HIGH(RAMEND)
out SPH, temp1
ldi temp1, LOW(RAMEND)
out SPL, temp1
ldi temp1, 0b00001111 ;Alles Ausgang Pin pb4 eingang
out DDRB, temp1
ldi temp1, 1<<WGM00 | 1<<WGM01 | 1<<COM0A1 | 1<<COM0B1 |
0<<COM0A0 | 0<<COM0B0
out TCCR0A, temp1
ldi temp1, 0<<WGM02 | 1<<CS01
out TCCR0B, temp1 ;fast pwm modus3, non inverting mode
ldi temp1, 1<<OCIE0A | 1<<OCIE0B
out TIMSK, temp1 ;timer compare match interrupt enabled
sei
ldi temp1, 0x1
out OCR0A, temp1
ldi temp1, 0x19
out OCR0B, temp1
loop:
rjmp loop
Donkey Kong schrieb: > Und jetzt gehts Nur gut, daß Fehler da keine Auswirkung zu haben scheinen. @Donkey Kong: Wozu sind die Interrupts gut?
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.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.