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

Besoin d'aide pour afficheur lcd 2 par 16 ligne



  1. #1
    phelop

    je voudrai faire fonctioner mon écranlcd qui a 2 par 16 ligne il ya deus puce dintegrer il manque seulemnt les code binaire mais je lai connais pas....



    merci les copains

    -----

  2. Publicité
  3. #2
    16f84-20

    Bonjour
    Donne plus de precision sur ton afficheur (marque, modele etc....)
    Avec quoi veux tu le faire fonctionner
    Salut
    A+

  4. #3
    14bds75_cb

    Salut,

    Un afficheur, c'est trés simple, car standardisé:

    >Un bus 8 bits (ou 4 bits) de données et d'instructions
    >Read / Write: on utilise toujours READ, car on envoie des données
    >RS: 1 = données, 0= instruction
    >E: Validation (actif niveau haut)

    Pour afficher, la lettre A, par exemple, il faut faire chronologiquement:
    >Tu mets le code ASCII de A sur le bus de données
    >Tu mets RS à 1 pour signifier que tu envoi des données
    >Tu mets E à 1 durant 450ns (au minimum), pour que les informations soient prise en compte par l'afficheur.

    Il existe des instructions:
    >Clignotement du curseur
    >Déplacement du curseur
    >Effacement de l'écran
    >Et qques autres

    J'espère avoir répondu à ta question
    Amitiés

  5. #4
    elektrax

    merci

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

    Citation Envoyé par 14bds75_cb
    Salut,

    Un afficheur, c'est trés simple, car standardisé:

    >Un bus 8 bits (ou 4 bits) de données et d'instructions
    >Read / Write: on utilise toujours READ, car on envoie des données
    >RS: 1 = données, 0= instruction
    >E: Validation (actif niveau haut)

    Pour afficher, la lettre A, par exemple, il faut faire chronologiquement:
    >Tu mets le code ASCII de A sur le bus de données
    >Tu mets RS à 1 pour signifier que tu envoi des données
    >Tu mets E à 1 durant 450ns (au minimum), pour que les informations soient prise en compte par l'afficheur.

    Il existe des instructions:
    >Clignotement du curseur
    >Déplacement du curseur
    >Effacement de l'écran
    >Et qques autres

    J'espère avoir répondu à ta question
    Amitiés
    Oui, s'il est base a base de controlleur Hitachi HD47780!
    Sinon c'est impilotable.

    Les LCD du marches c'est le cas, mais si tu as recuperer un LCD c'est peut etre un truc proprietaire...

  8. #6
    phelop

    cest un hitachi hd 47780


    jaimerai avoir des facon de le driver avec un pic 16f84

  9. Publicité
  10. #7
    Antoine

    Salut !!

    Un très bon lien : http://kudelsko.free.fr

    Y a pas mal de choses sur les LCD....

    Et regarde aussi dans sa rubrique de liens, il a mis pleins de sites qui parlent des LCD....

    Tu devrais avoir la-bas tout ce qui faut pour le driver avec un PIC...

    @++

  11. #8
    trevor59

    Re : Besoin d'aide pour afficheur lcd 2 par 16 ligne

    Comment le piloter à partir d'un micro contrôleur ST7?

  12. #9
    abracadabra75

    Re : Besoin d'aide pour afficheur lcd 2 par 16 ligne

    Citation Envoyé par trevor59
    Comment le piloter à partir d'un micro contrôleur ST7?
    bonjour.
    ben... en programmant ton ST7.

    C'est bien le problème des microcontrôleurs, il faut connaitre un minimun de programmation...
    Il n'y a que dans le dictionnaire où 'réussite' vient avant 'travail'.

  13. #10
    electrotricot

    Talking Re : Besoin d'aide pour afficheur lcd 2 par 16 ligne

    Bonjour à tous,
    je suis aussi actuellement en projet sur à peu près le même sujet que le votre et j'ai un petit problème pour comprendre un language assembleur qui ne correspond pas exactement au language asembleur que j'ai étudié en cours! (En effet, celui que j'ai étudié me parait un peu plus simple, par exemple, utilisation de LD (load), CP,PADDR, PADR, PAOR, ....

    J'ai la copie du programme en question, pourriez vous s'il vous plait y jeter un coup d'oeil, et essayer de m'aider, ou de traduire plus simplement (par exemple à quoi correspond movf ou btfsc...? (Si vous voyez de quel language assembleur je veux parler!...)En fait j'utilise un ST7FLITE20 comme microcontroleur (et le programme dont je dispose et fait pour lePIC16f84...) et c'est peut-etre ça le fait que je doive écrire le programme avec l'assembleur plus simpliste?
    Aidez-moi!!!!!
    Merci A TOUS

    include <p16f84.inc>

    ;;;;;;;;;;;;;;;;;;;;;;;;;
    ; Defines
    ;;;;;;;;;;;;;;;;;;;;;;;;;

    RS EQU 0x03; RS sur RA3
    RW EQU 0x00
    E EQU 0x02
    DCF EQU 0x01

    ;;;;;;;;;;;;;;;;;;;;;;;;;
    ; Variables
    ;;;;;;;;;;;;;;;;;;;;;;;;;

    Minutes EQU 0x1D
    Heures EQU 0x11
    Jour_Cal EQU 0x12
    Jour_Sem EQU 0x13
    Mois EQU 0x14
    Annee EQU 0x15
    VAR EQU 0x16
    VAR2 EQU 0x17

    Cpt_Tempo EQU 0x18
    Cpt_Bit EQU 0x19
    Tampon EQU 0x1A
    var3 EQU 0x1B
    Cpt_test EQU 0x1C
    Res_Mi EQU 0x1E
    Res_He EQU 0x1F

    Min_Msb EQU 0x20
    Min_Lsb EQU 0x21
    Heu_Msb EQU 0x22
    Heu_Lsb EQU 0x23



    ;;;;;;;;;;;;;;;;;;;;;;;;;
    ; Début du programme à l'adresse 0H
    ;;;;;;;;;;;;;;;;;;;;;;;;;

    org 0
    nop
    goto START

    ;;;;;;;;;;;;;;;;;;;;;;;;;
    ; Programme principal
    ;;;;;;;;;;;;;;;;;;;;;;;;;

    org 0x10

    ;;;;;;;;;;;;;;;;;;;;;;;;;
    ; void main ( void )
    ;;;;;;;;;;;;;;;;;;;;;;;;;

    START:

    ; configurations des ports
    clrf PORTA
    bsf STATUS,RP0 ;met en bank 1
    ;movlw 0x7F
    ;movwf OPTION_REG ; Port B avec résistances de pull up p.15
    clrf TRISB ; PORT B en sortie

    movlw 0x02
    movwf TRISA ; PORT A en sortie sauf RA2
    bcf STATUS,RP0 ; met en bank 0 pour utiliser le port A physiqmt

    call INIT

    movlw 0X49 ;affichage de "Init"
    call PUTCHAR
    call TEST_BUSY
    movlw 0X4E
    call PUTCHAR
    call TEST_BUSY
    movlw 0X49
    call PUTCHAR
    call TEST_BUSY
    movlw 0X54
    call PUTCHAR
    call TEST_BUSY
    BOUCLE:

    call CAPTURE

    movlw 0x01 ;effacement de l'afficheur
    call CONFIG

    movf Heu_Msb,0
    call PUTCHAR
    call TEST_BUSY

    movf Heu_Msb,0
    call PUTCHAR
    call TEST_BUSY

    movf Heu_Lsb,0
    call PUTCHAR
    call TEST_BUSY

    movlw 0x48 ;espace
    call PUTCHAR
    call TEST_BUSY

    movf Min_Msb,0
    call PUTCHAR
    call TEST_BUSY

    movf Min_Lsb,0
    call PUTCHAR
    call TEST_BUSY


    goto BOUCLE

    ;;;;;;;;;;;;;;;;;;;;;;;;;
    ; FIN DU MAIN
    ;;;;;;;;;;;;;;;;;;;;;;;;;



    CAPTURE:
    ; lecture des données de la RAM du microcontrôleur alors (RS=1, RW=1)
    bsf PORTA,RS
    bsf PORTA,RW
    clrf Cpt_Tempo
    clrf Cpt_Bit
    clrf Minutes
    clrf Heures
    clrf Tampon
    clrf Cpt_test
    clrf Res_Mi
    clrf Res_He
    clrf Heu_Msb
    clrf Heu_Lsb
    clrf Min_Msb
    clrf Min_Lsb


    ;******detection du début de la trame*****

    Scrutation2: ;attente PortA,DCF état bas
    clrf Cpt_Tempo
    Scrutation:
    btfsc PORTA,DCF
    goto Scrutation

    Scrutation3:
    incf Cpt_Tempo,1
    movlw 0x63
    subwf Cpt_Tempo,0
    btfsc STATUS,2
    goto Suite
    movlw 0x10 ;Tempo de 16 ms
    call DELAY
    btfss PORTA,DCF
    goto Scrutation3
    goto Scrutation2
    Suite: clrf Cpt_Tempo
    Bcf STATUS,2
    ;***********fin de la détection du bit de start***



    ;***********Détection du 1er bit significatif******


    clrf PORTB
    Scrut: ;détection état haut
    btfss PORTA,DCF
    goto Scrut
    Scrut2: ; détection état bas
    btfsc PORTA,DCF
    goto Scrut2

    incf Cpt_Bit,1
    movlw 0x15 ;détection du 20ème bit
    subwf Cpt_Bit,0
    Btfss STATUS,2
    goto Scrut

    bcf STATUS,2


    ;***********Fin de la détection du 1er bit significatif******



    ;***********détection de la valeur des bits significatifs*********


    Front:
    Btfsc PORTA,DCF ;detection d'un front montant
    goto Front
    Front_mo:
    Btfss PORTA,DCF
    goto Front_mo

    incf Cpt_Bit,1
    movlw 0x50 ;crée une tempo de 150 ms environ
    call DELAY
    movlw 0x50
    call DELAY

    btfsc PORTA,DCF ;met à 1 ou à 0 le bit7 de tampon
    goto Suite2
    bcf Tampon,7
    goto Suite3
    Suite2:
    bsf Tampon,7


    ;***********Fin détection de la valeur des bits significatifs*********




    ;***Stockage des valeurs reçues***
    Suite3: ;Stockage minutes
    movlw 0x1E
    subwf Cpt_Bit,0
    btfsc STATUS,0 ;test si bit minutes
    goto lbl_Heure

    bcf STATUS,0 ;decalage à droite de Minutes
    rrf Minutes,1

    btfss Tampon,7 ;bit reçu appartient aux Minutes
    goto lbl_Reset
    bsf Minutes,7
    goto lbl_Set
    lbl_Reset:
    bcf Minutes,7
    lbl_Set:
    goto Front
    lbl_Heure: ;Stockage heures
    movlw 0x24
    subwf Cpt_Bit,0
    btfsc STATUS,0 ;test si bit heures
    goto Traiter

    btfss Tampon,7 ;bit reçu appartient aux heures
    goto lbl_Reset2
    bsf Heures,7
    goto lbl_Set2
    lbl_Reset2:
    bcf Heures,7
    lbl_Set2:
    bcf STATUS,0
    rrf Heures,1

    goto Front
    goto Traiter
    ;lbl_Jour_cal: ;Stockage jours calendaires
    ; movlw 0x2A
    ; subwf Cpt_Bit,0
    ; btfsc STATUS,0 ;test si bit heures
    ; goto lbl_Jour_sem
    ;
    ; btfss Tampon,7 ;bit reçu appartient aux heures
    ; goto lbl_Reset3
    ; bsf Jour_Cal,7
    ; goto lbl_Set3
    ;lbl_Reset3:
    ; bcf Jour_Cal,7
    ;lbl_Set3:
    ; bcf STATUS,0
    ; rrf Jour_Cal,1
    ;
    ; goto Front

    ;lbl_Jour_sem:

    ;*******Traitement****
    ;**Conversion des données en binaire naturel
    ;*****Octet des minutes****
    Traiter:
    bcf STATUS,0
    rlf Minutes,1 ;rotation de la parité des minutes(bit à ne pas prendre en compte)

    bcf STATUS,0
    rlf Minutes,1 ;traitement du bit de poids fort de Minutes

    btfss STATUS,0
    goto Minute_20
    movlw d'40'
    addwf Res_Mi,1
    Minute_20:
    bcf STATUS,0
    rlf Minutes,1 ;traitement du bit de (poids fort)-1 de Minutes

    btfss STATUS,0
    goto Minute_10
    movlw d'20'
    addwf Res_Mi,1
    Minute_10:
    bcf STATUS,0
    rlf Minutes,1 ;traitement du bit de (poids fort)-2 de Minutes

    btfss STATUS,0
    goto Minute_8
    movlw d'10'
    addwf Res_Mi,1
    Minute_8:
    bcf STATUS,0
    rlf Minutes,1 ;traitement du bit de (poids fort)-3 de Minutes

    btfss STATUS,0
    goto Minute_4
    movlw d'8'
    addwf Res_Mi,1
    Minute_4:
    bcf STATUS,0
    rlf Minutes,1 ;traitement du bit de (poids fort)-4 de Minutes

    btfss STATUS,0
    goto Minute_2
    movlw d'4'
    addwf Res_Mi,1
    Minute_2:
    bcf STATUS,0
    rlf Minutes,1 ;traitement du bit de (poids fort)-5 de Minutes

    btfss STATUS,0
    goto Minute_1
    movlw d'2'
    addwf Res_Mi,1
    Minute_1
    bcf STATUS,0
    rlf Minutes,1 ;traitement du bit de poids faible de Minutes

    btfss STATUS,0
    goto Heure_Par
    movlw d'1'
    addwf Res_Mi,1

    ;*****octet des heures
    Heure_Par:

    bcf STATUS,0
    rlf Heures,1 ;traitement du bit de parité des heures

    bcf STATUS,0
    rlf Heures,1 ;traitement de poids fort des heures

    btfss STATUS,0
    goto Heure_10
    movlw d'20'
    addwf Res_He,1

    Heure_10:

    bcf STATUS,0
    rlf Heures,1 ;traitement du bit de poids (fort-1)des heures

    btfss STATUS,0
    goto Heure_8
    movlw d'10'
    addwf Res_He,1

    Heure_8:
    bcf STATUS,0
    rlf Heures,1 ;traitement du bit de poids (fort-2) des heures

    btfss STATUS,0
    goto Heure_4
    movlw d'8'
    addwf Res_He,1

    Heure_4:

    bcf STATUS,0
    rlf Heures,1 ;traitement du bit de poids(fort-3)des heures

    btfss STATUS,0
    goto Heure_2
    movlw d'4'
    addwf Res_He,1
    Heure_2:

    bcf STATUS,0
    rlf Heures,1 ;traitement du bit de poids (fort-4) des heures

    btfss STATUS,0
    goto Heure_1
    movlw d'2'
    addwf Res_He,1

    Heure_1:
    bcf STATUS,0
    rlf Heures,1 ;traitement du bit de poids faible des heures

    btfss STATUS,0
    goto Conversion
    movlw d'1'
    addwf Res_He,1


    ;*****Conversion de la valeur binaire en décimal
    ;Conversion des minutes

    Conversion:

    movlw 0x0A
    subwf Res_Mi,0

    btfss STATUS,0
    goto Stock

    movlw 0x0A
    subwf Res_Mi,1
    incf Min_Msb,1
    goto Conversion

    Stock:
    movf Res_Mi,0
    movwf Min_Lsb

    ;Conversion des Heures

    Conversion2:

    movlw 0x0A
    subwf Res_He,0

    btfss STATUS,0
    goto Stock2

    movlw 0x0A
    subwf Res_He,1
    incf Heu_Msb,1
    goto Conversion2

    Stock2:
    movf Res_He,0
    movwf Heu_Lsb

    ;*******Conversion ASCII

    movlw 0x30
    addwf Min_Msb,1
    addwf Min_Lsb,1
    addwf Heu_Msb,1
    addwf Heu_Lsb,1

    return

    INIT:

    ; 2) delay après la mise sous tension
    movlw d'20' ; 20 ms
    call DELAY

    ; 3) DL = 1
    movlw 0x30 ; initial reset of instruction, MEO function set
    call CONFIG

    ; 4) 4,1 ms mini
    movlw d'10' ; 10 ms
    call DELAY

    ; DL = 0
    movlw 0x00
    call CONFIG

    ; 5) DL = 1
    movlw 0x30
    call CONFIG

    ; 6) 100 us mini
    movlw d'1' ; 1 ms
    call DELAY

    ; DL = 0
    movlw 0x00
    call CONFIG

    ; 7) DL = 1
    movlw 0x30
    call CONFIG

    ; 8) écran occupé ou pas?
    call TEST_BUSY

    ; 9) config du hard : bus 8 bits, 2 lignes, digit 5*7
    movlw 0x38
    call CONFIG

    ; 10)
    call TEST_BUSY

    ; 11) DISPLAY MODE : Display ON, Cursor ON, Blink OFF
    movlw 0x0E
    call CONFIG

    ; 12)
    call TEST_BUSY

    ; 13) CLEAR DISPLAY
    movlw 0x01
    call CONFIG

    ; 14)
    call TEST_BUSY

    ; 15) SHIFT MODE : incrémentation de l'adresse, sans décalage de l'écran
    ; fonction entry mode set
    movlw 0x06
    call CONFIG

    ; 16)
    call TEST_BUSY

    ;;;;;;;;;;;;
    ; 17) INIT TERMINEE
    ;;;;;;;;;;;;

    return

    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    ; void CONFIG ( char Configuration )
    ; Cette fonction envoie un octet de configuration à l'écran
    ; entree : La configuration est dans l'accumulateur W
    ; sortie : -
    ; variables détruites :
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

    CONFIG: ; sur un frt montant de E, lcd reçoit les instructions
    ; RS=0, RW=0
    bcf PORTA,RS
    bcf PORTA,RW

    movwf PORTB
    bsf PORTA,E
    bcf PORTA,E

    ; RS=1, RW=1
    bsf PORTA,RS
    bsf PORTA,RW
    return

    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    ; FIN FONCTION CONFIG
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    ; void PUTCHAR ( char Caractere )
    ; Cette fonction affiche un caractere à l'écran
    ; entree : Le caractere en ASCII est dans l'accumulateur W
    ; sortie : -
    ; variables détruites :
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

    PUTCHAR:
    ; RS=1, RW=0
    bsf PORTA,RS ; le lcd reçoit des instructions
    bcf PORTA,RW ; lcd lit le contenu de l'écran

    movwf PORTB
    bsf PORTA,E
    bcf PORTA,E ; on baisse E pour valider la donnee

    ; RS=1, RW=1
    bsf PORTA,RS
    bsf PORTA,RW
    return

    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    ; FIN FONCTION PUTCHAR
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    ; void TEST_BUSY ( void )
    ; Fonction du test du Busy Flag
    ; Attend que l'écran est disponible
    ; entree : -
    ; sortie : -
    ; variables détruites : -
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

    TEST_BUSY:

    bcf PORTA,RS ; RS=0
    bsf PORTA,RW ; RW=1 (lecture du statut de l'écran)

    ; on met le port B en entrée pour pouvoir lire
    bsf STATUS,RP0 ; banque 1
    movlw 0xFF ;
    movwf TRISB ; portb en entrée
    bcf STATUS,RP0

    LOOP_BF:
    bcf PORTA,E
    nop
    nop
    bsf PORTA,E
    nop
    nop
    btfsc PORTB,0x07 ; test du busy flag si c'est vrai il saute l'instruction
    ; sinon il boucle
    goto LOOP_BF
    bcf PORTA,E

    ;remise du portb en sortie0
    bsf STATUS,RP0 ;met en bank 1
    clrf TRISB
    bcf STATUS,RP0 ; met en bank 0 pour utiliser le port A physiqmt

    ;RS=1, RW=1
    bsf PORTA,RS
    bsf PORTA,RW

    return

    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    ; FIN FONCTION TEST_BUSY
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    ; Fonction de retard DELAY
    ; entree : temps du retard en ms dans le registre W
    ; sortie : -
    ; variables détruites : VAR, VAR2
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

    DELAY:
    bcf STATUS,C ;
    movwf VAR
    rlf VAR,1 ; multiplie W par 2

    LOOP_DELAY:
    movlw 0xA5 ; chargemt de 0xff ds l'accu
    movwf VAR2 ; var2=0xff
    call LOOP2_DELAY
    decfsz VAR,1 ; si var différent de 0 var=var-1
    goto LOOP_DELAY ; sinon saute l'instruction suivante
    return

    LOOP2_DELAY: ; deuxieme boucle imbriquee
    decfsz VAR2,1
    goto LOOP2_DELAY
    return

    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    ; FIN FONCTION RETARD
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

    ; On sort du programme

    ;FIN: goto START
    end

  14. #11
    jkiol78

    Re : Besoin d'aide pour afficheur lcd 2 par 16 ligne

    bonjour

    je dois aussi programmmer mon affichage du LCD par programmation ST7...
    j'ai lu tous les commentaires et j'ai fait tout ce qui est indiqué...
    seulement, je ne sais pas comment faire pour interrompre pendant 450ns mon ST7...
    Pourriez vous me donnez des indications quant ca?
    De plus est ce que vous connaisez un site qui donne toutes les commandes ST7 expliquées...?
    ou quelqu'un...peut m'inporte.
    merci d'avance
    +

  15. #12
    umfred

    Re : Besoin d'aide pour afficheur lcd 2 par 16 ligne

    il suffit de faire non -opération pendant ce temps mais tout dépend de la fréquence d'utilisation de ton micro qui détermine la vitesse d'exécution des instructions (en général une période d'instruction correspond à 1,2,3 ou 4 période d'horloge voir plus selon l'instruction , et comme d'habitude, tout est indiqué dans la doc si l'on sait bien la lire (si elle est bien faite, c'est plus facile à trouver))

  16. Publicité
  17. #13
    jkiol78

    Re : Besoin d'aide pour afficheur lcd 2 par 16 ligne

    bonjour

    oui, on m'avait indiqué qu'il fallait faire une boucle vide!
    chaque instruction a un temps de cycle predefini,mais comment calculer le temps du cycle complet d'un sous programme?
    merci d'avance
    +

Discussions similaires

  1. Images noir et blanc pour afficheur LCD graphique piloter par uc?
    Par mastronic dans le forum Électronique
    Réponses: 10
    Dernier message: 04/09/2013, 19h58
  2. aide pour brochage afficheur LCD
    Par juju60123 dans le forum Électronique
    Réponses: 3
    Dernier message: 28/10/2007, 17h03
  3. Réponses: 1
    Dernier message: 08/07/2006, 09h39
  4. Besoin d'aide pour titrage de H3PO4 par NaOH
    Par carolyneee dans le forum TPE / TIPE et autres travaux
    Réponses: 1
    Dernier message: 17/03/2006, 00h33
  5. Besoin d'aide pour un TIPE sur les LCD
    Par LuidjiB dans le forum TPE / TIPE et autres travaux
    Réponses: 0
    Dernier message: 21/05/2005, 22h24
Découvrez nos comparatifs produits sur l'informatique et les technologies.