Bienvenue aux nouveaux arrivants sur FantasPic !
- Pensez à lire les règles durant votre visite, il n'y en a pas beaucoup, mais encore faut-il les respecter .
- N’hésitez pas à faire des remarques et/ou suggestions sur le Forum, dans le but de l'améliorer et de rendre vos prochaines visites plus agréables.
- Vous pouvez regarder votre "panneau de l'utilisateur" afin de configurer vos préférences.
- Un passage par "l'utilisation du forum" est recommandé pour connaître les fonctionnalités du forum.
--- L’équipe FantasPic ---
- Pensez à lire les règles durant votre visite, il n'y en a pas beaucoup, mais encore faut-il les respecter .
- N’hésitez pas à faire des remarques et/ou suggestions sur le Forum, dans le but de l'améliorer et de rendre vos prochaines visites plus agréables.
- Vous pouvez regarder votre "panneau de l'utilisateur" afin de configurer vos préférences.
- Un passage par "l'utilisation du forum" est recommandé pour connaître les fonctionnalités du forum.
--- L’équipe FantasPic ---
Pic18F et afficheur I2C MIDAS
Pic18F et afficheur I2C MIDAS
Voilà que j'ai quelque-chose de nouveau !!
après multiples essais, j'obtiens tout l'écran en 4 lignes de 20 cases blanches !!!
Comme si le constraste était poussé à fond après la séquence envoyée.
Mais au moins l'écran réagis à la séquence du PIC !
C'est un bon début.
C'est toujours le problème que je ne comprend pas la logique de cette séquence. Ca ne correspond pas à ce que je comprend de l'explication de la page 17 à 19
à quoi sert le registre IR ? et DR ? (tout es là je crois ?...)
IR = Instructions
DR= Données
Instructions de quoi ?
Données de quoi ?
après multiples essais, j'obtiens tout l'écran en 4 lignes de 20 cases blanches !!!
Comme si le constraste était poussé à fond après la séquence envoyée.
Mais au moins l'écran réagis à la séquence du PIC !
C'est un bon début.
C'est toujours le problème que je ne comprend pas la logique de cette séquence. Ca ne correspond pas à ce que je comprend de l'explication de la page 17 à 19
à quoi sert le registre IR ? et DR ? (tout es là je crois ?...)
IR = Instructions
DR= Données
Instructions de quoi ?
Données de quoi ?
Pic18F et afficheur I2C MIDAS
télécharge le fichier "WO2004A IIC_for_SSD1803A.c" sur ce lien.
https://forum.arduino.cc/index.php?topic=313278.0
L'initialisation complète du lcd est à la fin du programme C
la fonction send_command(data) serait
https://forum.arduino.cc/index.php?topic=313278.0
L'initialisation complète du lcd est à la fin du programme C
la fonction send_command(data) serait
Code : Tout sélectionner
start();
Write_byte(0x78);
Write_byte(0x80);
Write_byte(data);
stop();
Pic18F et afficheur I2C MIDAS
Pic18F et afficheur I2C MIDAS
Bonjour Serge,
On envoie un octet contrôle suivi d'un ou plusieurs octets data, octets data de type config ou affichage (selon bit D/C#).
Si un seul octet data, on met C0 à 1, si plusieurs octets data, on met C0 = 0.
Je suppose que seul le stop i2c permet de remettre à zéro cette logique.
Dans le programme C, il envoie un seul octet data à la fois.
Pour envoyer un octet config, il fait :
- start
- envoi $78 -> adresse slave + write
- envoi $80 -> un seul octet config (C0 = 1) + octet config (D/C# = 0)
- envoi octet config
- stop
Pour envoyer un octet affichage, il fait :
- start
- envoi $78 -> adresse slave + write
- envoi $40 -> plusieurs octets affichage à la file (C0 = 0) + octet config (D/C# = 1)
- envoi octet affichage
- stop
A mon avis, le bit C0 dans son cas n'a pas trop d'importance car il fait un stop systématique derrière chaque envoi.
Bien sûr on pourrait envoyer tout cela à la file avec un seul start/stop, mais comme déjà évoqué, il vaut mieux y aller doucement. Au début il faut arriver à quelque chose qui marche pour débloquer la situation, c'est après qu'on peut en rajouter pour tout casser :)
On envoie un octet contrôle suivi d'un ou plusieurs octets data, octets data de type config ou affichage (selon bit D/C#).
Si un seul octet data, on met C0 à 1, si plusieurs octets data, on met C0 = 0.
Je suppose que seul le stop i2c permet de remettre à zéro cette logique.
Dans le programme C, il envoie un seul octet data à la fois.
Pour envoyer un octet config, il fait :
- start
- envoi $78 -> adresse slave + write
- envoi $80 -> un seul octet config (C0 = 1) + octet config (D/C# = 0)
- envoi octet config
- stop
Pour envoyer un octet affichage, il fait :
- start
- envoi $78 -> adresse slave + write
- envoi $40 -> plusieurs octets affichage à la file (C0 = 0) + octet config (D/C# = 1)
- envoi octet affichage
- stop
A mon avis, le bit C0 dans son cas n'a pas trop d'importance car il fait un stop systématique derrière chaque envoi.
Bien sûr on pourrait envoyer tout cela à la file avec un seul start/stop, mais comme déjà évoqué, il vaut mieux y aller doucement. Au début il faut arriver à quelque chose qui marche pour débloquer la situation, c'est après qu'on peut en rajouter pour tout casser :)
Pic18F et afficheur I2C MIDAS
Pic18F et afficheur I2C MIDAS
Pic18F et afficheur I2C MIDAS
Pic18F et afficheur I2C MIDAS
Seq_I2C: ' Pour envoyer
gosub adresses
gosub config
while SSPSTAT.2 : wend ' Transmission en cours R/W
SSPBUF = $3A ' 8 bits 4 lignes
SSPSTAT.2 = 1 ' Transmission du code
while SSPCON2.6 : wend ' Attente de l'acknowledge
gosub pose
while SSPSTAT.2 : wend ' Transmission en cours R/W
SSPBUF = $1E ' BS1 caractères 1/6
SSPSTAT.2 = 1
while SSPCON2.6 : wend ' Attente de l'acknowledge
gosub pose
while SSPSTAT.2 : wend ' Transmission en cours R/W
SSPBUF = $39 ' RE=0
SSPSTAT.2 = 1 ' Transmission du code
while SSPCON2.6 : wend ' Attente de l'acknowledge
gosub pose
while SSPSTAT.2 : wend ' Transmission en cours R/W
SSPBUF = $1C ' BS0 caractères 1/6
SSPSTAT.2 = 1 ' Transmission du code
while SSPCON2.6 : wend ' Attente de l'acknowledge
gosub pose
while SSPSTAT.2 : wend ' Transmission en cours R/W
SSPBUF = $79 ' Contraste
SSPSTAT.2 = 1 ' Transmission du code
while SSPCON2.6 : wend ' Attente de l'acknowledge
gosub pose
while SSPSTAT.2 : wend ' Transmission en cours R/W
SSPBUF = $5D ' Set I ON, BON, CONTRASTE 4&5
SSPSTAT.2 = 1 ' Transmission du code
while SSPCON2.6 : wend ' Attente de l'acknowledge
gosub pose
while SSPSTAT.2 : wend ' Transmission en cours R/W
SSPBUF = $6D '$5E ' Set DON
SSPSTAT.2 = 1 ' Transmission du code
while SSPCON2.6 : wend ' Attente de l'acknowledge
gosub pose
while SSPSTAT.2 : wend ' Transmission en cours R/W
SSPBUF = $0C '$6A ' Set Display ON
SSPSTAT.2 = 1 ' Transmission du code
while SSPCON2.6 : wend ' Attente de l'acknowledge
gosub pose
while SSPSTAT.2 : wend ' Transmission en cours R/W
SSPBUF = $01 '$0C ' Clear Display
SSPSTAT.2 = 1 ' Transmission du code
while SSPCON2.6 : wend ' Attente de l'acknowledge
gosub pose
gosub arret ' C'est LA Qu'était l'erreur !!!
gosub adresses
gosub ecriture
while SSPSTAT.2 : wend ' Transmission en cours R/W
SSPBUF = $41''$8B '$01 ' Move code to SSPBUF
SSPSTAT.2 = 1 ' Transmission du code
gosub pose
while SSPSTAT.2 : wend ' Transmission en cours R/W
SSPBUF = "B" '$06 ' Move code to SSPBUF
SSPSTAT.2 = 1 ' Transmission du code
while SSPCON2.6 : wend ' Attente de l'acknowledge
gosub pose
while SSPSTAT.2 : wend ' Transmission en cours R/W
SSPBUF = "C" ' Move code to SSPBUF
SSPSTAT.2 = 1 ' Transmission du code
while SSPCON2.6 : wend ' Attente de l'acknowledge
gosub pose
while SSPSTAT.2 : wend ' Transmission en cours R/W
SSPBUF = "D" ' Move code to SSPBUF
SSPSTAT.2 = 1 ' Transmission du code
while SSPCON2.6 : wend ' Attente de l'acknowledge
gosub pose
while SSPSTAT.2 : wend ' Transmission en cours R/W
SSPBUF = "E" ' Move code to SSPBUF
SSPSTAT.2 = 1 ' Transmission du code
while SSPCON2.6 : wend ' Attente de l'acknowledge
gosub pose
while SSPSTAT.2 : wend ' Transmission en cours R/W
SSPBUF = "F" ' Move code to SSPBUF
SSPSTAT.2 = 1 ' Transmission du code
while SSPCON2.6 : wend ' Attente de l'acknowledge
gosub pose
gosub arret
'__________________________________________________
;-----------------------------------------------------------
pose:
pause 100
return
config:
while SSPSTAT.2 : wend ' Transmission en cours R/W
SSPBUF = $C0 ' $80=10...... 40=01...... ' Met C0 à 1 et D/C à 1 (écriture des commandes dans la RAM )
SSPSTAT.2 = 1 ' Transmission du code
while SSPCON2.6 : wend ' Attente de l'acknowledge
gosub pose
return
ecriture:
while SSPSTAT.2 : wend ' Transmission en cours R/W
SSPBUF = $40 ' Met Co à 1 et D/C à 1 (écriture des commandes dans la RAM )
SSPSTAT.2 = 1 ' Transmission du code
while SSPCON2.6 : wend ' Attente de l'acknowledge
gosub pose
return
adresses:
while SSPCON2.2 : wend ' Attente bus libre
SSPCON2.0 = 1 ' Condition Start sur le bit SEN
while SSPCON2.0 : wend ' Attente fin de la condition START
SSPBUF = adresse_i2c ' Move Adresse to SSPBUF
SSPSTAT.2 = 1 ' Transmission de l'adresse
while SSPSTAT.2 : wend ' Fin Transmission de l'Adresse
while SSPCON2.6 : wend ' Attente de l'acknowledge
gosub pose
return
arret:
SSPCON2.2 = 1 ' PEN copndition STOP
while SSPCON2.2 : wend ' Wait for Bus Libre
return
gosub adresses
gosub config
while SSPSTAT.2 : wend ' Transmission en cours R/W
SSPBUF = $3A ' 8 bits 4 lignes
SSPSTAT.2 = 1 ' Transmission du code
while SSPCON2.6 : wend ' Attente de l'acknowledge
gosub pose
while SSPSTAT.2 : wend ' Transmission en cours R/W
SSPBUF = $1E ' BS1 caractères 1/6
SSPSTAT.2 = 1
while SSPCON2.6 : wend ' Attente de l'acknowledge
gosub pose
while SSPSTAT.2 : wend ' Transmission en cours R/W
SSPBUF = $39 ' RE=0
SSPSTAT.2 = 1 ' Transmission du code
while SSPCON2.6 : wend ' Attente de l'acknowledge
gosub pose
while SSPSTAT.2 : wend ' Transmission en cours R/W
SSPBUF = $1C ' BS0 caractères 1/6
SSPSTAT.2 = 1 ' Transmission du code
while SSPCON2.6 : wend ' Attente de l'acknowledge
gosub pose
while SSPSTAT.2 : wend ' Transmission en cours R/W
SSPBUF = $79 ' Contraste
SSPSTAT.2 = 1 ' Transmission du code
while SSPCON2.6 : wend ' Attente de l'acknowledge
gosub pose
while SSPSTAT.2 : wend ' Transmission en cours R/W
SSPBUF = $5D ' Set I ON, BON, CONTRASTE 4&5
SSPSTAT.2 = 1 ' Transmission du code
while SSPCON2.6 : wend ' Attente de l'acknowledge
gosub pose
while SSPSTAT.2 : wend ' Transmission en cours R/W
SSPBUF = $6D '$5E ' Set DON
SSPSTAT.2 = 1 ' Transmission du code
while SSPCON2.6 : wend ' Attente de l'acknowledge
gosub pose
while SSPSTAT.2 : wend ' Transmission en cours R/W
SSPBUF = $0C '$6A ' Set Display ON
SSPSTAT.2 = 1 ' Transmission du code
while SSPCON2.6 : wend ' Attente de l'acknowledge
gosub pose
while SSPSTAT.2 : wend ' Transmission en cours R/W
SSPBUF = $01 '$0C ' Clear Display
SSPSTAT.2 = 1 ' Transmission du code
while SSPCON2.6 : wend ' Attente de l'acknowledge
gosub pose
gosub arret ' C'est LA Qu'était l'erreur !!!
gosub adresses
gosub ecriture
while SSPSTAT.2 : wend ' Transmission en cours R/W
SSPBUF = $41''$8B '$01 ' Move code to SSPBUF
SSPSTAT.2 = 1 ' Transmission du code
gosub pose
while SSPSTAT.2 : wend ' Transmission en cours R/W
SSPBUF = "B" '$06 ' Move code to SSPBUF
SSPSTAT.2 = 1 ' Transmission du code
while SSPCON2.6 : wend ' Attente de l'acknowledge
gosub pose
while SSPSTAT.2 : wend ' Transmission en cours R/W
SSPBUF = "C" ' Move code to SSPBUF
SSPSTAT.2 = 1 ' Transmission du code
while SSPCON2.6 : wend ' Attente de l'acknowledge
gosub pose
while SSPSTAT.2 : wend ' Transmission en cours R/W
SSPBUF = "D" ' Move code to SSPBUF
SSPSTAT.2 = 1 ' Transmission du code
while SSPCON2.6 : wend ' Attente de l'acknowledge
gosub pose
while SSPSTAT.2 : wend ' Transmission en cours R/W
SSPBUF = "E" ' Move code to SSPBUF
SSPSTAT.2 = 1 ' Transmission du code
while SSPCON2.6 : wend ' Attente de l'acknowledge
gosub pose
while SSPSTAT.2 : wend ' Transmission en cours R/W
SSPBUF = "F" ' Move code to SSPBUF
SSPSTAT.2 = 1 ' Transmission du code
while SSPCON2.6 : wend ' Attente de l'acknowledge
gosub pose
gosub arret
'__________________________________________________
;-----------------------------------------------------------
pose:
pause 100
return
config:
while SSPSTAT.2 : wend ' Transmission en cours R/W
SSPBUF = $C0 ' $80=10...... 40=01...... ' Met C0 à 1 et D/C à 1 (écriture des commandes dans la RAM )
SSPSTAT.2 = 1 ' Transmission du code
while SSPCON2.6 : wend ' Attente de l'acknowledge
gosub pose
return
ecriture:
while SSPSTAT.2 : wend ' Transmission en cours R/W
SSPBUF = $40 ' Met Co à 1 et D/C à 1 (écriture des commandes dans la RAM )
SSPSTAT.2 = 1 ' Transmission du code
while SSPCON2.6 : wend ' Attente de l'acknowledge
gosub pose
return
adresses:
while SSPCON2.2 : wend ' Attente bus libre
SSPCON2.0 = 1 ' Condition Start sur le bit SEN
while SSPCON2.0 : wend ' Attente fin de la condition START
SSPBUF = adresse_i2c ' Move Adresse to SSPBUF
SSPSTAT.2 = 1 ' Transmission de l'adresse
while SSPSTAT.2 : wend ' Fin Transmission de l'Adresse
while SSPCON2.6 : wend ' Attente de l'acknowledge
gosub pose
return
arret:
SSPCON2.2 = 1 ' PEN copndition STOP
while SSPCON2.2 : wend ' Wait for Bus Libre
return
Pic18F et afficheur I2C MIDAS
satinas a écrit :Bonjour Serge,
A mon avis, le bit C0 dans son cas n'a pas trop d'importance car il fait un stop systématique derrière chaque envoi.
Bien sûr on pourrait envoyer tout cela à la file avec un seul start/stop, mais comme déjà évoqué, il vaut mieux y aller doucement. Au début il faut arriver à quelque chose qui marche pour débloquer la situation, c'est après qu'on peut en rajouter pour tout casser :)
C'est cette anotation qui m'a mis la "puce à l'oreille" !
Merci
Retourner vers « Le forum Fantas-PIC »
Qui est en ligne
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 49 invités