| Ecrit par Administrator, le 20-11-2007 11:51 |
| Pages vues |
1862  |
|
Piloter un afficher LCD sur bus SPI (chip Samsung KS0074) avec un module microcontroleur Comfile picbasic
J'ai récemment rencontré quelque difficultés pour faire fonctionner un
afficheur LCD Samsung piloté par la puce KS0074 (distribué par
Selectronic en France) avec un picbasic 3B. L'afficheur fonctionne sur
un bus série synchrone 2 fil SPI. Le picbasic possède l'instruction
shiftout qui permet en principe de piloter facilement des périphériques
I2C ou SPI. Le problème c'est que la doc fournit par Selectronic est un
peu trop limitée pour comprendre comment piloter l'afficheur.
Je vous conseille donc de jeter un coup d'oeil au datasheet du KS0074, 71 pages tout de meme.
|
|
En gros le protocole est le suivant:
- Mise a 0 de la broche CS
- Envoie d'un séquence d'initialisation sur le bus commençant pas 5
bit a 1 (voir datagramme page 46) et permettant de fixer la valeur RS
(Selecteur de registre)
- Envoie
d'un octet de donnée découpé en deux blocs de 4 bits. On envoi les 4
bits de poid faible, 4 bits a 0, les 4 bits de poid fort et encore 4
bits a 0 (voir page 45). Il faut donc envoyer 2 octets pour un octet de
donnée.
- Faire une attente pour permettre l'exécution de l'instruction
- Envoyer ensuite les donnée découpés en 2*4 bits tant que l'on ne
veux pas changer la valeur de RS, sinon reprendre la séquence des 5
bits a 1
|
Voici un exemple de programme:
'Dabord executer init, ensuite on peux afficher un carractere ASCII,
'un tableau de char ou une valeur numerique avec respectivement prt_char,
'prt_chaine et prt_number
CONST DEVICE=3B
const data=0 'port 0 - donnée
const CS=1 'port 1 - Chip select
const clock=2 'port 2 - clock
const byte chaine=("Exemple")
dim taille as byte
dim char as byte
dim number as byte
dim temp as byte
gosub init
char="B"
gosub prt_char
number=254
gosub prt_number
taille=7
gosub prt_chaine
goto fin
init:
delay 20
OUT CS,1
OUT clock,1
OUT data,0
delay 10
OUT CS,0
shiftout clock,data,1,&b11111000
shiftout clock,data,1,&b10000000
shiftout clock,data,1,&b00000000
delay 5
shiftout clock,data,1,&b11110000
shiftout clock,data,1,&b00000000
delay 100
return
'imprime le charactere char
prt_char:
dim dataL as byte
dim dataH as byte
dataH=char AND &HF0
dataH=dataH >> 4
dataL=char AND &H0F
shiftout clock,data,1,&b11111010
shiftout clock,data,0,dataL
shiftout clock,data,0,dataH
return
'imprime la valeur numerique (byte) number
prt_number:
dim cent as byte
dim diz as byte
dim unit as byte
cent=number/100
diz=number mod 100
diz=diz/10
unit=number mod 10
shiftout clock,data,0,cent,8
shiftout clock,data,0,&b00000011,8
shiftout clock,data,0,diz,8
shiftout clock,data,0,&b00000011,8
shiftout clock,data,0,unit,8
shiftout clock,data,0,&b00000011,8
return
prt_chaine:
dim compt_taille as byte
temp=taille-1
for compt_taille=0 to temp
char=chaine(compt_taille)
gosub prt_char
next compt_taille
fin:
Commentaires utilisateurs (1)
Commentaires en langue: English (0), French (1) |
|
|