Hallo LotadaC,
nun wird es Zeit, daß ich mich wieder mal melde.
D.h. PWM habe ich nicht an den Nagel gehangen, sondern habe viel gelesen und gegoogelt.
Mit Word habe ich mir eine Tabelle erstellt um schriftlich festzuhalten was sich bei
Veränderung der WGM tut.
Ein Skop wie Frequenz-Periodenmesser standen mir dabei zur Verfügung.
Dann habe ich mir gesagt, beschäftige dich erst mal mit der Fast-PWM sonst blickt man
zuletzt nicht mehr durch.
Hier die Quelldatei, mit der ich rumexperimentiert habe.
Das habe ich jetzt begriffen
Um später mal ein Servo anzusteuern, müßte man eine Periode von 20 ms mit einen Impuls
von 1,5 ms haben, der dann von ca. 1,2 bis 1,8 ms variiert. Aber so weit bin ich noch nicht,
das kommt noch!
Frage: jetzt kommt noch PWM (Phase Correct) und CTC.
Bei welchen läuft denn der 8 Bit Timer hoch bis 255 und wieder runter zu Null.
Grüße
Rolf
nun wird es Zeit, daß ich mich wieder mal melde.
D.h. PWM habe ich nicht an den Nagel gehangen, sondern habe viel gelesen und gegoogelt.
Mit Word habe ich mir eine Tabelle erstellt um schriftlich festzuhalten was sich bei
Veränderung der WGM tut.
Ein Skop wie Frequenz-Periodenmesser standen mir dabei zur Verfügung.
Dann habe ich mir gesagt, beschäftige dich erst mal mit der Fast-PWM sonst blickt man
zuletzt nicht mehr durch.
Hier die Quelldatei, mit der ich rumexperimentiert habe.
Code:
; Projekt: Projekttiny 13 Datum: 05.07.2012
; Datei: FastPWM-OC0A-0B.asm
; Test Mode 4 = Fast PWM
.include "tn13def.inc"
; Takt an PORTB,PB0 (Pin OC0A) und PB1 (Pin OC0B)
.equ vConfTCCR0A = (1<<COM0A1) |(1<<COM0B1) |(1<<WGM01) |(1<<WGM00)
.equ vConfTCCR0B = (1<<CS00) ; no Prescale
; maximaler OC Wert = 254 (feine Pausennadeln auf Skop sichtbar)
; vMAX = 127...Taktverhältnis 1:1, Periode = 0,21 ms
; Periode von 0,21 ms bleibt bei Veränd. von vMAX o. vTi konstant.
.equ vMAX = 127 ; Wert für OC0A / PB0
.equ vTi = 200 ; Wert für OC0B / PB1
; Flash RAM auf Adresse 0 einstellen
.org 0
sbi DDRB,PB1 ;PB1 = OC0B als Output
sbi DDRB,PB0 ;PB0 = OC0A als Output
ldi r16,vTi ;Wert für OC0B laden =200
out OCR0B,r16 ;und in Output Compare Register B laden
ldi r16,vMAX ;Wert für OC0A laden = 127
out OCR0A,r16 ;und in Output Compare Register A laden
ldi r16,vConfTCCR0A ; Einstellungen für den Fast PWM-Modus laden
out TCCR0A,r16 ;und ins Timer/Counter Control Register 0A übertragen
ldi r16,vConfTCCR0B ;Einstellungen für den Fast PWM-Modus laden
out TCCR0B,r16 ;und ins Timer/Counter Control Register 0B übertragen
Warte:
rjmp Warte ; Endlosschleife
.EXIT
Das habe ich jetzt begriffen
Um später mal ein Servo anzusteuern, müßte man eine Periode von 20 ms mit einen Impuls
von 1,5 ms haben, der dann von ca. 1,2 bis 1,8 ms variiert. Aber so weit bin ich noch nicht,
das kommt noch!
Frage: jetzt kommt noch PWM (Phase Correct) und CTC.
Bei welchen läuft denn der 8 Bit Timer hoch bis 255 und wieder runter zu Null.
Grüße
Rolf