Répondre à la discussion
Affichage des résultats 1 à 24 sur 24

Utilisation XLCD sur pic18F



  1. #1
    Linternautedu94

    Question Utilisation XLCD sur pic18F


    ------

    Bonjour,

    Je pense avoir fait une grosse bourde en me trompant de fil à connecter sur mon LCD (2*16)... Au lieu de mettre le +5V, j'ai mis le +16V issu du transfo... Vous en pensez quoi? ==> Poubelle? (quelle maladresse!)

    Quand je mets le +5V le retroéclairage s'allume mais rien de rien...

    Enfin, comme je n'ai jamais pu le tester, j'ai codé cette partie là, mais il ne se passe rien... :s

    Code:
    #include <p18f4525.h>
    #include <delays.h>
    #include <xlcd.h>
    
    #pragma config OSC = INTIO67	// Internal Oscillator @ 8Mhz with OSC2 at RA6 & OSC1 at RA7
    #pragma config FCMEN = OFF		// Fail Safe Clock Monitor : Disabled.
    #pragma config IESO = OFF		// Internal External Osc. Switch Over : Disabled.
    #pragma config PWRT = OFF		// Power Up Timer : Disabled.
    #pragma config BOREN = OFF 		// Brown Out Reset : Disabled.
    #pragma config WDT = OFF		// Watch Dog Timer : Disabled.
    #pragma config MCLRE = OFF		// MCLRE : Disabled.
    #pragma config PBADEN = OFF		// Port B A/D Enable : Disabled. => sortie numérique sur RESET.
    #pragma config STVREN = OFF		// Stack oVerflow Reset : Disabled.
    #pragma config LVP = OFF		// Low voltage ICSP : Disabled.
    
    
    void main(void)
    {
    	
    	PORTB = 0x00;	// Data value is 0.
    	TRISB = 0x00;	// All B pin are in output direction.
    	
    	OpenXLCD(FOUR_BIT & LINES_5X7);
    	
    	SetDDRamAddr(0x06);	// On commence à écrire sur le 7eme bloc de la première ligne.
    	
    	putrsXLCD("prenom");
    	while(1);			// Boucle infinie.
    }
    
    void DelayXLCD(void) // Delay of 5ms
    {
    	Delay10KTCYx(4);
    }
    
    void DelayPORXLCD(void)	// Delay of 15ms
    {
    	Delay1KTCYx(120);
    }
    
    void DelayFor18TCY(void) // Delay of exactly 18Tcy.
    {
    	Delay10TCYx(1);
    	Nop();Nop();
    	Nop();Nop();
    	Nop();Nop();
    	Nop();Nop();
    }
    Quant à mon header xlcd.h, j'ai juste modifié quelques paramètres... dont voici un extrait :
    Code:
    /* Interface type 8-bit or 4-bit
     * For 8-bit operation uncomment the #define BIT8
     */
    /* #define BIT8 */
    
    /* When in 4-bit interface define if the data is in the upper
     * or lower nibble.  For lower nibble, comment the #define UPPER
     */
    /* #define UPPER  */
    
    /* DATA_PORT defines the port to which the LCD data lines are connected */
    #define DATA_PORT      PORTB
    #define TRIS_DATA_PORT TRISB
    
    /* CTRL_PORT defines the port where the control lines are connected.
     * These are just samples, change to match your application.
     */
    #define RW_PIN   PORTBbits.RB6   /* PORT for RW (avant il y avait LAT)*/ 
    #define TRIS_RW  TRISBbits.TRISB6    /* TRIS for RW */ 
    
    #define RS_PIN   PORTBbits.RB5   /* PORT for RS (avant il y avait LAT)*/ 
    #define TRIS_RS  TRISBbits.TRISB5    /* TRIS for RS */ 
    
    #define E_PIN    PORTBbits.RTB4   /* PORT for D (avant il y avait LAT) */ 
    #define TRIS_E   TRISBbits.TRISB4    /* TRIS for E  */
    Alors à votre avis?

    Code = Faux ou LCD tout simplement HS après les 16V foutu au derrière ???

    -----

  2. #2
    guillaume83

    Re : Utilisation XLCD sur pic18F

    Bonjour
    essai de te procurer un lcd neuf , cumuler les insertitude sur le sof et le hard n' est jamais bon .
    le mieu est d'avoir un montage sur puis aprés de débuguer le logiciel.
    @+

  3. #3
    Linternautedu94

    Thumbs up Re : Utilisation XLCD sur pic18F

    Citation Envoyé par guillaume83 Voir le message
    Bonjour
    essai de te procurer un lcd neuf , cumuler les insertitude sur le sof et le hard n' est jamais bon .
    le mieu est d'avoir un montage sur puis aprés de débuguer le logiciel.
    @+

    Merci Guillaume de ta réponse! T'as raison, demain je retourne m'acheter 2 LCD neufs (carrément) histoire d'en avoir un de réserve... Ça me rassure que tu m'ai répondu, parce que je finissais par croire que personne ne voulait me parler, me répondre ou simplement parce que personne ne pigeait mon français (ou mon code pourtant simple et clair)... Merci, j'te tiens au courant

    @++

  4. #4
    MorpheusPic

    Re : Utilisation XLCD sur pic18F

    tu doit avoir des remorts ^^ un povre petit LCD tout neuf

    je pense pas quil est resister a sa ,mais bon quant ton programme marchera tu peut toujour essayer de le brancher a la place pour etre sur quil est mort

  5. A voir en vidéo sur Futura
  6. #5
    Linternautedu94

    Unhappy Re : Utilisation XLCD sur pic18F

    Citation Envoyé par MorpheusPic Voir le message
    tu doit avoir des remorts ^^ un povre petit LCD tout neuf

    je pense pas quil est resister a sa ,mais bon quant ton programme marchera tu peut toujour essayer de le brancher a la place pour etre sur quil est mort
    Je vais criser! Je viens d'acheter un autre LCD et j'ai testé mon programme et il marche toujours pas! J'vais devenir fou...

    pourtant j'ai bien connecté les pinoches... J'ai remodifié un peu mon code et au final, ça donne ça (qui ne marche toujours pas):

    Code:
    #include <p18f4525.h>
    #include <delays.h>
    #include <xlcd.h>
    
    
    #pragma config OSC = INTIO67	// Internal Oscillator @ 8Mhz with OSC2 at RA6 & OSC1 at RA7
    #pragma config FCMEN = OFF		// Fail Safe Clock Monitor : Disabled.
    #pragma config IESO = OFF		// Internal External Osc. Switch Over : Disabled.
    #pragma config PWRT = OFF		// Power Up Timer : Disabled.
    #pragma config BOREN = OFF 		// Brown Out Reset : Disabled.
    #pragma config WDT = OFF		// Watch Dog Timer : Disabled.
    #pragma config MCLRE = OFF		// MCLRE : Disabled.
    #pragma config PBADEN = OFF		// Port B A/D Enable : Disabled. => sortie numérique sur RESET.
    #pragma config STVREN = OFF		// Stack oVerflow Reset : Disabled.
    #pragma config LVP = OFF		// Low voltage ICSP : Disabled.
    
    
    void main(void)
    {
    	
    	OpenXLCD(FOUR_BIT & LINES_5X7);
    	while(BusyXLCD());
    	SetDDRamAddr(0x06);	// On commence à écrire sur le 7eme bloc de la première ligne.
    	while(BusyXLCD());
    	WriteDataXLCD('c');
    	while(1);			// Boucle infinie. 
    	
    }
    
    void DelayXLCD(void) // Delay of 5ms
    {
    	Delay10KTCYx(1);
    }
    
    void DelayPORXLCD(void)	// Delay of 15ms
    {
    	Delay10KTCYx(3);
    }
    
    void DelayFor18TCY(void) // Delay of exactly 18Tcy.
    {
    	Delay10TCYx(1);
    	Nop();Nop();
    	Nop();Nop();
    	Nop();Nop();
    	Nop();Nop();
    }

    et un extrait de mon fichier xlcd.h (header) dans lequel j'ai quasiment rien modifié sauf "le pinout..." :

    Code:
    /* PIC18 XLCD peripheral routines.
     *
     *   Notes:
     *      - These libraries routines are written to support the
     *        Hitachi HD44780 LCD controller.
     *      - The user must define the following items:
     *          - The LCD interface type (4- or 8-bits)
     *          - If 4-bit mode
     *              - whether using the upper or lower nibble
     *          - The data port
     *              - The tris register for data port
     *              - The control signal ports and pins
     *              - The control signal port tris and pins
     *          - The user must provide three delay routines:
     *              - DelayFor18TCY() provides a 18 Tcy delay
     *              - DelayPORXLCD() provides at least 15ms delay
     *              - DelayXLCD() provides at least 5ms delay
     */
    
    /* Interface type 8-bit or 4-bit
     * For 8-bit operation uncomment the #define BIT8
     */
    /* #define BIT8 */
    
    /* When in 4-bit interface define if the data is in the upper
     * or lower nibble.  For lower nibble, comment the #define UPPER
     */
    /* #define UPPER  */
    
    /* DATA_PORT defines the port to which the LCD data lines are connected */
    #define DATA_PORT      PORTB
    #define TRIS_DATA_PORT TRISB
    
    /* CTRL_PORT defines the port where the control lines are connected.
     * These are just samples, change to match your application.
     */
    #define RW_PIN   PORTBbits.RB6   /* PORT for RW (avant il y avait LAT)*/ 
    #define TRIS_RW  TRISBbits.TRISB6    /* TRIS for RW */ 
    
    #define RS_PIN   PORTBbits.RB5   /* PORT for RS (avant il y avait LAT)*/ 
    #define TRIS_RS  TRISBbits.TRISB5    /* TRIS for RS */ 
    
    #define E_PIN    PORTBbits.RTB4   /* PORT for D (avant il y avait LAT) */ 
    #define TRIS_E   TRISBbits.TRISB4    /* TRIS for E  */
    Help please, j'en ai marre !

    PS : Les tempo sont -elles bonnes?

  7. #6
    Linternautedu94

    Re : Utilisation XLCD sur pic18F

    Bonjour, pour info je n'arrive toujours pas à faire fonctionner mon LCD basé sur un controlleur SPLC780D. J'ai épluché la datasheet du controlleur et j'ai même recodé la fonction d'initialisation en C comme décrite sur la datasheet en prenant garde à faire des tempos correctes ( > tempos minis.) et toujours RIEN!

    Apparemment, personne ne connait ou tout le monde s'en fou... dommage... :'(

    Je tiens à préciser que je travaille avec l'oscillateur interne de mon PIC18F4525 qui est cadencé à 8Mhz (=> 125ns)...

    Un coup d'épée dans l'eau de plus ou de moins, d'facon...

  8. #7
    Qristoff
    Animateur Électronique

    Re : Utilisation XLCD sur pic18F

    Bonjour
    Un petit morceau de schéma peut être ? pour vérifier si tout est normalement connecté ! avant de vérifier le soft, on va vérfier le hard...

  9. #8
    Linternautedu94

    Arrow Re : Utilisation XLCD sur pic18F

    Citation Envoyé par Qristoff Voir le message
    Bonjour
    Un petit morceau de schéma peut être ? pour vérifier si tout est normalement connecté ! avant de vérifier le soft, on va vérfier le hard...
    Bonjour Qristoff!

    Avant tout, merci d'avoir prit la peine de lire mon topic...

    Pour le schema, le voici en pièce jointe... Pour le code, le voici :

    Extrait du xlcd.h contenant uniquement la partie modifiée :
    Code:
    /* Interface type 8-bit or 4-bit
     * For 8-bit operation uncomment the #define BIT8
     */
    /* #define BIT8 */
    
    /* When in 4-bit interface define if the data is in the upper
     * or lower nibble.  For lower nibble, comment the #define UPPER
     */
    /* #define UPPER */
    
    /* DATA_PORT defines the port to which the LCD data lines are connected */
    #define DATA_PORT      PORTB
    #define TRIS_DATA_PORT TRISB
    
    /* CTRL_PORT defines the port where the control lines are connected.
     * These are just samples, change to match your application.
     */
    #define RW_PIN   LATBbits.LATB6   /* PORT for RW */ 
    #define TRIS_RW  TRISBbits.TRISB6    /* TRIS for RW */ 
    
    #define RS_PIN   LATBbits.LATB5   /* PORT for RS */ 
    #define TRIS_RS  TRISBbits.TRISB5    /* TRIS for RS */ 
    
    #define E_PIN    LATBbits.LATB4   /* PORT for D  */ 
    #define TRIS_E   TRISBbits.TRISB4    /* TRIS for E  */
    mon main.c contenant les tempo (éxactes) simulées sous Oshon soft - PIC18 Simulator IDE:
    Code:
    #include "p18f4525.h"
    #include "delays.h"
    #include "xlcd.h"
    
    
    #pragma config OSC = INTIO67	// Internal Oscillator @ 8Mhz with OSC2 at RA6 & OSC1 at RA7
    #pragma config FCMEN = OFF		// Fail Safe Clock Monitor : Disabled.
    #pragma config IESO = OFF		// Internal External Osc. Switch Over : Disabled.
    #pragma config PWRT = OFF		// Power Up Timer : Disabled.
    #pragma config BOREN = OFF 		// Brown Out Reset : Disabled.
    #pragma config WDT = OFF		// Watch Dog Timer : Disabled.
    #pragma config MCLRE = OFF		// MCLRE : Disabled.
    #pragma config PBADEN = OFF		// Port B A/D Enable : Disabled. => sortie numérique sur RESET.
    #pragma config STVREN = OFF		// Stack oVerflow Reset : Disabled.
    #pragma config LVP = OFF		// Low voltage ICSP : Disabled.
    
    
    void main(void)
    {
    	TRISB = 0x00;
    	OpenXLCD(FOUR_BIT & LINES_5X7);
    	while(BusyXLCD());
    	putcXLCD('A');
    	
    	while(1);
    }
    
    void DelayXLCD(void) // Delay of 5ms
    {
    	Delay1KTCYx(9);
    	Delay100TCYx(9);
    	Delay10TCYx(9);
    	Nop();Nop();Nop();Nop();Nop();
    }
    
    void DelayPORXLCD(void)	// Delay of 18ms
    {
    	Delay10KTCYx(3);
    	Delay1KTCYx(5);
    	Delay100TCYx(9);
    	Delay10TCYx(9);
    	Nop();Nop();Nop();Nop();Nop();
    }
    
    void DelayFor18TCY(void) // Delay of 120µs
    {
    	Delay100TCYx(2);
    	Delay10TCYx(3);
    	Nop();Nop();Nop();Nop();Nop();							
    }
    Lien vers la datasheet de mon controleur (j'espère que c'est légal et que je n'enfreins pas la charte ) :
    http://www.hebeiltd.com.cn/lcm.datas...PLC780D_DS.pdf

    NB : Je précise que je travaille avec l'oscillateur interne du PIC 18F4525 cadencé @ 8Mhz... Je sais pas si ça change quelque chose ou pas...

    Merci d'avance !

    PS : Ca va faire une semaine que je galère dessus...

  10. #9
    Linternautedu94

    Re : Utilisation XLCD sur pic18F

    Zut, mon schéma ne s'est pas ajouté!

    Le voici donc... (désolé!)

    PS : J'ai joué sur le contraste pour être sûr que le problème ne venait pas de là et RIEN...
    Images attachées Images attachées  

  11. #10
    maximilien

    Re : Utilisation XLCD sur pic18F

    Bonjour!
    Pourquoi faire compliquer quand on peut faire simple??
    Pourquoi ne pas faire juste un programme qui affiche "bonjour"? Comme ca le programme est simple et il est facile de savoir si le LCD est
    Non?

  12. #11
    Qristoff
    Animateur Électronique

    Re : Utilisation XLCD sur pic18F

    Bonjour,
    par rapport à ton schéma. Lorsqu'on utilise un afficheur lcd en mode 4 bits comme c'est ton cas ici, généralement les 4 bits utilisés correspondent aux 4 Msb soit D4 à D7 et non D0 à D3. voir p9 de la Datasheet.
    Ensuite pourquoi le MCLR est à -5V ?

  13. #12
    maximilien

    Re : Utilisation XLCD sur pic18F

    Citation Envoyé par Qristoff Voir le message
    Ensuite pourquoi le MCLR est à -5V ?
    Non je ne crois pas je lis + moi.

  14. #13
    Qristoff
    Animateur Électronique

    Re : Utilisation XLCD sur pic18F

    Voir aussi la page 11 de la datasheet pour le cycle d'initialisation en 4 bits avec D4...D7.
    A+

  15. #14
    Qristoff
    Animateur Électronique

    Re : Utilisation XLCD sur pic18F

    Citation Envoyé par maximilien Voir le message
    Non je ne crois pas je lis + moi.
    je sais pas ce que c'est son logiciel de dessin mais quand tu ouvres dans une fenètre java, j'ai - et quand je l'ouvre pour agrandir, j'ai + !!

  16. #15
    Qristoff
    Animateur Électronique

    Re : Utilisation XLCD sur pic18F

    A Linternautedu94, pourrais tu STP mettre sur ton schéma les vraies numéros de pins utilisées car rien ne correspond ! donne nous le brochage de l'afficheur complet et non pas de son contrôleur à 80 broches. Merci

  17. #16
    JC22

    Re : Utilisation XLCD sur pic18F

    Bonjour,
    Un truc tout bête, mais t'as simulé ton prog sous MPLAB pour voir si t'es sorties RW, E et RS réagissent correctement ? (c.a.d conformément à ton chronogramme)
    Juste une autre piste, tu dis utiliser l'oscillateur interne du PIC, le mot de config correspondant (PLL) est validé ?
    @+
    JC

  18. #17
    Linternautedu94

    Re : Utilisation XLCD sur pic18F

    Citation Envoyé par maximilien Voir le message
    Bonjour!
    Pourquoi faire compliquer quand on peut faire simple??
    Pourquoi ne pas faire juste un programme qui affiche "bonjour"? Comme ca le programme est simple et il est facile de savoir si le LCD est
    Non?
    Bonjour,

    Effectivement c'est simple, mais j'ai fait encore plus simple car si vous regardez dans mon main, je tente d'écrire le caractère "A"...

    Salutations.

  19. #18
    Linternautedu94

    Re : Utilisation XLCD sur pic18F

    Citation Envoyé par Qristoff Voir le message
    Bonjour,
    par rapport à ton schéma. Lorsqu'on utilise un afficheur lcd en mode 4 bits comme c'est ton cas ici, généralement les 4 bits utilisés correspondent aux 4 Msb soit D4 à D7 et non D0 à D3. voir p9 de la Datasheet.
    Ensuite pourquoi le MCLR est à -5V ?
    Bonjour,

    C'est vrai, le LCD est utilisé en mode 4 bits et il y a une erreur dans mon schéma. puisque RB0 va sur D0 et ainsi de suite.
    Le MCLR est bien relié à +5V.

    Le logiciel que j'ai utilisé est tout simplement "paint"

    Salutations.

  20. #19
    Linternautedu94

    Re : Utilisation XLCD sur pic18F

    Citation Envoyé par Qristoff Voir le message
    A Linternautedu94, pourrais tu STP mettre sur ton schéma les vraies numéros de pins utilisées car rien ne correspond ! donne nous le brochage de l'afficheur complet et non pas de son contrôleur à 80 broches. Merci
    Bonjour Qristoff et merci pour tes réponses.

    L'afficheur utilisé est basé sur le controleur SPLC780D. Le LCD je l'ai acheté chez selectronic et voici sa ( succinte ) datasheet :
    http://www.selectronic.fr/upload/pro...ique/66722.pdf

    PS : On m'a dit qu'il fallait reconstruire la librairie de MPLAB du 18F4525 pour que les modifications faites sur le xlcd.h soient prises en compte si j'utilise un autre port que le port b? Est-ce vrai? Si oui, comment faire? Au cas où cela marcherait avec un autre port?

    PS2 : Connaissez-vous un simulateur de PIC possédant le 18F4525 que je pourrais simuler en mettant le .hex généré par MPLAB?

    Salutations.

  21. #20
    Qristoff
    Animateur Électronique

    Re : Utilisation XLCD sur pic18F

    Salut,
    je sais bien que ton afficheur est comme tous les autres pilotés par un contrôleur et que de façon générale, ils répondent tous à peu prés au mêmes ordres.
    Au niveau du hard, pour le commander en 4 bits, il faut que les 4 bits de données arrivent sur les bits Msb, c'est à dire sur les pins 11 (D4), 12 (D5), 13 (D6) et 14 (D7) au lieu d'arriver sur les bits D0 à D3 comme actuellement. (il faut donc prendre ton fer à souder !)
    Pour les librairies MPL c'est un autre probléme et cela n'a rien à voir avec le branchement de ton afficheur, OK ? (on verra après quand tout sera bien branchés !)

  22. #21
    Linternautedu94

    Exclamation Re : Utilisation XLCD sur pic18F

    Citation Envoyé par Qristoff Voir le message
    Salut,
    je sais bien que ton afficheur est comme tous les autres pilotés par un contrôleur et que de façon générale, ils répondent tous à peu prés au mêmes ordres.
    Au niveau du hard, pour le commander en 4 bits, il faut que les 4 bits de données arrivent sur les bits Msb, c'est à dire sur les pins 11 (D4), 12 (D5), 13 (D6) et 14 (D7) au lieu d'arriver sur les bits D0 à D3 comme actuellement. (il faut donc prendre ton fer à souder !)
    Pour les librairies MPL c'est un autre probléme et cela n'a rien à voir avec le branchement de ton afficheur, OK ? (on verra après quand tout sera bien branchés !)

    Bonjour Qristoff!

    Ce que je voulais dire dans mon précédent reply, c'est que mon LCD est bien connecté. L'erreur a été faite sur mon schéma et non dans la réalité. Pour info, je travaille sur une plaquette d'éssais (sans soudures) de type project board pour éviter d'avoir à souder et à déssouder.

    Tout est bien branché! J'attends donc vos "ordres" capitaine!

  23. #22
    Linternautedu94

    Re : Utilisation XLCD sur pic18F

    UPPP!! Toujours pas de nouvelles?

  24. #23
    Qristoff
    Animateur Électronique

    Re : Utilisation XLCD sur pic18F

    Citation Envoyé par Linternautedu94 Voir le message
    UPPP!! Toujours pas de nouvelles?
    Salut, avant d'attaquer ton code, il faut être ABSOLUMENT sur que ton schéma est bon, donc remet ton schéma à jour, STP avec tous les détails en parrticulier pour tout le branchement du LCD.
    A+

  25. #24
    Linternautedu94

    Thumbs up Re : Utilisation XLCD sur pic18F

    Bonjour!

    Je viens ici pour faire un simple retour de mon expérience avec les LCD. J'ai donc résolu tous mes problèmes et je suis arrivé depuis à peu près 1 semaine à faire fonctionner mon LCD correctement.

    Ce qu'il ne faut surtout pas faire :

    1° Tester le PIC + le LCD sur une plaquette d'éssais de type "Project Board" (surtout quand on a un quartz à 20Mhz).

    2° Relier le LCD et le fil par des fils longs.

    Ce qu'il faut faire :

    1° Réaliser une plaque à souder en veillant aux connexions PIC <-> LCD.

    2° Utiliser des fils relativement courts pour la connexion du LCD (notamment les broches : R/W, RS, E(bar), D0 à D7). Si D0 à D3 ne sont pas utilisés, ne pas les mettre à la masse. Laisser ces pattes en l'air.

    Une fois cette plaquette réalisée (soigneusement), on peut utiliser le code fourni par MPLAB (microchip) pour utiliser son LCD. Je dois néanmoins mentionner le fait que la fonction BusyXLCD() ne fonctionnait pas pour moi. J'ai donc dû la remplacer par une tempo (à chaque fois) pour que tout fonctionne correctement.

    Ne pas négliger ces aspects là, car parfois le code n'y est pour rien. C'était mon cas ( mis à part le BusyXLCD() ).

    Salutations.

    PS : Merci tout de même à Qristoff pour l'aide proposée.

    A+

Discussions similaires

  1. Problème Librairie XLCD - compilateur C18
    Par jorg1n dans le forum Électronique
    Réponses: 27
    Dernier message: 08/06/2009, 07h00
  2. Aide sur les PIC18F
    Par chaaben dans le forum Électronique
    Réponses: 1
    Dernier message: 26/12/2008, 18h36
  3. Gérer l'affichage avec XLCD.C/Maestro software
    Par jorg1n dans le forum Électronique
    Réponses: 1
    Dernier message: 04/10/2007, 22h34
  4. bug sur pic18f ???
    Par dam74 dans le forum Électronique
    Réponses: 1
    Dernier message: 30/09/2006, 08h47
  5. interruption PIC18F
    Par induc dans le forum Électronique
    Réponses: 12
    Dernier message: 19/05/2006, 16h17
Découvrez nos comparatifs produits sur l'informatique et les technologies.