Forum: Mikrocontroller und Digitale Elektronik 3 PWMs mit ATmega8 - gedankenkontrolle


von maxigs (Gast)


Lesenswert?

Ich sitze hier schon ein paar Stunden über dem Datenblatt des ATmega8,
über der GCC-Faq hier und der ein oder anderen "kleinen" Anleitung zu
PWMs, aber ganz durchsteigen tu ich noch immer ned.
Ok Stur abschreiben ginge, aber das macht keinen Spass lol

Das PWM Prinzip an sich ist kein Problem (ist hier auch super erklärt),
nur welche Register jetzt genau was machen verwirrt mich sehr.
Deshalb wäre ich echt dankabar, wenn sich hier jemand die Zeit nimmt
und mal überfliegt was ich mir so zusammegesponnen habe - und ob es
passt.

TCCR0:
–; –; –; –; –; CS02; CS01; CS00;
TCCR1A:
COM1A1; COM1A0; COM1B1; COM1B0; FOC1A; FOC1B; WGM11; WGM10
TCCR1B:
ICNC1; ICES1; WGM13; WGM12; CS12; CS11; CS10
TCCR2:
FOC2; WGM20; COM21; COM20; WGM21; CS22; CS21; CS20

Die drei sind die Register zum Einstellen der 3Timer.

Die CSxx sind für die Prescaler.
=> CS1x für Timer 1 (PWM 1 und 2)
=> CS2x für Timer 2 (PWM 3)

Die WGMxx geben den Modus für den jeweiligen Counter an.
=> WGM1x für Timer 1 (PWM 1 und 2)
=> WGM2x für Timer 2 (PWM 3)

Die COMxxx geben die Ausgabeart an
=> COM1Ax für Timer1 Ausgang1 (PWM 1)
=> COM1Bx für Timer1 Ausgang2 (PWM 2)
=> COM2x für Timer2 (PWM 3)


OCR1AH; OCR1AL; OCR1BH; OCR1BL; OCR2

Sind die Output Compare Register der Timer. Da gehört der Zielwert fürs
PWM rein
OCR1AL = PWM1
OCR1BL = PWM2
OCR2 = PWM 3
(ich will nur 8bit daher nur die low Register)

Stimmt das so in etwa? Oder bin ich komplett auf dem falschen Weg?

von DJShadowman (Gast)


Lesenswert?

Eigentlich schon.
Timer1 für A und B
Timer2 für "C"

Timer 2 kann nur 8bit.
Timer 1 kann 8,9,10......


Ich habe 2 Nächte lang ähnliches probiert.
Zwar in Bascom, aber auch da muss ich ja auch die Register setzten.
Kurz bevor ich verzweifelt bin habe ich dann allerdings 'n
Beispielcode im Netz gefunden.
Allerdings hift der Dir nicht, weils ne Bascom eigene Befehlszeile ist,
die mit einfachen "Worten" die PWM's initialisiert.
Muss nur sagen wieviel Bit,Clear up oder down etc, und ab geht er ;-)

Tut mir ja wirklich leid....hmhmhm

von maxigs (Gast)


Lesenswert?

macht nix, ich wollt eh keinen fertigen code - anschreiben ist leicht
nur wenn dann mal was anders werden soll hat man keinen peil was sache
ist, desahalb will ich lieber wissen, was jetz für was ist.

pwm ist ja eigentlich ganz easy, wenn man den sinn mal durch hat und
gerade daran scheitern die meißten beispiele, weil die zwar grob sagen
wie es geht, aber denn sinn der einzelen sachen doch etwas übergehen

und danke schon mal für die bestätigung :-)

von Ralf K. (Gast)


Lesenswert?

Hi Leute,
hab mir auch mal mit Bascom und PWM ne Nacht um die Ohren gehauen :-(
Mit Bascom geht es nicht!!!
Zum. nicht wie es gehen soll.
Hab mir dann das Datenblatt genau angeschaut und einfach die
entsprechenden Bits gesetzt:

'Timer2 Einstellungen - als PWM auf Pinb.3 (ATMEGA8)
Tccr2 = &B01101010  'für Fast PWM Mode

Will man das Tastverhältnius ändern, so muß man das OCR Register mit
dem neuen Wert laden (hier OCR2).
Das PWM Signal liegt dann am jeweiligen OCR Pin des AVR (Datenblatt).
Also OCR0..OCR2, aber nur die grösseren AVR haben mehrere OCR
Ausgänge.

Diese Variante läuft in all meinen entwickelten Geräten.

Wer hat das schonmal in Bascom mit "Config Timer ... " geschafft?
;-)

lg Ralf :-)

von DJShadowman (Gast)


Lesenswert?

$regfile = "m8def.dat"
$crystal = 1000000


Ddrb.1 = 1                    'LED 1 Ausgang
Ddrb.2 = 1                    'LED 2 Ausgang
Ddrb.3 = 1                    'LED 3 Ausgang

Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Down , Compare B
Pwm = Clear Down , Prescale = 1
Config Timer2 = Pwm , Pwm = On , Compare Pwm = Clear Up , Prescale = 1


Pwm1a = 255
Pwm1b = 255
Ocr2 = 255

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
Noch kein Account? Hier anmelden.