Bonjour à toutes et à tous,
Mes présentations faites, j’aborde le sujet qui m’a motivé à vous rejoindre sur ce forum.
Tout d’abord, mon projet:
Il s’agit d’afficher sur un écran GLCD des messages textes voir un logo qui viendra complémenter la réalisation d’un ampli audio à lampes de ma fabrication.
Ce que je souhaite c'est surtout démystifier la mise en oeuvre d'un afficheur GLCD au moins pour pouvoir démarrer mon programme.
J’ai déjà une expérience avec les incontournables afficheurs alphanumérique « HD44780 » mais j’avoue que les GLCD me paraissent bien 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 ce fichu 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 correspond de mes expériences en électronique numérique et analogique.
Revenons au 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.
Code asm : Sélectionner tout - Visualiser dans une fenêtre à part
Code:; 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 PORTB EQU 0X06 PORTC EQU 0X07 PORTD EQU 0X08 PORTE EQU 0X09 TRISA EQU 0X85 TRISB EQU 0X86 TRISC EQU 0X87 TRISD EQU 0X88 TRISE EQU 0X89 CPT2 EQU 0X0D CPT3 EQU 0X0E RETARD1 EQU 0X0C RETARD2 EQU 0X0F RETARD3 EQU 0X10 RETARD4 EQU 0X11 RETARD5 EQU 0X12 CONVERT EQU 0X13 VAL1 EQU 0X14 VAL2 EQU 0X15 RESULT EQU 0X16 ;--------------------------------------------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.
-----