Forum: Mikrocontroller und Digitale Elektronik Probleme mit PWM


von Jörg Nitsche (Gast)


Lesenswert?

Hallo,

Ich hab ein Problem mit der PWM, und zwar versuche ich schon seit 2
Tagen eine LED auf meinem Testboard mit halber Helligkeit brennen zu
lassen.
Da mir divers Codes aus dem Internet nicht wirklich weiter geholfen
haben, versuch ichs hier mal;-) Das Ziel wird es später sein über einen
BUZ 11 eine Halogenlampe zu dimmen.
So schwer kann das ja nicht sein, da der Timer1 ja eine "PWM
Betriebsart" hat, oder irre ich mich da?
Der Controller ist ein AT90S2313 und programmieren tu ich in Bascom.
Hilft mir da vielleicht Pulsout weiter?
Wär nett, wenn ihr mir weiter helfen könntet.
Mfg

Jörg Nitsche

von Jörg Nitsche (Gast)


Lesenswert?

Sorry,
hab versehentlich mein Opera nicht aktualisiert, und dachte der erste
Beitrag sein nicht erschienen, und jetzt das ganze noch mal
geschrieben;-/ Wär gut wenn jemand dieses Thread wieder löschen könnt.

Jörg Nitsche

von harry (Gast)


Lesenswert?

hi,

wenn du einen timer mit pwm betriebsart hast würd' ich das auf jeden
fall vorziehen. der vorteil liegt im regelmässig ausgegebenen signal
für pwm. einen pulseout kannst du nur zwischen die anderen befehle
packen, hast du dann subroutinen, die z.b. strombegrenzung machen, hast
di in der zeit keinen pulseout. der nachteil am pwm liegt nur darin,
dass du mit dem ausgabeport ocr1x 'verheiratet' bist. der klare
vorteil liegt darin, dass dein signal immer ansteht.

beispeil:

config timer1 = pwm, pwm = 8, compare a pwm = cleaur up, prescale = 1
' ---------------
x=125                                     ' halbe leistung

do
   pwm1a = x
   if getadc(0) > 500 then gosub weniger  ' strom übersteigt wert x
loop

' ---------------
sub weniger
   if x > 0 then decr x                   ' leistung verringern
return

so gehts recht brauchbar, in sub's lässt sich die leistung
schön an jede anforderung anpassen

gruss, harry

von Jörg Nitsche (Gast)


Lesenswert?

Hallo,

Danke für die schnelle Antwort, ich hab deinen Code mal angepasst, und
er siegt jetzt so aus

$regfile = "2313def.dat"
$crystal = 3686400


Dim X As Byte

Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Up , Prescale =
1
' ---------------
X = 125                                        ' halbe leistung

do
   pwm1a = x
   if getadc(0) > 500 then gosub weniger  ' strom übersteigt wert x
loop

' ---------------
Declare Sub Weniger
   if x > 0 then decr x                   ' leistung verringern
returnso aus:

Bascom bringt jetzt immer noch den Fehler 101: Can`t find HW register.
Was bedeutet das?

Eins noch, welches ist den der PWM Port beim 90S2313, im Datenblatt hab
ich da komischerweiße nichts gefunden.
Mfg

Jörg

von harry (Gast)


Lesenswert?

der pwm-output beim 2313 ist PinB.3 (OC1). steht im datenblatt unter
Timer1 in pwm-mode beschrieben. wenn die zuweisung pwm1x nicht klappt
kannst du auch das register direkt angeben, statt pwm1x muss es dann
ocr1 oder ocr1a heissen, weiss ich im moment nicht ganz geneu, bischen
probieren. wenn's klemmt kann ich dir den code raussuchen, ich hab den
2313 mit pwmout schon eingesetzt.
gruss, harry

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.