LCD DOG-M16x3 Display am ATmega128 unter BASCOM-AVR

Markus

BASCOM-Experte
11. Jan. 2008
1.190
6
38
Lonsee
Sprachen
Hallo zusammen,

mit folgendem Beispiel habe ich ein DOG-M LCD-Display 16x3 von Electronic Assembly inkl. Hintergrundbeleuchtung und Kontrasteinstellung auf einem ATmega128 in Betrieb genommen.

Features:
- Betriebspannung 5V
- PWM-Steuerung der Hintergrundbeleuchtung
- Kontrasteinstellung des Displays
- Konfiguration
- Basisroutinen zur Ausgabe von Texten in Zeile 1, 2, 3

Die Inbetriebnahme erfolgte auf einem STK500 + STK501 mit Prototypen-HW (Lochraster-Aufbau) unter BASCOM-AVR.

Den Code und entsprechende Bilder gibts im Anhang.

Grüße,
Markus
 

Anhänge

  • LCD.jpg
    LCD.jpg
    17,6 KB · Aufrufe: 299
  • LCD-Display.zip
    3,6 KB · Aufrufe: 265
  • LCD-Ansteuerung.jpg
    LCD-Ansteuerung.jpg
    30,9 KB · Aufrufe: 269
Hallo Markus,

:eek: deine Bascom-AVR-Beispiele sind aber jetzt nicht alle am Wochenende entstanden ... oder?! ;) (habe natürlich die Datumsangaben im Sourcecode gesehen)

Wenn ich mir das alles so ansehe, bekomme ich richtig Lust einen Wintergarten zu bauen :)

Nochmals Dankeschön für die sehr schönen Bascom-AVR-Projekte, diese bereichern unser Forum ungemein!

Grüsse,
Dirk
 
Hallo Dirk,

neee, :D , natürlich sind meine Themen die ich aktuell zusammenfasse und im Forum einstelle nicht alle jetzt am Wochenende entstanden.

Bin schon seit ca. einem halben Jahr am Entwickeln der einzelnen Teilkomponenten. Möchte einfach wissen ob sie funktionieren bevor ich sie zu einer kompletten Steuerung zusammenbaue.
Jeder Teil ist dabei so in sich abgeschlossen das sich leicht einzelne Beiträge daraus machen lassen. Die kann ich dann einstellen.
Aktuell bereite ich das auf was ich schon habe. Haben tue ich nimmer viel. Habe noch eine 230V Dimmer für eine Lampenzeile in Verbindung mit der Relais-Ansteuerung für meine Beschattungsmotoren realisiert. Besonders der Dimmer war spannend und den stelle ich auch noch im Forum vor. OK?

Als nächstes versuche ich mein Schalenkreuzanemometer in Betrieb zu nehmen mit dem ich die aktuelle Windgeschwindigkeit erfassen und berechnen möchte. Damit will ich dann die Beschattung automatisch auf fahren wenns zu viel Wind gibt.
Mal sehen auf welche Ideen ich noch komme.

Ich fand nur das ganze AVR-Praxis Forum ganz spannend und deswegen habe ich mich entschieden meine Themen hier bereitzustellen. Vielleicht bekommen dann auch andere Leute Lust auf "Basteleien" und auf diesem Weg können wir uns ja gegenseitig helfen.

Ach, etwas fällt mir auch noch ein. :eek:
Für Die Stromversorgung habe ich mir selbst ein kombiniertes 5V + 12V Schaltnetzteil designed das ich auf jedem Kanal stabil mit 1A belasten kann. Wäre das noch ein Thema so als Randerscheinung? Damit versorge ich in der Wintergartensteuerung meinen ATmega mit der gesamten Peripherie. Hierzu gibt es bereits schon ein komplett geroutetes Board mit Eagle. Das Ding ist faktisch fertig. Kannst es Dir überlegen mir sagen wo ich es einstellen soll.

Grüße,
Markus
 
Hallo Markus,

nachdem es leider heute massive Probleme mit dem AVR-PRAXiS-Server gab, schreibe ich nocheinmal meine Antwort, da diese verloren gegangen ist.

Wenn du möchtest, kannst du natürlich die Schaltreglerplatine veröffentlichen. Ich erstelle heute Abend ein Hauptforum "Elektronik allgemein" (oder ähnlich), dort würde das Thema gut reinpassen.

Grüße,
Dirk
 
Hi,

mal kurz diesen Beitrag wieder aufwühlen.

Gibt es nicht eine Möglichkeit den Kontrast anders einzustellen?

Muss zugeben das ich durch die Routinen von Markus zu einstellen des Kontrastes nicht ganz durchblicke. :eek:

Hat Bascom vielleicht nicht schon den Befehl eingebaut. (Lcdcontrast?)

Danke schonmal im Vorraus.

Gruss Alex
 
Hi,

mir ist nicht bekannt, dass es eine andere Möglichkeit gibt den Kontrast bei diesem von mir verwendeten LCD-Display einzustellen. Aber ich lerne gerne dazu. Wenn es jemanden gibt der eine einfachere, kürzere und schnellere Lösung hat sollte sie gerne bitte hier sofort posten :p

Ansonsten kann ich gerne bei Bedarf mal meine paar Zeilen Code erklären. Da ich die nächsten 2 Wochen im Urlaub bin würde ich an dieser Stelle mal (Thomas) Knickohr anpingen. Er kann Dir sicher a bissle was dazu erzählen. Ansonsten schreibe ich was nach meinem Urlaub dazu. OK?

Grüße,
Markus
 
Hallo,

vielleicht kann ich hier schon mal weiterhelfen...

der Programmteil von Markus, der für die Kontrasteinstellung zuständig ist, ist sehr gut erläutert.

Verantwortlich für die Kontrasteinstellung sind hier 6Bit (C0 bis C5) in zwei Registern des LCD-Controllers (siehe Anhang). Auf diese Register hat man Zugriff im Instruction Set 1 (erweiterter Befehlssatz).

Markus geht hier folgendermaßen vor:
  1. Umschalten auf Instruction Set 1 (&B00101001 senden)
  2. Die niederwetigsten 4 Bits senden (&B0111xxxx, C0 bis C3)
  3. Die höherwertigen 2 Bits senden (&B010101xx, C4 und C5)
  4. Umschalten zurück auf Instruction Set 0 (&B00101000 senden)
Für den Registerzugriff wird die low-level-Routine _LCD_control genutzt.

Das Listing von Markus´ Kontrasteinstellung:
Code:
'------------------------------------------------------------------------------
' LCD - Gosub-Routine: Lcd_contrastset
' Routine berechnen neue Kontrastwerte und steuert direkt den
' Kontroller des Display an.
'------------------------------------------------------------------------------
Lcd_kontrastset:                                            ' Kontrasteinstellung Display

#if Lcd_testmodus
   Print "Enter Lcd_kontrastset" ; Kontrastwert
#endif

   ' Verarbeitung des Kontrastwertes für High-Byte und Low-Byte
   Tempvar_1 = Kontrastwert And &B00001111
   Tempvar_1 = Tempvar_1 + &B01110000

   Tempvar_2 = Kontrastwert
   Shift Tempvar_2 , Right , 4
   Tempvar_2 = Tempvar_2 And &B00000011
   Tempvar_2 = Tempvar_2 + &B01010100

   ' Instruction Table 1 einstellen [0,1]
   _temp1 = &B00101001
   !rCall _Lcd_control

   ' Tempvar_1 = &B0111xxxx für Kontrast Set Instruction Table 1 - Low Byte
   _temp1 = Tempvar_1
   !rCall _Lcd_control

   ' Temovar_2 = &B010101xx für Kontrast Set Instruction Table 1 - High Byte
   _temp1 = Tempvar_2
   !rCall _Lcd_control

   ' Zurückschalten auf Instruction Table 0 [0,0]
   _temp1 = &B00101000
   !rCall _Lcd_control
Return
'-- End Lcd_kontrastset -------------------------------------------------------
Grüße,
Dirk

@Markus: Ich wünsche Dir viel Spaß und gute Erholung im Urlaub! :D
 

Anhänge

  • dogm-1.png
    dogm-1.png
    24,2 KB · Aufrufe: 65
  • dogm-2.png
    dogm-2.png
    11,9 KB · Aufrufe: 38
Hallo

Inzwischen ist ja ein wenig Zeit seit dem letzten Beitrag vergangen. Für Leute , wie mich, die neu dazukommen aber vielleicht nicht ganz uninteressant, der Kontrastwert kann über:

Code:
Config Lcd = 16 * 3 , Chipset = Dogm163v5 , Contrast = 'Wert'

bei den Dog-M in Bascom eingestellt werden.

Sorry, wenn das schon woanders im Forum stehen sollte oder ein "alter Hut" ist.

Viele Grüße
 
Hallo

Ich nutze Version 1.11.9.3.

Ja als Binärwert, siehe z.B. Bilder. Drauf aufmerksam bin ich durch einen Thread im mikrocontroller-Forum (Link) geworden, da gab es einen Schreiber "bascom" als es um die Initialisierung vom Dog-M ging. Irgendwie war das aber keinem aufgefallen...

Ctr110.jpg


Ctr111100.jpg
 
Vielleicht war ja das das Problem. Binär - Dezimal.

Du schreibst also :

Config Lcd = 16 * 3 , Chipset = Dogm163v5 , Contrast = &B111100

oder muß man das so eingeben :

Config Lcd = 16 * 3 , Chipset = Dogm163v5 , Contrast = 111100

Thomas
 
Hallo

Letztere Variante, ohne &B.
Ich schau schon gerade nach der Librarie, da müsste es ja drin stehen.

EDIT:

Ich finde es leider nicht. In der Bascom Hilfe steht allerdings als Beispiel für die Initialisierung Contrast = &H702
 
Hallo,

ja das Beispiel habe ich auch gesehen. Würde aber dann allem widersprechen. Ist ja hexadezimal.

Komische Sache. Aber wenns das ist, dann haben wir ja "endlich" die Lösung. Das Contrast-Setting hat mich einige schlaflose Nächte und Support-eMails im MCS-Forum gekostet. So sind wir ja auf die komische Routine gekommen.

Thomas
 
Hallo

Naja, vor allem ist es so, wenn es binär wäre, müsste man ja zwischen 0 und 63 einen fließenden Unterschied sehen und das ist nicht so. Den MCS-Support hab ich auch schon angeschrieben, aber die haben mich auf's Datenblatt verwiesen.

Letztendlich wird man es nur rausfinden, wenn man die entsprechende Librarie findet, dort muss man es ja rauslesen können, was Bascom mit dem eingetragenen Wert macht. :rolleyes:
 
Kein fließender Übergang ?

Dann stimmt was nicht. Vielleicht wird der Wert ja doch dezimal geschrieben und Du hast nur zufällig mit Einsern und Nullen den richtigen Wertebereich gefunden.

In der langen Routine oben geht das wunderbar gleichmäßig.

So wie ich sehe, ist der Config LCD nicht reusable, kann also nur einmal ausgeführt werden. Kannst den Kontrast nur einmal am Anfang fest einstellen. Nicht gerade Sinn der Sache.

Die obige Routine macht das im Betrieb, so oft Du möchtest.

Thomas
 
Hmm, verstehe, das kann natürlich sein, dass ich da zufällig irgendwas getroffen habe. Das ist leider das, was ich am Bascom manchmal nicht mag, das einfach die Dokumentation fehlt...
 

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