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
Bonjour à toute l'équipe du forum
Bonjour à toute l'équipe du forum
Bonjour à toute l'équipe du forum
-
nondediode
Amateur- Messages : 148
- Enregistré en : novembre 2018
- Localisation : Lyon
Testé sur RA0, RA1, RA2, et RA3
ça fonctionne
Côté afficheur, j'ai tjrs un trait horizontale qui traverse l'écran. Parfois il est au centre, parfois il se décale plus haut ou plus bas. Il n'y a pas de conditions particulière qui fait qu'il se déplace en haut ou en bas après allumage de la platine, c'est complètement aléatoire.
ça fonctionne
Côté afficheur, j'ai tjrs un trait horizontale qui traverse l'écran. Parfois il est au centre, parfois il se décale plus haut ou plus bas. Il n'y a pas de conditions particulière qui fait qu'il se déplace en haut ou en bas après allumage de la platine, c'est complètement aléatoire.
Bonjour à toute l'équipe du forum
Super donc pour l'instant je ne fessai que testé ta carte. recopie le programme ci dessous avec donc une led sur ra0 et une led sur ra1. si cela te causes probleme pour le cablage dit moi ou cela t'arrange. fais le test et dit moi l'etat des 2 leds et de l'ecran
folkeu08 je ne t'oublie pas
folkeu08 je ne t'oublie pas
Code : Tout sélectionner
;---------------------------------------------------------GESTION AFFICHEUR-----------------------------------------------------------------
; TITRE: Gestion d'un afficheur LCD graphique
; DATE: 10/11/2018
; AUTEUR: nondediode
; PIC UTILISE: PIC16F877
; Gestion PP845 version 2019
; le quartz est de 4MHz
; essai JMarc Version 1,01
;----------------------------------------------------Brochage du PIC sur la carte---------------------------------------------------------
;
; Port | Broche | E/S | Description
; RA0 | 02 | S | Relais "MUTE"
; RA1 | 03 | S | Relais "PHASE"
; RA2 | 04 | S | LED droite
; RA3 | 05 | S | LED gauche
; RA4 | 06 | S | Relais de cde HT gauche et droit
; RA5 | 07 | S | Relais statique gauche et droit
; RB0 | 33 | E | Inter "on / off"
; RB1 | 34 | E | Bouton poussoir "OK"
; RB2 | 35 | S | Data Write afficheur
; RB3 | 36 | S | Data Read 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>
radix dec ; on travaille en décimal par défaut
__CONFIG _CP_OFF & _DEBUG_OFF & _WRT_ENABLE_OFF & _CPD_OFF & _LVP_OFF & _BODEN_OFF & _PWRTE_ON & _WDT_OFF & _HS_OSC
OPTIONVAL EQU B'00001111'
;-------------------------------------------------Definition de la RAM------------------------------------------------------
cblock 0x20
TEMP ;temp buffer
DATAL ;instruction donnée =0
DATAH ;instruction donnée =1
COMMAND ;instruction
TABLECOUNT ;tablecounter
endc
cblock 0x70
w_temp : 1 ; Sauvegarde registre W
status_temp : 1 ; sauvegarde registre STATUS
FSR_temp : 1 ; sauvegarde FSR (si indirect en interrupt)
PCLATH_temp : 1 ; sauvegarde PCLATH (si prog>2K)
Tempj : 1
clign_led_temoin : 1
STATUS_TEMP ;interruptcontextsave for STATUS
PCLATH_TEMP ;interruptcontextsave for PCLATH
COUNT1 ;delaycounter 1
COUNT2 ;delaycounter 2
COUNT3 ;delaycounter 3
DATA_EE_ADDR ;data EEPROM address buffer
DATA_EE_DATA ;data EEPROM data buffer
endc
;-------------------------------------------------Definition des constantes------------------------------------------------------
#define WRITE PORTB,2 ; GLCD writeenable/disable (active low)
#define READ PORTB,3 ; GLCD readenable/disable (active low)
#define CE PORTB,4 ; GLCD chip enable/disable (active low)
#define CD PORTB,5 ; GLCD command/data
#define FONT PORTB,6 ; GLCD font select (6x8 or 8x8)
#define RST PORTB,7 ; GLCD reset
#define D0 PORTD,RD0 ; GLCD data port bit 0
#define D1 PORTD,RD1 ; GLCD data port bit 1
#define D2 PORTD,RD2 ; GLCD data port bit 2
#define D3 PORTD,RD3 ; GLCD data port bit 3
#define D4 PORTD,RD4 ; GLCD data port bit 4
#define D5 PORTD,RD5 ; GLCD data port bit 5
#define D6 PORTD,RD6 ; GLCD data port bit 6
#define D7 PORTD,RD7 ; GLCD data port bit 7
;--------------------------------------------Definition des registres temporaires------------------------------------------------------
WR_EN EQU 2
WR_DIS EQU 7
RD_EN EQU 1
RD_DIS EQU 7
;--------------------------------------------Directives des programmes------------------------------------------------------
org 0x000 ; Debut du programme principale
goto START ; Saut à START
;*****************************************************************************
; ROUTINE INTERRUPTION *
;*****************************************************************************
;sauvegarder registres
;---------------------
org 0x004 ; adresse d'interruption
movwf w_temp ; sauver registre W
swapf STATUS,w ; swap status avec résultat dans w
movwf status_temp ; sauver status swappé
movf FSR , w ; charger FSR
movwf FSR_temp ; sauvegarder FSR
bsf STATUS,RP0 ; sélectionner banque1
btfss PIE1,TMR1IE ; tester si interrupt autorisée
goto intsw1 ; non sauter
bcf STATUS,RP0 ; oui, sélectionner banque0
btfss PIR1,TMR1IF ; oui, tester si interrupt en cours
goto intsw1 ; non sauter
MOVLW 0x3C ; int toute le 100ms
MOVWF TMR1H
MOVLW 0xB3
movwf TMR1L
INCF Tempj,F ; à 10 cela fera 1s
; MOVLW 0X1A ;on test si 10fois 100mS
movf clign_led_temoin,w
SUBWF Tempj,W
BTFSS STATUS,Z
GOTO sautintsw9
CLRF Tempj ;RAZ compteur temp
movlw B'00000001' ; Masque pour inversion de la LED (RA0) ; sélectionner bit à inverser
xorwf PORTA , f ; inverser LED
sautintsw9
bcf PIR1,TMR1IF ; effacer flag interupt
intsw1
;restaurer registres
;-------------------
restorereg
bcf STATUS,RP0
movf FSR_temp , w ; charger FSR sauvé
movwf FSR ; restaurer FSR
swapf status_temp,w ; swap ancien status, résultat dans w
movwf STATUS ; restaurer status
swapf w_temp,f ; Inversion L et H de l'ancien W
; sans modifier Z
swapf w_temp,w ; Réinversion de L et H dans W
; W restauré sans modifier status
retfie
;-------------------------------------------------INITIALISATION------------------------------------------------------
START
; Registre d'options (banque 1)
; -----------------------------
BANKSEL OPTION_REG ; sélectionner banque 1
movlw OPTIONVAL ; charger masque
movwf OPTION_REG ; initialiser registre option
; registres interruptions (banque 1)
; ----------------------------------
bsf INTCON,PEIE ; autoriser interruptions périphériques
bcf STATUS,RP0 ; passer banque 0
; autoriser interruptions (banque 0)
; ----------------------------------
bsf T1CON,0X4
bcf T1CON,0X5
MOVLW 0x3C ; int toute le 100ms
MOVWF TMR1H
MOVLW 0xB3
movwf TMR1L
BSF T1CON,TMR1ON ;on TMR1 bit a 1
CLRF PORTA ; Remise à 0 du port A
CLRF PORTB ; Remise à 0 du port B
CLRF PORTC ; Remise à 0 du port C
CLRF PORTD ; Remise à 0 du port D
CLRF PORTE ; Remise à 0 du port E
bsf STATUS,RP0 ; Banque 1
clrf TRISA ; PortA en sortie
movlw b'00000110'
movwf ADCON1 ; sortie digital
; PORTA, PORTB, PORTC, and PORTE outputs
CLRF TRISB ; PORTD defaults to input
CLRF TRISC ;
CLRF TRISE ;
BSF PIE1,TMR1IE ;valide le TMR1
bcf STATUS,RP0 ; Banque 0
movlw 0x0A
movwf clign_led_temoin
bsf INTCON,GIE ; valider interruptions
GLCD_INIT
BCF RST ; reset du GLCD
MOVLW B'01111100' ; On charge la valeur dans le registre W
MOVWF PORTB ; Command mode and 6x8 font, disableread, write, and chip enable
call Delay50mS ; Appel de la tempo de 50ms
BSF RST ; disable reset
;-------------------------------------------------INITIALISATION afficheur------------------------------------------------------
movlw 0x3A
movwf clign_led_temoin
ModeSet
MOVLW 0x84 ; Charge la valeur dans W
MOVWF COMMAND ; Transfert de W sur COMMAND
CALL NoData ; Appel de l'étiquette NoData
GraphicsHome
MOVLW 0x00 ; Charge la valeur dans W
MOVWF DATAL ; Transfert de W sur DATAL
MOVLW 0x00 ; Charge la valeur dans W
MOVWF DATAH ; Transfert de W sur DATAH
MOVLW 0x42 ; Charge la valeur dans W
MOVWF COMMAND ; Transfert de W sur COMMAND
CALL TwoData ; Appel de l'étiquette TwoData
GraphicsArea
MOVLW 0x28 ; Charge la valeur dans W
MOVWF DATAL ; Transfert de W sur DATAL
MOVLW 0x0 ; Charge la valeur dans W
MOVWF DATAH ; Transfert de W sur DATAH
MOVLW 0x43 ; Charge la valeur dans W
MOVWF COMMAND ; Transfert de W sur COMMAND
CALL TwoData ; Appel de l'étiquette TwoData
movlw 0x0A
movwf clign_led_temoin
TextHome
MOVLW 0x00 ; Charge la valeur dans W
MOVWF DATAL ; Transfert de W sur DATAL
MOVLW 0x17 ; Charge la valeur dans W
MOVWF DATAH ; Transfert de W sur DATAH
MOVLW 0x40 ; Charge la valeur dans W
MOVWF COMMAND ; Transfert de W sur COMMAND
CALL TwoData ; Appel de l'étiquette TwoData
TextArea
MOVLW 0x28 ; Charge la valeur dans W
MOVWF DATAL ; Transfert de W sur DATAL
MOVLW 0x00 ; Charge la valeur dans W
MOVWF DATAH ; Transfert de W sur DATAH
MOVLW 0x41 ; Charge la valeur dans W
MOVWF COMMAND ; Transfert de W sur COMMAND
CALL TwoData ; Appel de l'étiquette TwoData
CGROMSet
MOVLW 0x03 ; Charge la valeur dans W
MOVWF DATAL ; Transfert de W sur DATAL
MOVLW 0x0 ; Charge la valeur dans W
MOVWF DATAH ; Transfert de W sur DATAH
MOVLW 0x22 ; Charge la valeur dans W
MOVWF COMMAND ; Transfert de W sur COMMAND
CALL TwoData ; Appel de l'étiquette TwoData
cleargraphicsRAM
MOVLW 0x00 ; Charge la valeur dans W
MOVWF DATAL ; Setaddress pointer to 0x0000
MOVLW 0x00 ; Charge la valeur dans W
MOVWF DATAH ; Transfert de W sur DATAH
CALL ADDR_PTR ; Appel de l'étiquette ADDR_PTR
MOVLW 0x20 ; Charge la valeur dans W
MOVWF COUNT2 ; Transfert de W sur COUNT2
CALL DisplayClear ; Appel de l'étiquette DisplayClear
cleartextRAM
MOVLW 0x00 ; Charge la valeur dans W
MOVWF DATAL ; Setaddress pointer to 0x0000
MOVLW 0x17 ; Charge la valeur dans W
MOVWF DATAH ; Transfert de W sur DATAH
CALL ADDR_PTR ; Appel de l'étiquette ADDR_PTR
MOVLW 0x08 ; Charge la valeur dans W
MOVWF COUNT2 ; Transfert de W sur COUNT2
CALL DisplayClear ; Appel de l'étiquette DisplayClear
CSRPattern
MOVLW 0xA0 ; Charge la valeur dans W (A0)
MOVWF COMMAND ; Transfert de W sur COMMAND
CALL NoData ; Appel de l'étiquette NoData
CSRPointer
MOVLW 0x00 ; Charge la valeur dans W
MOVWF DATAL ; Transfert de W sur DATAL
MOVLW 0x00 ; Charge la valeur dans W
MOVWF DATAH ; Transfert de W sur DATAH
CALL CSR_PTR ; Appel de l'étiquette CSR_PTR
ADDRPointer
MOVLW 0x00 ; Charge la valeur dans W
MOVWF DATAL ; Transfert de W sur DATAL
MOVLW 0x00 ; Charge la valeur dans W
MOVWF DATAH ; Transfert de W sur DATAH
CALL ADDR_PTR ; Appel de l'étiquette ADDR_PTR
DisplayOn
MOVLW 0x9F ; Charge la valeur dans W
MOVWF COMMAND ; Transfert de W sur COMMAND
CALL NoData ; Appel de l'étiquette NoData
loop
nop
bsf PORTA,1
GOTO loop ; boucle principale
;-------------------------------------------------Programme tempo------------------------------------------------------
Delay50mS
MOVLW 0x40 ; Charge la valeur dans W
MOVWF COUNT1 ; Transfert de W sur COUNT1
MOVWF COUNT2 ; Transfert de W sur COUNT2
DECFSZ COUNT1,F ; On décrémente COUNT1,F
GOTO $-1 ; Comptage de boucle
DECFSZ COUNT2,F ; On décrémente COUNT2,F
GOTO $-3 ; Comptage de boucle
RETURN
Delay
MOVWF COUNT3 ; Transfert de W sur COUNT3
CALL Delay50mS ; Appel de l'étiquette Delay50mS
DECFSZ COUNT3,F ; On décrémente COUNT3,F
GOTO $-2 ; Comptage de boucle
RETURN
;-------------------------------------------------Position Address Pointer ------------------------------------------------------
ADDR_PTR
MOVLW 0x24 ; Charge la valeur dans W
MOVWF COMMAND ; Transfert de W sur COMMAND
CALL TwoData ; Appel de l'étiquette TwoData
RETURN
;-------------------------------------------------Position Cursor Pointer ------------------------------------------------------
CSR_PTR
MOVLW 0x21 ; Charge la valeur dans W
MOVWF COMMAND ; Transfert de W sur COMMAND
CALL TwoData ; Appel de l'étiquette TwoData
RETURN
;-------------------------------------------------Command Send Routines ------------------------------------------------------
TwoData
CALL LCDStat ; Appel de l'étiquette LCDStat
MOVWF DATAL ; Transfert de W sur DATAL
CALL DWrite ; Appel de l'étiquette DWrite
OneData
CALL LCDStat ; Appel de l'étiquette LCDStat
MOVWF DATAH ; Transfert de W sur DATAH
CALL DWrite ; Appel de l'étiquette DWrite
NoData
CALL LCDStat ; Appel de l'étiquette LCDStat
MOVWF COMMAND ; Transfert de W sur COMMAND
CALL Command ; Appel de l'étiquette Command
RETURN
;------------------------------------------------GLCD Read/Write/Status Check------------------------------------------------------
Command
BSF CD ; CD=1
GOTO $+2 ; Permet de sauter 2 lignes de code
DWrite
BCF CD ; CD=0
MOVWF PORTD ; Transfert de W sur port D
MOVLW WR_EN ; Charge WR_EN dans W
MOVWF PORTB ; Transfert de W sur port B
BSF STATUS,5 ; Accès à la 2ème page mémoire TRISD
MOVLW B'00000000' ; Charge la valeur dans W
MOVWF TRISD ; Le port D est en sortie
MOVLW WR_DIS ; Charge WR_DIS dans W
MOVWF PORTB ; Transfert de W sur port B
BCF STATUS,5 ; Accès à la 1ère page mémoire TRISD
call Delay50mS ; Appel de la tempo de 50ms
BSF STATUS,5 ; Accès à la 2ème page mémoire TRISD
MOVLW B'11111111' ; Charge la valeur dans W
MOVWF TRISD ; Le port D est en entrée
BCF STATUS,5 ; Accès à la 1ère page mémoire TRISD
RETURN
LCDStat
CALL StatReadEn ; Appel de l'étiquette StatReadEn
BTFSC PORTD,0 ; D0 = 0?
BTFSS PORTD,1 ; D1 = 1?
GOTO $-2 ; Comptage de boucle
CALL StatReadDis ; Appel de l'étiquette StatReadDis
RETURN
DAWStat
CALL StatReadEn ; Appel de l'étiquette StatReadEn
BTFSS PORTD,3 ; D3 = 1?
GOTO $-1 ; Comptage de boucle
CALL StatReadDis ; disablestatusread
RETURN
StatReadEn
BSF CD ; CD=1
MOVLW RD_EN ; Charge RD_EN dans W
MOVWF PORTB ; Transfert de W sur port B
RETURN
StatReadDis
MOVLW RD_DIS ; Charge RD_DIS dans W
MOVWF PORTB ; Transfert de W sur port B
RETURN
;---------------------------------------------Data Auto Read/Write Routines--------------------------------------------------
DAWSet
MOVLW 0xB0 ; Charge la valeur dans W
MOVWF COMMAND ; Transfert de W sur COMMAND
CALL NoData ; Appel de l'étiquette NoData
CALL LCDStat ; Appel de l'étiquette LCDStat
CALL DAWStat ; Appel de l'étiquette DAWStat
RETURN
DAWReset
CALL DAWStat ; Appel de l'étiquette DAWStat
MOVLW 0xB2 ; Charge la valeur dans W
MOVWF COMMAND ; Transfert de W sur COMMAND
CALL NoData ; Appel de l'étiquette NoData
RETURN
;------------------------------------------------Clear Display------------------------------------------------------
DisplayClear
MOVLW 160 ; Charge la valeur dans W
MOVWF COUNT1 ; Transfert de W sur COUNT1
CALL DAWSet ; Appel de l'étiquette DAWSet
CALL DAWStat ; Appel de l'étiquette DAWStat
MOVLW 0 ; Charge la valeur dans W
CALL DWrite ; Appel de l'étiquette DWrite
DECFSZ COUNT1,F ; On décrémente COUNT1,F
GOTO $-4 ; Comptage de boucle
MOVLW 160 ; Charge la valeur dans W
MOVWF COUNT1 ; Transfert de W sur COUNT1
DECFSZ COUNT2,F ; On décrémente COUNT2,F
GOTO $-8 ; Comptage de boucle
CALL DAWReset ; Appel de l'étiquette DAWReset
RETURN
END
Bonjour à toute l'équipe du forum
-
nondediode
Amateur- Messages : 148
- Enregistré en : novembre 2018
- Localisation : Lyon
Bonjour à toute l'équipe du forum
-
nondediode
Amateur- Messages : 148
- Enregistré en : novembre 2018
- Localisation : Lyon
Bonjour à toute l'équipe du forum
Bon, si elle clignote a 1 hz c'est que le programme se déroule au moins jusqu'au reset du GLCD mais si la led ra1 reste eteinte est que le programme ne se déroule pas jusqu'a la boucle principale
moi le simulateur bloque a la lecture de ton ecran qui doit retourner BTFSC PORTD,0 ; D0 = 0?
il va falloir bucher (meme ceux qui font du C pourront participer ) la doc pour savoir qu'elle valeur doit t'on envoyer et je te code tout cela
je regarde de mon coté
je ne pense pas devoir mettre des resistances sur ton portD
moi le simulateur bloque a la lecture de ton ecran qui doit retourner BTFSC PORTD,0 ; D0 = 0?
il va falloir bucher (meme ceux qui font du C pourront participer ) la doc pour savoir qu'elle valeur doit t'on envoyer et je te code tout cela
je regarde de mon coté
je ne pense pas devoir mettre des resistances sur ton portD
Bonjour à toute l'équipe du forum
A la demande générale de JMarc :), voila un de mes vieux programmes qui pilotait un T6963.
Je n'ai plus le lcd.
Il n'est pas nécessaire de lire le status du contrôleur, quelques commandes en output et ça démarre.
Je pense qu'il faudrait repartir à zéro, faire 2 sous-programmes, envoi commande et envoi data.
Et il devrait démarrer ce lcd. Il serait bon aussi de vérifier à l'oscillo ou au multimètre, que tous les signaux arrivent bien au lcd.
J'ai extirpé ça, mais sans rien vérfier
Je n'ai plus le lcd.
Il n'est pas nécessaire de lire le status du contrôleur, quelques commandes en output et ça démarre.
Je pense qu'il faudrait repartir à zéro, faire 2 sous-programmes, envoi commande et envoi data.
Et il devrait démarrer ce lcd. Il serait bon aussi de vérifier à l'oscillo ou au multimètre, que tous les signaux arrivent bien au lcd.
J'ai extirpé ça, mais sans rien vérfier
Code : Tout sélectionner
LCD_RST_240X128 = 1; LCD_RST_240X128_TRIS = 0; // rst high
LCD_OFF_ON = 0; LCD_OFF_ON_TRIS = 0; // off/on high
LCD_REV_240X128 = 0; LCD_REV_240X128_TRIS = 0; // rev low
LCD_RD_240X128 = 1; LCD_RD_240X128_TRIS = 0; // rd high
LCD_WR_240X128 = 1; LCD_WR_240X128_TRIS = 0; // wr high
LCD_WR_240X128 = 1; LCD_WR_240X128_TRIS = 0; // wr high
LCD_FS6_240X128 = 1; LCD_FS6_240X128_TRIS = 0; // FS6
LCD_RST_240X128 = 0; Wait1ms(1); // reset
LCD_RST_240X128 = 1; Wait1ms(1);
CtlAff(0x80); // select CG ROM afficheur et mode OR
DataAff(0x00); DataAff(0x00); CtlAff(0x42); // set grp en 0000h
DataAff(40); DataAff(0x00); CtlAff(0x43); // set pavé grp 6x8 (40) ou 8x8 (30)
DataAff(0x00); DataAff(0x17); CtlAff(0x40); // set text en 1700h
DataAff(40); DataAff(0x00); CtlAff(0x41); // set pavé grp 6x8 (40) ou 8x8 (30)
CtlAff(0xa0); // épaisseur curseur 1 lignes (1 à 8)
CtlAff(0x9c); // afficher grp/txt et cacher curseur
DataAff('A'-32); CtlAff10(0xc0); // afficher 'A'
Modifié en dernier par satinas le dim. 25 nov. 2018 19:56, modifié 1 fois.
Bonjour à toute l'équipe du forum
Bonjour à toute l'équipe du forum
Bonsoir,
Exacte la puce qui pilote cette écran est un T6963C, voici les commandes
Essai avec ça
Normalement ça devrait pas résoudre ton problème, mais essai le, après si ça fonctionne je t'en dirais plus.
Je te joins le fichier compilé
A+
satinas a écrit :Source du message voila un de mes vieux programmes qui pilotait un T6963
Exacte la puce qui pilote cette écran est un T6963C, voici les commandes
Essai avec ça
Code : Tout sélectionner
;----------------------------------------------------Brochage du PIC sur la carte---------------------------------------------------------
;
; Port | Broche | E/S | Description
; RA0 | 02 | S | Relais "MUTE"
; RA1 | 03 | S | Relais "PHASE"
; RA2 | 04 | S | LED droite
; RA3 | 05 | S | LED gauche
; RA4 | 06 | S | Relais de cde HT gauche et droit
; RA5 | 07 | S | Relais statique gauche et droit
; RB0 | 33 | E | Inter "on / off"
; RB1 | 34 | E | Bouton poussoir "OK"
; RB2 | 35 | S | Data Write afficheur
; RB3 | 36 | S | Data Read 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-------------------------------------------------------
Errorlevel-302 ; Supprime le message "Ensure that bank bits are correct"
LIST p=16F877 ; Définition de processeur
#include <p16F877.inc> ; fichier include
__CONFIG _CP_OFF & _DEBUG_OFF & _WRT_ENABLE_OFF & _CPD_OFF & _LVP_OFF & _BODEN_OFF & _PWRTE_ON & _WDT_OFF & _HS_OSC
;**********************************************************************************************
;****************************** déclaration des variables *************************************
;**********************************************************************************************
CBLOCK H'20'
TEMP ; temp buffer
DATAL ; instruction donnée =0
DATAH ; instruction donnée =1
COMMAND ; instruction
TABLECOUNT ; tablecounter
ENDC
CBLOCK H'70'
W_TEMP ; interruptcontextsave for W
STATUS_TEMP ; interruptcontextsave for STATUS
PCLATH_TEMP ; interruptcontextsave for PCLATH
COUNT1 ; delaycounter 1
COUNT2 ; delaycounter 2
COUNT3 ; delaycounter 3
DATA_EE_ADDR ; data EEPROM address buffer
DATA_EE_DATA ; data EEPROM data buffer
ENDC
;*************************************** assignations *****************************************
#DEFINE WRITE PORTB,2 ; GLCD writeenable/disable (active low)
#DEFINE READ PORTB,3 ; GLCD readenable/disable (active low)
#DEFINE CE PORTB,4 ; GLCD chip enable/disable (active low)
#DEFINE CD PORTB,5 ; GLCD command/data
#DEFINE FONT PORTB,6 ; GLCD font select (6x8 or 8x8)
#DEFINE RST PORTB,7 ; GLCD reset
#DEFINE D0 PORTD,RD0 ; GLCD data port bit 0
#DEFINE D1 PORTD,RD1 ; GLCD data port bit 1
#DEFINE D2 PORTD,RD2 ; GLCD data port bit 2
#DEFINE D3 PORTD,RD3 ; GLCD data port bit 3
#DEFINE D4 PORTD,RD4 ; GLCD data port bit 4
#DEFINE D5 PORTD,RD5 ; GLCD data port bit 5
#DEFINE D6 PORTD,RD6 ; GLCD data port bit 6
#DEFINE D7 PORTD,RD7 ; GLCD data port bit 7
;--------------------------------------------Definition des registres temporaires------------------------------------------------------
WR_EN EQU 2
WR_DIS EQU 7
RD_EN EQU 1
RD_DIS EQU 7
;--------------------------------------------Directives des programmes------------------------------------------------------
ORG H'0' ; Debut du programme principale
goto START ; Saut à START
ORG H'4' ; Debut du programme d'interruption
retfie ; pas besoin d'interruption
;-------------------------------------------------INITIALISATION------------------------------------------------------
START
BANKSEL TRISA ; passer en bank1
clrf TRISA ; PORTA en sortie
clrf TRISB ; PORTB en sortie
clrf TRISC ; PORTC en sortie
movlw B'00001000' ; PORTE en sortie à par RE3 qui ne
movwf TRISE ; peut pas être configurer en sortie seulement en entrée
movlw B'00000110' ; toutes les pattes numérique en mode digital
movwf ADCON1
movlw B'10000000' ; b7 = 1 résistance rappel +5V hors service
movwf OPTION_REG
BANKSEL PORTA ; passer en bank0
clrf INTCON ; b7 = 0 arrêt de toutes les interruptions
clrf PORTA ; Remise à 0 du port A
clrf PORTB ; Remise à 0 du port B
clrf PORTC ; Remise à 0 du port C
clrf PORTD ; Remise à 0 du port D
clrf PORTE ; Remise à 0 du port E
;-----------------------------------------------------------------------------------------------
bsf PORTA,2
call Delay1s
bcf PORTA,2
bsf PORTC,4
call Delay1s
bcf PORTC,4
bsf PORTA,3
call Delay1s
bcf PORTA,3
;-----------------------------------------------------------------------------------------------
GLCD_INIT
bcf RST ; reset du GLCD
movlw B'01111100' ; On charge la valeur dans le registre W
movwf PORTB ; Command mode and 6x8 font, disableread, write, and chip enable
call Delay50mS ; Appel de la tempo de 50ms
bsf RST ; disable reset
;-----------------------------------------------------------------------------------------------
;
ModeSet
movlw H'84' ; Charge la valeur dans W
movwf COMMAND ; Transfert de W sur COMMAND
call NoData ; Appel de l'étiquette NoData
;-----------------------------------------------------------------------------------------------
;
GraphicsHome
movlw H'0' ; Charge la valeur dans W
movwf DATAL ; Transfert de W sur DATAL
movlw H'0' ; Charge la valeur dans W
movwf DATAH ; Transfert de W sur DATAH
movlw H'42' ; Charge la valeur dans W
movwf COMMAND ; Transfert de W sur COMMAND
call TwoData ; Appel de l'étiquette TwoData
;-----------------------------------------------------------------------------------------------
;
GraphicsArea
movlw H'28' ; Charge la valeur dans W
movwf DATAL ; Transfert de W sur DATAL
movlw H'0' ; Charge la valeur dans W
movwf DATAH ; Transfert de W sur DATAH
movlw H'43' ; Charge la valeur dans W
movwf COMMAND ; Transfert de W sur COMMAND
call TwoData ; Appel de l'étiquette TwoData
;-----------------------------------------------------------------------------------------------
;
TextHome
movlw H'0' ; Charge la valeur dans W
movwf DATAL ; Transfert de W sur DATAL
movlw H'17' ; Charge la valeur dans W
movwf DATAH ; Transfert de W sur DATAH
movlw H'40' ; Charge la valeur dans W
movwf COMMAND ; Transfert de W sur COMMAND
call TwoData ; Appel de l'étiquette TwoData
;-----------------------------------------------------------------------------------------------
;
TextArea
movlw H'28' ; Charge la valeur dans W
movwf DATAL ; Transfert de W sur DATAL
movlw H'0' ; Charge la valeur dans W
movwf DATAH ; Transfert de W sur DATAH
movlw H'41' ; Charge la valeur dans W
movwf COMMAND ; Transfert de W sur COMMAND
call TwoData ; Appel de l'étiquette TwoData
;-----------------------------------------------------------------------------------------------
;
CGROMSet
movlw H'3' ; Charge la valeur dans W
movwf DATAL ; Transfert de W sur DATAL
movlw H'0' ; Charge la valeur dans W
movwf DATAH ; Transfert de W sur DATAH
movlw H'22' ; Charge la valeur dans W
movwf COMMAND ; Transfert de W sur COMMAND
call TwoData ; Appel de l'étiquette TwoData
;-----------------------------------------------------------------------------------------------
;
cleargraphicsRAM
movlw H'0' ; Charge la valeur dans W
movwf DATAL ; Setaddress pointer to 0x0000
movlw H'0' ; Charge la valeur dans W
movwf DATAH ; Transfert de W sur DATAH
call ADDR_PTR ; Appel de l'étiquette ADDR_PTR
movlw H'20' ; Charge la valeur dans W
movwf COUNT2 ; Transfert de W sur COUNT2
call DisplayClear ; Appel de l'étiquette DisplayClear
;-----------------------------------------------------------------------------------------------
;
cleartextRAM
movlw H'0' ; Charge la valeur dans W
movwf DATAL ; Setaddress pointer to 0x0000
movlw H'17' ; Charge la valeur dans W
movwf DATAH ; Transfert de W sur DATAH
call ADDR_PTR ; Appel de l'étiquette ADDR_PTR
movlw H'8' ; Charge la valeur dans W
movwf COUNT2 ; Transfert de W sur COUNT2
call DisplayClear ; Appel de l'étiquette DisplayClear
;-----------------------------------------------------------------------------------------------
;
CSRPattern
movlw H'A0' ; Charge la valeur dans W (A0)
movwf COMMAND ; Transfert de W sur COMMAND
call NoData ; Appel de l'étiquette NoData
;-----------------------------------------------------------------------------------------------
;
CSRPointer
movlw H'0' ; Charge la valeur dans W
movwf DATAL ; Transfert de W sur DATAL
movlw H'0' ; Charge la valeur dans W
movwf DATAH ; Transfert de W sur DATAH
call CSR_PTR ; Appel de l'étiquette CSR_PTR
;-----------------------------------------------------------------------------------------------
;
ADDRPointer
movlw H'0' ; Charge la valeur dans W
movwf DATAL ; Transfert de W sur DATAL
movlw H'0' ; Charge la valeur dans W
movwf DATAH ; Transfert de W sur DATAH
call ADDR_PTR ; Appel de l'étiquette ADDR_PTR
;-----------------------------------------------------------------------------------------------
;
DisplayOn
movlw H'9F' ; Charge la valeur dans W
movwf COMMAND ; Transfert de W sur COMMAND
call NoData ; Appel de l'étiquette NoData
retourne
nop
goto retourne ; Comptage de boucle
;-------------------------------------------------Programme tempo------------------------------------------------------
Delay1s
movlw D'173'
movwf COUNT1
movlw D'19'
movwf COUNT2
movlw D'6'
movwf COUNT3
decfsz COUNT1,F
goto $-D'1'
decfsz COUNT2,F
goto $-D'3'
decfsz COUNT3,F
goto $-D'5'
return
Delay50mS
movlw D'238'
movwf COUNT1
movlw D'65'
movwf COUNT2
decfsz COUNT1,F
goto $-D'1'
decfsz COUNT2,F
goto $-D'3'
return
Delay
movwf COUNT3 ; Transfert de W sur COUNT3
call Delay50mS ; Appel de l'étiquette Delay50mS
decfsz COUNT3,F ; On décrémente COUNT3,F
goto $-D'2' ; Comptage de boucle
return
;-------------------------------------------------Position Address Pointer ------------------------------------------------------
ADDR_PTR
movlw H'24' ; Charge la valeur dans W
movwf COMMAND ; Transfert de W sur COMMAND
call TwoData ; Appel de l'étiquette TwoData
return
;-------------------------------------------------Position Cursor Pointer ------------------------------------------------------
CSR_PTR
movlw H'21' ; Charge la valeur dans W
movwf COMMAND ; Transfert de W sur COMMAND
call TwoData ; Appel de l'étiquette TwoData
return
;-------------------------------------------------Command Send Routines ------------------------------------------------------
TwoData
call LCDStat ; Appel de l'étiquette LCDStat
movwf DATAL ; Transfert de W sur DATAL
call DWrite ; Appel de l'étiquette DWrite
OneData
call LCDStat ; Appel de l'étiquette LCDStat
movwf DATAH ; Transfert de W sur DATAH
call DWrite ; Appel de l'étiquette DWrite
NoData
call LCDStat ; Appel de l'étiquette LCDStat
movwf COMMAND ; Transfert de W sur COMMAND
call COMMAND ; Appel de l'étiquette Command
return
;------------------------------------------------GLCD Read/Write/Status Check------------------------------------------------------
Command
bsf CD ; CD=1
goto $+D'2' ; Permet de sauter 2 lignes de code
DWrite
bcf CD ; CD = 0
movwf PORTD ; Transfert de W sur port D
movlw WR_EN ; Charge WR_EN dans W
movwf PORTB ; Transfert de W sur port B
bsf STATUS,5 ; Accès à la 2ème page mémoire TRISD
movlw B'00000000' ; Charge la valeur dans W
movwf TRISD ; Le port D est en sortie
movlw WR_DIS ; Charge WR_DIS dans W
movwf PORTB ; Transfert de W sur port B
bcf STATUS,5 ; Accès à la 1ère page mémoire TRISD
call Delay50mS ; Appel de la tempo de 50ms
bsf STATUS,5 ; Accès à la 2ème page mémoire TRISD
movlw B'11111111' ; Charge la valeur dans W
movwf TRISD ; Le port D est en entrée
bcf STATUS,5 ; Accès à la 1ère page mémoire TRISD
return
LCDStat
call StatReadEn ; Appel de l'étiquette StatReadEn
btfsc PORTD,0 ; D0 = 0 ?
btfss PORTD,1 ; D1 = 1 ?
goto $-D'2' ; Comptage de boucle
call StatReadDis ; Appel de l'étiquette StatReadDis
return
DAWStat
call StatReadEn ; Appel de l'étiquette StatReadEn
btfss PORTD,3 ; D3 = 1 ?
goto $-D'1' ; Comptage de boucle
call StatReadDis ; disablestatusread
return
StatReadEn
bsf CD ; CD=1
movlw RD_EN ; Charge RD_EN dans W
movwf PORTB ; Transfert de W sur port B
return
StatReadDis
movlw RD_DIS ; Charge RD_DIS dans W
movwf PORTB ; Transfert de W sur port B
return
;---------------------------------------------Data Auto Read/Write Routines--------------------------------------------------
DAWSet
movlw H'B0' ; Charge la valeur dans W
movwf COMMAND ; Transfert de W sur COMMAND
call NoData ; Appel de l'étiquette NoData
call LCDStat ; Appel de l'étiquette LCDStat
call DAWStat ; Appel de l'étiquette DAWStat
return
DAWReset
call DAWStat ; Appel de l'étiquette DAWStat
movlw H'B2' ; Charge la valeur dans W
movwf COMMAND ; Transfert de W sur COMMAND
call NoData ; Appel de l'étiquette NoData
return
;------------------------------------------------Clear Display------------------------------------------------------
DisplayClear
movlw D'160' ; Charge la valeur dans W
movwf COUNT1 ; Transfert de W sur COUNT1
call DAWSet ; Appel de l'étiquette DAWSet
call DAWStat ; Appel de l'étiquette DAWStat
movlw D'0' ; Charge la valeur dans W
call DWrite ; Appel de l'étiquette DWrite
decfsz COUNT1,F ; On décrémente COUNT1,F
goto $-D'4' ; Comptage de boucle
movlw D'160' ; Charge la valeur dans W
movwf COUNT1 ; Transfert de W sur COUNT1
decfsz COUNT2,F ; On décrémente COUNT2,F
goto $-D'8' ; Comptage de boucle
call DAWReset ; Appel de l'étiquette DAWReset
return
;------------------------------------------------Interrupt Handler------------------------------------------------------
end
Normalement ça devrait pas résoudre ton problème, mais essai le, après si ça fonctionne je t'en dirais plus.
Je te joins le fichier compilé
A+
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Modifié en dernier par Temps-x le dim. 25 nov. 2018 20:44, modifié 2 fois.
Retourner vers « Langage ASM »
Qui est en ligne
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 68 invités