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 l'Assembleur !

Modérateur : mazertoc

[Librairie] Routines gestion LCD sur 18F
F6FCO
Avatar de l’utilisateur
Expert
Expert
Messages : 1413
Âge : 70
Enregistré en : décembre 2017
Localisation : Furtif je suis.
Contact :

#1 Message par F6FCO » ven. 26 juin 2020 00:33

Bonsoir tous,

Pour la prochaine version V.2 d'4L1C3 j'avais décidé d'afficher en temps réel les coordonnées XYZ de l'outil sur un LCD parallèle.
J'ai cherché des routines de gestion LCD sur le net, trouvé pour les 16F et rien pour les 18F, pas arrivé à faire fonctionner les 16F sur 18F, faut dire que je ne me suis pas acharné non plus :sifflotte: . Je me suis plongé dans les routines de Fribotte que vous devez surement connaître mais pareil, pas arrivé à les faire tourner sur un 18F.
Du coup j'ai décidé de me coder mes propres routines sur 8bits de données (je verrai après pour faire une librairie 4bits). Çà marche au poil sur un 2x16, mais je ne dispose de 20x4 pour tester, je viens d'en commander un.

Fonctions présentes pour l'instant:

LCD_init ; initialisation du LCD
LCD_Ligne ; choix de la ligne d'écriture
LCD_Colonne ; choix de la colonne
LCD_aff_commande ; envoi d'une commande au LCD
LCD_aff_datas ; envoi du caractère a afficher.

Déjà avec çà je peux afficher ce que je veux sur l'écran.
Les adresses de début de ligne pour un 16x2 sont: 1ère ligne 0x80 et 2iéme ligne 0xC0 mais je ne trouve pas d'infos sur les adresses d'un 20x4, quelqu'un pourrait me renseigner ?

Ci-dessous test sur un 18F4525
P1040116.JPG
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Une porte nand prend 2 bits en entrée... la cochonne !!! :langue:

[Librairie] Routines gestion LCD sur 18F
Temps-x
Avatar de l’utilisateur
Expert
Expert
Messages : 2616
Enregistré en : juillet 2016
Localisation : Terre

#2 Message par Temps-x » ven. 26 juin 2020 01:06

Bonsoir F6FCO, et tout le forum,

Normalement tout est marqué sur la datasheet pour les 20x4, après tout dépend du modèle.... sinon voir sur le site de paulfjujo ICI

J'ai une version 4 bits pour LCD 2x16 avec possibilité de création de 8 lettres supplémentaire (à, é, è, ê, ç, µ, ô, °) ou création personnalisé.

Sur la plupart des écrans 2x16 on ne peut créer que 8 lettres

Maintenant j'utilise plus les LCD pour mes essais, car trop de fil à connecter, et trop peu de caractère personnalisé, je préfère les écrans Nokia

==> A+
Modifié en dernier par Temps-x le ven. 26 juin 2020 17:56, modifié 3 fois.
:roll: Les requins, c'est comme le langage ASM, c'est le sommet de la chaîne alimentaire. :wink:

[Librairie] Routines gestion LCD sur 18F
F6FCO
Avatar de l’utilisateur
Expert
Expert
Messages : 1413
Âge : 70
Enregistré en : décembre 2017
Localisation : Furtif je suis.
Contact :

#3 Message par F6FCO » ven. 26 juin 2020 10:54

Bonjour Temps-X,

J'avais cherché dans les datasheet mais comme PaulFjujo j'ai trouvé tout et son contraire, et n'ayant pas de 2004 sous la main en ce moment je n'ai pas pu faire d'essais. Mais j'ai trouvé l'info sur son site, ligne3=0x94 et ligne4=0xd4 :wink:

Fantaspic plus fort que le net :lol: . Reste a attendre le matos pour faire les essais sur un 4 lignes.

J'avais commandé un Nokia dans mes tiroirs, je me pencherai dessus après.
Une porte nand prend 2 bits en entrée... la cochonne !!! :langue:

[Librairie] Routines gestion LCD sur 18F
JMarc
Confirmé
Confirmé
Messages : 605
Enregistré en : août 2016
Localisation : Dans le Sud...

#4 Message par JMarc » ven. 26 juin 2020 12:31

Bonjour F6FCO et temps-x

Il faut modifier le programme de fribotte car ce n’est pas les mêmes accès mémoire entre le 16F et le 18F

1 Table Reads and Table Writes
In order to read and write program memory, there are two operations that allow the processor to move bytes between the program memory space and the data RAM:
• Table Read (TBLRD) • Table Write (TBLWT)
The program memory space is 16 bits wide, while the data RAM space is 8 bits wide. Table reads and table writes move data between these two memory spaces through an 8-bit register (TABLAT).


Quand je rentre de déplacement et si tu n’as pas trouvé, je t’enverrai la modif

[Librairie] Routines gestion LCD sur 18F
F6FCO
Avatar de l’utilisateur
Expert
Expert
Messages : 1413
Âge : 70
Enregistré en : décembre 2017
Localisation : Furtif je suis.
Contact :

#5 Message par F6FCO » ven. 26 juin 2020 19:49

Bonsoir,
C'est gentil Jean-Marc mais ne te donne pas cette peine, j'ai pratiquement terminé ma librairie perso et évidemment j'aurai plus de plaisir à l'utiliser que celle de quelqu'un d'autre. J'ai rajouté pas mal de fonctions aujourd'hui.
Je vous la posterai dés que j'aurai tout testé.

Et je fais le chemin inverse de tout le monde, ensuite je vais la transposer en 16F :lol:
Une porte nand prend 2 bits en entrée... la cochonne !!! :langue:

[Librairie] Routines gestion LCD sur 18F
Temps-x
Avatar de l’utilisateur
Expert
Expert
Messages : 2616
Enregistré en : juillet 2016
Localisation : Terre

#6 Message par Temps-x » ven. 26 juin 2020 21:08

Bonjour F6FCO, JMarc, et tout le forum,

Après essai sous simulateur avec écran lcd 4x16 je trouve

1 ligne = H'80
2 ligne = H'C0
3 ligne = H'90
4 ligne = H'D0

Je vais faire des essais sous simulateur avec écran lcd 4x20, je mettrais les résultats dans le post que je viens d'ouvrir ICI

A+
:roll: Les requins, c'est comme le langage ASM, c'est le sommet de la chaîne alimentaire. :wink:

[Librairie] Routines gestion LCD sur 18F
F6FCO
Avatar de l’utilisateur
Expert
Expert
Messages : 1413
Âge : 70
Enregistré en : décembre 2017
Localisation : Furtif je suis.
Contact :

#7 Message par F6FCO » ven. 26 juin 2020 22:23

Merci Temp_X d'avoir pris le temps de chercher, j'ai trouvé sur le site de PaulFjujo les valeurs suivantes, mais il annonce avoir des souci d'adresse avec ce LCD.

1 ligne = H'80
2 ligne = H'C0
3 ligne = H'94
4 ligne = H'D4

On n'est pas loin. Les adresses rondes comme 0x90 et 0XD0 me semblent plus probables et comme tu viens de tester j'adopte.
Voici mon travail, valide sur un 2x16 et pour le 4x20 j'attends de le recevoir pour les essais.

Cette librairie se compose de deux fichiers à inclure dans le programme principal: LCD_18F.inc et LCD_18F_8Mhz.asm



- Voici le fichier LCD_18F.inc à inclure au début du programme principal, il contient les définitions et les macros.

Code : Tout sélectionner



;********************************************************
;
                  - F6FCO  -                             ;
;
  Librairie simplifiée affichage LCD 18F sur 8 bits    ;
;
                     juin 2020                            ;
;********************************************************

;
 Ce fichier contient les définitions et macros nécessaires au bon fonctionnement du LCD

;------------------------------------------------

;
Variables à rajouter dans le programme principal

;     CBLOCK H'0' 
;        Reg_1
;        Reg_2
;        Reg_3    
;        LcdLigne
;        LcdColonne
;    ENDC

;-----------------------------------------

;
 connections des pins

; PIC        LCD
; -----------------
;
 PORTD
; rd0    -->    D0
; rd1    -->    D1
; rd2    -->    D2
; rd3    -->    D3
; rd4    -->    D4
; rd5    -->    D5
; rd6    -->    D6
; rd7    -->    D7
; rd8    -->    D8

; PORTC
; rc4    -->    RW
; rc5    -->    RS
; rc6    -->    E

;-----------------------------------------

;
Fonctions implémentées:

;
LCD_INIT             ; initialisation du LCD
;LCD_AFF_COMMANDE     ; envoi d'une commande au LCD
;LCD_AFF_DATAS         ; envoi du caractère a afficher.
;LCD_LIGNE             ; choix de la ligne d'
écriture
;LCD_COLONNE         ; choix de la colonne
;LCD_CURSEUR_BLINK    ; fait clignoter le curseur
;LCD_CURSEUR_OFF    ; éteint le curseur
;LCD_CURSEUR_FIXE    ; curseur fixe
;LCD_CURSEUR_HOME    ; ramène le curseur ligne 1 colonne 1
;LCD_SCROLL_DROITE    ; fait défiler le texte vers la droite
;LCD_SCROLL_GAUCHE    ; fait défiler le texte vers la gauche
;LCD_AFF_OFF        ; désactive l'affichage
;LCD_CLEAR            ; efface le LCD

;-----------------------------------------

#define     Lcd_Datas     PORTD    ; Port d'
écriture des 8 bits de datas
#define        Lcd_commande PORTC     ; port pour les 3 fils de commande
#define        RS    5                ; RS=0 -> envoi de commande    RS=1 -> envoi de données
#define     RW    4                ; RW=0 -> écriture dans le LCD     RW=1 -> lecture du LCD. Peut-être soudée à la gnd pour gagner une pin
#define     En    6                ; enable sert à générer le pulse de validation des envois
#define     ligne1    0x80
#define     ligne2    0xc0
#define     ligne3    0x90
#define     ligne4    0xD0


LCD_INIT    macro
        call    LCD_init
        endm

LCD_AFF_COMMANDE    macro
        call    LCD_aff_commande
        endm
        
LCD_AFF_DATAS    macro
        call    LCD_aff_datas
        endm

LCD_LIGNE    macro
        call    LCD_Ligne
        endm

LCD_COLONNE    macro
        call    LCD_Colonne
        endm
        
LCD_CURSEUR_BLINK macro
        call    LCD_curseur_blink
        endm
        
LCD_CURSEUR_OFF    macro
        call    LCD_curseur_off
        endm
        
LCD_CURSEUR_FIXE macro
        call     LCD_curseur_fixe
        endm
        
LCD_CURSEUR_HOME macro
        call    LCD_curseur_home
        endm
        
LCD_SCROLL_DROITE macro
        call    LCD_scroll_droite
        endm
        
LCD_SCROLL_GAUCHE macro
        call    LCD_scroll_gauche
        endm
        
LCD_AFF_OFF macro
        call    LCD_aff_off
        endm
        
LCD_CLEAR macro
        call    LCD_clear
        endm
        
RW0        macro
        bcf    Lcd_commande
,RW
        endm
        
RW1        macro
        bsf    Lcd_commande
,RW
        endm
        
RS0        macro
        bcf    Lcd_commande
,RS
        endm
        
RS1        macro
        bsf    Lcd_commande
,RS
        endm
        
En1        macro    
        bsf    Lcd_commande
,En
        endm
        
En0        macro
        bcf    Lcd_commande
,En
        endm

; -----------------------------------------------------
;
                COMMANDES LCD
; 0x38 mode 2 lignes et matrice 5x7
; 0x01 clear LCD
; 0x02 curseur home
; 0x05 déplacer le curseur vers la droite, déplacer l'affichage (gauche
; 0x06 déplacer le curseur vers la droite, affichage fixe
; 0x07 déplacer le curseur vers la droite, déplacer l'
affichage vers la gauche
; 0x0e affichage activé, curseur activé, curseur fixe
; 0x0f affichage activé, curseur activé, curseur clignotant
; 0x10 déplacer le curseur vers la gauche
; 0x14 déplacer le curseur vers la droite
; 0x18 déplacer l'affichage vers la gauche
; 0x1c déplacer l'
affichage vers la droite
; 0x80 forcer le curseur en début de 1ere ligne
; 0x83 aller a la premiere ligne position 3, etc.
;
 0x3c activer la deuxième ligne
; 0xc0 forcer le curseur en début de 2eme ligne
; 0xc1 aller à la 2eme ligne position 1
; 0xC2 aller a la 2eme ligne position 2, etc.
;
 0x08 affichage off, curseur off
; 0x0c affichage ON, curseur OFF
; 0x80 début de la ligne 1
; 0xC0 début de la ligne 2
; 0x94 début de la ligne 3
; 0xd4 début de la ligne 4


- et le fichier LCD_18F_8Mhz.asm à inclure à la fin du programme principal, juste avant le END, il contient les fonctions. Ce fichier est prévu pour un PIC cadencé à 8Mhz, je vais en faire des versions pour différentes fréquences d'horloge (4Mhz, 20Mhz).
Pour que ce soit plus pratique d'emploi j'ai encapsulé toutes les fonctions dans des macros.

Code : Tout sélectionner



;********************************************************
;
                  - F6FCO  -                             ;
;
  Librairie simplifiée affichage LCD 18F sur 8 bits    ;
;
                     juin 2020                            ;
;********************************************************

;
 Ce fichier contient les définitions et macros nécessaires au bon fonctionnement du LCD

;------------------------------------------------

;
Variables à rajouter dans le programme principal

;     CBLOCK H'0' 
;        Reg_1
;        Reg_2
;        Reg_3    
;        LcdLigne
;        LcdColonne
;    ENDC

;-----------------------------------------


;
 connections des pins

; PIC        LCD
; -----------------
;
 PORTD
; rd0    -->    D0
; rd1    -->    D1
; rd2    -->    D2
; rd3    -->    D3
; rd4    -->    D4
; rd5    -->    D5
; rd6    -->    D6
; rd7    -->    D7
; rd8    -->    D8

; PORTC
; rc4    -->    RW
; rc5    -->    RS
; rc6    -->    E


;-----------------------------------------

;
Fonctions implémentées:

;
LCD_INIT             ; initialisation du LCD
;LCD_AFF_COMMANDE     ; envoi d'une commande au LCD
;LCD_AFF_DATAS         ; envoi du caractère a afficher.
;LCD_LIGNE             ; choix de la ligne d'
écriture
;LCD_COLONNE         ; choix de la colonne
;LCD_CURSEUR_BLINK    ; fait clignoter le curseur
;LCD_CURSEUR_OFF    ; éteint le curseur
;LCD_CURSEUR_FIXE    ; curseur fixe
;LCD_CURSEUR_HOME    ; ramène le curseur ligne 1 colonne 1
;LCD_SCROLL_DROITE    ; fait défiler le texte vers la droite
;LCD_SCROLL_GAUCHE    ; fait défiler le texte vers la gauche
;LCD_AFF_OFF        ; désactive l'affichage
;LCD_CLEAR            ; efface le LCD

;-----------------------------------------

;                COMMANDES LCD
; 0x38 mode 2 lignes et matrice 5x7
; 0x01 clear LCD
; 0x02 curseur home
; 0x05 déplacer le curseur vers la droite, déplacer l'
affichage (gauche
; 0x06 déplacer le curseur vers la droite, affichage fixe
; 0x07 déplacer le curseur vers la droite, déplacer l'affichage vers la gauche
; 0x0c affichage activé, curseur désactivé
; 0x0e affichage activé, curseur activé, curseur fixe
; 0x0f affichage activé, curseur activé, curseur clignotant
; 0x10 déplacer le curseur vers la gauche
; 0x14 déplacer le curseur vers la droite
; 0x18 déplacer l'
affichage vers la gauche
; 0x1c déplacer l'affichage vers la droite
; 0x80 forcer le curseur en début de 1ere ligne
; 0x83 aller a la premiere ligne position 3, etc.
; 0x3c activer la deuxième ligne
; 0xc0 forcer le curseur en début de 2eme ligne
; 0xc1 aller à la 2eme ligne position 1
; 0xC2 aller a la 2eme ligne position 2, etc.
; 0x08 affichage off, curseur off
; 0x0c affichage ON, curseur OFF
; 0x80 début de la ligne 1
; 0xC0 début de la ligne 2
; 0x94 début de la ligne 3
; 0xd4 début de la ligne 4

; ------------------------- Initialisation du LCD
LCD_init
    call    tempo15ms
    call    tempo15ms
    call    tempo15ms
    movlw    0x38    ; 0x38 mode 2 lignes et matrice 5x7
    call    LCD_aff_commande
    movlw    0x0e    ; 0x0e affichage activé, curseur activé, curseur fixe
    call    LCD_aff_commande
    movlw    0x06    ; 0x06 déplacer le curseur vers la droite, affichage fixe
    call    LCD_aff_commande
    movlw    0x01    ; 0x01 clear LCD 
    call    LCD_aff_commande
    movlw    '
 '        ; Forçage d'un espace au premier caractère sinon le déplacement ne s'effectue pas
    call    LCD_aff_datas
    movlw    0x80    
    movwf    LcdLigne ; mise en mem de l'
adr de la premiere ligne
    return

; ------------------------- affichage d'une commande    
LCD_aff_commande
    movwf    Lcd_Datas
    call    tempo400µs
    RS0        
    En1    
    call    tempo400µs
    En0
    return
    
; ------------------------- Affichage d'
une donnée (caractère)
LCD_aff_datas
    movwf    Lcd_Datas
    call    tempo400µs
    RS1
    En1
    call    tempo400µs
    En0
    return
    
; ------------------------- choix de la ligne d'affichage    
LCD_Ligne
    movwf    LcdLigne
    sublw    4
    bz        lcdligne4
    movf    LcdLigne,w
    sublw    3
    bz        lcdligne3
    movf    LcdLigne,w
    sublw    2
    bz        lcdligne2
    movf    LcdLigne,w
    sublw    1
    bz        lcdligne1
lcdligne1
    movlw    ligne1        ; adr début ligne1
    movwf    LcdLigne    ; mise en mem de l'
adresse début de ligne 1
    bra        finlcdligne
lcdligne2
    movlw    ligne2        
; adr début ligne2
    movwf    LcdLigne    
; mise en mem de l'adresse début de ligne 2
    bra        finlcdligne
lcdligne3
    movlw    ligne3        ; adr début ligne3
    movwf    LcdLigne    ; mise en mem de l'
adresse début de ligne 3
    bra        finlcdligne
lcdligne4
    movlw    ligne4        
; adr début ligne4
    movwf    LcdLigne    
; mise en mem de l'adresse début de ligne 4
finlcdligne    
    return

; ------------------------- choix de la colonne d'
affichage
LCD_Colonne            
    addlw    
-1    ; on soustrait 1 à W
    addwf    LcdLigne
,w
    call    LCD_aff_commande
    return
    
;------------------------- curseur clignotant
LCD_curseur_blink
    movlw    0x0f
    call    LCD_aff_commande
    return

;------------------------- curseur désactivé
LCD_curseur_off
    movlw    0x0c
    call    LCD_aff_commande
    return

;------------------------- curseur fixe
LCD_curseur_fixe
    movlw    0x0e
    call    LCD_aff_commande
    return

;------------------------- curseur home
LCD_curseur_home
    movlw    0x02
    call    LCD_aff_commande
    return
    
;------------------------- déplace l'affichage vers la droite
LCD_scroll_droite
    movlw    0x1c
    call    LCD_aff_commande
    return

    
;------------------------- déplace l'
affichage vers la gauche
LCD_scroll_gauche
    movlw    0x18
    call    LCD_aff_commande
    return

;------------------------- affichage off
LCD_aff_off
    movlw    0x08
    call    LCD_aff_commande
    return

;------------------------- efface le LCD
LCD_clear
    movlw    0x01
    call    LCD_aff_commande
    return

; ------------------------- tempos
            
tempo400µs  
; pour 8mhz
; Délai 800 Cycles de la machine
; Durée du délai 400 microsecond
; Fréquence de l'oscillateur 8 MHZ
            movlw       .8
            movwf       Reg_1,1
            movlw       .2
            movwf       Reg_2
            decfsz      Reg_1,F,1
            bra         $-2
            decfsz      Reg_2
            bra         $-6
            nop
            return
            
            
tempo15ms  ; pour 8mhz
; Délai 30 000 Cycles de la machine
; Durée du délai 15 millisecond
; Fréquence de l'
oscillateur 8 MHZ
            movlw       .245
            movwf       Reg_1
,1
            movlw       .39
            movwf       Reg_2
            decfsz      Reg_1
,F,1
            bra         
$-2
            decfsz      Reg_2
            bra         
$-6
            return


Pour finir voici un fichier exemple tournant sur 18F4525 cadencé à 8Mhz.

Code : Tout sélectionner

;************************************************************************************************
;
                         F6FCO - Exemple d'affichage LCD sur PIC 18F                            ;
;                                      juin 2020                                                ;
;                                                                                                ;
;    Fonctions implémentées:                                                                    ;
;                                                                                                ;
;    LCD_INIT             ; initialisation du LCD                                                    ;
;    LCD_AFF_COMMANDE     ; envoi d'
une commande au LCD                                            ;
;
    LCD_AFF_DATAS         ; envoi du caractère a afficher.                                        ;
;
    LCD_LIGNE             ; choix de la ligne d'écriture                                            ;
;    LCD_COLONNE         ; choix de la colonne                                                    ;
;    LCD_CURSEUR_BLINK    ; fait clignoter le curseur                                                ;
;    LCD_CURSEUR_OFF    ; éteint le curseur                                                        ;
;    LCD_CURSEUR_FIXE    ; curseur fixe                                                            ;
;    LCD_CURSEUR_HOME    ; ramène le curseur ligne 1 colonne 1                                    ;
;    LCD_SCROLL_DROITE    ; fait défiler le texte vers la droite                                    ;
;    LCD_SCROLL_GAUCHE    ; fait défiler le texte vers la gauche                                    ;
;    LCD_AFF_OFF        ; désactive le LCD                                                        ;
;    LCD_CLEAR            ; efface le LCD                                                            ;
;                                                                                                ;
;********************************************************************************************** ;

; connections des pins du LCD au PIC 18F. Pour changer il faut aller bidouiller dans le fichier LCD_18F.inc

; PIC        LCD
; -----------------
; PORTD
; rd0    -->    D0
; rd1    -->    D1
; rd2    -->    D2
; rd3    -->    D3
; rd4    -->    D4
; rd5    -->    D5
; rd6    -->    D6
; rd7    -->    D7
; rd8    -->    D8

; PORTC
; rc4    -->    RW
; rc5    -->    RS
; rc6    -->    E

    Errorlevel-302 ; Supprime le message "Ensure that bank bits are correct" 


    list        p=18f4525                ; processeur utilisé 
    #include    <p18f4525.inc>            ; Définitions des constantes PIC
    ; Placer ici le fichier LCD_18F.inc
    #include    <LCD_18F.inc>            ; définitions des constantes LCD
    

 CONFIG OSC = INTIO67                     ; Oscillateur interne 8MHz 
 CONFIG IESO = OFF                        ; Délai au démarrage (ON/OFF)
 CONFIG BOREN = OFF                       ; Reset si chute de tension (ON/OFF)
 CONFIG BORV = 0                          ; Tension de reset en 1/10ème Volts 
 CONFIG WDT = OFF                         ; Mise hors service du watchdog (ON/OFF)
 CONFIG PBADEN = OFF                      ; PORTB<4:0> les broches sont configurées comme E/S numériques lors de la réinitialisation
 CONFIG LPT1OSC = OFF                     ; Timer1 configuré pour un fonctionnement plus puissant
 CONFIG MCLRE = ON                        ; Mclr configuré comme entrée
 CONFIG STVREN = ON                       ; Reset sur débordement de pile (ON/OFF)
 CONFIG LVP = OFF                         ; Programmation basse tension autorisée (ON/OFF)
 CONFIG XINST = OFF                       ; L'
extension du jeu d'instructions et le mode d'adressage indexé sont désactivés(mode hérité)
 CONFIG DEBUG = OFF                       ; Debugger hors service
 CONFIG CP0 
= OFF                         ; Code protection sur block 0 (ON/OFF)
 CONFIG CP1 = OFF                         ; Code protection sur block 1 (ON/OFF)
 CONFIG CP2 = OFF                         ; Code protection sur block 2 (ON/OFF)
 CONFIG CPB = OFF                         ; Code protection sur bootblock  (ON/OFF)
 CONFIG CPD = OFF                         ; Code protection sur eeprom (ON/OFF)
 CONFIG WRT0 = OFF                        ; Protection écriture block 0 (ON/OFF)
 CONFIG WRT1 = OFF                        ; Protection écriture block 1 (ON/OFF)
 CONFIG WRT2 = OFF                        ; Protection écriture block 2 (ON/OFF)
 CONFIG WRTB = OFF                        ; Protection écriture bootblock (ON/OFF)
 CONFIG WRTC = OFF                        ; Protection écriture configurations (ON/OFF)
 CONFIG WRTD = OFF                        ; Protection écriture zone eeprom (ON/OFF)
 CONFIG EBTR0 = OFF                       ; Protection lecture de table block 0 (ON/OFF)
 CONFIG EBTR1 = OFF                       ; Protection lecture de table block 1 (ON/OFF)
 CONFIG EBTR2 = OFF                       ; Protection lecture de table block 2 (ON/OFF)
 CONFIG EBTRB = OFF                       ; Protection lecture de table bootblock (ON/OFF)



     CBLOCK H'0' 
         
;--------------- Placer ici les variables utiles au LCD
        Reg_1
        Reg_2
        Reg_3
        LcdLigne
        LcdColonne
    ENDC


    ORG H
'0'

init
    movlw     B
'01110011'
    movwf     OSCCON            ; oscillateur à 8 Mhz 
    movlw    b
'00000000'    
    movwf    TRISC
    clrf    PORTC
    movlw    b
'00000000'    
    movwf    TRISD
    clrf    PORTD

    LCD_INIT        
; initialisation du LCD
    
    
    
; pour changer les connections du LCD sur le PIC ou bien pour adapter les tempos à la fréquence du PIC modifier le fichier LCD_18F.inc

    
; ligne 1 
    movlw    0x01
    LCD_LIGNE
    
; colonne 3
    movlw    0x02
    LCD_COLONNE
    
    movlw    
'-'
    LCD_AFF_DATAS
    movlw    
'*'
    LCD_AFF_DATAS
    movlw    
'('
    LCD_AFF_DATAS
    movlw    
' '
    LCD_AFF_DATAS
    movlw    
'F'
    LCD_AFF_DATAS
    movlw    
'6'
    LCD_AFF_DATAS
    movlw    
'F'
    LCD_AFF_DATAS
    movlw    
'C'
    LCD_AFF_DATAS
    movlw    
'O'
    LCD_AFF_DATAS
    movlw    
' '
    LCD_AFF_DATAS
    movlw    
')'
    LCD_AFF_DATAS
    movlw    
'*'
    LCD_AFF_DATAS
    movlw    
'-'
    LCD_AFF_DATAS
    
    
    
; ligne 2
    movlw    0x02
    LCD_LIGNE
    
; colonne 2
    movlw    0x02
    LCD_COLONNE
    
    movlw    
'G'
    LCD_AFF_DATAS
    movlw    
'e'
    LCD_AFF_DATAS
    movlw    
's'
    LCD_AFF_DATAS
    movlw    
't'
    LCD_AFF_DATAS
    movlw    
'i'
    LCD_AFF_DATAS
    movlw    
'o'
    LCD_AFF_DATAS
    movlw    
'n'
    LCD_AFF_DATAS

    movlw    
' '
    LCD_AFF_DATAS
    movlw    
'L'
    LCD_AFF_DATAS
    movlw    
'C'
    LCD_AFF_DATAS
    movlw    
'D'
    LCD_AFF_DATAS

    movlw    
' '
    LCD_AFF_DATAS
    movlw    
'1'
    LCD_AFF_DATAS
    movlw    
'8'
    LCD_AFF_DATAS
    movlw    
'F'
    LCD_AFF_DATAS

main
    bra    main
    


    
; ----------------------------- Placer ici en #include le fichier LCD_18F_8Mhz.asm
    #include <LCD_18F_8Mhz.asm>
    end


En pj le projet complet.

LCD 18F4525 8Mhz.zip
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Une porte nand prend 2 bits en entrée... la cochonne !!! :langue:

[Librairie] Routines gestion LCD sur 18F
Papymouge
Membre
Membre
Messages : 1
Enregistré en : juin 2020

#8 Message par Papymouge » ven. 26 juin 2020 23:50

Bonjour,

je suis le petit nouveau, mais c'est pas ici qu'il faut parler de ça. Donc je me permettrai juste d'apporter une petite info sur ma façon de faire avec ces afficheurs (je possède un 2x8 et un 2x20).


Pour éviter trop d'utilisation de tempo, je fait une lecture du Busy Flag qui est actif après la partie initialisation de l'afficheur.
RS|RW
0 | 1
et on retrouve sur le bus de données
D7|D6|D5|D4|D3|D2|D1
BF|C6|C5|C4|C3|C2|C1

Où BF = Busy Flag
C6 à C1 = compteur d'adresse pour savoir ou le curseur se trouve.

Voilà, quand le bit 7 = 0 c'est qu'il est prêt à recevoir une autre commande/donnée, ça évite des pauses trop longue, mais ça oblige à gérer la lecture de l'afficheur. RW doit être utilisé.

[Librairie] Routines gestion LCD sur 18F
F6FCO
Avatar de l’utilisateur
Expert
Expert
Messages : 1413
Âge : 70
Enregistré en : décembre 2017
Localisation : Furtif je suis.
Contact :

#9 Message par F6FCO » sam. 27 juin 2020 11:03

Bonjour Papymouge et bienvenue sur Fantaspic,

J'avais lu çà et c'était une amélioration que je comptais faire ensuite, çà permet effectivement de s'affranchir des tempos et de faire un seul fichier gérant toutes les fréquences d'horloge.

Donc si on veut lire le bit 7 du port PIC il faut le passer en lecture à ce moment là ? et le repasser après lecture en écriture pour le prochain envoi de données.
Une porte nand prend 2 bits en entrée... la cochonne !!! :langue:

[Librairie] Routines gestion LCD sur 18F
Temps-x
Avatar de l’utilisateur
Expert
Expert
Messages : 2616
Enregistré en : juillet 2016
Localisation : Terre

#10 Message par Temps-x » sam. 27 juin 2020 22:03

Bonsoir Papymouge, F6FCO, et tout le forum,

==> Soit le bienvenu sur le forum,

Papymouge a écrit :Source du message Pour éviter trop d'utilisation de tempo, je fait une lecture du Busy Flag qui est actif après la partie initialisation de l'afficheur.


Oui, et c'est mieux pour un programme qui tourne en boucle, il est aussi conseillé de relire ce qui à était écrit, mais ont ne peux pas échapper au tempo d’initialisation.

Personnellement j'ai jamais fait, car je fais des montages pour moi même, pour un professionnel qui fait de la conception, il faut absolument qu'il relise ce qui vient d'être écrit, car lui il ne peut pas ce permette que sa fonctionne 1 fois sur 10.

Il serait intéressant d'en faire un essai en version ASM...... qui se porte volontaire .... peut être Gérard exit

==> A+
:roll: Les requins, c'est comme le langage ASM, c'est le sommet de la chaîne alimentaire. :wink:


Retourner vers « Langage ASM »

Qui est en ligne

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