Kontrast und Helligkeit von LCd per PWM (HD44780)

spelli

Neues Mitglied
12. Nov. 2011
68
0
0
Sprachen
Hallo,

ich arbeite mit dem Atmega128A Modul und möchte mittels des Timer3 (16 BIT) Helligkeit und Kontrast des 4x20 HD44780 LCD einstellen.

Hierzu ist an PORTE.3 an OC3A ein RC Glied und der Kontrast PIN VEE des LCDs angeschlossen. Das RC Glied habe ich hier her:
http://krumeltee.wordpress.com/2011/08/27/kontrast-fur-hd44780-lcd-displays-per-software-pwm-regeln/ (VCC= 5V)

Weiterhin ist an PORTE.4 an OC3B der GND PIN der LCD Beleuchtung angeschlossen.

Das LCD funktioniert und zeigt alles an. Es funktionierte insoweit, dass die LED BEleuchtung des LCD zu dimmen war.

Jetzt funktioniert das auch nicht mehr. Der Kontrast verändert isch überhaupt nicht.

In diesem Zusammenhang sind meine PWM Einstellungen ich glaube auch falsch...


Kann mir jmd. die Einstellungen für mein Vorhaben erläutern?

Hier der PWM-Code:

Code:
Config Timer3 = Pwm , Pwm = 8 , Prescale = 8 , Compare A Pwm = Clear Up

Porte.3 = Output
Porte.4 = Output

   Wait 1
   Compare3b = 0
   Wait 1
   Compare3b = 255

   Wait 1

   Compare3a = 0
   Wait 1
   Compare3a = 255


   Wait 1
 
mh wuerde agen das haste den falsche code erwischt, mit dem code compare3a = 0 und danach direkt wieder compare3a = 255 setzt du das backlight = 0% und danach direkt auf 255% , um das backlight zu dimmen, kannst du einfach so machen
compare3a = x

x ist dann deine helligkeit,.
x als variable kannst du dann z.B. mit 2 taster subs beeinflussen.

z.B. so
Code:
portx.x =input
portx2.x2 =input
Porte.3 = Output
Porte.4 = Output
dim dimmwert as word
portx.x alias taster1
portx2.x2 alias taster2

Config Timer3 = Pwm , Pwm = 8 , Prescale = 8 , Compare A Pwm = Clear Up

DO
Debounce Taster1 , 0 , On_taster1 , Sub
Debounce Taster2 , 0 , On_taster2 , Sub 
 
compare3a = dimmwert
LOOP

on_taster1:
dimmwert= dimmwert+5
return

on_taster2:
dimmwert= dimmwert-5
return

das wait kannste dann vergessen ,. bremst eh nur das Prog,.

der code brauchst du für 1PWm kanal,.
wenn du halt helligkeit und kontrast regeln möchtest brauchste das 2 mal,.
 
...der code brauchst du für 1PWm kanal,.
wenn du halt helligkeit und kontrast regeln möchtest brauchste das 2 mal,.
Jain...
Timer3 bietet ja hier 3 OutputCompareUnits (A/B/C). Man könnte also (mit derselben PWM-FRequenz) 3 Channels nutzen - also nur einmal Config Timer... (und eben auch nur einen Timer dafür verbraten - die LEDs sollten mit der nötigen Frequenz für den Kontrast (-> spellis Link) doch auch klarkommen, oder?)
Das Umschreiben der OCRnx-Register und das Behandeln der Taster muß dann natürlich zusätzlich mit rein, je Kanal - obwohl... da könnte man auch in die Hardware gehen in ASM... egal hier.
(Mir) noch unklar: Timer3 ist ja eigentlich ein 16bitter - wird der mittels "PWM=8" zum 8bitter (also 0xFF=TOP)?
Sorgt Bascom dann für die korrekte 0 im High-Byte der OCRnx? Oder wird das Highbyte dann gar nicht mehr verglichen, zum Match?
 
ja, dachte auch eher an den aufbau, das er diesen 2 mal braucht , einmal fuer die helligkeit und einmal fuer den kontrast ,.

also einmal compare3a =X (z.B. Helligkeit) und compare3b=y (z.B. Kontrast)
 
Hallo,

die Wait Befehle waren für mich nur zum Testen.

Welchen Wert genau gebe ich mit Compare aus?
 
compare ist der pwm wert , das verhältnis zwischen an und aus,.
rn-wissen.de gibts nen rel schlönen artikel, kannste ja mal anschauen,.
 
Hallo,

also das dimmen der LCD Hintergrundbeleuchtung funktioniert.

Der Kontrast macht mir Sorgen. So ist der Timer3 konfiguriert:

Code:
Config Timer3 = Pwm , Pwm = 8 , Compare A Pwm = Clear Up , Compare B Pwm = Clear Up , Prescale = 1

Ist es richtig, da Pwm = 8 -> 8 BIT Auflösung - der Timer3 ist ein 16 BIT Timer...

Komischerweise funktioneirt das Dimmen der Hintergrundbeleuchtung so mit 0 und 255 bzw. ON und OFF oder halt in den Schritten dazwischen!

Trage ich für
Code:
COMPARE3A = 0
ein, so messe ich am RC Glied (http://krumeltee.wordpress.com/2011/08/27/kontrast-fur-hd44780-lcd-displays-per-software-pwm-regeln/) bei "LCD" 0,123 V

mit dem Wert 125 messe ich 1,333 V
mit dem Wert 90 messe ich 0,995 V
mit dem Wert 30 messe ich 0,416 V
mit dem Wert 20 messe ich 0,316 V
mit dem Wert 1 messe ich 0,134 V

Also stelle ich fest, dass ich per PWM unterschiedliche Spannungen ausgeben kann.

Dann habe ich auch sowas hier probiert:

Code:
   Compare3a = 35
   Waitms 300
   Compare3a = 30
   Waitms 300
   Compare3a = 25
   Waitms 300
   Compare3a = 20
   Waitms 300
   Compare3a = 15
   Waitms 300
   Compare3a = 10
   Waitms 300
   Compare3a = 5
   Waitms 300
   Compare3a = 0
   Waitms 300

Ich kann aber einfach keine Veränderung des Kontrastes feststellen!?

Stimmt die Beschaltung, der Link oben, nicht?

Wenn ich Config Timer3 mache und dann Pwm = 8 sage (was ja bei der Hintergrundbeleuchtung funktioniert) passt das ja auch eigentlich nicht
mit dem eigentlichen 16 BIT Timer3 zusammen?

Danke,
Christoph
 
16bit => 2^16 = 1023
8bit => 2^8 = 255

compare = 0 = 0V
compare= 255 = 5V (oder 3V )

btw so feine augen hast du auch nich :D

versuch mal compare3a = 0
wait 2
compare3a = 255
wait2
compare3a =120
 
16bit => 2^16 = 1023
8bit => 2^8 = 255


Hallo Bonze!

Das verstehe ich jetzt aber nicht? :hmmmm:

Also bei mir sind 28 = 256 (= 8bit)
und 216 = 65536 (= 16bit)

10Bit, also 210 wären = 1024


Alles klar soweit? :wink:

Grüße,
Cassio
 
Dann messe ich

~1,3 Volt, dann ~0,3 Volt und dann ~2,6 Volt!

Die Spannungen sind nicht im Bereich von 0-0,5 Volt... Aber diesen vom LCD geforderten Bereich von 0-0,5 Volt konnte ich
ja während meiner Messreihe liefern...

Dann kann ja nur die Auflösung nicht stimmen, oder?
 
Aber ich habe ja nun Spannungen von 0,1 bis 0,5 Volt produzieren können!

Wo liegt der Fehler?

Christoph
 
Hallo Christoph!

Wie hast du die Spannung denn gemessen? :hmmmm:

Hast du ein digitales Scope zur Hand, um die Ausgangsspannung mal richtig zu überprüfen?
Ich meine, einmal direkt den PWM-Ausgang OHNE den Filter und einmal MIT Filter.

Grüße,
Cassio
 
Hallo Christoph!

Puh, dann wird es natürlich schwer etwas zu kontrollieren oder zu messen. :cool:

Hast du die Möglichkeit die Frequenz zu messen, wenn du die PWM auf 50/50 setzt?
Manche Multimeter bieten diese Funktion.

Nur interessenhalber...
Was zeigt dein Multimeter denn an, wenn du den Tiefpaß-Filter entfernst, das Ausgangssignal auf 50% (bei 8bit auf 128) setzt?
Zeigt es dann 2,5V an?

Mach das Gleiche auch mal bitte mit den PWM-Werten 64 und 192.


Grüße,
Cassio
 
Hallo,

ein Digitalmultimeter hat einen recht hohen Innenwiderstand. Das kann zu falschen Interpretationen führen. Leg mal nen 47kOhm Widerstand parallel zum Digitalmultimeter. Also sozusagen den Innenwiderstand von 10MOhm auf 47kOhm verringern. Dann miß die Spannung nochmal so wie bei dem mal wo es gepaßt hat. Ich laß mich überraschen was dann da rauskommt.

Für Messungen an PWM wäre da wohl ein analoges Multimeter ein wenig besser. Es samplet die Eingangsspannung nicht und der Zeiger mittelt die PWM-Frequenz raus. ;)

Gruß
Dino
 
Hier meine Messwerte:


Versorgungsspannung von Schaltregler 5 Volt, Conrad

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

COMPAREA = 192
mit Filter gemessen: 1,982 Volt
ohne Filter, direkt am AVR PIN: 3,83 Volt

COMPAREA = 128
mit Filter gemessen: 1,364 Volt
ohne Filter, direkt am AVR PIN: 2,560 Volt

COMPAREA = 64
mit Filter gemessen: 0,745 Volt
ohne Filter, direkt am AVR PIN: 1,288 Volt


COMPAREA = 128 UND 47 KOhm parallel zum Multimeter
ohne Filter, direkt am AVR PIN: 2,559 Volt
 
Mein Multimeter VC820 von Voltkraft kann ja doch Hz messen:

Also COM des Multimeters an GND und Hz an PIN des AVR direkt

COMPAREA = 128 -> 31,36 KHz
 
Hallo zusammen,

also die Werte stimmen doch eigentlich einigermaßen.

Am Ausgang des Filters ist die gemessene Spannung knapp halb so hoch wie die am Eingang gemessene Spannung. R3 kann man fast vernachlässigen (hier gibts einen kleinen positiven Offset). R1 teilt die Spannung durch 2, wenn ich mal R3 vernachlässige.

Man kann mit der Schaltung also eine Spannung von knapp über 0V bis knapp über 2,5V einstellen.

Gruß,
Dirk
 
Hallo!

Wie Dirk schon geschrieben hat....
Die Werte sind alle in Ordnung, sogar die Frequenz sollte nach dem verlinkten Beispiel mit knapp 32kHz stimmen.

Wo liegt denn nun das Problem?
Wo kamen die anderen Messwerte (ein paar Beiträge vorher) denn her?

Ich kann mir nicht vorstellen, dass dir die Spannung beim Anschluss des LCD zusammen bricht.
Kannst es ja mal mit einem 4k7 oder 10k Widerstand in Reihe zum LCD-Kontrastpin versuchen..... und nebenbei noch mal die Spannungen messen.


Grüße,
Cassio
 

Ü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)