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 ---
Forum général sur l'Assembleur !

Modérateur : mazertoc

Bonjour à toute l'équipe du forum
folkeu08
Débutant
Débutant
Messages : 45
Âge : 57
Enregistré en : novembre 2017
Localisation : Ardennes (08)
Contact :

#31 Message par folkeu08 » dim. 25 nov. 2018 16:32

JMarc a écrit :Bonjour Nondediode et temps-x et tout le monde

branche une led (avec sa resistance) sur portA,0
et ton afficheur pour me dire ce qu'il ce passe



Bonjour, vous est-il possible de mettre le code compilé en téléchargement que je puisse le tester sur un simulateur ?
Merci

Bonjour à toute l'équipe du forum
JMarc
Confirmé
Confirmé
Messages : 605
Enregistré en : août 2016
Localisation : Dans le Sud...

#32 Message par JMarc » dim. 25 nov. 2018 17:31

Bonne nouvelle, la platine fonctionne :-D

as tu déplacé ta led sur porta0 ? ou bien est elle en ra2?
la led ra3 est elle opérationnelle pour mes autres essais ?

sur l’écran, toujours le même trait ? quelle longueur ? la totalité de l’écran ou bien partiellement ?

Bonjour à toute l'équipe du forum
nondediode
Amateur
Amateur
Messages : 148
Enregistré en : novembre 2018
Localisation : Lyon

#33 Message par nondediode » dim. 25 nov. 2018 17:48

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.

Bonjour à toute l'équipe du forum
JMarc
Confirmé
Confirmé
Messages : 605
Enregistré en : août 2016
Localisation : Dans le Sud...

#34 Message par JMarc » dim. 25 nov. 2018 18:01

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 :sifflotte:

Code : Tout sélectionner

;---------------------------------------------------------GESTION AFFICHEUR-----------------------------------------------------------------

TITREGestion 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
Amateur
Messages : 148
Enregistré en : novembre 2018
Localisation : Lyon

#35 Message par nondediode » dim. 25 nov. 2018 18:49

RA0 clignote à une fx de 1Hz environ, elle a cependant été très longue à démarrer plus d'1 15aines de secondes
Sur l'écran, rien n'a changé tjrs le trait
Photo4.jpg
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.

Bonjour à toute l'équipe du forum
nondediode
Amateur
Amateur
Messages : 148
Enregistré en : novembre 2018
Localisation : Lyon

#36 Message par nondediode » dim. 25 nov. 2018 19:03

Question idiote :roll:

Le port D étant bi-directionnelle, ne faut'il pas mettre des résistances de 10K à la masse?

Bonjour à toute l'équipe du forum
JMarc
Confirmé
Confirmé
Messages : 605
Enregistré en : août 2016
Localisation : Dans le Sud...

#37 Message par JMarc » dim. 25 nov. 2018 19:07

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 :langue: ) la doc pour savoir qu'elle valeur doit t'on envoyer et je te code tout cela

je regarde de mon coté :sifflotte:

je ne pense pas devoir mettre des resistances sur ton portD

Bonjour à toute l'équipe du forum
satinas
Expert
Expert
Messages : 1225
Enregistré en : novembre 2015

#38 Message par satinas » dim. 25 nov. 2018 19:55

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

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
F6FCO
Avatar de l’utilisateur
Expert
Expert
Messages : 1413
Âge : 70
Enregistré en : décembre 2017
Localisation : Furtif je suis.
Contact :

#39 Message par F6FCO » dim. 25 nov. 2018 19:55

Moi je dis rien parce que je suis une tanche mais vous êtes bon les mecs quand même :-)
Une porte nand prend 2 bits en entrée... la cochonne !!! :langue:

Bonjour à toute l'équipe du forum
Temps-x
Avatar de l’utilisateur
Expert
Expert
Messages : 2617
Enregistré en : juillet 2016
Localisation : Terre

#40 Message par Temps-x » dim. 25 nov. 2018 20:09

Bonsoir,

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

t6963.jpg


Essai avec ça

Code : Tout sélectionner



;----------------------------------------------------Brochage du PIC sur la carte--------------------------------------------------------- 
;
;
  Port | Broche | E/| 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é
DMF5005.zip



==> 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.
:roll: Les requins, c'est comme le langage ASM, c'est le sommet de la chaîne alimentaire. :wink:


Retourner vers « Langage ASM »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 68 invités