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 I2C
Bonsoir,
Merci pour vos retours d'expérience. je vous avoue que vos de suppositions m'ont traverser l'esprit.
Pour ceux qui est de la breadbord, mon projet est loin, très loin d'être aboutit. C'est donc pour ça que je suis encore dessus
Et pour le délai, je vais tester ça et vous dire quoi
Merci
@++
Merci pour vos retours d'expérience. je vous avoue que vos de suppositions m'ont traverser l'esprit.
Pour ceux qui est de la breadbord, mon projet est loin, très loin d'être aboutit. C'est donc pour ça que je suis encore dessus
Et pour le délai, je vais tester ça et vous dire quoi
Merci
@++
LCD I2C
- paulfjujo
Expert- Messages : 2605
- Âge : 73
- Enregistré en : juillet 2015
- Localisation : 01800
- Contact :
au fait,
as-tu rajouté un circuit de reset (pin MCLR) sur ce PIC
(pas vu sur ton 1er schema)
le circuit RC permetant d' attendre la fin de mise sous tension pour démmarrer l'oscillateur le PIC
il est aussi possible d'associer le Power up timer = enable dans la config ..
exemple:
as-tu rajouté un circuit de reset (pin MCLR) sur ce PIC
(pas vu sur ton 1er schema)
le circuit RC permetant d' attendre la fin de mise sous tension pour démmarrer l'oscillateur le PIC
il est aussi possible d'associer le Power up timer = enable dans la config ..
exemple:
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
LCD I2C
Ah non, je n'ai pas un tel circuit de reset. J'ai juste une résistance sur MCLR.
Ok pour le Power up timer, je prend note
Merci
@++
Ok pour le Power up timer, je prend note
Merci
@++
LCD I2C
Bonsoir,
Bon j'ai ajouté un délai comme le dit paulfjujo + augmenter les délai déjà présent dans la procédure init du LCD Rien a faire. Je ne vois plus rien lol.
Je pensai une chose; si j'alimente le lcd avant sur une autre alim pensez-vous que ça puisse résoudre le problème ? En gros j'alimente le module pcf8574AT quelques seconde avant ma breadbord ou il y a le pic ?
Merci
Après le code n'est pas de moi, donc je ne saisis pas encore toutes les étapes. Et il est fait pour un LCD en 16x4 et moi j'ai un 16x2. Au cas où je préfère le préciser
@++
Bon j'ai ajouté un délai comme le dit paulfjujo + augmenter les délai déjà présent dans la procédure init du LCD Rien a faire. Je ne vois plus rien lol.
Je pensai une chose; si j'alimente le lcd avant sur une autre alim pensez-vous que ça puisse résoudre le problème ? En gros j'alimente le module pcf8574AT quelques seconde avant ma breadbord ou il y a le pic ?
Merci
Après le code n'est pas de moi, donc je ne saisis pas encore toutes les étapes. Et il est fait pour un LCD en 16x4 et moi j'ai un 16x2. Au cas où je préfère le préciser
@++
LCD I2C
- paulfjujo
Expert- Messages : 2605
- Âge : 73
- Enregistré en : juillet 2015
- Localisation : 01800
- Contact :
venom a écrit :
Je pensai une chose; si j'alimente le lcd avant sur une autre alim pensez-vous que ça puisse résoudre le problème ? En gros j'alimente le module pcf8574AT quelques seconde avant ma breadbord ou il y a le pic ?
ça ne changera rien ...
pourtant au post #27 , il semblait que ton LCD affichait quelque chose ?
quelle est ta tension d'alimentation VCC ( et donc LCD) ?
Est-tu sur de ton FOSC ? 32MHz ?
remet un test tempo et led pour verifier
nota; la 1ere chos à faire dans le main()
est de regler FOSC .. ensuite les registres hardware ..
Code : Tout sélectionner
test FOSC visuel avec une led
for (i=0;i<4;i++)
{
LED=1;
Delay_ms(2000);
LED=0;
Delay_ms(2000);
}
pour etre sur de la valeur FOSC (et de tous les delay qui suivent ..)
tu peux enlever toute la partie test adresses I2C ..puisque que le LCD est reconnu en 0x7E .
essaie d'adapter cette init, prevue pour un LCD 2116 2x16
qui est bien plus complete ..
Code : Tout sélectionner
int Display_init(void)
{
int j,k;
k=0;
Delay_ms(500);
I2C1_Start();
j=I2C1_Wr(LCD_ADR); // 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++;
//Delay_ms(100);
I2C1_Wr(0x34); // DL: 8 bits, M: 16 by two line display, SL: 1:18, H: normal instruction set
//Delay_ms(100);
I2C1_Wr(0x0C); // D: Display on, C: curser off, B: blink off
//Delay_ms(100);
I2C1_Wr(0x06); // I/D: increment, S: no shift
//Delay_ms(100);
I2C1_Wr(0x35); // DL: 8 bits, M: 16 by two line, SL: 1:18, H: extended instruction set
//Delay_ms(100);
//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
//Delay_ms(100);
I2C1_Wr(0x11); // TC1: 0, TC0: 1
//Delay_ms(100);
I2C1_Wr(0x42); // HV Stages 3
//Delay_ms(100);
//I2C1_Wr(0x9f); // set Vlcd, store to VA
I2C1_Wr(0x96); // set Vlcd, store to VA
//Delay_ms(100);
j=I2C1_Wr(0x34); // DL: 8 bits, M: two line, SL: 1:18, H: normal instruction set
if (j>0) return k;
k++;
//Delay_ms(100);
j=I2C1_Wr(0x80); // DDRAM Address set to 00hex
if (j>0) return k;
k++;
//Delay_ms(100);
j=I2C1_Wr(0x02); // return home
if (j>0) return k;
k++;
//Delay_ms(100);
I2C1_Stop();
return k;
}
ou potasser ce document :
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
LCD I2C
Bonjour a tous,
Oui ça fonctionne mais pas a chaque démarrage de la breadbord
5V j'utilise les platines conçu pour les breadbords. Qui délivre du 5V ou 3.3V
Pour ce qui est de ta procédure int Display_init tu souhaite que le la mettre a la place de void I2C_LCD_Init() Si j'ai bien compris ?
Encore merci pour ta patience et tes explications. Je vais voir pour tester le fosc avec une led.
je vais potasser le PDF je vous tiens au courant (continue)
Ps: vous allez me dire que je suis surement trop en avance par rapport a mes compétences Mais il y a t'il une "norme" pour choisir la vitesse de l'oscillation ? Je veux dire si je passe mon projet en 4Mhz par exemple. Sa change quoi concrètement ? Désolé de mes maigres connaissances. car un projet a lcd n'est pas le même qu'un projet a led. Je sais que l'oscillation fait varié l’exécution du code, mais quel valeur mettre en fonction du projet ?
Si vous avez un bon french tuto je suis preneur
@++
paulfjujo a écrit :pourtant au post #27 , il semblait que ton LCD affichait quelque chose ?
Oui ça fonctionne mais pas a chaque démarrage de la breadbord
paulfjujo a écrit :quelle est ta tension d'alimentation VCC ( et donc LCD) ?
5V j'utilise les platines conçu pour les breadbords. Qui délivre du 5V ou 3.3V
Pour ce qui est de ta procédure int Display_init tu souhaite que le la mettre a la place de void I2C_LCD_Init() Si j'ai bien compris ?
Encore merci pour ta patience et tes explications. Je vais voir pour tester le fosc avec une led.
je vais potasser le PDF je vous tiens au courant (continue)
Ps: vous allez me dire que je suis surement trop en avance par rapport a mes compétences Mais il y a t'il une "norme" pour choisir la vitesse de l'oscillation ? Je veux dire si je passe mon projet en 4Mhz par exemple. Sa change quoi concrètement ? Désolé de mes maigres connaissances. car un projet a lcd n'est pas le même qu'un projet a led. Je sais que l'oscillation fait varié l’exécution du code, mais quel valeur mettre en fonction du projet ?
Si vous avez un bon french tuto je suis preneur
@++
LCD I2C
- paulfjujo
Expert- Messages : 2605
- Âge : 73
- Enregistré en : juillet 2015
- Localisation : 01800
- Contact :
venom a écrit : Mais il y a t'il une "norme" pour choisir la vitesse de l'oscillation ? Je veux dire si je passe mon projet en 4Mhz par exemple. Sa change quoi concrètement ?
On choisit la frequence d'horloge en fonction des contraintes imposées par un cahier des charges ( qui definit les details du projet),
d'un temps d'execution imperativement inferieur à une certaine limite ..
ou tout un tas de fonction à realiser en un temps imparti.
Dans ton cas, y a pas le feu au lac ..d'autant que qand on veut afficher un resultat sur un LCD, il faut mettre une tempo
pour avoir le temps de le visualiser ..
donc 32MHz n'est pas un bon choix , dans ce cas là.
4MHz nettement suffisant et assez couramment utilisé.
NE PAS OUBLIER de definir FOSC dans le projet .. qui conditionne les valeurs reelle des delais (Delay_ms(xx);
ou le fonctionnement d'un UART (vitesse en bauds)
***********************************
dans cet autre exemple d'init d'un afficheur 2x16 cars,
Init LCD en mode 8 bits !pour pouvoir ensuite le passer en mode 4 bits...
dans cet exemple, il est plus facile de lire la commande envoyée au LCD, que
que de voir une succession , combinaison logique avec des OU
et il ne faut pas oublier d' ACTIVER l'ecran en fin d'init
avec LCD_putcmd(0x0C,1);
Code : Tout sélectionner
void LCD_init_2x16(void)
{
// Wait for more than 15 ms after VCC rises to 4.5 V
Delay_ms(1000);
// Send Command 0x30
LCD_putcmd(0x30,0);
// Wait for more than 4.1 ms
Delay_ms(100);
// Send Command 0x30
LCD_putcmd(0x30,0);
// Wait for more than 100 us
Delay_ms(100);
// Send Command 0x30
LCD_putcmd(0x30,0);
Delay_ms(100);
// Function set: Set interface to be 4 bits long (only 1 cycle write).
LCD_putcmd(0x25,0);
Delay_ms(20);
// Function set: DL=0;Interface is 4 bits, N=1; 2 Lines, F=0; 5x8 dots font)
LCD_putcmd(0x28,1);
Delay_ms(20);
// Display Off: D=0; Display off, C=0; Cursor Off, B=0; Blinking Off
LCD_putcmd(0x08,1);
Delay_ms(20);
// Display Clear
LCD_putcmd(LCD_CLEAR,1);
Delay_ms(100);
// Entry Mode Set: I/D=1; Increament, S=0; No shift
LCD_putcmd(0x06,1);
Delay_ms(20);
// Display On, Cursor Off
LCD_putcmd(0x0C,1);
Delay_ms(20);
}
un cas similaire ICI
LCD I2C
Merci pour tes précisions paulfjujo. J'en prend note, j’avoue ne pas voir fait de cahier des charges
Merci pour tes exemples de code (tu est une vrai mine d'or a code) D'ailleurs dans mes recherches je retombe souvent sur ton site.
Je vais mettre tout ça à plat.
@++
Merci pour tes exemples de code (tu est une vrai mine d'or a code) D'ailleurs dans mes recherches je retombe souvent sur ton site.
Je vais mettre tout ça à plat.
@++
LCD I2C
Bonjour,
Bon j'ai un peu regarder, pour le moment j'ai laisser le code tel quel. J'y ai juste ajouter la boucle pour faire clignoter une led. Voici mes 2 cas de figure :
1er test j'ai fait ainsi :
Quand je fait ce-ci, la led ne s'allume pas et le texte ne s'affiche pas.
Quand je fait ça :
La led se met bien a clignoter pendant 2 secondes quand le texte s'affiche bien a l’écran
Dans ce deuxième cas, j'ai l'impression que quand la communication i2c ne passent pas le code reste bloquer dans I2C_LCD_Init() ??
Et quand la communication i2c passe, le code boucle bien. Ma réflexion est elle bonne ?
@++
Bon j'ai un peu regarder, pour le moment j'ai laisser le code tel quel. J'y ai juste ajouter la boucle pour faire clignoter une led. Voici mes 2 cas de figure :
1er test j'ai fait ainsi :
Code : Tout sélectionner
void main() {
OSCCON = 0b01101000; // configuration OSCCON interne 4mhz
ANSEL = 0; // Configure AN pins as digital I/O
ANSELH = 0;
TRISC = 0x00;
PORTC = 0x00;
//test FOSC visuel avec une led
for (i=0;i<4;i++)
{
LED=1;
Delay_ms(2000);
LED=0;
Delay_ms(2000);
}
I2C1_Init(100000);
Delay_ms(500); // laisser le temps au LCD de s'alimenter correctement
I2C_LCD_Init();
I2C_LCD_Cmd(_LCD_CURSOR_OFF);
I2C_LCD_Cmd(_LCD_CLEAR);
I2C_Lcd_Out(1,1,txt1); // Write text in first row
I2C_Lcd_Out(2,1,txt2); // Write text in second row
while(1) {
}
}
Quand je fait ce-ci, la led ne s'allume pas et le texte ne s'affiche pas.
Quand je fait ça :
Code : Tout sélectionner
void main() {
OSCCON = 0b01101000; // configuration OSCCON interne 4mhz
ANSEL = 0; // Configure AN pins as digital I/O
ANSELH = 0;
TRISC = 0x00;
PORTC = 0x00;
I2C1_Init(100000);
Delay_ms(500); // laisser le temps au LCD de s'alimenter correctement
I2C_LCD_Init();
I2C_LCD_Cmd(_LCD_CURSOR_OFF);
I2C_LCD_Cmd(_LCD_CLEAR);
I2C_Lcd_Out(1,1,txt1); // Write text in first row
I2C_Lcd_Out(2,1,txt2); // Write text in second row
while(1) {
//test FOSC visuel avec une led
for (i=0;i<4;i++)
{
LED=1;
Delay_ms(2000);
LED=0;
Delay_ms(2000);
}
}
}
La led se met bien a clignoter pendant 2 secondes quand le texte s'affiche bien a l’écran
Dans ce deuxième cas, j'ai l'impression que quand la communication i2c ne passent pas le code reste bloquer dans I2C_LCD_Init() ??
Et quand la communication i2c passe, le code boucle bien. Ma réflexion est elle bonne ?
@++
LCD I2C
Qui est en ligne
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 8 invités