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
:
Verschoben durch User
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.