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
LCD en I²C
- paulfjujo
Expert- Messages : 2597
- Âge : 73
- Enregistré en : juillet 2015
- Localisation : 01800
- Contact :
bonjour,
Quand on bloque sur un sujet, il vaut mieux le laisser de coté pendant un moment,
et revenir dessus plus tard..
comme on dit, le nez dans le guidon, on ne voit plus rien.
Test en réel sur ton LCD , c'est effectivement plus facile de travailler avec l'objet en question, en main.
Testé OK avec un 18F87J50 , puis avec un 18F45K22 carte Ready for PIC.
Le point bloquant était sur la sequence intermediaire .
I2C1_STOP.. I2C1_START
remplacee par "I2C1_Repeated_Start() ;"
L'adresse est bien 0x74 (sur cet afficheur testé)
les caracteres à afficher doivent bien avoir un offset de 128 (0x80).
En sus l'UART1 géré via le FTDI sur la carte ,pour liaison en USB => terminal vitruel COMxx pour PC WIN8.1 (sans PORT COM RS232)
UART2 activé -> interface 2TR -> COMx PC win XP
attention: test fait avec PIC18F45K22 ayant un bootloader mikroC incorporé..
Version à ameliorer pour exploiter toutes les possiblites de cet afficheur , qui a l'avantage de bien fonctionner en 3,3V
et consomme tres peu . ( le backlight seul consomme 2,3mA (avec R serie =220 ohms).
Contrairement à un autre LCD déja testé sur cette carte COG16x2 ..qui ne marche plus sous 3,3V (5V only !)
Quand on bloque sur un sujet, il vaut mieux le laisser de coté pendant un moment,
et revenir dessus plus tard..
comme on dit, le nez dans le guidon, on ne voit plus rien.
Test en réel sur ton LCD , c'est effectivement plus facile de travailler avec l'objet en question, en main.
Testé OK avec un 18F87J50 , puis avec un 18F45K22 carte Ready for PIC.
Le point bloquant était sur la sequence intermediaire .
I2C1_STOP.. I2C1_START
remplacee par "I2C1_Repeated_Start() ;"
L'adresse est bien 0x74 (sur cet afficheur testé)
les caracteres à afficher doivent bien avoir un offset de 128 (0x80).
En sus l'UART1 géré via le FTDI sur la carte ,pour liaison en USB => terminal vitruel COMxx pour PC WIN8.1 (sans PORT COM RS232)
UART2 activé -> interface 2TR -> COMx PC win XP
attention: test fait avec PIC18F45K22 ayant un bootloader mikroC incorporé..
Version à ameliorer pour exploiter toutes les possiblites de cet afficheur , qui a l'avantage de bien fonctionner en 3,3V
et consomme tres peu . ( le backlight seul consomme 2,3mA (avec R serie =220 ohms).
Contrairement à un autre LCD déja testé sur cette carte COG16x2 ..qui ne marche plus sous 3,3V (5V only !)
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 : 2723
- Âge : 45
- Enregistré en : juillet 2015
- Localisation : Dans le sud
- Contact :
Bonjour à tous,
Désolé pas présent ce weekend ( 40 ans d'une amie dans l’Ardèche) .
Génial ça , et Bravo à Paul, pour avoir réussis; Je n'ai plus qu'a essayer a mon tour ! . Je vous tiens très vite au courant . Ce soir je pense me jeter dessus a nouveau .
Désolé pas présent ce weekend ( 40 ans d'une amie dans l’Ardèche) .
Génial ça , et Bravo à Paul, pour avoir réussis; Je n'ai plus qu'a essayer a mon tour ! . Je vous tiens très vite au courant . Ce soir je pense me jeter dessus a nouveau .
LCD en I²C
-
Jérémy
Administrateur du site- Messages : 2723
- Âge : 45
- Enregistré en : juillet 2015
- Localisation : Dans le sud
- Contact :
Bonsoir,
Bon j'accuse un peu de fatigue après un week-end chargé, mais après simplification à l’extrême de ton programme , ça ne fonctionne toujours pas .
Bon je désespère pas car si tu as réussis on devrais pouvoir y arriver. j'ai pas la force d'insister ce soir, je reprendrais mes investigations demain je pense .
Ton programme en PJ est ULTRA pêchu pour mon petit niveau .
Si tu as le temps de faire un programme qui affiche juste une lettre ce serait super sympa.
Il faut aussi que j'inverse le hard car mon connecteur est branché a l'opposé de celui de ta photo ! Histoire qu'on soit sur la même longueur d'onde .
Dans ton programme je ne comprends pas à quoi servent ces lignes :
Code : Tout sélectionner
j=I2C1_Wr(LCD_ADDR); // i2c slave Address
if (j!=0) return k;
k++;
Delay_ms(100);
j=I2C1_Wr(0x00); // Control byte for Instruction
if (j>0) return k;
k++;
LCD en I²C
-
Jérémy
Administrateur du site- Messages : 2723
- Âge : 45
- Enregistré en : juillet 2015
- Localisation : Dans le sud
- Contact :
Alléluia
Enfin !!!!! Enfin j’ai des caractères qui s'affiche........ PWOUAAAAAAA, ça fait vraiment plaisir ça . Je vais etre obligé de sortir un Tuto sur ce module tellement j'ai galéré !!!
Je continue mes test et je vous tiens au courant et post le programme basic
Enfin !!!!! Enfin j’ai des caractères qui s'affiche........ PWOUAAAAAAA, ça fait vraiment plaisir ça . Je vais etre obligé de sortir un Tuto sur ce module tellement j'ai galéré !!!
Je continue mes test et je vous tiens au courant et post le programme basic
LCD en I²C
- paulfjujo
Expert- Messages : 2597
- Âge : 73
- Enregistré en : juillet 2015
- Localisation : 01800
- Contact :
Code : Tout sélectionner
Dans ton programme je ne comprends pas à quoi servent ces lignes :
CODE : TOUT SÉLECTIONNER
j=I2C1_Wr(LCD_ADDR); // i2c slave Address
if (j!=0) return k;
k++;
Delay_ms(100);
j=I2C1_Wr(0x00); // Control byte for Instruction
if (j>0) return k;
k++;
cela servait au debugging , pour verifier que tous les pas de l'init ont été franchis sans probleme
mais tu peux virer ces morceaux, entre les instructions LCD
Code : Tout sélectionner
if (j!=0) return k;
k++;
Delay_ms(100);
Il faut aussi que j'inverse le hard car mon connecteur est branché a l'opposé de celui de ta photo !
PAS BESOIN !
dans l'init du LCD , activer la bonne ligne en fonction du connecteur utilisé
Code : Tout sélectionner
//I2C1_Wr(0x04); // P: left to right, Q: top to bottom sur connecteur A
I2C1_Wr(0x06); // P: Right to left ,Q: top to bottom sur connecteur B
il affiche "PWOUAAAAAAA" !
Bravo.
LCD en I²C
-
Jérémy
Administrateur du site- Messages : 2723
- Âge : 45
- Enregistré en : juillet 2015
- Localisation : Dans le sud
- Contact :
Bonsoir,
Tout le mérite te reviens . Je pense qu'il y avait plusieurs erreur , celle de repeated Start, mais aussi celle du contraste, sans paramétrages de celui ci , mon écran reste vide , même en l'inclinant pour voir en travers .
Concernant les deux broches effectivement ce n'est pas gênant il suffit seulement de retourner l'affichage soit avec la commande 0x06 ou 0x05 ( et non 0x04 comme indiqué) .
J'ai également augmenté la tension du Vlcd, car certain pixel étaient moins allumés que d'autres .
Bref c'est parfait au niveau de la config .
Cependant je sèche sur plusieurs points .
Le premier effectué un clear display : impossible !!! la commande est 0x01 , j'ai essayé de toutes les façons possibles , soit il n'y a aucun effet, soit l’écran ne s'affiche plus du tout .
Le second je n'arrive pas a déplacé le curseur pour par exemple affiché une lettre en plein milieu ? avec du vide autour par exemple.
Voici le programme ULTRA Simplifié ( au du moins le plus que j'ai pus).
Voila le résultat :
http://www.dailymotion.com/video/x35n0gw
Un grand merci
Tout le mérite te reviens . Je pense qu'il y avait plusieurs erreur , celle de repeated Start, mais aussi celle du contraste, sans paramétrages de celui ci , mon écran reste vide , même en l'inclinant pour voir en travers .
Concernant les deux broches effectivement ce n'est pas gênant il suffit seulement de retourner l'affichage soit avec la commande 0x06 ou 0x05 ( et non 0x04 comme indiqué) .
J'ai également augmenté la tension du Vlcd, car certain pixel étaient moins allumés que d'autres .
Bref c'est parfait au niveau de la config .
Cependant je sèche sur plusieurs points .
Le premier effectué un clear display : impossible !!! la commande est 0x01 , j'ai essayé de toutes les façons possibles , soit il n'y a aucun effet, soit l’écran ne s'affiche plus du tout .
Le second je n'arrive pas a déplacé le curseur pour par exemple affiché une lettre en plein milieu ? avec du vide autour par exemple.
Voici le programme ULTRA Simplifié ( au du moins le plus que j'ai pus).
Code : Tout sélectionner
/*##################################################################################
############################## Variable / Constante ###############################
###################################################################################*/
unsigned int i,j; // variable temporaire
unsigned char LCD_ADR = 0x74; // adresse de l'esclave I2C
sbit LED_RA4 at LATA4_bit;
/*##################################################################################
########################## INITIALISATION DE L'ECRAN ##############################
##################################################################################*/
int Display_init(void)
{
Delay_ms(500);
I2C1_Start();
I2C1_Wr(LCD_ADR); // Adresse de l'esclave
// CONTROL_Mode // bit7 -> 0=last control byte, 1=another control byte
// bit6 -> 0=registre inst , 1=registre Data
I2C1_Wr(0x00); // bit5à0 -> 0
// 0b00000000 = 0x00
// function_set // bit7 à 5 valeurs fixes : 001
// bit4: 0:2x4bit, 1:8 bits
I2C1_Wr(0x34); // bit3: 0 Non utilisé
// bit2: 0: 1ligne/32char, 1: 2lignes/16char
// bit1: 0: 1/18 multiplex, 1: 1/9 multiplex
// bit0: 0: standard instr., 1: extended instr.
// 0b00110100 = 0x34
// display_ctl // bit7 à valeur fixe : 00001
// bit2: 0:display off, 1:display On
I2C1_Wr(0x0C); // bit1: 0:cursor off, 1:cursor On
// bit0: 0:clignotement off, 1:On
// 0b00001100 = 0x0C
// Entry_mode_set // bit7à 2: valeur fixe : 000001
// bit1: 0:Decremente l'adresse , 1:Incremente (curseur vers la droite)
I2C1_Wr(0x06); // bit0: 0:No shift , 1: Shift display
// 0b00000110 = 0x06
// Extended instructions
I2C1_Wr(0x35); // DL: 8 bits, M: 16 by two line, SL: 1:18, H: extended instruction set
// Disp_config // bit7à 2: valeur fixe : 000001
I2C1_Wr(0x05); // bit1 : 0=left to right, 1=Right to left
// bit0 : 0=top to bottom 1=bottom to t
// VLCD_SET // Réglage du contraste ##### OBLIGATOIRE #######
// bit7 : valeur fixe : 1
I2C1_Wr(0x97); // bit6: 0=registre VA ; 1=registre VB
// bit5à 0: 000000 jusqu'a 111111 pour le contrtaste
// Normal instruction
I2C1_Wr(0x34); // DL: 8 bits, M: two line, SL: 1:18, H: normal instruction set
I2C1_Wr(0x80); // DDRAM Address set to 00hex
I2C1_Wr(0x02); // return home
I2C1_Stop();
}
/*##################################################################################
############################ PROGRAMME PRINCIPAL ###############################
##################################################################################*/
void main ()
{
TRISA = 0b11101111 ; // RA4 en sortie pour la led
ANSELA=0;
LED_RA4 = 0 ; // On eteint la LED
TRISC = 0b10111101 ; // RC1 output ,RC3,RC4 as input
ANSELC=0;
I2C1_Init(100000); // Initialisation de l'I2C
Delay_ms(100);
Display_init(); // Initialise et configure l'écran
j = 65 ; // Initialisation de j à 65 pour commencer avec les lettres
//########################## BOUCLE INFINIE ##################################
while(1)
{
LED_RA4 = 0; // Pour verifier que le programme tourne
Delay_ms(1000); // On fait clignoter une led
LED_RA4 = 1;
Delay_ms(1000);
I2C1_Start();
I2C1_Wr(LCD_ADR); // i2c slave Address
I2C1_Wr(0x00); // Control byte for Instruction
I2C1_Wr(0x80); // DDRAM Address set to 00hex
I2C1_Repeated_Start();
I2C1_Wr(LCD_ADR); // i2c slave Adress
I2C1_Wr(0x40); // Control byte for Data
I2C1_Wr(0x80+j); // Write ABCDE....
j = j++;
I2C1_Repeated_Start() ;
I2C1_Wr(LCD_ADR);
I2C1_Wr(0x00);
I2C1_Wr(0xc0);
I2C1_Repeated_Start() ;
I2C1_Wr(LCD_ADR);
I2C1_Wr(0x40);
I2C1_Wr(0x80+j);
}
}
Voila le résultat :
http://www.dailymotion.com/video/x35n0gw
Un grand merci
LCD en I²C
-
Jérémy
Administrateur du site- Messages : 2723
- Âge : 45
- Enregistré en : juillet 2015
- Localisation : Dans le sud
- Contact :
Bonjour à tous,
Je continue mes investigations , afin de mieux me familiariser avec ce genre d'écran , qui a le mérite d’être très pratique en I2C( seuelment 2 fils) , et peu gourmand en consommation et je rajouterais un gain de place aussi, car pas d'expendeur de bytes derrière.
Ne réussissant pas a effacer l’écran avec la fonction qui va bien:: j'ai rusé en créer une fonction , qui écrit un caractère vide sur toute la plage de l'écran .
J'ai également réussis a changer l'adresse du curseur .
Par contre quelle est d’après vous la meilleur façon ou la plus pratique pour écrire du texte ?
Par exemple le fameux "HELLO WORLD" . Je pourrais l'écrire lettre par lettre mais c'est pas top , je suppose qu'il y a des solutions ?
Je continue mes investigations , afin de mieux me familiariser avec ce genre d'écran , qui a le mérite d’être très pratique en I2C( seuelment 2 fils) , et peu gourmand en consommation et je rajouterais un gain de place aussi, car pas d'expendeur de bytes derrière.
Ne réussissant pas a effacer l’écran avec la fonction qui va bien:: j'ai rusé en créer une fonction , qui écrit un caractère vide sur toute la plage de l'écran .
Code : Tout sélectionner
void efface_ecran()
{
char i = 0 ; // Variable temporaire
I2C1_Start(); // Ouverture d'une Com I2C
I2C1_Wr(LCD_ADR); // Envoi de l'adresse esclave
I2C1_Wr(0x00); // Byte de controle pour envoyer une instruction
I2C1_Wr(0x80); // INSTRUC : position de l'ADDR du curseur 1ere ligne de 80 à 8F
I2C1_Repeated_Start();// Repetition de l'ouverture de la com I2C
I2C1_Wr(LCD_ADR); // Envoi de l'adresse esclave
I2C1_Wr(0x40); // Byte de controle pour envoyer une DATA
for ( i=0;i<=15;i++)// Boucle pour repeter 16 fois l'action sur la premiere ligne
{
I2C1_Wr(0xA0); // Envoie d'un caractére "vide"
}
I2C1_Repeated_Start();// Repetition de l'ouverture de la com I2C
I2C1_Wr(LCD_ADR); // Envoi de l'adresse esclave
I2C1_Wr(0x00); // Byte de controle pour envoyer une instruction
I2C1_Wr(0xC0); // INSTRUC : position de l'ADDR du curseur 2ieme ligne de C0 à CF
I2C1_Repeated_Start();// Repetition de l'ouverture de la com I2C
I2C1_Wr(LCD_ADR); // Envoi de l'adresse esclave
I2C1_Wr(0x40); // Byte de controle pour envoyer une DATA
for ( i=0;i<=15;i++)// Boucle pour repeter 16 fois l'action sur la deuxiéme ligne
{
I2C1_Wr(0xA0); // Envoie d'un caractére "vide"
}
}
J'ai également réussis a changer l'adresse du curseur .
Par contre quelle est d’après vous la meilleur façon ou la plus pratique pour écrire du texte ?
Par exemple le fameux "HELLO WORLD" . Je pourrais l'écrire lettre par lettre mais c'est pas top , je suppose qu'il y a des solutions ?
LCD en I²C
LCD en I²C
-
Jérémy
Administrateur du site- Messages : 2723
- Âge : 45
- Enregistré en : juillet 2015
- Localisation : Dans le sud
- Contact :
Oui Pat,
J'ai essayé de faire comme dans la DS, à savoir éteindre le display , effacer , et le rallumé . Sans succès . Je crois que je me mélange les pinceaux entre data et instructions .
Pourtant c'est bien des instructions ? les data ne sont la que pour ecrire ?
C'est toujours la même chose soit l'écran reste vide ( sans caractères) , soit il affiche les petites flèches comme sur la vidéo .
J'ai essayé de faire comme dans la DS, à savoir éteindre le display , effacer , et le rallumé . Sans succès . Je crois que je me mélange les pinceaux entre data et instructions .
Pourtant c'est bien des instructions ? les data ne sont la que pour ecrire ?
C'est toujours la même chose soit l'écran reste vide ( sans caractères) , soit il affiche les petites flèches comme sur la vidéo .
Qui est en ligne
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 62 invités