Hallo, versuche gerade verzweifelt ein PWM-Signal aus meinem 8515 zu bekommen. Aber ich scheitere kläglich. Aus dem Datenblatt kann ich nicht wirklich herauslesen wie das funktioniert (wahrscheinlich ist mein Englisch zu mies), im Internet habe ich noch kein Beispielprogramm gefunden. Zumindest nicht in Assembler. Kann mir jemand mit einem (dokumentierten) Beispiel helfen?
Hi Marc, ich hab grad beim Stöbern hier im Board dashier entdeckt: http://www.mino-elektronik.de/soft-pwm/pwm_software.htm CU
Danke für den Tip, aber ich suche keine Softwarelösung. Beim 8515 kann man ja den Timer für sowas verwenden, ich weiss nur nicht welche Register ich mit welchen Werten laden muss damit das funktioniert.
Hallo, im Anhang etwas Spagetticode ;)
es ist eine softanlauf für einen dc motor,
durchforsten und vieleicht hilft es ja, geschrieben für einen 4433
PWMHA:
;PWM Routine zum Anfahren des Motors (enable Pin)
;enable pin ist noch aus
LDI mp,$00 ;lade 0 in mp
OUT OCR1H,mp ;mp in register PWM Value HighByte
LDI mp,$FF ;lade 255 in mp
OUT OCR1L,mp ;mp in register PWM Value LowByte
ldi mp, $01 ; Timer Start CK (höchste frequenz)
out TCCR1B, mp ;
ldi zaehler,$FF ;lade 255 in Zähler (zur sicherheit)
ldi zaehler2,$08 ;lade 16 in Zähler( zeitdauerregulierung)achtung
unten nochmal!
ldi mp,0b11000001 ;Einschalten des PWM Modus(non invert, 8 bit)
out TCCR1A,mp ;mp in register
LDI Step,$96 ;fülle step mit 150
PWMLoopHA:
DEC Zaehler ;Verringere Zähler um eins
BRNE PWMLoopHA ; Springe zu Delay wenn Z = 0 (oder gehe weiter wenn
überlauf!
DEC Zaehler2 ;Verringere Zähler um eins
BRNE PWMLoopHA ;Springe nach PWMLoop wenn Z = 0
DEC Step ;verringere step um 1
OUT OCR1L,Step ;schreibe step in OCR1AL Register
BREQ PWMLoopOutHA ;Springe zu Stepset wenn Z=1 also Überlauf
ldi zaehler2,$08 ;lade den 2. Zähler,muss sein weil sonst von 0 auf
255 wechselt
SBIS Pind,2 ;springe wenn Verrauf schalter an ist
RJMP PWMLoopHA ;springe zu PWMLoop
RJMP PWMAbbruchbeiEndsAUF
Hallo Marc, Schau mal im Datenblatt des 8515 auf Seite 40 nach. Da steht sehr genau welche regiester für welchen PWM-Modus gesetzt werden müssen. Hoffe das hilft dir weiter. Gruß Matthias
Leider klappt das bei mir irgendwie alles nicht.
Vielleicht weiss jemand was an meinem Programm falsch ist.
Ich messe an PD5 (OC1A), aber da is nix...
.include"8515def.inc"
.def temp =r20
ldi temp,0x00
out OCR1AH,temp
ldi temp,0xFF
out OCR1AL,temp
ldi temp,0x81
out TCCR1A,temp
ldi temp,0x01
out TCCR1B,temp
loop: rjmp loop
...inzwischen ja, jetzt funktioniert das auch, aber das Signal ist nicht wirklich sauber, der Highpegel gleicht der Silhouette einer Gebirgskette. Wofür ist eigentlich der OC1B (Pin 32), da kommt nix raus?
Das Signal sollte auf jeden Fall sauber sein, wenn die Betriebsspannung des Prozessors ok ist. OC1B ist für den zweiten PWM-Ausgang (Register OCR1B).
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.