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 ---
Modérateur : Jérémy
LCD en I²C avec driver PCF2119
-
Jérémy
Administrateur du site- Messages : 2722
- Âge : 45
- Enregistré en : juillet 2015
- Localisation : Dans le sud
- Contact :
Bonsoir à tous,
Voila ce qui m’amène , j'ai acheté des écrans LCD commandé en I²C ( car j'ai besoin de garder l'UART pour autre chose) . Ayant démarré la programmation avec des PICAXE (1ans 1/2 ), j'ai essayé avec ceux ci . Mais je n'ai pas réussis à trouver suffisamment d'aide ( peu répandu les picaxes) pour les faire fonctionner.
Donc je demandais si quelqu'un d'entre vous se sentait en mesure de me filer un coup de main pour réussir à faire fonctionner ces maudits LCD avec un PIC 18F45K22. Mais je n'ai encore jamais fais d'I²C avec des PIC . Ce sera l'occasion de sortir un Tuto si jamais on y arrive .
Voila si vous voulez me guider dans la création d'un programme qui affiche le fameux "Hello World !" , ce serait vraiment sympa.
Pour commencer avec le Hard, je pense pouvoir branché mon LCD sur ma carte EasyPIC, grâce aux connections MikroBUS ( prévues pour des modules en option ), je vais recherché le courant qu'elle peuvent délivrées , il ne s'agirait pas de les cramer.
Il manque l'essentiel pour commencer quoi que se soit, les DS :
L'ecran LCD
Le driver PCF2119
Dans la DS vous pouvez vous rendre directement à la page 44/45 et après la 64-66, je pense que c'est les pages qui nous intéresse le plus . ( Je dis ça pour vous éviter de vous taper les 88 pages) .
Merci à vous si vous trouvez un peu de temps pour m'aider !
Voila ce qui m’amène , j'ai acheté des écrans LCD commandé en I²C ( car j'ai besoin de garder l'UART pour autre chose) . Ayant démarré la programmation avec des PICAXE (1ans 1/2 ), j'ai essayé avec ceux ci . Mais je n'ai pas réussis à trouver suffisamment d'aide ( peu répandu les picaxes) pour les faire fonctionner.
Donc je demandais si quelqu'un d'entre vous se sentait en mesure de me filer un coup de main pour réussir à faire fonctionner ces maudits LCD avec un PIC 18F45K22. Mais je n'ai encore jamais fais d'I²C avec des PIC . Ce sera l'occasion de sortir un Tuto si jamais on y arrive .
Voila si vous voulez me guider dans la création d'un programme qui affiche le fameux "Hello World !" , ce serait vraiment sympa.
Pour commencer avec le Hard, je pense pouvoir branché mon LCD sur ma carte EasyPIC, grâce aux connections MikroBUS ( prévues pour des modules en option ), je vais recherché le courant qu'elle peuvent délivrées , il ne s'agirait pas de les cramer.
Il manque l'essentiel pour commencer quoi que se soit, les DS :
L'ecran LCD
Le driver PCF2119
Dans la DS vous pouvez vous rendre directement à la page 44/45 et après la 64-66, je pense que c'est les pages qui nous intéresse le plus . ( Je dis ça pour vous éviter de vous taper les 88 pages) .
Merci à vous si vous trouvez un peu de temps pour m'aider !
LCD en I²C
- paulfjujo
Expert- Messages : 2597
- Âge : 73
- Enregistré en : juillet 2015
- Localisation : 01800
- Contact :
bonjour,
Peux-tu poster ce que tu as déja fait, ton projet complet (zip)
y compris les bits de config
bien verifier :
l'adresse du LCD
en fonction de la connection SA0
l'adresse de base I2C peut etre
0x74 en ecriture et 0x75 en lecture si SAO=0
ou 0x76 en ecriture ou 0x77 en lecture si SAO=1
Resistance de 2,7K à 4,7K pour tirage SCL et SDA au +5V
ce qui est bizarre c'est que sur le (schema) diagramme LCD , on ne voit pas cette entree SA0
mais ce n'est pas un "vrai" schema!
j'avoue ne pas avoir passé trop de temps à lire la datasheet complet..
tu peux extraire la partie utile de ce projet
en modifiant l'adresse I2C du LCD.
Les fonctions LCD devraient etre semblables .
testé OK aussi avec u 16F1847 et un petit PIC 12F1840.
Peux-tu poster ce que tu as déja fait, ton projet complet (zip)
y compris les bits de config
bien verifier :
l'adresse du LCD
en fonction de la connection SA0
l'adresse de base I2C peut etre
0x74 en ecriture et 0x75 en lecture si SAO=0
ou 0x76 en ecriture ou 0x77 en lecture si SAO=1
Resistance de 2,7K à 4,7K pour tirage SCL et SDA au +5V
ce qui est bizarre c'est que sur le (schema) diagramme LCD , on ne voit pas cette entree SA0
mais ce n'est pas un "vrai" schema!
j'avoue ne pas avoir passé trop de temps à lire la datasheet complet..
tu peux extraire la partie utile de ce projet
en modifiant l'adresse I2C du LCD.
Les fonctions LCD devraient etre semblables .
testé OK aussi avec u 16F1847 et un petit PIC 12F1840.
LCD en I²C
-
Jérémy
Administrateur du site- Messages : 2722
- Âge : 45
- Enregistré en : juillet 2015
- Localisation : Dans le sud
- Contact :
Bonjour et merci Paulfjujo,
Avec les PIC je n'ai encore rien fais , seulement avec les Picaxes qui se programme en Basic . Donc les lignes de code ne seront pas forcement très parlantes
Voici ce que ca donne, il ne faut pas prendre à la lettre , j'ai essayé des dizaines de choses , de configuration etc ...
[spoil]'#################################### Configuration I/O ####################################
symbol compteur = b2
symbol address = w27
'#################################### Initialisation ####################################
setfreq M8
hi2csetup i2cmaster, %0111010 , i2cfast, i2cbyte ' configuration en maitre avec l'adresse de l'esclave . le bit0 est rajouter automatiquement
pause 300
'#################################### Programme Principal ####################################
hi2cout (%01110100) ' Slave address
pause 10
hi2cout (%00000000) ' control byte
pause 10
hi2cout (%00100000) ' Set fonction
pause 10
hi2cout (%00001110) ' Display_ctl notmalement la deja je devrais voir le curseur clignoter . Rien donc ca bug avant surement !
pause 10
hi2cout (%00000110) ' Entry_mode_set
pause 10
' For writing data to DDRAM, RS must be set to 1; therefore a control byte is needed
' Pour ecrire des données sur la RAM le bit RS doit etre mis à 1 . Mais avant un "controle byte" est nécessaire
hi2cout (%01110100) ' Slave address
pause 10
hi2cout (%01000000) ' control byte on passe RS à 1
pause 10
'#################################### Boucle ####################################
do ' Boucle infinie
hi2cout (%01010000) ' write_data , ici on ecrit un "P", le curseur est automatiquement incrementer et décaler vers la droite .
pause 5
hi2cout (%01001000) ' write_data , ici on ecrit un "H"
pause 5
loop[/spoil]
J'ai essayé avec les deux adresses possibles étant donné que je n'ai pas accès à SA0
Quand j'ai fais mes premiers tests, elles y étaient , mais à 3.3V car l'ecran fonctionne en 3.3V
Oui je l'ai dans la main, et je ne vois pas de broches SA0
Oui c'est pour cela que j'ai fais appelle à toi . Donc tu veut que j'essaye de reecrire le même programme seulement en changeant l'adresse esclave ? c'est bien ca ?
Pour ne pas te taper toutes les pages, je pense que tu peux aller directement à la page 44 et 45 , il parle du protocole I²C utilisé . Apparement il n'est pas "courant" , plus precisement dans le Paragraphe 11.2.1
Peux-tu poster ce que tu as déjà fait, ton projet complet (zip)
Avec les PIC je n'ai encore rien fais , seulement avec les Picaxes qui se programme en Basic . Donc les lignes de code ne seront pas forcement très parlantes
Voici ce que ca donne, il ne faut pas prendre à la lettre , j'ai essayé des dizaines de choses , de configuration etc ...
[spoil]'#################################### Configuration I/O ####################################
symbol compteur = b2
symbol address = w27
'#################################### Initialisation ####################################
setfreq M8
hi2csetup i2cmaster, %0111010 , i2cfast, i2cbyte ' configuration en maitre avec l'adresse de l'esclave . le bit0 est rajouter automatiquement
pause 300
'#################################### Programme Principal ####################################
hi2cout (%01110100) ' Slave address
pause 10
hi2cout (%00000000) ' control byte
pause 10
hi2cout (%00100000) ' Set fonction
pause 10
hi2cout (%00001110) ' Display_ctl notmalement la deja je devrais voir le curseur clignoter . Rien donc ca bug avant surement !
pause 10
hi2cout (%00000110) ' Entry_mode_set
pause 10
' For writing data to DDRAM, RS must be set to 1; therefore a control byte is needed
' Pour ecrire des données sur la RAM le bit RS doit etre mis à 1 . Mais avant un "controle byte" est nécessaire
hi2cout (%01110100) ' Slave address
pause 10
hi2cout (%01000000) ' control byte on passe RS à 1
pause 10
'#################################### Boucle ####################################
do ' Boucle infinie
hi2cout (%01010000) ' write_data , ici on ecrit un "P", le curseur est automatiquement incrementer et décaler vers la droite .
pause 5
hi2cout (%01001000) ' write_data , ici on ecrit un "H"
pause 5
loop[/spoil]
l'adresse du LCD en fonction de la connection SA0
J'ai essayé avec les deux adresses possibles étant donné que je n'ai pas accès à SA0
Resistance de 2,7K à 4,7K pour tirage SCL et SDA au +5V
Quand j'ai fais mes premiers tests, elles y étaient , mais à 3.3V car l'ecran fonctionne en 3.3V
ce qui est bizarre c'est que sur le (schema) diagramme LCD , on ne voit pas cette entree SA0
Oui je l'ai dans la main, et je ne vois pas de broches SA0
tu peux extraire la partie utile de ce projet en modifiant l'adresse I2C du LCD.
Oui c'est pour cela que j'ai fais appelle à toi . Donc tu veut que j'essaye de reecrire le même programme seulement en changeant l'adresse esclave ? c'est bien ca ?
Pour ne pas te taper toutes les pages, je pense que tu peux aller directement à la page 44 et 45 , il parle du protocole I²C utilisé . Apparement il n'est pas "courant" , plus precisement dans le Paragraphe 11.2.1
LCD en I²C
- paulfjujo
Expert- Messages : 2597
- Âge : 73
- Enregistré en : juillet 2015
- Localisation : 01800
- Contact :
Jérémy a écrit :Source du message Oui c'est pour cela que j'ai fais appelle à toi . Donc tu veut que j'essaye de reecrire le même programme seulement en changeant l'adresse esclave ? c'est bien ca ?
oui..
LCD en I²C
LCD en I²C
il ne faut pas confondre UART et I2C c'est pas du tout pareil !
L'adresse 0xA0 c est généralement une EEPROM genre 24Cxx, pour l'afficheu,r il y en a surement une autre , voir le datasheet.
Cette est dans le protocole de communication ce n'est pas hard
Sur les eeproms il y a la possibilité de mettre en plus 1 à trois fils hard ce qui permet de mettre 2 exp 3 soit 8 chips sur le même bus.
peut être que le LCd n'a qu'une seule et unique adresse.
Sur le premier site trouvé sur ggogle , il dit 0x27;
http://www.pobot.org/LCD-sur-I2C-simplement.html
L'adresse 0xA0 c est généralement une EEPROM genre 24Cxx, pour l'afficheu,r il y en a surement une autre , voir le datasheet.
Cette est dans le protocole de communication ce n'est pas hard
Sur les eeproms il y a la possibilité de mettre en plus 1 à trois fils hard ce qui permet de mettre 2 exp 3 soit 8 chips sur le même bus.
peut être que le LCd n'a qu'une seule et unique adresse.
Sur le premier site trouvé sur ggogle , il dit 0x27;
http://www.pobot.org/LCD-sur-I2C-simplement.html
LCD en I²C
- paulfjujo
Expert- Messages : 2597
- Âge : 73
- Enregistré en : juillet 2015
- Localisation : 01800
- Contact :
bonsoir
L'adresse 0x27 est pour un LCD equipé de :
//#define LCD_ADDR 0x27 // PCF85741
mon LCD 4x20 avec PCF8754 repond à l'adresse
le probleme est aussi de verifier l'affectation des 4 bits datas
et des 2 ou 3 bits de commande
qui serait interne au circuit LCD, puisqu'il n'y a pas de PCF .. externe
la doc technique de son LCD donne :
adresse I2C : 0x74 ou 0x76 ...
L'adresse 0x27 est pour un LCD equipé de :
//#define LCD_ADDR 0x27 // PCF85741
mon LCD 4x20 avec PCF8754 repond à l'adresse
Code : Tout sélectionner
[b] 0x4E[/b] ( car PCF8574 avec et A0,A1,A2 reliees au +VCC)
#define LCD_ADDR 0x4E // PCF8574 on pigboard YwRobot back located on LCD4x20
// PCF8574 I2C LCD Port Definition
// P7,P6,P5,P4 = Data, P3=Backlight (BL), P2=E, P1=RW, P0=RS
le probleme est aussi de verifier l'affectation des 4 bits datas
et des 2 ou 3 bits de commande
qui serait interne au circuit LCD, puisqu'il n'y a pas de PCF .. externe
la doc technique de son LCD donne :
adresse I2C : 0x74 ou 0x76 ...
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
LCD en I²C
-
Jérémy
Administrateur du site- Messages : 2722
- Âge : 45
- Enregistré en : juillet 2015
- Localisation : Dans le sud
- Contact :
Bon, dis donc c'est du lourd ton programme , chapeau . Malheureusement j'ai pas compris grand chose . Je débute en PIC !!
Alors j'a iquand même essayé de faire ceci :
j'ai repéré ceci(ligne 98):
et j'ai remplacé par
Lors de la compilation j'ai eu des erreurs .
j'ai du supprimer :
ça ne s’arrête jamais, d'avoir des problèmes de compilations ; j'ai supprimer la moitie du programme et ça ne compile toujours pas .
Je vais essayer ne gardant que la partie I2C pourvoir si j'arrive a vous montrer quelques choses
Alors j'a iquand même essayé de faire ceci :
j'ai repéré ceci(ligne 98):
Code : Tout sélectionner
#define LCD_ADDR 0x4E
et j'ai remplacé par
Code : Tout sélectionner
#define LCD_ADDR 0x74
Lors de la compilation j'ai eu des erreurs .
j'ai du supprimer :
Code : Tout sélectionner
sbit LED_Sup at LATB3_bit;
sbit LED_Inf at LATA1_bit;
LED_Sup=0;
LED_Inf=0;
Code : Tout sélectionner
unsigned char readbuff[64] absolute 0x500;
HID_Enable(&readbuff,&writebuff);
LCD_puts( &readbuff);
k=strlen(&readbuff);
ça ne s’arrête jamais, d'avoir des problèmes de compilations ; j'ai supprimer la moitie du programme et ça ne compile toujours pas .
Je vais essayer ne gardant que la partie I2C pourvoir si j'arrive a vous montrer quelques choses
LCD en I²C
-
Jérémy
Administrateur du site- Messages : 2722
- Âge : 45
- Enregistré en : juillet 2015
- Localisation : Dans le sud
- Contact :
Pat a écrit :Source du message Sur le premier site trouvé sur ggogle , il dit 0x27;
PAt tu te trompe de driver , sur mon LCd il s'agit d'un PCF2119 et non d'un PCF8574 de ton lien
@Paulfjujo : je pense que la solution ce trouve dans ces lignes que je n'arrive pas a comprendre correctement !:
Bit 1 of the slave address byte, that a PCF2119x will respond to, is defined by the level tied to its SA0 input (VSS for logic 0 and VDD for logic 1).
Before any data is transmitted on the I2C-bus, the device which should respond is addressed first. The addressing is always carried out with the first byte ransmitted after the START procedure.
En page 27 il parle de ca aussi , qui me parait important .
When using the I2C-bus, the instruction has to be commenced with a control byte as shown in Ta b l e 9. Details about the I2C-bus interface can be ound in Section 11.2. An example of operations on the I2C-bus is given in Ta b l e 4 4.
LCD en I²C
-
Jérémy
Administrateur du site- Messages : 2722
- Âge : 45
- Enregistré en : juillet 2015
- Localisation : Dans le sud
- Contact :
Bonsoir,
Pardonnez mes essais infructueux de débutants.
j'ai essayé de m'inspirer de ton code paulfjujo, en le modifiant et surtout en le simplifiant. je me suis également inspiré de la DS du PCF2119 et de l'exemple qu'il donne en page 64 .
Niveau HARD j'ai fabriquer un câble pour me connecter un port MiroBUS ( image de mon #1).
J'ai activé les Pull-UP sur la plaque easyPIC pour RC3 et RC4 ( SDA et SCL).
j'avoue avoir un doute sur un switch d'un cote c'est marqué SDA et SCL , et de l'autre je bascule en RC3 et RC4. J'ai laissé sur SDA et SCL.
Voila ce que j'ai fais .
Déjà l'adresse à de forte change d'être 0x74 . quand je mets 0x76 ma led test ne clignote pas,et le programme est comme bloqué ! avec 0x74 comme adresse esclave de l'écran ça clignote bien .
L’écran est avec le rétro éclairage. Tout s'allume bien, mais rien ne s'affiche.
Pardonnez mes essais infructueux de débutants.
j'ai essayé de m'inspirer de ton code paulfjujo, en le modifiant et surtout en le simplifiant. je me suis également inspiré de la DS du PCF2119 et de l'exemple qu'il donne en page 64 .
Niveau HARD j'ai fabriquer un câble pour me connecter un port MiroBUS ( image de mon #1).
J'ai activé les Pull-UP sur la plaque easyPIC pour RC3 et RC4 ( SDA et SCL).
j'avoue avoir un doute sur un switch d'un cote c'est marqué SDA et SCL , et de l'autre je bascule en RC3 et RC4. J'ai laissé sur SDA et SCL.
Voila ce que j'ai fais .
Déjà l'adresse à de forte change d'être 0x74 . quand je mets 0x76 ma led test ne clignote pas,et le programme est comme bloqué ! avec 0x74 comme adresse esclave de l'écran ça clignote bien .
Code : Tout sélectionner
#define LCD_ADDR 0x74 // ou 0x76 définition de l’adresse esclave du PCF2119
#define LCD_CLEAR 0x01 // 0b0000 0001
#define LCD_HOME 0x02 // 0b0000 0010
#define Control_byte 0x00 // 0b0000 0000
#define Function_set 0x20 // 0b0010 0000
#define Display_ctl 0x0E // 0b0000 1110
#define Entry_mode_set 0x06 // 0b0000 0110
void Ecran_init() // routine d'initialisation page 64 de la DS
{
Delay_ms(500); // Attente apres l'allumage
I2C1_Start();
I2C1_Wr( LCD_ADDR ); // Envoie l'adresse de l'esclave
Delay_ms(10);
I2C1_Wr( Control_byte ); // Envoi byte control pour ecrire des fonctions
Delay_ms(10);
I2C1_Wr( Function_set ); // Envoi d'un byte function_set
Delay_ms(10);
I2C1_Wr( Display_ctl ); // Envoi d'un byte control
Delay_ms(10);
I2C1_Wr( Entry_mode_set ); // Envoi d'un Entry_mode_set
Delay_ms(10);
I2C1_Start();
Delay_ms(10);
I2C1_Wr( LCD_ADDR );
Delay_ms(10);
I2C1_Wr( 0b01000000 ); // Envoi d'un byte control pour écrire des données
Delay_ms(10);
}
void main()
{
ANSELB = 0; // Configure les broches en digital
ANSELC = 0;
ANSELE = 0;
PORTB = 0; // PORTB en sortie
PORTC = 0;
PORTE = 0;
TRISB = 0; // Mise a 0 du port B
TRISC = 0;
TRISE = 0;
Delay_ms(150); // Attente pour stabilisation
I2C1_Init(100000); // Initialisation de l'I2C
Ecran_init(); // Initialisation du LCD
while(1)
{
I2C1_Wr(0x50 ); // Affiche la lettre "P"
I2C1_Wr(0x48 ); // Affiche la lettre "H"
PORTE = 0; // Pour vérifier que le programme tourne
delay_ms(100); // Je fais clignoter une led
PORTE = 1;
delay_ms(100);
}
}
L’écran est avec le rétro éclairage. Tout s'allume bien, mais rien ne s'affiche.
Qui est en ligne
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 48 invités