-
Ich habe mich entschlossen den Code hier zu posten, denn vielleicht kann ihn ja noch jemand anderes gut gebrauchen! :o9
Code:
.include "m8def.inc"
.def temp = r16
start:
ldi temp , LOW (RAMEND)
out SPL , temp
ldi temp , HIGH (RAMEND)
out SPH , temp
ldi temp , 0xFF
out DDRB , temp
ldi temp , 0xF3
out TCCR1A , temp
ldi temp , 0x0A
out TCCR1B , temp
sei
main:
ldi temp , 0x01
out OCR1AH , temp
ldi temp , 0xFF
out OCR1AL , temp
ldi temp , 0x00
out OCR1BH , temp
ldi temp , 0xFF
out OCR1BL , temp
rjmp main
Das ist der selbe Code wie auf http://www.mc-project.de, nur übersetzt in Asm!
Die PWM-Impulse kommen aus den beiden Pins PB1/2 also OC1A/B heraus.
Wenn man sich den Text auf http://www.mc-project.de genau durchließt kann man die PWM-Signale leicht konfigurieren.
Zur Erklärung:
Code:
ldi temp , LOW (RAMEND)
out SPL , temp
ldi temp , HIGH (RAMEND)
out SPH , temp
Hier wird als Erstes der Stackpointer initalisiert!
Code:
ldi temp , 0xFF
out DDRB , temp
Hier wird PB als Ausgang konfiguriert.
Code:
ldi temp , 0xF3
out TCCR1A , temp
Als Nächstes wird Modulator eingestellt.
Hier ist der Modulator auf 10bit PWM im Phase Correct PWM Mode eingestellt. Durch umstellen der bits kann man wie auf http://www.mc-project.de erklärt die Auflösung usw. ändern.
Code:
ldi temp , 0x0A
out TCCR1B , temp
Hier wird der Prescaler eingestellt.
Interrupts werden global aktiviert.
Code:
ldi temp , 0x01
out OCR1AH , temp
ldi temp , 0xFF
out OCR1AL , temp
ldi temp , 0x00
out OCR1BH , temp
ldi temp , 0xFF
out OCR1BL , temp
rjmp main
Hier wird die PWM-Frequenz eingestellt und in einer Endlosschleife widerholt.
Ich hoffe ich konnte helfen, wenn noch Fragen offen sind, was ich sehr stark vermute, dann stellt sie ruhig! :o)
Viel Spass und Erfolg! :o)[/code]
-
Sowas habe ich gesucht! Besten Dank! :mrgreen:
-
Funktioniert denn der Code auch?
Ich habe in meinem Sammelsurium lange gestöbert und dazwischen waren auch einige nicht funktionierende Nieten! ;o)