Bonjour à toutes et à tous,
Mes présentations faites hier soir, j’aborde le sujet qui m’a motivé à vous rejoindre sur ce forum.
Tout d’abord, mon projet et j'espère être dans la bonne rubrique:
Il s’agit d’afficher sur un écran GLCD des messages textes voir un logo pour permmettre l’utilisation d’un ampli audio à lampes de ma fabrication.
Pour ce début je ne suis pas trop exigent et je me contenterait de pouvoir afficher du texte dans un premier temps.
J’ai choisi ce type d’afficheur parce qu’il correspond aux dimensions recherchés et qu’il dormait dans un fond de tiroir.
J’ai déjà une expérience avec les incontournables afficheurs alphanumérique « HD44780 » mais j’avoue que les GLCD me paraissent bcp moins évident à mettre en œuvre.
J’ai développé pas mal avec ces petits afficheurs 2 lignes sur MPLAB en assembleur,
Aujourd’hui, mon souhait serait de migrer vers les afficheurs graphique pour obtenir des images et des fontes de caractères différents sur un même écran.
Ça fait plusieurs semaines que je me documente sur ce projet, j’ai appris qu’il faut utiliser une image en .bmp et récupérer le code pour qu’il soit exploitable à partir d’un fichier .asm. Il existe des tas de moulinettes ; Bitmap2.LCD, VisualGLCD et d’autres moins performants mais gratuits.
Mon soucis, c’est que je ne sais pas par quel bout commencer et surtout démarrer mon programme sur MPLAB pour configurer l’afficheur afin d’obtenir un caractère sur l’écran. Je ne suis pas un virtuose en Anglais non plus mais je me débrouille avec les termes techniques et je sais déchiffrer un pdf. Mon expérience en électronique est assez bonne, tant en dépannage qu’en réalisation prototype. Passionné d’audio, je réalise des amplis tubes et transistors depuis les années 80, je fais aussi bcp de dépannage de matériel. Voilà en gros ce qui me signifie de mes expériences en électronique numérique et analogique.
Revenons à mon sujet :
Côté matériel :
Afficheur OPTREX DMF5005 240x64
http://www.rigelcorp.com/8051/Optrex_Dmf5000.pdf
Outil de développement et de programmation:
MPLAB Version 5.5 et Easypic3 de chez Mikroelectronica
Pic utilisé :
PIC 16F877 avec quartz 4MHz
Langage assembleur .
La partie pilotage est réalisé sur une carte qui rassemble le PIC, les liaisons avec l’afficheur, l’alimentation et le rétroéclairage + une petite carte avec qq poussoirs et des LEDs.
Tout fonctionne correctement, le contraste réagit bien et l’alimentation 5V est correcte. J’ai monté un support 40 pins à force d’insertion nul pour pouvoir déplacer aisément le PIC du programmateur à la carte.
Les directives d’assemblage du PIC ont été définis en fonction des ports E/S affectés aux différents besoins.
Voici une copie de mon programme asm ou il manque les directives pour l’afficheur. Le programme des tempo est une copie d’un autre fichier, il demande qu’à être adapté au besoin de l’afficheur.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118
| ; TITRE: Gestion d'un afficheur LCD graphique
; PIC UTILISE: PIC16F877
; Gestion PP845 version 2019
; le quartz est de 4MHz
;----------------------------------------------------Brochage du PIC sur la carte---------------------------------------------------------
; RB0 | 33 | E | Inter "on / off"
; RB1 | 34 | E | Bouton poussoir "OK"
; RB2 | 35 | S | Ecriture afficheur
; RB3 | 36 | S | Lecture afficheur
; RB4 | 37 | S | Chip Enable
; RB5 | 38 | S | C/D
; RB6 | 39 | S | Font Size Select
; RB7 | 40 | S | Reset
; RC0 | 15 | S | Adressage entrée audio bit A
; RC1 | 16 | S | Adressage entrée audio bit B
; RC2 | 17 | S | Adressage entrée audio bit C
; RC3 | 18 | S | Adressage entrée audio bit D
; RC4 | 23 | S | LEDs Rouge droit et gauche
; RC5 | 24 | E | Bouton poussoir "INPUT"
; RC6 | 25 | E | Bouton poussoir "PHASE"
; RC7 | 26 | E | Bouton poussoir "MUTE"
; RD0 | 19 | S | Sortie bit D7 du LCD
; RD1 | 20 | S | Sortie bit D6 du LCD
; RD2 | 21 | S | Sortie bit D5 du LCD
; RD3 | 22 | S | Sortie bit D4 du LCD
; RD4 | 27 | S | Sortie bit D3 du LCD
; RD5 | 28 | S | Sortie bit D2 du LCD
; RD6 | 29 | S | Sortie bit D1 du LCD
; RD7 | 30 | S | Sortie bit D0 du LCD
;--------------------------------------------------DIRECTIVE D'ASSEMBLAGE POUR MPLAB-------------------------------------------------------
list p=16f877
#include <p16f877.inc>
__CONFIG _CP_OFF & _DEBUG_OFF & _WRT_ENABLE_OFF & _CPD_OFF & _LVP_OFF & _BODEN_OFF & _PWRTE_ON & _WDT_OFF & _XT_OSC
;-------------------------------------------------DEFINITION DES REGISTRES TEMPORAIRES------------------------------------------------------
PORTA EQU 0X05 ; Le registre temporaire PORTA se trouve à l'adresse 05
PORTB EQU 0X06 ; Le registre temporaire PORTB se trouve à l'adresse 06
PORTC EQU 0X07 ; Le registre temporaire PORTC se trouve à l'adresse 07
PORTD EQU 0X08 ; Le registre temporaire PORTD se trouve à l'adresse 08
PORTE EQU 0X09 ; Le registre temporaire PORTE se trouve à l'adresse 09
TRISA EQU 0X85 ; Le registre temporaire TRISA se trouve à l'adresse 85
TRISB EQU 0X86 ; Le registre temporaire TRISB se trouve à l'adresse 86
TRISC EQU 0X87 ; Le registre temporaire TRISC se trouve à l'adresse 87
TRISD EQU 0X88 ; Le registre temporaire TRISD se trouve à l'adresse 88
TRISE EQU 0X89 ; Le registre temporaire TRISE se trouve à l'adresse 89
CPT2 EQU 0X0D ; Le registre temporaire CPT2 se trouve à l'adresse 0D
CPT3 EQU 0X0E ; Le registre temporaire CPT3 se trouve à l'adresse 0E
RETARD1 EQU 0X0C ; Le registre temporaire retard1 se trouve à l'adresse 0C
RETARD2 EQU 0X0F ; Le registre temporaire retard2 se trouve à l'adresse 0F
RETARD3 EQU 0X10 ; Le registre temporaire retard3 se trouve à l'adresse 10
RETARD4 EQU 0X11 ; Le registre temporaire retard4 se trouve à l'adresse 11
RETARD5 EQU 0X12 ; Le registre temporaire retard4 se trouve à l'adresse 12
CONVERT EQU 0X13 ; Le registre temporaire CONVERT se trouve à l'adresse 13
VAL1 EQU 0X14 ; Le registre temporaire VAL1 se trouve à l'adresse 14
VAL2 EQU 0X15 ; Le registre temporaire VAL2 se trouve à l'adresse 15
RESULT EQU 0X16 ; Le registre temporaire RESULT se trouve à l'adresse 16
;--------------------------------------------PROGRAMME PRINCIPAL----------------------------------------
ORG 0000h ; Adresse de reset
GOTO INIT
;-----------------------------------------PROGRAMME D'INITIALISATION----------------------------------------
INIT
CLRF PORTA ; On remet à 0 le port A
CLRF PORTB ; On remet à 0 le port B
CLRF PORTC ; On remet à 0 le port C
CLRF PORTD ; On remet à 0 le port D
CLRF PORTE ; On remet à 0 le port E
BSF STATUS,RP0 ; Selection de la page mémoire RP0
BCF STATUS,RP1 ; Déselection de la page mémoire RP1
MOVLW B'00000000' ; On charge la valeur dans le registre W
MOVWF TRISA ; On transfert W sur le registre TRISA pour définir la direction du portA en sortie
MOVLW B'00000011' ; On charge la valeur dans le registre W
MOVWF TRISB ; On transfert W sur le registre TRISB pour définir la direction du portB
MOVLW B'11100000' ; On charge la valeur dans le registre W
MOVWF TRISC ; On transfert W sur le registre TRISC pour définir la direction du portC
MOVLW B'00000000' ; On charge la valeur dans le registre W
MOVWF TRISD ; On transfert W sur le registre TRISD pour définir la direction du portD en sortie
BCF STATUS,RP0 ; Déselection de la page mémoire RP0
BCF STATUS,RP1 ; Déselection de la page mémoire RP1
;---------------------------------------------------------CONFIGURATION AFFICHEUR-----------------------------------------------------------
;Initialisation afficheur
;------------------------------------------------------------Ecriture dans l'afficheur-------------------------------------
;---------------------------------------------------SOUS PROGRAMME TEMPO D'ATTENTE---------------------------------------------------------------
ATTENTE5
MOVLW 0XFF ; On met FF dans le registre W
MOVWF CPT2 ; On met W dans le registre CPT2
ATT2
DECFSZ CPT2,1 ; On décrémente CPT2,1 et on saute la prochaine instruction
GOTO ATT2 ; Sinon retour à ATT2
RETURN ; Retour au programme principal après l'instruction call
ATTENTE6
MOVLW 0X1E ; On met 14 dans le registre W
MOVWF CPT3 ; On met W dans le registre CPT3
ATT3
CALL ATTENTE5 ; On appelle ATTENTE5
DECFSZ CPT3,1 ; On décrémente CPT3,1 et on saute la prochaine instruction
GOTO ATT3 ; Sinon retour à ATT3
RETURN ; Retour au programme principal après l'instruction call
END |
En espérant vous avoir fourni le maximum d’info, je vous remercie de l’aide que vous voudrez bien m’accorder.
Partager