Op deze pagina ...
De nu volgende serie pagina's gaan over de Parallax
(OEM) Basic Stamp II microcontroller.
Aansturen van Mitsubishi M50530 gebaseerde
LCD display's.
Tip: voor Hitachi
44780 gebaseerde LCD zie het Optrex
DMC2034 artikel.
In dit artikel zal ik proberen uit te leggen hoe
je een LCD display met de (OEM) Basic Stamp II aan kunt sturen,
gebaseerd
op een oud LCD scherm uit een Ericsson telefoon (in dit geval
de Optrex DMC-50652N of de Seiko/IIS C456002A)
of eigenlijk elke
Mitsubishi 50530 gebaseerde LCD.
Foto's van het LCD
in actie kun je hier bekijken.
De gebruikte LCD's zijn van het type OPTREX DMC50652N
welke 3 x 40 (3 lijnen, 40 karakters) hebben.
Merk op: delen van deze gegevens zijn gebaseerd op
informatie die ik van Peter Pitzeier heb. Hij
kreeg dit al voor elkaar met een BasicStamp 1.
Vergeet niet de verantwoordelijkheidsverklaring
te lezen!
Merk op: De voorbeelden kunnen HIER gedownload
worden. |
|
Overzicht
- Hoe verbind ik het LCD display
met mijn OEM Basic Stamp 2
- Aangepaste voeding maken
- Handige BasicStamp2 instructies;
voorbeeld 1, tekst op het scherm
- Handige BasicStamp2 instructies;
voorbeeld 2, lopende balk
- Oorspronkelijke BasicStamp1 code
Hoe verbind
ik het LCD met de Basic Stamp II
Hieronder zie je hoe je dat moet doen. Ik heb daarvoor
een tabel gemaakt.
Maak de volgende verbindingen:
1
|
DB7 (databit 7) |
P7 |
2
|
DB6 (databit 6) |
P6 |
3
|
DB5 (databit 5) |
P5 |
4
|
DB4 (databit 4) |
P4 |
5
|
EX (Execute) |
P3 |
6
|
R/W (Read/Write) |
P2 |
7
|
I/OC1 (IO Control 1) |
P1 |
8
|
I/OC2 (IO Control 2) |
P0 |
9
|
VLCD (LCD power) |
+3 ... +12V (zie schema) |
10
|
VSS (GND) |
Vss (= Aarde) |
11
|
Vdd (logic power) |
Vdd (= gelijkspanning +5V) |
12
|
niet aangesloten |
- |
Stroomvoorziening
Voor pin 9 van het LCD zul je een
stukje electronica moeten bouwen om het juiste voltage af te stellen
wil het
display iets
zichtbaar
weergeven!
Gemiddeld is op pin 9 een voltage van rond de +11 Volt nodig. We bouwen
daarvoor een uiterst simpele schakeling, die meteen functioneerd als
contrast regeling.
Deze schakeling kan meteen gebruikt worden voor de
voeding van de Basic Stamp (1 of 2). Hiervoor sluit je de Vss (aarde)
en VDD (+5V) aan op de betreffende pinnen van de BAsicStamp.
Benodigde onderdelen:
1
|
7805 spanningsregelaar |
1
|
Regelbare weerstand (potentiometer) van
10 KOhm |
1
|
gelijkspanningsvoeding van
rond de 8 tot 15 Volt |
Schema:
Merk op: de pin out is gebaseerd op de
gegevens die ik van Peter Pitzeier heb.
Besturen -
Tekst sturen
OK, het display zit nu aan onze Basic Stamp 2. Hoe besturen
we nu de parallel aangestuurde lijnen naar het LCD scherm met maar 6 lijnen?
Het antwoord is eigenlijk eenvoudig:
het LCD scherm kan met 8- of 4-bits aangestuurd worden. 4-bit mode werkt
hetzelfde als de 8-bit mode mode, met het verschil dat we de 8-bits in
2 stappen van 4-bits versturen. Eerst sturen de 4 hoge bits, dan de 4
lage bits. Zie het Optrex DMC2034
artikel voor meer details.
Handige
Instructies, voorbeeld 1
Het sturen van instructies is eigenlijk hetzelfde als
het sturen van een karakter met als verschil dat we nu enkele stuur
pinnen (E, IOC1, IOC2) anders moeten instellen. Om je de ellende te besparen
heb ik daarvoor een stukje code geschreven die je daarbij helpt.
Hiervoor dus een aantal handig GOSUB routines:
LCD_Init |
GOSUB LCD_Init |
Initialisatie van het display. |
LCD_WriteInstr |
TheData = %xxxxxxxx
GOSUB LCD_WriteInstr
|
Schrijven van een stuur instructie. De instructie is een 8 bit,
binaire code.
Definieer TheData als VAR byte. |
LCD_WriteChar |
TheChar = "A"
GOSUB LCD_WriteChar |
Stuur een karakter naar het LCD dislay voor weergave.
Definieer TheChar als VAR byte. |
LCD_SetFunction |
GOSUB LCD_SetFunction |
Instellen parameters voor communicatie mode, character font, etc. |
LCD_ClearHome |
GOSUB LCD_ClearHome |
Maak LCD scherm leeg en plaats cursor in de hoek, links boven |
LCD_SetDisplay |
GOSUB LCD_SetDisplay |
Cursor mode (knipper, underline, etc). |
LCD_Entry |
GOSUB LCD_Entry |
Definieer cursor richting |
LCD_CursorXY |
TheCursorX = X
TheCursorY = Y
GOSUB LCD_CursorXY |
Verplaats de cursor naar regel X (0, 1 of 2) en kolom Y (0 ...
39).
Definieer TheCursorX en TheCursorY als
VAR byte. |
LCD_CursorHome |
GOSUB LCD_CursorHome |
Idem als LCD_ClearHome, maar dan zonder de inhoud van het scherm
te wissen. |
Merk op: Voor je bepaalde
functies gaat gebruiken moet je dus wel een aantal variabelen definieren
(indien deze door
een functie
gebruikt
word) zoals aangegeven in bovenstaande tabel.
Deze routines (in het hierna volgende voorbeeld gebruik
ik ze pas allemaal) gebruik ik in onderstaande programma. Het programma
geeft een eenvoudig stukje voorgedefineerde tekst weer;
'{$STAMP BS2}
'{$PBASIC 2.0}
' OPTREX DMC50625N LCD display controle routines
' (C) 2003 Hans Luyten
' Many thanks to Peter Pitzeier ' Variables
TheData VAR byte ' Variable for LCD data/char
TheChar VAR byte ' Variable for sending characters to LCD
' Data
DATA "Welcome to Hansies OPTREX DMC50625N test"
DATA "The LCD is connected to a BasicStamp II!"
DATA "-= Enjoy the BS2 code for LCD control =-"
Main: GOSUB LCD_Init
GOSUB_ClearHome
FOR b2 = 0 TO 119
READ b2, TheChar
GOSUB LCD_WriteChar
NEXT
END
LCD_Init: ' Initialize LCD display
GOSUB LCD_SetFunction
GOSUB LCD_ClearHome
GOSUB LCD_SetDisplay
GOSUB LCD_SetEntry
RETURN
LCD_WriteInstr: ' Write LCD instruction (TheCode) and LCD Data (TheData)
Dirs = %11111111
OutB = TheData.HIGHNIB
OutA = %0000
pulsout 3, 1
OutB = TheData.LOWNIB
pulsout 3, 1
RETURN
LCD_WriteChar: ' Write character to LCD display
Dirs = %11111111
OutB = TheChar.HIGHNIB
OutA = %0001
pulsout 3, 1
OutB = TheChar.LOWNIB
pulsout 3, 1
RETURN
LCD_SetFunction:' SF: Nibble mode, 5x7 font, 4x40 chars
TheData = %11011011
GOSUB LCD_WriteInstr
RETURN
LCD_ClearHome: ' CH: Clear screen, cursor home
TheData = %00000001
GOSUB LCD_WriteInstr
RETURN
LCD_SetDisplay: ' SD: Display, Cursor, Underline, Blink: ON
TheData = %00111111
GOSUB LCD_WriteInstr
RETURN
LCD_SetEntry: ' SE: Cursor direction
TheData = %01011000
GOSUB LCD_WriteInstr
RETURN
|
Handige instructies, voorbeeld 2
In het volgende voorbeeld, heb ik alle beschreven functies
gebruikt. Het programma geeft tekst weer en tekend daaronder een balkje.
Dit balkje wordt daarna gevuld, en loopt weer langzaam leeg in een loop;
'{$STAMP BS2}
'{$PBASIC 2.0}
' OPTREX DMC50625N LCD display controle routines
' (C) 2003 Hans Luyten
' Many thanks to Peter Pitzeier ' Variables
TheData VAR byte ' Variable for LCD data/char
TheChar VAR byte ' Variable for sending characters to LCD
TheCursorX VAR byte ' Move cursor X (column) position
TheCursorY VAR byte ' Move cursor Y (line) position
' Data
DATA "Welcome to Hansies OPTREX DMC50625N test"
DATA "The LCD is connected to a BasicStamp II!"
DATA "BAR/GAUGE: ",$88,$97,$97,$97,$97,$97,$97,$97,$97,$97,$97,$97,$97
DATA $97,$97,$97,$97,$97,$97,$97,$97,$97,$97,$97,$97,$97,$97,$97,$89
Main: GOSUB LCD_Init
GOSUB_ClearHome
FOR b2 = 0 TO 119
READ b2, TheChar
GOSUB LCD_WriteChar
NEXT
Gauge: FOR b2 = 11 to 39
TheCursorX = b2
TheCursorY = 2
GOSUB LCD_CursorXY
TheChar = $9B
GOSUB LCD_WriteChar
NEXT TheCursorX = 39
TheCursorY = 2
GOSUB LCD_CursorXY
TheChar = $89
GOSUB LCD_WriteChar
FOR b2 = 38 to 12
TheCursorX = b2
TheCursorY = 2
GOSUB LCD_CursorXY
TheChar = $97
GOSUB LCD_WriteChar
NEXT
TheCursorX = 11
TheCursorY = 2
GOSUB LCD_CursorXY
TheChar = $88
GOSUB LCD_WriteChar GOTO Gauge
END
LCD_Init: ' Initialize LCD display
GOSUB LCD_SetFunction
GOSUB LCD_ClearHome
GOSUB LCD_SetDisplay
GOSUB LCD_SetEntry
RETURN
LCD_WriteInstr: ' Write LCD instruction (TheCode) and LCD Data (TheData)
Dirs = %11111111
OutB = TheData.HIGHNIB
OutA = %0000
pulsout 3, 1
OutB = TheData.LOWNIB
pulsout 3, 1
RETURN
LCD_WriteChar: ' Write character to LCD display
Dirs = %11111111
OutB = TheChar.HIGHNIB
OutA = %0001
pulsout 3, 1
OutB = TheChar.LOWNIB
pulsout 3, 1
RETURN
LCD_SetFunction:' SF: Nibble mode, 5x7 font, 4x40 chars
TheData = %11011011
GOSUB LCD_WriteInstr
RETURN
LCD_ClearHome: ' CH: Clear screen, cursor home
TheData = %00000001
GOSUB LCD_WriteInstr
RETURN
LCD_SetDisplay: ' SD: Display, Cursor, Underline, Blink: ON
TheData = %00111111
GOSUB LCD_WriteInstr
RETURN
LCD_SetEntry: ' SE: Cursor direction
TheData = %01011000
GOSUB LCD_WriteInstr
RETURN LCD_CursorHome: 'MH: Move cursor to home position
TheData = %00000011
GOSUB LCD_WriteInstr
RETURN LCD_CursorXY: ' MA: Move cursor to X,Y
' (Y=line: 0 to 1, X=Column: 0 to 39)
GOSUB LCD_CursorHome
FOR b1 = 1 TO (TheCursorY*40)+TheCursorX
TheData = %00011000
GOSUB LCD_WriteInstr
NEXT
RETURN |
De oorspronkelijke BasicStamp1 code
Deze pagina zou niet compleet zijn zonder de oorspronkelijke
BasicStamp 1 code van Peter Pitzeier;
'{$STAMP BS1}
'Copyright Peter Pitzeier!
eeprom 00, (" OPTREX DMC-50625N ") eeprom 40, (" MITSUBISHI M50530 DOT MATRIX LIQUID ") eeprom 80, (" CRYSTAL DISPLAY CONTROLLER-DRIVER ") start:
' SF instruction (Set Function)
' I/O = 4 bit mode
' FONT = 8
' 4 line display DT0=0, DT1=1
' 4 line * 40 words RA0=1, RA1=1
dirs = %11111111
pins = %11010000
pulsout 3, 1
pins = %10110000
pulsout 3, 1
' CH instruction (Clear Home)
dirs = %11111111
pins = %00000000
pulsout 3, 1
pins = %00010000
pulsout 3, 1
pause 1
' SD instruction (Set Display)
' DSP on
' CSR on
' UND on
' CSR blink
' CHR blink
dirs = %11111111
pins = %00110000
pulsout 3, 1
pins = %11110000
pulsout 3, 1
' SE instruction (Set Entry)
' CSR D/I increment
' CSR CONDITION W
dirs = %11111111
pins = %01010000
pulsout 3, 1
pins = %10000000
pulsout 3, 1
REM dirs=%00001111:low 0:low 1:high 2:pulsout 3,1:b2=pins:pulsout
3,1: b3=pins:low 2:debug %b2,%b3
main:
' CH instruction (Clear Home)
dirs = %11111111
pins = %00000000
pulsout 3, 1
pins = %00010000
pulsout 3, 1
FOR b2 = 0 TO 119
READ b2, b4
b3=b4 & %11110000
b3=b3 | %00000001
dirs = %11111111
pins = b3
pulsout 3, 1
b3=b4 & %00001111
b3 = b3 + b3
b3 = b3 + b3
b3 = b3 + b3
b3 = b3 + b3
b3=b3 | 1
pins = b3
pulsout 3, 1
NEXT b2
END
GOTO main
|
|