Bonjour a tous,
J'ai déjà regardé l'ensemble des posts relatifs aux problèmes d'afficheur et je n'ai pas trouvé de solution malgré mes nombreux tests. Je m'en réfère donc a votre expérience.
µC : PIC 16F84A
Afficheur LCD : Gleichmann GE-C1602B-TMI-JT/R
Voici le Schema de montage :
alimenté VDC +5V
PORTB sert donc a l'envoi des données
PORTA,1 => RS
PORTA,2 => E
Le soucis est le suivant : Mon afficheur s'allume et tout les pixels de mon LCD sont allumés (Gros carrés blancs sur fond bleu), le contraste ne change rien.
La premiere ligne clognotte à une fréquence de 1Hz et la ligne du dessous (aussi remplie de cases blanches) reste fixe. D'ailleurs le contraste ne l'affecte pas.
j'ai initialisé TRISA et TRISB a 0x00 (toutes des sorties)
Voici le code sensé écrire "Hello" sur mon afficheur, j'ai laissé un bonne tempo (100ms) entre chaque instructions et je n'ai pas oublié le pin E H=>L.
J'ai aussi tenté d'initialiser e display à ON d'emblée de programme mais, le problème est identique...Code:LIST p=16F84 ; Définition de processeur #DEFINE __16F84 16F84 #include <p16F84.inc> ; Définitions des constantes radix dec ; on travaille en décimal par défaut errorlevel -302 __CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _HS_OSC ; '__CONFIG' précise les paramètres encodés dans le processeur au moment de ; la programmation. Les définitions sont dans le fichier include. ; Voici les valeurs et leurs définitions : ; _CP_ON Code protection ON : impossible de relire ; _CP_OFF Code protection OFF ; _PWRTE_ON Timer reset sur power on en service ; _PWRTE_OFF Timer reset hors-service ; _WDT_ON Watch-dog en service ; _WDT_OFF Watch-dog hors service ; _LP_OSC Oscillateur quartz basse vitesse ; _XT_OSC Oscillateur quartz moyenne vitesse ; _HS_OSC Oscillateur quartz grande vitesse ; _RC_OSC Oscillateur à réseau RC ;********************************************************************* ; ASSIGNATIONS * ;********************************************************************* OPTIONVAL EQU H'40' ; Valeur registre option ; Résistance pull-up ON ; Interrupt flanc montant RB0 ; Préscaler timer à 2 (exemple) INTERMASK EQU H'90' ; Masque d'interruption ; Interruptions sur RB0 (exemple) ;********************************************************************* ; DEFINE * ;********************************************************************* ; exemple ; ------- #DEFINE LCD_E PORTA,2 #DEFINE LCD_RS PORTA,1 ;********************************************************************* ; MACRO * ;********************************************************************* BANK0 macro bcf STATUS,RP0 ; passer banque0 endm BANK1 macro bsf STATUS,RP0 ; passer banque1 endm ;********************************************************************* ; DECLARATIONS DE VARIABLES * ;********************************************************************* ;exemples ;--------- CBLOCK 0x00C ; début de la zone variables w_temp :1 ; Sauvegarde du registre W status_temp : 1 ; Sauvegarde du registre STATUS w1 : 1 w2 : 1 ENDC ; Fin de la zone ;********************************************************************** ; DEMARRAGE SUR RESET * ;********************************************************************** org 0x000 ; Adresse de départ après reset goto init ; Adresse 0: initialiser ;********************************************************************* ; INITIALISATIONS * ;********************************************************************* init clrf PORTA ; Sorties portA à 0 clrf PORTB ; sorties portB à 0 BANK1 ; passer banque1 movlw OPTIONVAL ; charger masque movwf OPTION_REG ; initialiser registre option ; Effacer RAM ; ------------ movlw 0x0c ; initialisation pointeur movwf FSR ; pointeur d'adressage indirect init1 clrf INDF ; effacer ram incf FSR,f ; pointer sur suivant btfss FSR,6 ; tester si fin zone atteinte (>=40) goto init1 ; non, boucler btfss FSR,4 ; tester si fin zone atteinte (>=50) goto init1 ; non, boucler clrf TRISA clrf TRISB BANK0 ; passer banque0 movlw INTERMASK ; masque interruption movwf INTCON ; charger interrupt control goto start ; sauter programme principal ;********************************************************************* ; PROGRAMME PRINCIPAL * ;********************************************************************* errorlevel +302 wait100ms movlw 97 movwf w2 w2L clrf w1 w1L decfsz w1,f goto w1L decfsz w2,f goto w2L return start call wait100ms bsf LCD_E movlw b'00110000' ; 8bit-command movwf PORTB nop nop bcf LCD_E ; Send call wait100ms bsf LCD_E nop nop BCF LCD_E ; Resend call wait100ms bsf LCD_E nop nop bcf LCD_E ; Resend call wait100ms bsf LCD_E movlw b'00111000' ; 8bit + 2 Lines small fonts movwf PORTB nop nop bcf LCD_E ; Send call wait100ms bsf LCD_E movlw b'00001000' ;Display OFF movwf PORTB nop nop bcf LCD_E ; Send call wait100ms bsf LCD_E movlw b'00000001' ; Clear Display movwf PORTB nop nop bcf LCD_E ;Send call wait100ms bsf LCD_E movlw b'00000110' ; Move Left Cursor no shift movwf PORTB nop nop bcf LCD_E ;Send call wait100ms bsf LCD_RS ; Activation des caractères bsf LCD_E movlw b'01001000' movwf PORTB nop nop bcf LCD_E call wait100ms movlw b'01100101' movwf PORTB bsf LCD_E nop bcf LCD_E call wait100ms movlw b'01101100' movwf PORTB bsf LCD_E bcf LCD_E call wait100ms movlw b'01101100' movwf PORTB bsf LCD_E bcf LCD_E call wait100ms movlw b'01101111' ; o movwf PORTB bsf LCD_E bcf LCD_E call wait100ms bsf LCD_E movlw b'00001100' ;Display ON movwf PORTB nop nop bcf LCD_E ; Send call wait100ms start2 nop nop nop nop goto start2 ; boucler END ; directive fin de programme
Merci pour votre aide !
-----