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
Créer sa propre librairie pour LCD
Créer sa propre librairie pour LCD
-
Jérémy

Administrateur du site- Messages : 2750
- Âge : 46
- Enregistré en : juillet 2015
- Localisation : Dans le sud
- Contact :
Je comprends pas quand je double la fonction config ; ça fonctionne bien.
J'ai essayé la méthode de satinas , mais pareil .
EDIT: Ca fonctionne en rajoutant une cmde 0x02 ? mais je ne comprends pas pourquoi !
c'est quand même con, de vouloir faire sa librairie, d'y arriver, mais de ne pas comprendre pourquoi !
Voici la partie config qui fonctionne, grâce au rajout de la ligne LCD_cmde (0x02);
J'ai essayé la méthode de satinas , mais pareil .
EDIT: Ca fonctionne en rajoutant une cmde 0x02 ? mais je ne comprends pas pourquoi !
c'est quand même con, de vouloir faire sa librairie, d'y arriver, mais de ne pas comprendre pourquoi !
Voici la partie config qui fonctionne, grâce au rajout de la ligne LCD_cmde (0x02);
Code : Tout sélectionner
DATA4 = 1; // Envoi de la premiere trame
DATA5 = 1;
DATA6 = 0;
DATA7 = 0;
delay_ms(10);
LCD_EN = 1;
delay_ms(1);
LCD_EN = 0;
delay_ms(10);
LCD_cmde (0x02); // Envoie de 0b:0010 puis de 0b:1000 pour 2 lignes et dot5x8
delay_ms(1);
LCD_cmde (0x28); // On double l'envoie comme sur la DS
delay_ms(1);
LCD_cmde (0x0F); // Ennvoie de b:0000 puis de 0b:1111 pour display curseur et clignotement à 1
delay_ms(1);
LCD_cmde (0x01); // Envoi de 0b:0000 puis de 0b:0001 pour effacer l'ecran
delay_ms(10);
LCD_cmde (0x06); // Envoi de 0b:0000puis de 0b:0110 pour direction du curseur et shift auto
delay_ms(1);
} Créer sa propre librairie pour LCD
Créer sa propre librairie pour LCD
Créer sa propre librairie pour LCD
Créer sa propre librairie pour LCD
-
Jérémy

Administrateur du site- Messages : 2750
- Âge : 46
- Enregistré en : juillet 2015
- Localisation : Dans le sud
- Contact :
Oui moi aussi c'est un peu le Zouk . A mon retour je pense passer sur Windows10 ca me fera une excuse pour mieux ranger
Te tracasse pas pour ta LIB , j'aimerais réussir et comprendre la mienne. Malheureusement je pars deux ou trois semaines a l’étranger sans internet !!!! j'essayerai quand même de trouver un coin !
Te tracasse pas pour ta LIB , j'aimerais réussir et comprendre la mienne. Malheureusement je pars deux ou trois semaines a l’étranger sans internet !!!! j'essayerai quand même de trouver un coin !
Créer sa propre librairie pour LCD
Créer sa propre librairie pour LCD
Ce que fait l'init Arduino est directement tiré de la doc du contrôleur
https://www.sparkfun.com/datasheets/LCD ... df#page=46
https://www.sparkfun.com/datasheets/LCD ... df#page=46
Créer sa propre librairie pour LCD
-
Jérémy

Administrateur du site- Messages : 2750
- Âge : 46
- Enregistré en : juillet 2015
- Localisation : Dans le sud
- Contact :
Génial satinas !
ça fonctionne parfaitement, ma DS n'était certainement pas la bonne. Mais je ne vois toujours pourquoi il faut envoyer ce (0x02) .
Je penche peut être pour le fait qu'on envoie 3 fois la commande 0x03 pour le mode 4mode afin de s'assurer du passage, mais on ne sait pas sur lesquels ça à fonctionner, donc si ça se trouve on est passé en mode 4bit au second essai et alors notre commande 0x28 se retrouverai couper en deux !
Je ne vois que ca
Voici un premier essai, qui m'affiche une lettre sur tout l'écran . Je trouve que ça rame un peu quand même. J’optimiserai à mon retour.
ça fonctionne parfaitement, ma DS n'était certainement pas la bonne. Mais je ne vois toujours pourquoi il faut envoyer ce (0x02) .
Je penche peut être pour le fait qu'on envoie 3 fois la commande 0x03 pour le mode 4mode afin de s'assurer du passage, mais on ne sait pas sur lesquels ça à fonctionner, donc si ça se trouve on est passé en mode 4bit au second essai et alors notre commande 0x28 se retrouverai couper en deux !
Je ne vois que ca
Voici un premier essai, qui m'affiche une lettre sur tout l'écran . Je trouve que ça rame un peu quand même. J’optimiserai à mon retour.
Code : Tout sélectionner
/*##################################################################################
Programme de test pour librairie ecran LCD en mode 4 bit
Fait par Jérémy pour http://www.FantasPic.fr
- Version du "21-03-2016"
- MikroC version 6.6.2
- PIC 18F46K22 FOSC a 8MHZ ,Quartz 8Mhz, PLL DISable
- Data-Shit du PIC : http://ww1.microchip.com/downloads/en/DeviceDoc/41412F.pdf
#################################################################################*/
// Connexions du module LCD
// Broche Read/Write est reliée à la masse
#define LCD_RS LATB.B4 // H:DATA, L:INST
#define LCD_EN LATB.B5
#define DATA4 LATB.B0
#define DATA5 LATB.B1
#define DATA6 LATB.B2
#define DATA7 LATB.B3
// Fin de connexion
unsigned int MSB,LSB, donnee ;
//-------------- Prototype --------------------------------
void Envoi(void) ;
//-------------- Fin Prototype --------------------------------
void Envoi(){ // Valide un Envoi de donnée
LCD_EN = 1;
delay_us(800);
LCD_EN = 0;
delay_us(800);
}
void LCD_cmde (int donnee)
{
LCD_RS = 0 ;
MSB = donnee >> 4 ; // on sort les 4 MSB de la donnée envoyé
LSB = donnee & 0x0F; // On sort les 4 LSB
LATB = (LATB & 0xF0) + MSB ; // On affecte le MSB de la donnée au LSB du PORTB sans toucher au MSB du PORTB
Envoi();
LATB = (LATB & 0xF0) + LSB ; // On affecte le MSB de la donnée au LSB du PORTB sans toucher au MSB du PORTB
Envoi();
}
void LCD_data (int donnee)
{
LCD_RS = 1 ;
MSB = donnee >> 4 ; // on sort les 4 MSB de la donnée envoyée
LSB = donnee & 0x0F; // On sort les 4 LSB de la donnée envoyée
LATB = (LATB & 0xF0) + MSB ; // On affecte le MSB au PORTB
Envoi();
LATB = (LATB & 0xF0) + LSB ; // On affecte le LSB au PORTB
Envoi();
}
void LCD_conf(){
char i;
LCD_RS = 0 ; // Registre Commande
LATB = (LATB & 0xF0) + 3 ; // On place le portB à 0b:xxxx0011 pour passer en mode 4bits
for (i=0;i<=2;i++)
{
Envoi();
delay_ms(5);
}
LCD_cmde (0x02); // Je pense a verifier qu'on envoi 2 car on ne sait pas quand le LCD
// est passé en mode 4 bit au premier deuxieme ou troisieme coup.
LCD_cmde (0x28); // On envoi le mode 4 bit, 2 lignes, Dot5x8
LCD_cmde (0x0C); // Ennvoie de b:0000 puis de 0b:1100 display:On curseur:Off et clignotement:Off
LCD_cmde (0x01); // Envoi de 0b:0000 puis de 0b:0001 pour effacer l'ecran
LCD_cmde (0x06); // Envoi de 0b:0000puis de 0b:0110 pour direction du curseur et shift auto
}
void main() {
ANSELB = 0; // PORTB en digital
TRISB = 0; // PORTB en sortie
LATB = 0;
delay_ms(10);
LCD_conf();
delay_ms(10);
while(1)
{
LCD_data(67);
delay_ms(100);
}
} Créer sa propre librairie pour LCD
- paulfjujo

Maître- Messages : 3261
- Âge : 75
- Enregistré en : juillet 2015
- Localisation : 01800
- Contact :
je confirme
init utilisée avec MPLAB C18 ..
car le LCD doit etre initialisé d'abord en mode 8 bits// envoi 3 fois de suite 0x30
init utilisée avec MPLAB C18 ..
Code : Tout sélectionner
void LCD_Init(void)
{
//PORT initialization
//4bit mode
//Upper 4-bits of the DATAPORT as output
LCD_DATAPORT_TRIS &= 0x0f;
LCD_DATAPORT &= 0x0f;
LCD_Delay15ms();
//control port initialization
LCD_RSPIN_TRIS =0; //make control ports output
LCD_ENPIN_TRIS =0;
LCD_RSPIN =0; //clear control ports
LCD_ENPIN =0;
//initialization by instruction
// envoi 3 fois de suite 0x30 (03 sur le quarter MSB du PORTB)
LCD_Delay15ms();
// Upper nibble interface
LCD_DATAPORT =LCD_DATAPORT & 0x0f; // 1ere init
LCD_DATAPORT =LCD_DATAPORT| 0b00110000; // 0x30
Pulse_E() ;
LCD_Delay15ms();
// Upper nibble interface
LCD_DATAPORT &= 0x0f; // 2em ini
LCD_DATAPORT |= 0b00110000;
Pulse_E() ;
LCD_Delay15ms();
// Upper nibble interface
LCD_DATAPORT &= 0x0f; // 3em init
LCD_DATAPORT |= 0b00110000;
LCD_Delay();
Pulse_E() ;
LCD_Delay4ms();
//Force le mode 4 Bits 0x02H sur quartet MSB du PortB
//Function SET Commande 0 0 1 DL N F X X avec RS=0 RW=0
// Upper nibble interface
LCD_DATAPORT &= 0x0f; // Clear upper port
LCD_Delay();
LCD_DATAPORT |= 0b00100000;
LCD_Delay();
Pulse_E() ;
//Function SET Commande 0 0 1 DL N F X X avec RS=0 RW=0
//Definit la taille de l'interface (DL=0 pour mode 4 bits, DL=1 pour mode 8 bits),
// le nombre de lignes (NL=0 pour 1 ligne, N=1 pour 2 ou 4 lignes),
// et la taille des fontes (F=0 pour des cars 5x7, F=1 pour des cars 5x10).
LCD_Cde(0b00101000); // 0x28 2Line 5x8
//Display on/off control 0 0 0 0 1 D C B
// affichage (D), curseur (C), clignotement du curseur (B).
LCD_Cde(0b00001000); //display off
LCD_Cde(0b00000001); //display clear was 0b00000001);
//Entry mode setting
//Entry mode command " 0 0 0 0 0 1 ID S "
//ID =0 no cursor increment during read and write
//ID =1 cursor increment during read and write
//S =0 no display during read and write
//S =1 display shift
LCD_Cde(0b00000110); //0x06 if cursor inc and no display shift
//Display on off ,Blink ,cursor command set
//"0 0 0 0 1 D C B "
//D=1 dislay on, C=1 cursor off, B=1 blink off
LCD_Cde(0b00001100); //0x0F 0b00001111 =display ON, cursor on, blink ON
LCD_Delay();
// end of initialization
return;
}
Qui est en ligne
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 2 invités


