Circuit Digole pour afficheur LCD

GM39

Senior Member
Comme prévu voilà des tests du circuit Digole pour afficheur LCD en remplacement du circuit à base de PCF5474.
https://www.digole.com/index.php?productID=551
Pas de problème pour le remplacement du circuit.

Premier test avec la liaison série et l'instruction serout :
Code:
#PICAXE 28X2
#no_table

'LCD 20x4
'test avec serout
symbol tx=B.1

'*** test 8MHz 9600Bd ***

'*** test taille écran
serout tx,T9600_8,("CL")                                ;clear
for b0=1 to 80
    serout tx,T9600_8,("TTX",0)                        ;remplir avec des X (16x2 par defaut)
next b0
serout tx,T9600_8,("STCR",20,4,$80,$C0,$94,$D4)    ;config en 20x4
pause 1000                                                     ;NEW LCD:2004 s'affiche
serout tx,T9600_8,("CL")                                ;clear
for b0=1 to 80
    serout tx,T9600_8,("TTX",0)                        ;remplir avec des X
next b0
'*** config non volatile

'*** test retro éclairage
serout tx,T9600_8,("BL0")            ;eteindre
pause 1000
serout tx,T9600_8,("BL1")            ;allumer
pause 1000
serout tx,T9600_8,("BL",0)            ;eteindre
pause 1000
serout tx,T9600_8,("BL",1)            ;allumer
'*** les 2 solutions fonctionnent

'*** test reglage intensité
for b0=0 to 100
    serout tx,T9600_8,("BL",b0)
    serout tx,T9600_8,("TP",0,0,"TT",#b0,0)    ;position : lignes et colonnes commencent à 0
    pause 100
next b0
'*** pb avec 48 et 49, code ascii 0 et 1

'*** test curseur
serout tx,T9600_8,("CS0")            ;eteindre
pause 1000
serout tx,T9600_8,("CS1")            ;allumer
pause 1000
serout tx,T9600_8,("CS",0)            ;eteindre
pause 1000
serout tx,T9600_8,("CS",1)            ;allumer
'*** les 2 solutions fonctionnent

'*** test affichage config à la mst
serout tx,T9600_8,("DC0")            ;pas d'affichage après mst

serout tx,T9600_8,("DC1")            ;UART baud:9600 après mst

serout tx,T9600_8,("DC",0)            ;pas d'affichage après mst

serout tx,T9600_8,("DC",1)            ;UART baud:9600 après mst
'*** les 2 solutions fonctionnent

'*** test 64MHz 38400Bd ***
serout tx,T9600_8,("TP",0,0,"TTDEBUT TEST 38400",0)
serout tx,T9600_8,("SB38400",13,10)        ;config 38400Bd
setfreq em64
pause 800
serout tx,T38400_64,("CL")            ;clear
pause 8000
                                
for b0=1 to 80
    serout tx,T38400_64,("TTX",0)    ;remplir avec des X
next b0
pause 8000
serout tx,T38400_64,("TP",0,3,"TTFIN TEST 38400",0)
pause 8000

serout tx,T38400_64,("SB9600",13,10)        ;config 9600Bd
setfreq m8
pause 500
'serout tx,T9600_8,("TP",0,0)    ;élimine le bug
serout tx,T9600_8,("TP",0,0,"TTRETOUR A 9600",0)    ;positionnement pas pris en compte ?
serout tx,T9600_8,("TP",0,1,"TTRETOUR A 9600",0)    ;positionnement pris en compte
'*** problème de postionnement après changement de vitesse
 

GM39

Senior Member
Deuxième test avec la liaison série et l'instruction hserout :
Code:
#PICAXE 28X2
#no_table

'LCD 20x4
'test avec hserout

'*** test 8MHz 9600Bd ***
hsersetup B9600_8,16
pause 1000
hserout 0,("CL")    ;premier clear ignoré ?
hserout 0,("CL")
hserout 0,("TTTEST 9600 8MHz",0)
pause 1000

'*** test remplissage
hserout 0,("CL")                                ;clear
for b0=1 to 80
    hserout 0,("TTX",0)                        ;remplir avec des X
next b0
pause 1000

'*** test 8MHz 115200Bd ***
hserout 0,("CL")
hserout 0,("TTTEST 115200 8MHz",0)
hserout 0,("SB115200",13,10)                ;config à 115200Bd
hsersetup B115200_8,16
pause 1000

'*** test remplissage
hserout 0,("CL")                                ;clear
for b0=1 to 80                            
    hserout 0,("TTX",0)                        ;remplir avec des X
next b0
pause 1000
hserout 0,("TP",0,3,"TTFIN TEST 115200 8MHz",0)

'*** test 64MHz 115200Bd ***
hserout 0,("CL")
hserout 0,("TTTEST 115200 64MHz",0)
hserout 0,("SB115200",13,10)
hsersetup B115200_64,16
setfreq em64
pause 8000

'*** test remplissage
hserout 0,("CL")                ;clear
for b0=1 to 80                            
    hserout 0,("TTX",0)        ;remplir avec des X
    pause 24                        ;sinon ça va trop vite !
next b0
pause 8000
hserout 0,("TP",0,3,"TTFIN TEST 115200 64MHz",0)

'*** retour à 9600Bd
hserout 0,("SB9600",13,10)
setfreq m8
hsersetup B9600_8,16
pause 100
hserout 0,("CLCL")
hserout 0,("TP",0,0,"TTRETOUR à 9200 8MHz",0)    ;afficheur chinois !
'*** pause 100 + 2 clear sinon écran pas effacé
 

GM39

Senior Member
Troisième test sur le bus I2C :
Code:
#PICAXE 28X2
#no_table

'LCD 20x4 I2C
'à 8MHz

'test config adresse
hi2csetup i2cmaster,$4e,i2cfast,i2cbyte    ;adresse affichée à la mst 0x27 sur 7 bits
hi2cout ("SI2CA",$28)                            ;address changed to:0x28
hi2csetup i2cmaster,$50,i2cfast,i2cbyte    ;nouvelle config
'*** config non volatile I2C address:0x28 à la mst

'*** test taille écran
hi2cout ("CL")                                    ;clear
for b0=1 to 80
    hi2cout ("TTX",0)                            ;remplir avec des X (16x2 par defaut)
next b0
hi2cout ("STCR",20,4,$80,$C0,$94,$D4)    ;config en 20x4
pause 1000                                                     ;NEW LCD:2004 s'affiche
hi2cout ("CL")                                    ;clear
for b0=1 to 80
    hi2cout ("TTX",0)                            ;remplir avec des X
    pause 2                                        ;sinon ça va trop vite
next b0
pause 1000
hi2cout ("CL")                                    ;clear
hi2cout ("TTXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",0)    ;60 maxi d'un coup
pause 41                                                                                                ;ne fonctionne pas en deça
hi2cout ("TTXXXXXXXXXXXXXXXXXXXX",0)
'*** config non volatile

'*** test retro éclairage
hi2cout ("BL0")            ;eteindre
pause 1000
hi2cout ("BL1")            ;allumer
pause 1000
hi2cout ("BL",0)            ;eteindre
pause 1000
hi2cout ("BL",1)            ;allumer
'*** les 2 solutions fonctionnent

'*** test reglage intensité
for b0=0 to 100
    hi2cout ("BL",b0)
    bintoascii b0,b1,b2,b3
    hi2cout ("TP",0,0,"TT",b1,b2,b3,0)    ;position : lignes et colonnes commencent à 0
    pause 100
next b0
'*** pb avec 48 et 49, code ascii 0 et 1

'*** test curseur
hi2cout ("CS0")            ;eteindre
pause 1000
hi2cout ("CS1")            ;allumer
pause 1000
hi2cout ("CS",0)            ;eteindre
pause 1000
hi2cout ("CS",1)            ;allumer
'*** les 2 solutions fonctionnent

'*** test affichage config à la mst
hi2cout ("DC0")            ;pas d'affichage après mst

hi2cout ("DC1")            ;I2C address:0x28 après mst

hi2cout ("DC",0)            ;pas d'affichage après mst

hi2cout ("DC",1)            ;I2C address:0x28 après mst
'*** les 2 solutions fonctionnent

'*** test changement de frequence
'test à 64Mhz
setfreq em64
hi2csetup i2cmaster,$50,i2cfast_64,i2cbyte    ;nouvelle config
pause 500
hi2cout ("CL")
hi2cout ("TTTEST A 64MHz",0)
pause 8000
for b0=1 to 80
    hi2cout ("TTX",0)                            ;remplir avec des X
    'pause 2                                        ;plus besoin de pause
next b0
pause 8000
hi2cout ("PT",0,3,"FIN TEST A 64MHz",0)
pause 8000

'*** retour à 8 MHz
setfreq m8
hi2csetup i2cmaster,$50,i2cfast,i2cbyte    ;nouvelle config
pause 500
hi2cout ("CL")
hi2cout ("TTRETOUR A 8MHz",0)
 
Last edited:

PieM

Senior Member
Bonjour,
Merci, très intéressant!
c'est quoi le pb avec 48 et 49, code ascii 0 et 1 ?
 

GM39

Senior Member
Hello,
C'est parce qu'on peut faire indifféremment "BL0" ou "BL",0 pour éteindre l'afficheur
du coup "BL",48 c'est équivalent à "BL0" et l'afficheur s'éteint
 

PieM

Senior Member
Ben oui mais quel intérêt de tester "BL",b0 avec b0 allant de 0 à 100 , puisque seules les valeurs 0 et 1 semblent admises!
En tout cas, les tests en débits sont époustouflants!
 

GM39

Senior Member
C'est mal documenté, mais on peut régler l'intensité lumineuse du rétro éclairage de 0 à 100%
 

MGU

Senior Member
Bonjour,

Merci GM39 pour ce test. Je voulais en commander un, mais il faut attendre le retour des vacances...

MM
 

GM39

Senior Member
Hello,
Voilà un test complémentaire pour ceux qui ont un afficheur avec des caractères chinois (ou japonais ?)
Les commandes MCD et MDT ne sont pas documentées, mais j'ai eu de la chance...
J'ai repris les définitions de caractères de MGU : http://electromag1.wifeo.com/lcd-i2c-expandeur-pcf8574.php

Code:
#PICAXE 28X2
#no_table

'LCD 20x4
'test avec hserout

'*** test 8MHz 9600Bd ***
hsersetup B9600_8,16
pause 1000
hserout 0,("CL")    ;premier clear ignoré ?
hserout 0,("CL")


'*** test caractères en CGRAM
hserout 0,("MCD",$48)    ;é en 1
hserout 0,("MDT",2)
hserout 0,("MDT",4)
hserout 0,("MDT",14)
hserout 0,("MDT",17)
hserout 0,("MDT",31)
hserout 0,("MDT",16)
hserout 0,("MDT",14)
hserout 0,("MDT",0)
pause 10
hserout 0,("MCD",$50)    ;è en 2
hserout 0,("MDT",8)
hserout 0,("MDT",4)
hserout 0,("MDT",14)
hserout 0,("MDT",17)
hserout 0,("MDT",31)
hserout 0,("MDT",16)
hserout 0,("MDT",14)
hserout 0,("MDT",0)
pause 10
hserout 0,("MCD",$58)    ;ê en 3
hserout 0,("MDT",4)
hserout 0,("MDT",10)
hserout 0,("MDT",14)
hserout 0,("MDT",17)
hserout 0,("MDT",31)
hserout 0,("MDT",16)
hserout 0,("MDT",14)
hserout 0,("MDT",0)
pause 10
hserout 0,("MCD",$60)    ;à en 4
hserout 0,("MDT",8)
hserout 0,("MDT",4)
hserout 0,("MDT",14)
hserout 0,("MDT",1)
hserout 0,("MDT",15)
hserout 0,("MDT",17)
hserout 0,("MDT",15)
hserout 0,("MDT",0)
pause 10
hserout 0,("MCD",$68)    ;ç en 5
hserout 0,("MDT",0)
hserout 0,("MDT",14)
hserout 0,("MDT",16)
hserout 0,("MDT",16)
hserout 0,("MDT",17)
hserout 0,("MDT",14)
hserout 0,("MDT",4)
hserout 0,("MDT",12)
pause 10
hserout 0,("MCD",$70)    ;ù en 6
hserout 0,("MDT",8)
hserout 0,("MDT",4)
hserout 0,("MDT",17)
hserout 0,("MDT",17)
hserout 0,("MDT",17)
hserout 0,("MDT",19)
hserout 0,("MDT",13)
hserout 0,("MDT",0)
pause 10
hserout 0,("MCD",$78)    ;ü en 7
hserout 0,("MDT",10)
hserout 0,("MDT",0)
hserout 0,("MDT",17)
hserout 0,("MDT",17)
hserout 0,("MDT",17)
hserout 0,("MDT",19)
hserout 0,("MDT",13)
hserout 0,("MDT",0)
pause 10
hserout 0,("MCD",$40)    ;ë en 8, ne fonctionne pas avec $80
hserout 0,("MDT",10)
hserout 0,("MDT",0)
hserout 0,("MDT",14)
hserout 0,("MDT",17)
hserout 0,("MDT",31)
hserout 0,("MDT",16)
hserout 0,("MDT",14)
hserout 0,("MDT",0)


hserout 0,("TP",0,0,"TT",1,2,3,4,5,6,7,8,0)    ;on a bien éèêàçùüë
'*** ne fonctionne pas sans la pause entre 2 définitions
'*** configuration volatile
 
Top