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 ---
Idée, bugs, propositions .......
Pic18F et afficheur I2C MIDAS
Serge
Amateur
Amateur
Messages : 163
Enregistré en : septembre 2018

#31 Message par Serge » mer. 25 mars 2020 18:27 lien vers la Data-Sheet : Cliquez ici

D’ailleurs, c'est justement ce que je ne comprend pas, car le premier octet devrait être $C0 pour avoir co et D/C à "1".
Hors ils commencent par $3A

Pic18F et afficheur I2C MIDAS
Serge
Amateur
Amateur
Messages : 163
Enregistré en : septembre 2018

#32 Message par Serge » mer. 25 mars 2020 18:34 lien vers la Data-Sheet : Cliquez ici

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 ?

Pic18F et afficheur I2C MIDAS
satinas
Expert
Expert
Messages : 1225
Enregistré en : novembre 2015

#33 Message par satinas » mer. 25 mars 2020 19:15 lien vers la Data-Sheet : Cliquez ici

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

Code : Tout sélectionner

        start();
        Write_byte(0x78);
        Write_byte(0x80);
        Write_byte(data);
        stop();

Pic18F et afficheur I2C MIDAS
Serge
Amateur
Amateur
Messages : 163
Enregistré en : septembre 2018

#34 Message par Serge » jeu. 26 mars 2020 09:07 lien vers la Data-Sheet : Cliquez ici

Mon problème n'est plus dans les codes de commandes à envoyer, mais dans la logique des deux bits qui précédent les données de commande. "Co" et "D/C"
La gestion de ces deux bits n'est vraiment pas clair pour moi.
Et je pense que tout est là !

Pic18F et afficheur I2C MIDAS
satinas
Expert
Expert
Messages : 1225
Enregistré en : novembre 2015

#35 Message par satinas » jeu. 26 mars 2020 10:13 lien vers la Data-Sheet : Cliquez ici

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 :)

Pic18F et afficheur I2C MIDAS
Serge
Amateur
Amateur
Messages : 163
Enregistré en : septembre 2018

#36 Message par Serge » jeu. 26 mars 2020 10:21 lien vers la Data-Sheet : Cliquez ici

Merci c'est très clair.

J'étais entrain de creuser ce point, et pour le moment j'ai toujours rien qui s'affiche.
Je reprend ta description à la lettre et je te redis.

Merci

Pic18F et afficheur I2C MIDAS
Serge
Amateur
Amateur
Messages : 163
Enregistré en : septembre 2018

#37 Message par Serge » jeu. 26 mars 2020 10:22 lien vers la Data-Sheet : Cliquez ici

Et bonjour !
Pardon.

Pic18F et afficheur I2C MIDAS
Serge
Amateur
Amateur
Messages : 163
Enregistré en : septembre 2018

#38 Message par Serge » jeu. 26 mars 2020 10:38 lien vers la Data-Sheet : Cliquez ici

EUREKA !!!!!


Ca marche !!!

Merci, merci à tous.
En fait c'était simplement que je faisais tout à la file, mais il faut passer par le "STOP" entre les commandes et les data !

Vraiment merci.

Pic18F et afficheur I2C MIDAS
Serge
Amateur
Amateur
Messages : 163
Enregistré en : septembre 2018

#39 Message par Serge » jeu. 26 mars 2020 11:00 lien vers la Data-Sheet : Cliquez ici

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

Pic18F et afficheur I2C MIDAS
Serge
Amateur
Amateur
Messages : 163
Enregistré en : septembre 2018

#40 Message par Serge » jeu. 26 mars 2020 11:05 lien vers la Data-Sheet : Cliquez ici

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 37 invités