Hallo,

Ik heb hier verschillende 4 regels x 40 karakters LCD-displays volgens:

http://www.uploadarchief.net/files/download/dsc00099-800.jpg

en

http://www.uploadarchief.net/files/download/dsc00100-800.jpg

Aangesloten aan een PIC16f628A.

Datasheet LCD:

http://www.optrex.com/SiteImages/PartList/DRAWING/ue_30657.pdf

en volgens de cursus van Frits K: http://www.picbasic.nl/

Probleem is dat ik ofwel regel 1 en 2 kan aansturen via pin 9 van het LCD ( E1 ENABLE CLOCK 1 )

Ofwel regels 3 en 4 via pin 15 van het LCD (E2 ENABLE CLOCK 2)

Maar niet de 4 regels tegelijk.

Ik probeer via instrukties:

DECLARE LCD_LINES 4

en/of

DECLARE LCD_ENPIN PORTB.1

Waarbij PORTB.1 naar pin 15 van het LCD gaat.

Krijg de 4 regels echter niet tegelijk op het scherm.

Weet iemand een oplossing hievoor?

Alvast bedankt. Looitje

Meestal horen regels 1 & 3 en 2 & 4 bij elkaar.

Een 40x4 LCD heeft TWEE HD44780(-compatibele) controllers, vandaar ook de twee enable lijnen, één voor elke 44780.
Vermits de 44780 maar 80 bytes RAM kan adresseren kan hij ook maar 80 karakters aansturen - dus max 20x4 of 40x2).

De twee 44780's werken onafhankelijk van elkaar, je moet het 40x4 LCD dus zien als twee gestapelde 40x2 LCD's: regel 1 & 2 worden bestuurd door controller1, regel 3 & 4 door controller2.
Zodoende heb je ook twee keer 80bytes displaygeheugen, te selecteren via E1 en E2.

De rest is niet moeilijk te raden.

Ik stuur het display via een PIC 16F628A.

Geprogrameerd met Proton picbasic.

Geraak er met de 2 enable lijnen toch niet uit.

Volgens mij is het standaard PRINT commando alleen geschikt voor eeb display met maar 1 HD44780 chip.

Je zou een trucje kunnen doen, maar dat kost je 2 poorten extra (tenzij iemand anders een betere oplossing heeft).
Sluit de 2 enables van het display apart aan op PORTB.2 (de standaard ENable pin) maar let op; beide enables via een weerstand van zeg 1k ofzo.

Daarna sluit je de beide enables van het display nog eens rechtstreeks aan op een andere uitgangspoort.
Met die poorten is dan de keus te maken met welke HD44780 chip van het display je wilt communiceren.
(Dit zou ook moeten werken voor mensen die gebruik (willen) maken van 2 afzonderlijke, losse displays.

Heb het zelf nooit bij de hand gehad of getest, maar zoiets moet je eens proberen.

www.picbasic.nl/info_displaydefault.htm

@ Frits,
Enable 1 aangesloten aan PORTB.2 via weerstand 1K
Enable 2 aangesloten aan PORTB.2 via weerstand 1K

Enable 1 aangesloten aan PORTB.1
Enable 2 aangesloten aan PORTB.0

Ik voer volgende code in:

Device 16F628A ;Gebruik een 16F628A type
Config INTRC_OSC_NOCLKOUT, WDT_OFF, PWRTE_ON, LVP_OFF, MCLRE_OFF

DelayMS 500 ;LCD stabilisering
Declare LCD_LINES 4 ;4 regelig display
Cls ;Wis eventuele oude tekst uit

Declare LCD_ENPIN = PORTB.1 ;De EN1 aansluiting moet nu aan PORTB.1

Print At 1, 1, "Dit is een display test van 4 maal 40 ka" ;Zet tekst op regel 1

Print At 2, 1, "Echt heel mooi maar mischien te moeilijk" ;Zet tekst op regel 2

Declare LCD_ENPIN = PORTB.0 ;De EN2 aansluiting moet nu aan PORTB.0

Print At 3, 1, "Deze tekst zou op regel 3 moeten komen" ;Zet tekst op regel 3

Print At 4, 1, "Deze tekst zou op regel 4 moeten komen" ;Zet tekst op regel 4

End ;Einde programma

Krijg na compileren warning:
Declare 'LCD_ENPIN'Has already been used in the program.The declaration will be ignored! (oefening2.bas)
Krijg wel tekst op de 4 regels maar het is de tekst van regels 3 en 4.Hetzij verschoven.
Enig idee?
Alvast bedankt

Dit gaat niet werken zo, wat je moet doen is:

Device 16F628A ;Gebruik een 16F628A type
Config INTRC_OSC_NOCLKOUT, WDT_OFF, PWRTE_ON, LVP_OFF, MCLRE_OFF 
LCD_ENPIN = PORTB.2
Declare LCD_LINES = 2
DelayMS 500
CLS
PORTB.0 = 1
PORTB.1 = 0
Print At 1, 1, "Dit is een display test van 4 maal 40 ka" ;Zet tekst op regel 1 
Print At 2, 1, "Echt heel mooi maar mischien te moeilijk" ;Zet tekst op regel 2 
PORTB.0 = 0
PORTB.1 = 1
Print At 1, 1, "Deze tekst zou op regel 3 moeten komen" ;Zet tekst op regel 3 
Print At 2, 1, "Deze tekst zou op regel 4 moeten komen" ;Zet tekst op regel 4
END

Heb het niet getest, maar zoiets moet het worden denk ik (dit is wat Frits bedoeld, dacht ik)

@marcob
Bedankt voor uw meedenken.

Op regel 1 komt de tekst van regel 3 te staan.
Op regel 2 komt de tekst van regel 4 te staan.
Op regels 3 en 4 komt de juiste tekst.
Dus jammer maar helaas toch nog niet juist.
Nog een ideetje?

Met dank aan Frits en Marcob.
Ik heb het 4-regelig display kunnen aansturen mits gebruikmaking van 2 externe and-poorten (74LS08)
en volgende code:
Device 16F628A ;Gebruik een 16F628A type
Config INTRC_OSC_NOCLKOUT, WDT_OFF, PWRTE_ON, LVP_OFF, MCLRE_OFF
ALL_DIGITAL TRUE ;Alle ingangen digitaal

DelayMS 500 ;initialisatie display
Opnieuw:
High PORTB.0 ;enable 1 sturen
High PORTB.1 ;enable 2 sturen
Cls ;display wissen
DelayMS 1000 ;1000 milliseconden = 1 seconde
High PORTB.0 ;enable 1 sturen
Low PORTB.1 ;enable 2 blokkeren
Print At 1, 1, "Dit is een display van 4 x 40 karakters." ;Zet deze tekst op regel 1
DelayMS 1000 ;1000 milliseconden = 1 seconde
Print At 2, 1, "Echt heel mooi maar geen gemakkelijke." ;Zet deze tekst op regel 2
DelayMS 1000 ;1000 milliseconden = 1 seconde

Low PORTB.0 ;enable 1 blokkeren
High PORTB.1 ;enable 2 sturen

Print At 1, 1, "Deze tekst moet op regel 3 komen staan." ;Zet deze tekst op regel 3
DelayMS 1000 ;1000 milliseconden = 1 seconde
Print At 2, 1, "En deze tekst moet dan op regel 4 komen." ;Zet deze tekst op regel 4
DelayMS 3000 ;3000 milliseconden = 1 seconde

GoTo Opnieuw

End

De enable 1 is aangesloten op de uitgang van and-poort 1
met ingangen portb.1 en portb.2
De enable 2 is aangesloten op de uitgang van and-poort 2
met ingangen portb.0 en portb.2
Jammer van deze oplossing maar ik heb veel geprobeerd en vind geen simpelere.
Of iemand een beter idee?

Ik heb eens gezocht:

Als je Engels kent, kijk op het picbasic forum:
www.picbasic.org/forum/showthread.php?t=4590&highlight=4x40

@ Frits,

Heb uw info http://www.picbasic.org/forum/showthread.php?t=4590&highlight=4x40 gelezen en de and-poort met 2 weerstanden en 2 diodes getest met mijn vorige code.
Werkt prima.
Zo ga ik het houden.
Bedankt allen.