Bascom Power-LED dimmen

gerd51

Mitglied
18. Jan. 2013
43
0
6
Sprachen
  1. BascomAVR
Hallo ihr freundlichen und geduldigen Helfer,

ich habe 3 Power-LED´s in Reihe geschaltet und mit der KSQ LDD-700L von Mean well, die einen PWM-Eingang besitzt, versehen. Sie leuchten, jedoch von Dimmen keine Spur. Ich kann sie auf dem Eingang ein und ausschalten, aber eben nicht dimmen.
Meine Timerkonfiguration sieht so aus: Config Timer1 = Pwm , Pwm = 9 , Prescale = 8 , Compare A Pwm = Clear Up und müßte nach meiner Berechnung eine pwm-Frequenz von 488 HZ ergeben????Daraus habe ich bei einem Compare-Wert von 250 eine AN-zeit von 1,05 ms und eine AUS-Zeit von 1ms berechnet. Aber wie gesagt tut sich nichts. Ich habe ein kleines Testprogramm geschrieben.



CodeBox BascomAVR
$regfile = "m8def.dat"
$crystal = 4000000

$swstack = 50
$hwstack = 50
$framesize = 50

Config Portb.5 = Output

Config Timer1 = Pwm , Pwm = 9 , Prescale = 8 , Compare A Pwm = Clear Up

Dim A As word



Do
For A = 500 To 0 Step -10
  Compare1a = A
  Waitms 200
Next A
wait 2
For A = 0 To 500 Step 10
  Compare1a = A
  Waitms 200
Next A
wait 5
Loop
End


Wo steckt der Fehler??
 
Hmm...
4MHz
16bit-Timer
Timer Prescaler=8
...
der Timer läuft effektiv mit 500kHz, und das 65536 Schritte pro Überlauf...
also ca 7,6Hz PWM-Frequenz, oder??

Oh... PWM=9...
also PWM nur bis 9bit (kann der Mega8 das?)

dann käme ich auf 976Hz...
 
Hallo LotadaC,
Habe die Berechnungsformel von Stefan Hoffman benutzt und die liefert 488HZ.
Den Fehler habe ich im selben Moment gefunden, als ich das Programm gepostet habe. Es ist halt doch gut, wenn man seine Gedanken mal ordnet, um anderen zu erklären, was man will.
Der Fehler ist so blöd, dass es weh tut: der Ausgangspin ist, keine Ahnung wie das passieren konnte, PB5 muss aber natürlich PB1 sein (siehe Datenblatt). Natürlich laüft es so.Trotzdem vielen Dank für deine schnelle Antwort
Gerd
 
Hallo LotadaC,

meine Berechnung sieht so aus:

PWM- Frequenz
f_PWM=f_AVR/prescale/(Timerauflösung*2) ; (Timerauflösung=2^Timer-Bit)

Periodendauer
T_PWM=1/f_PWM

Tickberechnung (Tick:Zeit für eine Stufe)
Tick=T_PWM/(Timerauflösung*2)

Tastverhältnis
Gesamt-Ticks=Timer_max*2
AN_Ticks=(Timer_max-Compare-Wert)*2
Tastverhältnis=An_Ticks/Gesamt_Ticks
 
Wenn man "clear up" interpretiert als "Clear OC1A/OC1B on Compare Match when up-counting. Set OC1A/OC1B on Compare Match when downcounting.", paßt's zum dual Slope (phasenkorrekter PWM), der Timer macht dann 2*2^9 Schritte (eben 2^9 upcounting und 2^9 zurück)...
Bascom setzt bei Deinem Code auch nur WGM11 also Waveform Generation Mode=2 (PWM, Phase Correct, 9-bit).
Welche Parameter sind bei Config Timer1 für fastPWM oder phasen- und Frequenzkorrekten PWM zu wählen?

Ich hatte hier übrigens mal 'ne komplette Übersicht zum Timer1 zusammengestellt (bzw aus dem Datenblatt "geGuttenbergt").
In #19 desselben Themas war die beschreibung der Register/Bits dazu...
 
Hallo LotadaC,

Super-Erklärung. kann man nicht besser machen. Vielleicht könnte man den Teil mal aus dem Thread in die Grundlagen-Erklärungen transportieren. Dino hat doch, glaube ich, mal so was ins Leben gerufen. Auch Markus DCF77 Abhandlung gehört meiner Meinung nach in so etwas.
Gruß
Gerd
 
...Der Fehler ist so blöd, dass es weh tut...
Mach Dir nichts draus, sowas haben wir alle durch...
Ich selbst hatte zB mal in Assembler im Code ein simples "1<<" vergessen, der bekommt dann natürlich trotzdem 'ne Zahl raus, nur eben 'ne andere (die fatalerweise gar nicht so falsch war, der Timer lief nämlich trotzdem im PWM, nur eben nonInverting statt Inverting, ist also erstmal(!) gar nicht aufgefallen)
Grandpa hatte irgendwo mal den MasterClearReset eines IC weggelassen - das Ding funktionierte dann nach dem Zufallsprinzip (und es bedurfte der geballten Forenstammtisch-Brainpower, das herauszubekommen (okok, Dino war's natürlich))
Irgendwer hatte auch mal Probleme Timer0 korrekt zu initialisieren, was daran scheiterte, daß er die TCCR1x-Register manipulierte...

Da Dein Problem gelöst ist, kann ja hier ein wenig OT nicht mehr schaden...

Dino hatte außer diversen Hilfethemen auch mal 'ne umfassende Sammlung an FAQ (bzw den Antworten) zusammengefaßt.

Ob meine beiden Schriebse da aufnahmewürdig sind, muß wer anders bewerten...

Eigentlich wollte ich mal an Urschleim-Thread anknüpfen, und dann auch irgendwann nochmal das mit dem Timer aufbereiten (und weitere Hardware), aber wie das mit der Zeit und so halt ist...
 
Hi,

ich hab da auch schonmal nen ziemlichen Bock im Programm gehabt. Man kann Binärzahlen bei Bascom schön bei den Bits gruppieren. Und zwar so ...
Ddra = &B1111_1111
... also mit nem Unterstrich. Ich habe blöderweise einen Punkt für die Gruppierung verwendet. Also so ...
Ddra = &B1111.1111
... Das ergibt dann Binäre Kommazahlen (im englischen ist der Punkt da Komma).
Gab dann schöne Effekte an den IO-Pins :p :rolleyes: Zu allem Übel hab ich den Fehler natürlich mit viel Copy/Paste in einigen Routinen verteilt. :cool:

Gruß
Dino
 

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)