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 ---
- 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 ---
Modérateur : mazertoc
[Librairie] Routines gestion LCD sur 18F
- F6FCO
Expert- Messages : 1415
- Âge : 70
- Enregistré en : décembre 2017
- Localisation : Furtif je suis.
- Contact :
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 . 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
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 . 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
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
[Librairie] Routines gestion LCD sur 18F
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+
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.
[Librairie] Routines gestion LCD sur 18F
- F6FCO
Expert- Messages : 1415
- Âge : 70
- Enregistré en : décembre 2017
- Localisation : Furtif je suis.
- Contact :
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
Fantaspic plus fort que le net . 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.
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
Fantaspic plus fort que le net . 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.
[Librairie] Routines gestion LCD sur 18F
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
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
Expert- Messages : 1415
- Âge : 70
- Enregistré en : décembre 2017
- Localisation : Furtif je suis.
- Contact :
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
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
[Librairie] Routines gestion LCD sur 18F
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+
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+
[Librairie] Routines gestion LCD sur 18F
- F6FCO
Expert- Messages : 1415
- Âge : 70
- Enregistré en : décembre 2017
- Localisation : Furtif je suis.
- Contact :
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.
- 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.
Pour finir voici un fichier exemple tournant sur 18F4525 cadencé à 8Mhz.
En pj le projet complet.
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.
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
[Librairie] Routines gestion LCD sur 18F
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é.
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
Expert- Messages : 1415
- Âge : 70
- Enregistré en : décembre 2017
- Localisation : Furtif je suis.
- Contact :
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.
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.
[Librairie] Routines gestion LCD sur 18F
Bonsoir Papymouge, F6FCO, et tout le forum,
Soit le bienvenu sur le forum,
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
A+
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
A+
Retourner vers « Langage ASM »
Qui est en ligne
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 45 invités