pic16f628 et ecran LCD
Répondre à la discussion
Affichage des résultats 1 à 6 sur 6

pic16f628 et ecran LCD



  1. #1
    FA77157

    pic16f628 et ecran LCD


    ------

    Bonjour à tous

    Je bloque depuis plusieurs jours sur ce ce probléme

    j'arrive a faire fonctionner un PIC16f628 ( sortie led et entre logique) mais pas possible d'initialiser un ecran LCD

    sous proteus pas de problème cela fonctionne, mais sur la maquette j'ai uniquement les leds qui marchent

    je vous joins le programme en piéce jointe et le schéma avec

    merci d'avance pour votre aide

    Francois

    -----
    Images attachées Images attachées  
    Dernière modification par FA77157 ; 14/03/2010 à 19h16.

  2. #2
    FA77157

    Re : pic16f628 et ecran LCD

    Ci joint le programme

    ;((((((((((((((((((((((((((((( (((((((((((((((((((((((((((((( (((((((((((((((
    ;
    ; PIC 16F628
    ;
    )))))))))))))))))))))))))))))) )))))))))))))))))))))))))))))) )))))))))))))

    LIST p=16f628
    #include <p16f628.inc>
    __CONFIG _BODEN_OFF & _PWRTE_OFF & _WDT_OFF & _LVP_OFF & _MCLRE_ON & _XT_OSC

    ; Do not show warnings
    ERRORLEVEL -224


    LCD_DATA EQU PORTA ; RA0 ==> RA3
    LCD_CTRLB EQU PORTB
    E EQU 4 ; sur RA4
    RS EQU 6 ; sur RB6



    cblock 0x20
    donn1 : 1 ; reception des bits RC5
    donn2 : 1 ; reception des bits RC5

    LCD_TEMP: 1 ;temp LCD
    LCD_TEMP2: 1 ;temp LCD
    BUSY_1: 1 ;var utilisée pour temporisation
    NB_TEMPO: 1 ;var utilisée pour temporisation
    cmpt1: 1 ;var utilisée pour temporisation
    LCD_INDEX: 1 ;Position curseur LCD

    RC5_CTRL: 1 ;var bit controle RC5
    RC5_ADR: 1 ;var bits adresse RC5
    RC5_DATA: 1 ;var bits données RC5
    Loop1: 1 ;compteur
    Loop2: 1
    Loop3: 1

    ROM_INDEX: 1 ;pointeur ROM tables des mots ( "sortie RB", "sorties a ZERO", "Pas de RC5......" ) ;

    endc
    ;============================= ============================== ============================== =================
    ;============================= ============================== ============================== =================
    ;============================= ============================== ============================== =================
    ORG 0x0000


    bsf STATUS ,RP0 ;Select Bank 1
    clrf TRISB ;
    clrf TRISA ;
    MOVLW B'00000000' ;portb.6 en entrée
    MOVWF TRISB
    bcf STATUS ,RP0 ;Select Bank 0

    bcf INTCON, GIE ; disable Interupt


    debut

    call lcdinit ; Appel du sous-prog d'initialisation de l'afficheur LCD



    boucl_prog


    bsf PORTB,7


    call Lign_1 ; efface ecran LCD
    movlw T_MOT1 ; ligne1 mot 1
    call Phrase ; Affiche mot1 ligne 1

    call tempox
    call tempox
    call tempox
    bcf PORTB,7

    bsf PORTB,5


    call Lign_1 ; efface ecran LCD
    movlw T_MOT2 ; ligne1 mot 1
    call Phrase ; Affiche mot1 sur la ligne 1

    call tempox
    call tempox
    call tempox
    bcf PORTB,5
    goto boucl_prog


    ;============================= ============================== ============================== =================
    ;============================= ============================== ============================== =================
    ;============================= ============================== ============================== =================
    ;============================= ============================== ============================== =================
    ;============================= ============================== ============================== =================
    ;============================= ============================== ============================== =================



    ;============================= ============================== ============================== =================
    ;============================= ============================== ============================== =================
    ;============================= ============================== ============================== =================
    ;***************************** *******
    ; MOT1 A AFFICHER SUR LCD 1' ligne
    ;***************************** *******
    MOT1_1 movlw T_MOT1 ; ligne1 mot 1
    call Phrase ; Affiche mot1 ligne 1
    return


    MOT1_2 movlw T_MOT2 ; ligne 1 mot 2
    call Phrase ; Affiche mot 2 ligne 1
    return



    ;***************************** *******
    ; MOT2 A AFFICHER SUR LCD 2' ligne
    ;***************************** *******
    MOT2_1 movlw 0x10
    movwf LCD_INDEX ; positionnement 2 ligne sur lcd
    movlw T_MOT1 ; chargement du mot
    goto Phrase ; Affiche mot 2 ligne 2
    return


    MOT2_2 movlw 0x10
    movwf LCD_INDEX ; positionnement 2 ligne sur lcd
    movlw T_MOT2 ; chargement du mot
    goto Phrase ; Affiche mot 2 ligne 2
    return




    ;***************************** *******
    ; LECTURE ROM INTERNE DU MOT/PHRASE
    ;***************************** *******
    Phrase movwf ROM_INDEX ; mettre dans pointeur adresse
    Loop_Phrase call T_MOT ; recuperer valeur dans table "T_MOT"
    andlw 0xFF ;
    btfsc STATUS,Z ; si=0
    return ; fin du mot/phrase
    call lcd_putchar ; si non ,envoyer valeur a LCD
    incf ROM_INDEX,f ; pointeur table +1
    goto Loop_Phrase ; mot pas fini

    T_MOT movfw ROM_INDEX ; !! ATTENTION a PCLATH !! si ailleur dans ROM
    movwf PCL ; mettre dans pointeur


    T_MOT1 ;
    dt "11111 ",0 ; IMPORTANT mettre 0 a la fin
    T_MOT2 ;
    dt "22222 ",0 ; le 0 indique la fin du mot/phrase



    ;============================= ============================== ============================== =================
    ;============================= ============================== ============================== =================
    ;============================= ============================== ============================== =================
    ;***************************** *******
    ;INITIALISATION DU MODULE LCD
    ;***************************** *******
    lcdinit movlw .30 ; sous-programme d'initialisation
    call busy ; On attend 15 ms pour que le LCD soit prêt


    movlw 0x02 ; Force Mode 4 bits
    call lcd_putcmd


    movlw 0x28 ; Mode 4 bits
    call lcd_putcmd
    movlw 0x0C ; Affichage activé , le curseur ne se voit pas
    call lcd_putcmd
    movlw 0x06 ; Après chaque affichage , le curseur se déplace vers la droite
    call lcd_putcmd
    Clear_LCD clrf LCD_INDEX ; Position curseur LCD =0
    movlw 0x01 ; On efface l'écran et on met le curseur en haut à gauche
    call lcd_putcmd
    return

    ;***************************** *******
    ;ENVOYER UN CARACTERE AU LCD
    ;***************************** *******
    lcd_putchar movwf LCD_TEMP ; Sauvegarde du caractere a envoyer
    movwf LCD_TEMP2 ; Sauvegarde du caractere a envoyer

    lcd_pucr movfw LCD_INDEX ; verifier valeur en cas de saut ligne LCD
    xorlw (0x10 ^ 0x00) ;si LEN > 16 saut a 2' lign
    btfsc STATUS,Z

    call Lign_2 ; /
    xorlw (0x20 ^ 0x10) ;si LEN > 32 saut a 3' lign
    btfsc STATUS,Z


    call Lign_1 ; /
    incf LCD_INDEX,F ; on incrémente le pointeur LCD

    movfw LCD_TEMP2 ; remettre le caractere sauvé dans "LCD_TEMP"

    movwf LCD_TEMP ; caractere a envoyer
    movlw 0x02 ; On attend que le LCD soit prêt

    call busy

    bsf LCD_CTRLB,RS ; ... une commande
    goto Comu_LCD
    ;***************************** *******
    Lign_1 call Clear_LCD ; efface LCD et initialise pointeur LCD
    movlw 0x80 ; On place le curseur ( début de la 1e ligne )
    goto lcd_putcmd
    Lign_2
    movlw 0xC0 ; On place le curseur ( début de la 2e ligne )
    goto lcd_putcmd


    ;***************************** *******
    ;ENVOYER UNE COMMANDE AU LCD
    ;***************************** *******
    lcd_putcmd movwf LCD_TEMP ; Sous programme d'envoi de commande
    movlw 0x08 ; On attend que le LCD soit prêt
    call busy
    call busy
    call busy
    call busy
    call busy


    bcf LCD_CTRLB,RS ; ... d'une commande
    Comu_LCD swapf LCD_TEMP,W ; On permutte les 2 quartets ( groupes de 4 bits ) de l'instruction
    andlw 0x0F
    movwf LCD_DATA ; On envoie les bits de poids fort sur RA0 ==> RA3
    call enable ; On valide

    movf LCD_TEMP,W
    andlw 0x0F
    movwf LCD_DATA ; On envoie les bits de poids faible (de l'instruction)

    enable iorlw 0x10 ; On valide "ENABLE_LCD"
    movwf LCD_DATA
    nop
    xorlw 0x10 ; disable
    movwf LCD_DATA
    return ; retour de la sous-routine


    ;============================= ============================== ============================== =================
    ;============================= ============================== ============================== =================
    ;============================= ============================== ============================== =================
    ;***************************** *******
    ;TEMPO 500 µS
    ;***************************** *******
    busy movwf NB_TEMPO ; Temporisation : dure 500µs x "la valeur contenue dans W"


    boucle movlw .123
    movwf BUSY_1
    boucle1 NOP
    decfsz BUSY_1,1
    goto boucle1
    decfsz NB_TEMPO,1
    goto boucle
    return ; retour de la sous-routine
    ;***************************** *******
    ;TEMPO xx S
    ;***************************** *******
    tempox movlw 0x0B ; pour x boucles
    tempoxx movwf cmpt1 ; dans cmpt1
    boucle2 movlw 0x25
    call busy ; TEMPO xxxx µS
    decfsz cmpt1 , f ; si 0, décrémenter compteur 3
    goto boucle2 ; si cmpt1 pas 0, recommencer boucle2
    return ; retour de la sous-routine
    ;============================= ============================== ============================== =================
    ;============================= ============================== ============================== =================



    ;****************************
    Tempo888 movlw 0x12 ; Temporisation de 888µs
    goto tim0

    Tempo444 movlw 0x09 ; Temporisation de 444µs
    tim0 movwf Loop1
    tim1 movlw 0x0F
    movwf Loop2
    tim2 decfsz Loop2,f
    goto tim2

    decfsz Loop1,f
    goto tim1
    return



    end

  3. #3
    gedonet

    Re : pic16f628 et ecran LCD

    Bonjour
    je ne vois nulle part ou tu mets le PortA en numerique, il faut ecrire B'00000111' dans CMCON.
    Gilles

  4. #4
    FA77157

    Re : pic16f628 et ecran LCD

    Bonsoir,

    J'ai ajouter tes 2 lignes mais rien en marche hormis les led

    sur proteus c'est ok pourtant

    A+ francois

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

    Re : pic16f628 et ecran LCD

    Bonjour
    Le contraste, Vee, ne se fait pas comme sur ton montage (à moins d'un LCD special), il faut un ajustable, environ 10K, entre Vdd et Vss et le point milieu sur Vee.
    Proteus, c'est un simulateur, pas la vraie vie. C'est bien utilile pour certaine chose, mais il faut garder du recul. Je pourrais te montrer un exemple qui à faillit me faire tourner en bourique entre un simple 12F675 et une EEprom 24LC512, j'ai passer quatre jours à essayer de faire fonctionner un programme sur Proteus alors qu'il fonctionnait tres bien dans la realité depuis le premiere version.
    Un autre exemple, les timming sont plus delicat avec un vrai LCD qu'avec le simulateur.
    Pour ton cas, en premier il faut que le contraste fonctionne, tu dois au moins voir la moitié de ton afficheur en pavé noir quand il y a l'alim et ensuite si la premiere etape est bonne, tu dois controler les tempos en fonction du datasheet de ton afficheur avec Mplab en configurant la bonne vitesse de l'oscillateur.
    Gilles

  7. #6
    FA77157

    Re : pic16f628 et ecran LCD

    c'est bon, le programme était OK et c'était juste une soudure séche sur les bits de DATA

    Merci pour ton aide

    francois

Discussions similaires

  1. [Brun] Ecran LCD Samung 226bw : écran blanc ! [résolu]
    Par invite22eb494a dans le forum Dépannage
    Réponses: 8
    Dernier message: 02/12/2009, 12h59
  2. Ecran LCD
    Par invite63742fe4 dans le forum Matériel - Hardware
    Réponses: 5
    Dernier message: 04/11/2008, 10h19
  3. [Brun] Lcd Benq Alimentation d'un ecran LCD!!! [résolu]
    Par invitec87978c8 dans le forum Dépannage
    Réponses: 19
    Dernier message: 17/06/2008, 14h25
  4. utilisation d'un lcd en clone comme 2eme ecran et impossible d'avoir une image ecran
    Par invite4de9a5ac dans le forum Matériel - Hardware
    Réponses: 6
    Dernier message: 10/04/2008, 14h06
  5. [Brun] Ecran digitalise sur écran LCD .
    Par marc.suisse dans le forum Dépannage
    Réponses: 8
    Dernier message: 19/02/2008, 19h19
Découvrez nos comparatifs produits sur l'informatique et les technologies.