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 ---
Forum général sur le langage C !

Modérateur : Jérémy

Créer sa propre librairie pour LCD
Jérémy
Administrateur du site
Administrateur du site
Messages : 2750
Âge : 46
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#11 Message par Jérémy » lun. 21 mars 2016 13:12

Merci Paulfjujo la marteau-thérapie fonctionne assez bien sur moi ....
N’hésite pas encore et encore , je fais mon boulet la
C'est en faisant des erreurs, que l'on apprend le mieux !!!

Créer sa propre librairie pour LCD
Jérémy
Administrateur du site
Administrateur du site
Messages : 2750
Âge : 46
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#12 Message par Jérémy » lun. 21 mars 2016 17:43

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

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);
C'est en faisant des erreurs, que l'on apprend le mieux !!!

Créer sa propre librairie pour LCD
Guest
Confirmé
Confirmé
Messages : 800
Enregistré en : mars 2017

#13 Message par Guest » lun. 21 mars 2016 17:59

oups.......

Créer sa propre librairie pour LCD
Jérémy
Administrateur du site
Administrateur du site
Messages : 2750
Âge : 46
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#14 Message par Jérémy » lun. 21 mars 2016 18:56

maï a écrit :Source du message oups.......

??? pourquoi ???? :roll:
C'est en faisant des erreurs, que l'on apprend le mieux !!!

Créer sa propre librairie pour LCD
Guest
Confirmé
Confirmé
Messages : 800
Enregistré en : mars 2017

#15 Message par Guest » lun. 21 mars 2016 19:02

J'ai cru ,avoir encore dans ma lib le source et le h pour 18F mais lors d'une migration PC perdu le fichier .h,
j'ai dans ma biblio C pour 16F le .h et le source je peux te poster cela pour te donner une idée du comment cela fonctionne

je reconnais c'est un peu le souK dans mes fichiers mais bon ....

Créer sa propre librairie pour LCD
Jérémy
Administrateur du site
Administrateur du site
Messages : 2750
Âge : 46
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#16 Message par Jérémy » lun. 21 mars 2016 19:11

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

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 ! :lol:
C'est en faisant des erreurs, que l'on apprend le mieux !!!

Créer sa propre librairie pour LCD
Guest
Confirmé
Confirmé
Messages : 800
Enregistré en : mars 2017

#17 Message par Guest » lun. 21 mars 2016 19:19

Pas de problème, je la range
ah oui un conseil avec ENABLE tu peux faire facilement un biblio standard, c'est a dire qui passe pour 8 ou 4 bits je te laisse trouver ,allez petite piste lors de la compilation ;)

tient aussi sur ENABLE il faut revoir le sujet

bonne soirée et

A+

Créer sa propre librairie pour LCD
satinas
Expert
Expert
Messages : 1497
Enregistré en : novembre 2015

#18 Message par satinas » lun. 21 mars 2016 19:22

Ce que fait l'init Arduino est directement tiré de la doc du contrôleur
https://www.sparkfun.com/datasheets/LCD ... df#page=46

Créer sa propre librairie pour LCD
Jérémy
Administrateur du site
Administrateur du site
Messages : 2750
Âge : 46
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#19 Message par Jérémy » lun. 21 mars 2016 21:45

Génial satinas ! Merci !

ç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,LSBdonnee ;

//--------------    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 ;
  
MSB donnee >> ;      // 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 ;
  
MSB donnee >> ;      // 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 ;        // Registre Commande
  
LATB = (LATB 0xF0) + // 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);

 }
C'est en faisant des erreurs, que l'on apprend le mieux !!!

Créer sa propre librairie pour LCD
paulfjujo
Avatar de l’utilisateur
Maître
Maître
Messages : 3261
Âge : 75
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#20 Message par paulfjujo » mar. 22 mars 2016 10:08

je confirme
// envoi 3 fois de suite 0x30
car le LCD doit etre initialisé d'abord en mode 8 bits
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;
}
Aide toi, le ciel ou FantasPic t'aidera


Retourner vers « Langage C »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 2 invités