Electronic Assembly DIP204-LCD mit BASCOM

Testausgaben EA DIP204-LCD

Richtig handlich sind sie ja, die vierzeiligen LC-Displays von Electronic Assembly, z.B. bei reichelt.de zu haben. Sie kommen ohne ausladende Platinen aus und lassen sich so gut in Frontplatten flacher Gehäuse unterbringen. Soweit die Vorteile. Dafür nimmt man den höheren Preis schon mal in Kauf. Enger wird es aber beim Betrieb unter BASCOM. Voll kompatibel mit dem von BASCOM standardmäßig unterstützten HD44780-Controller sind diese LCD nicht.

Electronic Assembly gibt in [1] die für BASCOM notwendigen Änderungen (einschließlich Schreibfehler) an der Standardkonfigurierung im 4-Bit-Modus an.

Config Lcdpin = Pin , Db4 = Portb.0 , Db5 = Portb.1 , Db6 = Portb.2 , Db7 = Portb.3 , E = Portb.5 , Rs = Portb.4
Config Lcdbus = 4
Config Lcd = 20 * 4a , Chipset = Ks077

Die blau gekennzeichnete dritte Zeile ist anders als im Standard (Config Lcd = 20 * 4). Wenn's mehr nicht ist, dann mal los...

Zu früh gefreut. Es braucht schon noch etwas mehr, wie sich bei den Versuchen mit dem neuen Antennentuner zeigte. Hier zauberte das Display im Abstand von ca. 30 sec. eine Kopie der ersten, dann der zweiten Zeile in die vierte Zeile. Die Anzeige wurde von Timer-Interrupts für Taster und Drehencoder getriggert. Im Programm wurde die vierte Zeile überhaupt noch nicht angesprochen. Im Internet wurde ich dann fündig: Es ist noch eine spezielle Initialisierung des LCD notwendig, z.B. in [2] liebevoll beschrieben. Die hat es gebracht. Nachfolgend die wesentlichen Codeschnipsel aus der ATU-Software dazu.

$regfile = "m32def.dat"                           'ATMega32
$crystal = 16000000                               'Crystal 16,0 MHz
$hwstack = 100
$swstack = 100
$framesize = 100

Declare Sub LCDInit
Declare Sub LCDWrite(byVal bytChar As Byte)

'Configure PortB (LCD) ========================================================
'Special 20x4 Text LCD EA DIP204-4 LCD with KS00783 controller
LCD_D4 Alias PortB.3
LCD_D5 Alias PortB.5
LCD_D6 Alias PortB.4
LCD_D7 Alias PortB.2
LCD_E Alias PortB.1
LCD_RS Alias PortB.0
Config Lcdpin = Pin , Db7 = LCD_D7 , Db6 = LCD_D6 , Db5 = LCD_D5 , Db4 = LCD_D4 , E = LCD_E , Rs = LCD_RS
Config Lcdbus = 4
Config Lcd = 20 * 4A , Chipset = KS077

Call LCDInit                                      'Special init for DIP204-LCD
Cls
Cursor Off
Locate 1 , 1
LCD "Hello world ..."
Locate 2, 1
LCD "... hello again ..."
Locate 3, 1
LCD "Nobody answering?"
Locate 4, 1
LCD "Bye bye for now..."

'==============================================================================
Sub LCDInit
   'Special Init for EA DIP204-LCD

   Call LCDWrite(&B00101100)
   Call LCDWrite(&B00001001)
   Call LCDWrite(&B00101000)
   Call LCDWrite(&B00000110)
   Call LCDWrite(&B00001100)

End Sub

'==============================================================================
Sub LCDWrite(byVal bytChar As Byte)
   'Write initialization character bytChar to EA DIP204-LCD

   If bytChar.4 = 1 Then LCD_D4 = 1 Else LCD_D4 = 0       'Set high nibble
   If bytChar.5 = 1 Then LCD_D5 = 1 Else LCD_D5 = 0
   If bytChar.6 = 1 Then LCD_D6 = 1 Else LCD_D6 = 0
   If bytChar.7 = 1 Then LCD_D7 = 1 Else LCD_D7 = 0
   LCD_E = 1                                              'Send high nibble
   Waitms 1
   LCD_E = 0
   Waitms 1

   If bytChar.0 = 1 Then LCD_D4 = 1 Else LCD_D4 = 0       'Set low nibble
   If bytChar.1 = 1 Then LCD_D5 = 1 Else LCD_D5 = 0
   If bytChar.2 = 1 Then LCD_D6 = 1 Else LCD_D6 = 0
   If bytChar.3 = 1 Then LCD_D7 = 1 Else LCD_D7 = 0
   LCD_E = 1                                              'Send low nibble
   Waitms 1
   LCD_E = 0
   Waitms 1

End Sub

End

Die Sub LCDInit ist nicht mit dem BASCOM-Standard "Initlcd" zu verwechseln.

In Sub LCDWrite werden die einzelnen LCD-Eingänge / Controller-Pins angesprochen, z.B. "LCD_D4", in "Config LCDPin..." an PortB.3 gelegt. Praktisch ist es, hierfür Alias-Namen zu setzen, z.B. mit " LCD_D4 Alias PortB.3". Anschlussänderungen müssen dann nur noch an einer Stelle, im Alias-Statement, korrigiert werden.

Damit funktionierte das DIP204 wieder wie ein herkömmliches LCD mit Standard-Controller. Exotische ASCII-Zeichen wurden allerdings nicht ausprobiert, siehe dazu [2].

Referenzen
[1] http://www.lcd-module.de/FAQs/dip-serie/tmega/-attiny.html
[2] http://crycode.de/avr/allg/30-anschluss-eines-text-lcd

Einordung: