-         

Ergebnis 1 bis 9 von 9

Thema: PWM mit Timervorgabewert

  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    04.07.2012
    Beiträge
    171

    Frage PWM mit Timervorgabewert

    Anzeige

    Hallo,

    ich habe einen Atmega8 mit 16MHz. Ich möchte über eine PWM die Spannung einer Hintergrundbeleuchtung einstellen.
    Wenn ich nicht Falsch liege, ist aber die schnellst mögliche Frequenz bei 16MHz, einen Prescaler von 1 und einen 8bit Timer bei 31250Hz.

    Also: (16000000Hz/1) / (256*2) = 31,250 kHz

    Ist das die schnellst mögliche Frequenz die ich mittels PWM erzeugen kann?
    Kann ich bei PWM auch eine Art Timervorgabewert einbauen? Wenn ja, wie kann ich das in Bascom einbauen?

    Danke für Eure Hilfe

    mfG
    Mario

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    30.12.2008
    Beiträge
    1.418
    aus welchem grund möchtest du die hintergrundhelligkeit mehr als 30000 mal in der Sekunde ändern?
    was gibt es noch zu sagen

  3. #3
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    04.07.2012
    Beiträge
    171
    Hallo Thomas,

    also ich möchte die Helligkeit nicht 30000/sek ändern.

    Sondern via PWM die Helligkeit der Hintergrundbeleuchtung eines S65 GLCD's einstellen. Also z.B. Am Tag heller und in der Nacht dunkler machen.
    z.B. so: (Schaltung ganz unten) http://www.superkranz.de/christian/S...yHardware.html

    Nur ist mir nicht klar wie ich mit 16MHz Systemtakt 62,5kHz PWM erzeugen kann.

    mfG
    Mario

    Edit: Ich hab gerade noch was gefunden, ich muß wohl den Atmega8 im Register auf Fast PWM umstellen. Muß ich jetzt erstmal das Datenblatt wälzen, wie das wieder funktioniert...
    Geändert von dj_cyborg (11.08.2013 um 21:05 Uhr)

  4. #4
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    15.01.2007
    Ort
    Göttingen
    Beiträge
    705
    Nur ist mir nicht klar wie ich mit 16MHz Systemtakt 62,5kHz PWM erzeugen kann.
    "Fast PWM" wäre da schon ein guter Ansatz - aber mir ist nicht klar, weshalb Du so eine hohe PWM-Frequenz brauchst, wenn´s nur darum geht, die Hintergrundhelligkeit eines Displays zu ändern. Das menschliche Auge ist so träge, dass es schon bei ca. 30 Hz keine einzelnen Ein- und Aus-Phasen einer Lichtquelle mehr voneinander trennen kann, sondern die Lichtquelle als mehr oder weniger hell leuchtend wahrnimmt (in Abhängigkeit des Ein-Aus-Verhältnisses). Mit 50 oder 100 Hz wärst Du schon auf der absolut sichern Seite! Wie kommst Du denn auf ausgerechnet 62,5 KHz?

  5. #5
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    04.07.2012
    Beiträge
    171
    Hallo Sauerbruch,

    Danke für deine Antwort.

    Die Displayhintergrundbeleuchtung läuft etwa mit 10,5V und 20-30mA. Die PWM pumpt mir die 5V Betriebsspannung über eine Induktivität in die Höhe. (siehe Schaltung im o.g. Link) Die 31,25kHz reichen aber nur für ca. 10V, 15mA. Da geht noch was!

    Für eine normale LED reicht die "normale" PWM schon aus aber hier geht es um eine Spannungserhöhung.

    Die Frage müsste jetzt eigentlich heißen: Wie funktioniert der "FAST PWM Modus" in Bascom?

    tausend Dank

    mfG
    Mario

    Achso: Die 62,5K stehen oben im Schaltplan, da ich eine 1mH Induktivität verwende wird meine optimale Frequenz anders sein. Aber um das zu testen müßte ich erst mal in diesem Bereich der PWM kommen.

  6. #6
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    15.01.2007
    Ort
    Göttingen
    Beiträge
    705
    Okay - es geht Dir also gar nicht um ein variables Pulsweitenverhältnis, sondern Du bräuchtest eher ein Rechtecksignal mit 1:1-Tastverhältnis, aber variabler Frequenz - richtig?

    Fast-PWM ist ja fast das gleiche wie "normales" PWM, nur dass der Zähler halt von 255 nicht wieder rückwärts runterzählt, sondern direkt auf auf 0 gesetzt wird. Die Frequenz des PWM-Signals ist daher doppelt so hoch wie bei "normalem" PWM (Taktfrequenz / (Prescaler * 256)). Mit dem Wert im Output-Compare-Register (OCR) kann dann das Impuls-Pausen-Verhältnis eingestellt werden.

    Für Deine "Pumpe" wäre aber vielleicht der "CTC"-Modus das richtige: CTC heißt Clear Timer on Compare match - und das sagt eigentlich schon alles aus: Der Counter zählt so lange hoch, bis er den Wert im OCR-Register erreicht hat. Ist dies der Fall, wird der entsprechende Ausgang getoggelt und der Timer auf 0 resettet. Du bekommst also ein Rechtecksignal, das immer ein konstantes Tastverhältnis von 1:1 hat (weil´s ja durch Toggeln des Ausgangspins entsteht), aber eine sehr variable Frequenz. Je niedriger der Wert im OCR-Register ist, umso häufiger wird der Ausgang pro Zeiteinheit getoggelt. Eine Formel gibt es auch dazu: f = Taktfrequenz / (2*Prescaler*(OCR + 1)). Bei einem Prescaler von 1 könntest Du also Ausgangsfrequenzen zwischen 8 MHz (OCR=0) und 31,25 KHz (OCR=255) erzeugen. Auf Seite 111 des Datenblattes ist ein Diagramm, das mehr sagt als tausend Worte.

    PWM-Geschichten mit Bascom zu programmieren fand ich immer etwas mühsam und undurchschaubar . Wenn Du das Register TCCR2 selber setzt weißt Du wenigstens, dass alles so ist wie es sein soll. Für Timer2 im CTC-Modus müssten die Bits WGM21 und WGM20 auf 1 und 0 gesetzt werden (CTC-Modus), die Bits COM21 und COM20 auf 0 und 1 ("Toggle OC2 on compare match"), und die Bits CS22, CS21 und CS20 auf 0, 0 und 1 (prescaler = 1). Das Register im Ganzen muss also &B00011001 enthalten - dann sollte es klappen, wenn Pin P.3 auch als Ausgang konfiguriert ist.

    Ich hoffe, das war jetzt nicht zu viel verwirrende Informationen - andernfalls frag´ einfach nochmal nach!

  7. #7
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    04.07.2012
    Beiträge
    171
    Wow, vielen Dank für die vielen Informationen.

    Ich werde das heut Nachmittag alles mal Versuchen.

    Okay - es geht Dir also gar nicht um ein variables Pulsweitenverhältnis, sondern Du bräuchtest eher ein Rechtecksignal mit 1:1-Tastverhältnis, aber variabler Frequenz - richtig?
    Jein, die Induktivität braucht eine bestimmte Frequenz bei der Sie am effektivsten Arbeitet.
    Diese wollte ich durch testen erst einmal ermitteln - also variable Frequenz.
    Wenn ich diese ermittelt habe, kann diese auch fix bleiben, denn die Helligkeit kann dann über das Tastverhältnis (Schaltschwelle) geändert werden. Kurze Ein-Phase - weniger Energie - dunkleres Display, und umgedreht.
    Funktioniert aktuell auch schon wunderbar, nur ist die maximal Helligkeit erst zu ca. 80% erreicht. Die Ein-Phase sollte auch nicht länger sein als die Aus-Phase da sonst Energie über den MOS-FET (bei mir Transistor) verloren geht (in o.g. Schaltung Kurzschluss).
    Also die Schaltschwelle bei 0 entspricht Display aus, bis maximal ca. 120 entspricht der vollen Beleuchtung (beim 8Bit Timer ).

    mfG
    Mario

  8. #8
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    04.07.2012
    Beiträge
    171
    So, ich denke jetzt hab ich's mit der Hilfe von Sauerbruch begriffen. Vielen Dank nochmal.
    Den CTC- Modus habe ich nach deinen Angaben zum laufen bekommen und ganz gute Werte bei ca. 70kHz ermittelt.

    Hab das ganze jetzt auf Fast PWM umgebaut. Und auf 62,5kHz eingestellt. Die Helligkeit lässt sich jetzt wunderbar von
    Ocr1a = 0 (Display aus) bis Ocr1a = 70 (ca. 30mA über der Displaybeleuchtung einstellen). Hätte also noch genügend Puffer nach oben.


    Code:
    '8Bit FAST PWM mit 16MHz, Prescaler=1, F=62,5kHz
    
    'Im PWM Modus ausgeschalten
    'Foc1a = 0
    'Foc1b = 0
    
    'Modus 5 FAST PWM
    'Wgm13 = 0
    'Wgm12 = 1
    'Wgm11 = 0
    'Wgm10 = 1
    
    'Prescaler 1
    'Cs12 = 0
    'Cs11 = 0
    'Cs10 = 1
    
    'A=Clear at Match, Set at Bottom / B = Normal Port
    'Com1A1 = 1
    'Com1A0 = 0
    'Com1B1 = 0
    'Com1B0 = 0
    
    'Ins Register schreiben
    Tccr1a = &B10000001
    Tccr1b = &B00001001
    
    'Als Ausgang schalten
    Config Portb.1 = Output
    
    'Schaltschwelle festlegen
    Ocr1a = 0
    So ein wenig Starthilfe im Datenblatt Urwald, nimmt einen erstmal den ersten Schrecken...tausend Dank

    mfG
    Mario

  9. #9
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    15.01.2007
    Ort
    Göttingen
    Beiträge
    705
    Wow, das ist ja mal ein sauber auskommentierter Code!!

    Schön dass es klappt - und mit der Zeit wirst Du sehen, dass diese Datenblätter gar nicht so schlimm sind. Im Gegenteil - je länger man ihn ihnen herumstöbert umso mehr entdeckt man, was diese kleinen Controller so alles können

    Weiterhin gutes Gelingen!

Ähnliche Themen

  1. Antworten: 3
    Letzter Beitrag: 29.06.2012, 18:20
  2. Software PWM geht mit AT90S2313 und mit ATtiny2313 nicht???
    Von TobiasBlome im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 1
    Letzter Beitrag: 23.10.2006, 21:21
  3. Antworten: 7
    Letzter Beitrag: 22.02.2005, 18:15
  4. [ERLEDIGT] PWM für Servo mit eingebautem PWM gen. (Atmel 2313)
    Von Philipp_c im Forum AVR Hardwarethemen
    Antworten: 11
    Letzter Beitrag: 29.09.2004, 01:45
  5. [ERLEDIGT] DC-Motorregler mit 1,8kHz PWM mit dem Attiny15L. Wie?
    Von Andi170778 im Forum Elektronik
    Antworten: 5
    Letzter Beitrag: 08.04.2004, 10:44

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •