PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : 4 x PWM mit ATMega88 und BASCOM



Trabukh
03.08.2006, 12:36
Hallo miteinander!

Ich bin gerade auf ein kleines Problem gestoßen, bei dem mir weder die BASCOM-Hilfe noch die Forumssuche helfen konnte.
Laut Datenblatt hat der ATMega88 insgesamt 6 PWM-Kanäle.
Leider bekomme ich bisher nur 2 davon angesprochen, über Timer1.
Weiß jemand rat, wie ich noch 2 weitere dazu bewegen könnte, mir ein PWM-Signal zu geben?

Gruß,
Trabukh

REM: Pinbelegung muss hier nicht stimmen, ist von RN-Wissen übernommen...

$regfile = "m88def.dat"
$crystal = 8000000

Config Pinb.1 = Output
Config Pinb.2 = Output


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

Do
Pwm1a = 128
Pwm1b = 128
Loop

End

EDIT: Hab' gerade nochmal im Forum rumgesucht, im Prinzip will ich genau das gleiche wie hier: https://www.roboternetz.de/phpBB2/viewtopic.php?t=19284

Hanni
03.08.2006, 13:22
Hallo miteinander!

Ich bin gerade auf ein kleines Problem gestoßen, bei dem mir weder die BASCOM-Hilfe noch die Forumssuche helfen konnte.

In der Bascom Hilfe dürftest du bei Chipspezifischen Dingen nicht fündig werden ...


Laut Datenblatt hat der ATMega88 insgesamt 6 PWM-Kanäle.
Leider bekomme ich bisher nur 2 davon angesprochen, über Timer1.
Weiß jemand rat, wie ich noch 2 weitere dazu bewegen könnte, mir ein PWM-Signal zu geben?

Indem du die Bits so setzt wie sie im Datenblatt beschrieben sind ???



REM: Pinbelegung muss hier nicht stimmen, ist von RN-Wissen übernommen...


auch dafür gibt es Datenblätter ...

Im übrigen, die 4 anderen PWM's könnte man z.B. über die 2 anderen Timer aktivieren ...

Trabukh
03.08.2006, 13:48
Danke für deine Antwort.
Was die Pinbelegung angeht, da hab ich schon im DB nachgeschaut:
OC0A - PD6
OC0B - PD5
OC1A - PB1
OC1B - PB2
OC2A - PB3
OC2B - PD3

Nur wie man das jetzt registermäßig mit BASCOM macht, da scheiterts... sprich TCCR1A etc.
Ich finde diese Datenblätter meist ziemlich verwirrend... :(

Gruß,
Simon alias Trabukh

Hanni
03.08.2006, 14:39
OC0A - PD6
OC0B - PD5
OC1A - PB1
OC1B - PB2
OC2A - PB3
OC2B - PD3

Munja, ist ja mal ein Anfang.

Wie man aus den Pinbezeichnungen erkennen kann, werden je 2 PWM Kanäle von den Timern 0, 1 und 2 bereitgestellt.

D.h. du musst dir nur noch ne Pladde machen, wie du die restlichen 2 Timer konfiguriertst.

Zum Thema Datenblätter:

Sicherlich mögen diese auf den ersten Blick verwirrend erscheinen, dieses liegt jedoch meist an der ungeheuren Informationsmenge, die so ein Datenblatt enthalten kann.
Wenn man nich weiss was man eigentlich sucht ist man deshalb mit diesen Teilen recht "verloren".

Wenn man aber weiss was man will, kann man sich ganz gezielt die entsprechenden Abschnitte zu Gemüte ziehen.

In deinem Fall geb ich dir mal den Tip: "Register Description Timer 0 / 2" und ggf. die den "Modes of Operation" Abschnitt eines Timers.

Grüße,
da Hanni.

Trabukh
04.08.2006, 09:35
Nun gut, nochmals danke.

Ich habe mich jetzt mal durch die Registereinstellungen gewuselt.
Ist es nun richtig, wenn ich in BASCOM direkt folgende Register so setze:

$Regfile="m88def.dat"
$Crystal=16000000

DDRB.1=1 'PB1 bzw. OC1A as Ausgang definieren

TCCR1A=&B10000001 'Laut DB: "Clear OC1A/OC1B on Compare Match when upcounting. Set OC1A/OC1B on Compare Match when downcounting"
'"PWM, Phase Correct, 8-bit"
TCCR1B=&B00000010 'Laut DB: Prescaler = 8

OCR1AL=210 'Da nur 8-bit Auflösung gebraucht werden, benutze ich nur das erste Register

Do
Loop

Das ganze geht sicherlich auch eleganter in BASCOM mit den vorgefertigten Befehlen, aber das ist auch alles ein bisschen konfus.
Da ich momentan nicht zuhause bin, könnte bitte jemand kurz einen Kommentar zum Code abgeben? Testen kann ich momentan nicht... :(

Gruß,
Simon