Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

  1. #1
    Candidat au Club
    Homme Profil pro
    En retraite
    Inscrit en
    novembre 2018
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : En retraite

    Informations forums :
    Inscription : novembre 2018
    Messages : 1
    Points : 3
    Points
    3

    Par défaut Développer un programme en assembleur sur PIC16F877 pour gérer un afficheur GLCD

    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.

    Code asm : Sélectionner tout - Visualiser dans une fenêtre à part
    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.
    Images attachées Images attachées    

Discussions similaires

  1. [AC-2013] Pb sur Formulaire pour gérer le personnel
    Par krystof_iifr dans le forum IHM
    Réponses: 2
    Dernier message: 07/01/2016, 07h19
  2. Réponses: 62
    Dernier message: 15/05/2015, 16h17
  3. Les outils que vous utilisez pour programmer en assembleur
    Par Smortex dans le forum x86 32-bits / 64-bits
    Réponses: 35
    Dernier message: 14/07/2014, 19h31
  4. Programmation en assembleur sur MPLAB
    Par etienne582 dans le forum MPLAB
    Réponses: 1
    Dernier message: 05/06/2014, 10h30
  5. Développer un programme pour le bootup du PC
    Par deejay2221 dans le forum C++
    Réponses: 19
    Dernier message: 14/01/2006, 14h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo