Forum: Mikrocontroller und Digitale Elektronik PWM mit BASCOM AVR (Mega8)


von Stefan (Gast)


Lesenswert?

Hallo !


Wer kann mir mal erklären, wie ich bei einem AVR (Mega8) mittels
BAscom
die PWM Kanäle programmiere/anspreche ?

(Bitte keinen Link auf eine englische Site) ;-)

Danke

Stefan

von Gerhard Humer (Gast)


Lesenswert?

Hi,

so gehts bei einem 2313er bim Mega8 sicher nicht viel anders.


$regfile = "2313def.dat"
$crystal = 10000000                                         '10 MHz

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


Compare1a = 128                                             '50%

Do
Loop

End


Gruss Gerhard

von Dirk (Gast)


Lesenswert?

Hi,

theroetisch sollte doch jetzt z.B. eine LED an OC1A zu 50% leuchten
oder?

Mfg Dirk

von Stefan (Gast)


Lesenswert?

@Gerhard

Ersteinmal Danke für deine Hilfe.

Bei mit in Bascom muss ich aber den Time1 so schreiben :

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

Also mit "Prescale" am Ende kommt eine Fehlermeldung.


@Dirk

Ja, bei mir mit geändereter Config Anweisung hat eine LED 50%



Stefan

von Gerhard Humer (Gast)


Lesenswert?

Hallo,

@Stefan
komisch, lief bei mir so in der Demo und läuft auch jetzt so in der
Vollversion 1.11.7.3.
Nochmals beide Arten probiert, funzen beide.

Gruss Gerhard

von Klinkerstein (Gast)


Lesenswert?

Hallo,
Habe ich das jetz richtig verstanden:

Wir sagen dem µC, dass Timer1 als PWM funktionieren soll. Dann setzen
wir das Compare1A Register auf einen Wert von 0-255. Und jeder
taktzyklus lässt das Register mit dem Pin (indirekt) vergleichen.

Wenn Ich eine niedrige Zahl in das Register geschrieben hab(meinetwegen
64), dann wird der Ausgangs-Pinn immer zu 256/64(=25%) High. und zu 75%
low. das ganze dann immer hintereinander.

Wenn ich eine höhere Zahl hereinschreibe, (so 192) dann wird der Pin
75% high gehalten und 25% low gesetzt.

Bei 1mhz quarztakt wären dass bei einem prescaling von 1 dauert eine
Periode exakt 1000ns(=1us). davon zB 75% high sind 750nS und 25% low
sind 250nS low time (ausgenommen den rise und fall times). Richtig?

brauch ich nur das eine Register mit einem byte beschreiben und
feddich?

PS: wofür ist die angabe "Compare B Pwm = Clear Down" Wofür brauch
ich denn den OCB1 ?!

von leo9 (Gast)


Lesenswert?

die Timingberechnung ist falsch. Bei 1MHz benötigt ein uP-Takt 1us, je
nach Timer (8 oder 16 Bit) dauert eine Periode 256 oder 65xxx us. Bei 8
Bit hast du daher ca. 190us High und ca. 60us Low.

grüsse leo9

von Klinkerstein (Gast)


Lesenswert?

AH ok. Verstehe

Komisch Bascom meckert an dem
Compare1A = 128
rum ?!

Was könnte das sein. Ich benutz nen ATtiny26 mit 1mhz internem
chiptakt.

von Klinkerstein (Gast)


Lesenswert?

Wenn ich nen 90S8515 einstelle, klappts ohne zu meckern. dann mach ich
es halt damit. und nem 6mhz keramik resonator (ja, funktioniert).

Bleibt die Periodenzeit noch bei 256, wenn ich 8bit habe?

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.