Welkom bij WeetHet!


Managed Web Hosting by Liquid Web

Jouw IP adres:
54.226.25.246
     
 
Pagina printen
- kies Landscape
Zoeken in de
WeetHet pagina's
WeetHet is being updated! - Current articles will slowly move to www.tweaking4all.com
Voor uitstekende webhosting welke zowel betrouwbaar als betaalbaar is adviseren wij: LiquidWeb

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.

Parallax: Basic Stamp II

Overzicht

  1. Hoe verbind ik het LCD display met mijn OEM Basic Stamp 2
  2. Aangepaste voeding maken
  3. Handige BasicStamp2 instructies; voorbeeld 1, tekst op het scherm
  4. Handige BasicStamp2 instructies; voorbeeld 2, lopende balk
  5. 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.

Optrex DMC-50652N achterkant - de aansluitingen!

Maak de volgende verbindingen:

LCD Display pin LCD Functionaliteit OEM Basic Stamp 2 pin
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:

 

Stroomvoorziening voor de Optrex 50652N LCD displays

 

 

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:

Routine Call Toepassing
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

 

 

 

 


Je bent nu al op de nederlandstalige pagina's Click here to switch to the English pages