bieber
12.01.2010, 16:34
Guten Tag,
dieses Forum hat mir als Neuling schon viele Fragen beantwortet, doch zu
meiner jetzigen Frage habe ich keine passende Antwort gefunden.
Allgemein möchte ich mit einem Atmega8 eine PFM (Pulsfrequenzmodulation)
umsetzen.
Um dies zu realisieren würde ich Timer1 im 16bit Fast PWM Mode
verwenden.
Dieser soll von 0 bis zu einem variabel einstellbaren Wert hochzählen.
Von 0 bis zu einem fest eingestellten Wert soll der Ausgang OCR1A high
sein und dann bis zu meinem TOP Wert low sein. Somit kann ich die
Periodendauer ändern und die high Zeit bleibt konstant. Im Datenblatt
findet man ein Beispiel auf Seite 88, Fig. 38 bei Period 5 und 6.
Laut Datenblatt (Tab. 39) kann man die PWM mit WGM13:0 = 15 einstellen.
Nun kann ich mit dem OCR1A Register den TOP Wert einstellen. Der Timer
zählt auch brav von 0 bis zu diesem Wert und springt wieder auf 0.
Aber wo kann ich meinen Compare Wert einstellen, bei dem das OCnX Signal
von 1 auf 0 springt? Oder hat jemand eine komplett andere Idee für eine
"hardware" PFM?
Hier mal mein erster Testcode. In diesem fehlt noch eine Zeile, in der
ich den Compare Wert an ein Register übergebe.
$regfile = "m8def.dat"
$crystal = 3686400
$baud = 9600
Ddrb.1 = 1
Tccr1a = &B10000011
Tccr1b = &B00011101
Do
If Ucsra.rxc = 1 Then
Ocr1ah = UDR
Ocr1al = &B11111111
End If
Loop
Vielen Dank für eure Hilfe!!
Gruss Lars
dieses Forum hat mir als Neuling schon viele Fragen beantwortet, doch zu
meiner jetzigen Frage habe ich keine passende Antwort gefunden.
Allgemein möchte ich mit einem Atmega8 eine PFM (Pulsfrequenzmodulation)
umsetzen.
Um dies zu realisieren würde ich Timer1 im 16bit Fast PWM Mode
verwenden.
Dieser soll von 0 bis zu einem variabel einstellbaren Wert hochzählen.
Von 0 bis zu einem fest eingestellten Wert soll der Ausgang OCR1A high
sein und dann bis zu meinem TOP Wert low sein. Somit kann ich die
Periodendauer ändern und die high Zeit bleibt konstant. Im Datenblatt
findet man ein Beispiel auf Seite 88, Fig. 38 bei Period 5 und 6.
Laut Datenblatt (Tab. 39) kann man die PWM mit WGM13:0 = 15 einstellen.
Nun kann ich mit dem OCR1A Register den TOP Wert einstellen. Der Timer
zählt auch brav von 0 bis zu diesem Wert und springt wieder auf 0.
Aber wo kann ich meinen Compare Wert einstellen, bei dem das OCnX Signal
von 1 auf 0 springt? Oder hat jemand eine komplett andere Idee für eine
"hardware" PFM?
Hier mal mein erster Testcode. In diesem fehlt noch eine Zeile, in der
ich den Compare Wert an ein Register übergebe.
$regfile = "m8def.dat"
$crystal = 3686400
$baud = 9600
Ddrb.1 = 1
Tccr1a = &B10000011
Tccr1b = &B00011101
Do
If Ucsra.rxc = 1 Then
Ocr1ah = UDR
Ocr1al = &B11111111
End If
Loop
Vielen Dank für eure Hilfe!!
Gruss Lars