Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

Problema con display HD44780

Tipologie, strumenti di sviluppo, hardware e progetti

Moderatore: Foto UtentePaolino

0
voti

[1] Problema con display HD44780

Messaggioda Foto UtenteJAndrea » 13 gen 2013, 20:31

Salve a tutti.
Sono qui per chiedere il vostro aiuto per un piccolo programma per PIC16F877 realizzato con lo scopo di pilotare un display basato su HD44780, precisamente il 162B di DISPLAYTECH http://www.displaytech-us.com/sites/default/files/display-data-sheet/162B%20series-v21.pdf
Tale display è stato collegato utilizzando tutti gli 8 bit messi a disposizione dal controller, collegati su PORTD, mentre per i tre bit "di comando" è stata utilizzata PORTE.
Ho realizzato il programma cercando di rispettare i tempi raccomandati dal datasheet, ma il display non sembra funzionare, e non sembra nemmeno inizializzato.
Il clock del PIC è di 16MHz, per cui i ritardi, anche se approssimati per eccesso, sono basati su questo.
Vi allego il codice fin ora scritto, spero possiate aiutarmi.
Codice: Seleziona tutto

                PROCESSOR   16F877A         ;Dichiarazione microcontrollore
                RADIX       DEC             ;Formato predefinito decimale
                INCLUDE     "P16F877A.INC"  ;Libreria istruzioni
                __CONFIG    _CP_OFF & _DEBUG_OFF & _WRT_OFF & _CPD_OFF & _LVP_OFF & _BOREN_OFF & _PWRTE_OFF & _WDT_OFF & _FOSC_HS
                ORG         0X00            ;Reset vector
                GOTO        START           ;Programma principale

                ORG         0X04            ;Interrupt vector
                GOTO        INT             ;

                ORG         0X05            ;
START
                BANKSEL     TRISA           ;Punta banco 1
                CLRF        TRISA           ;PORTA uscita
                CLRF        TRISB           ;PORTB uscita
                CLRF        TRISC           ;PORTC uscita
                CLRF        TRISD           ;PORTD uscita
                CLRF        TRISE           ;PORTE uscita
                MOVLW       00000111B       ;PULL-UP PORTB attivo, PRESCALER TMR0, TMR0 CLOCK INT
                MOVWF       OPTION_REG      ;"
                BANKSEL     PORTA           ;Punta banco 0
                CLRF        INTCON          ;Disattiva interrupt
IO              EQU         PORTE           ;Comandi Display
DATI            EQU         PORTD           ;Dati Display
#DEFINE         EN          PORTE,0         ;ENABLE display
#DEFINE         RW          PORTE,1         ;READ/WRITE Display
#DEFINE         RS          PORTE,2         ;REGISTER SELECT Display
RITARDO1                    EQU 36          ;Appoggio ritardi
RITARDO2                    EQU 37          ;Appoggio ritardi
                CLRF        DATI            ;Inizializza Porte
                CLRF        IO              ;"

INITLCD

                BSF         PORTC,4         ;
                MOVLW       60              ;Prepara registri per ritardo
                MOVWF       RITARDO2        ;"
                CLRF        RITARDO1        ;"
                MOVLW       00110000B       ;Comunicazione 8Bit
                MOVWF       DATI            ;"
                CALL        RITARDO         ;
                CALL        ENABLE          ;Strobe enable Bit
                MOVLW       17              ;Prepara registri per ritardo
                MOVWF       RITARDO2        ;"
                CLRF        RITARDO1        ;"
                MOVLW       00110000B       ;Comunicazione 8 Bit
                MOVWF       DATI            ;"
                CALL        RITARDO         ;
                CALL        ENABLE          ;Strobe enable Bit
                MOVLW       2               ;Prepara registri per ritardo
                MOVWF       RITARDO2        ;"
                MOVLW       100             ;"
                MOVWF       RITARDO1        ;"
                MOVLW       00110000B       ;Comunicazione 8 Bit
                MOVWF       DATI            ;"
                CALL        RITARDO         ;
                CALL        ENABLE          ;Strobe enable Bit
                CALL        BUSYF           ;Attendi disponibilità
                BANKSEL     TRISE           ;Punta al banco 1
                INCF        TRISD           ;PORTD come uscita
                BANKSEL     PORTE           ;Punta al banco 0
                BCF         RW              ;Scrittura
                MOVLW       00111000B       ;Righe caratteri
                MOVWF       DATI            ;"
                CALL        ENABLE          ;Strobe enable Bit
                CALL        BUSYF           ;Attendi disponibilità display
                MOVLW       00001110B       ;Display on
                MOVWF       DATI            ;"
                CALL        ENABLE          ;Strobe enable Bit
                CALL        BUSYF           ;Attendi disponibilità display
                MOVLW       00000001B       ;Display Clear
                MOVWF       DATI            ;"
                CALL        ENABLE          ;Strobe enable Bit
                CALL        BUSYF           ;Attendi disponibilità display
                MOVLW       00000110B       ;Display Entry
                MOVWF       DATI            ;"
                CALL        ENABLE          ;Strobe enable Bit
                CALL        BUSYF           ;Attendi disponibilità display
                BSF         RS              ;Write GCRAM
                CALL        ENABLE          ;
                MOVLW       01001000B       ;H
                MOVWF       DATI            ;"
                CALL        ENABLE          ;Strobe enable Bit
                CALL        BUSYF           ;Attendi disponibilità display
               







MAIN
                BCF         PORTC,4         ;
                GOTO        MAIN            ;Ritorna






ENABLE
                BSF         EN              ;Enable stato logico alto
                MOVLW       2               ;Prepara registri ritardo
                MOVWF       RITARDO2        ;
                MOVLW       17              ;
                MOVWF       RITARDO1        ;
                CALL        RITARDO         ;Chiamata subroutine ritardo
                BCF         EN              ;Enable stato logico basso
                RETURN                      ;

RITARDO
                NOP                         ;Subroutine di ritardo
RIT                                         ;
                DECFSZ      RITARDO1,1      ;Decrementa registro ritardo1, se 0
                GOTO        RIT             ;Ricomincia routine ritardo
                DECFSZ      RITARDO2,1      ;Decrementa registro ritardo2, se 0
                RETURN                      ;Ritorna al programma



BUSYF
                BSF         RW              ;Lettura
                BANKSEL     TRISE           ;Punta al banco 1
                DECF        TRISD           ;PORTD come entrata
                BANKSEL     PORTE           ;Punta al banco 0
                CALL        ENABLE          ;
VR                                          ;
                BTFSC       PORTD,7         ;Busy Flag Attivo
                GOTO        VR              ;Riverifica
                BANKSEL     TRISE           ;Punta al banco 1
                CLRF        TRISD           ;PORTD come uscita
                BANKSEL     PORTE           ;Punta al banco 0
                BCF         RW              ;Scrittura
                CALL        ENABLE          ;
                RETURN                      ;Ritorna

INT
                RETFIE                      ;Ritorna
                END                         ;


Vi ringrazio per l' aiuto.
Saluti, Andrea.
P.S. PORTC,4 è un uscita sulla quale ho collegato un LED, per capire se il programma si blocca da qualche parte.
Avatar utente
Foto UtenteJAndrea
3.987 4 6 9
Master
Master
 
Messaggi: 2117
Iscritto il: 16 giu 2011, 15:25
Località: Rovigo

2
voti

[2] Re: Problema con display HD44780

Messaggioda Foto UtentePaolino » 13 gen 2013, 21:36

Non ho tempo di leggere tutto il codice, al momento. Però ti invito a leggere questo articolo e anche quest'altro. Spero ti possano essere di aiuto per individuare l'eventuale errore.

Ciao.

Paolo.
"Houston, Tranquillity Base here. The Eagle has landed." - Neil A.Armstrong

-------------------------------------------------------------

PIC Experience - http://www.picexperience.it
Avatar utente
Foto UtentePaolino
32,6k 8 12 13
G.Master EY
G.Master EY
 
Messaggi: 4226
Iscritto il: 20 gen 2006, 11:42
Località: Vigevano (PV)

0
voti

[3] Re: Problema con display HD44780

Messaggioda Foto UtenteJAndrea » 13 gen 2013, 22:05

Grazie mille
Foto UtentePaolino, i tuoi due articoli sui display alfanumerici li avevo letti, li ho trovati completi ed esaustivi.
Ti ringrazio per l' intervento e l' aiuto.
Avatar utente
Foto UtenteJAndrea
3.987 4 6 9
Master
Master
 
Messaggi: 2117
Iscritto il: 16 giu 2011, 15:25
Località: Rovigo

1
voti

[4] Re: Problema con display HD44780

Messaggioda Foto UtenteTardoFreak » 14 gen 2013, 0:59

Se ti converti al C forse qui puoi trovare qualcosa.
"La follia sta nel fare sempre la stessa cosa aspettandosi risultati diversi".
"Parla soltanto quando sei sicuro che quello che dirai è più bello del silenzio".
Rispondere è cortesia, ma lasciare l'ultima parola ai cretini è arte.
Avatar utente
Foto UtenteTardoFreak
73,9k 8 12 13
-EY Legend-
-EY Legend-
 
Messaggi: 15754
Iscritto il: 16 dic 2009, 11:10
Località: Torino - 3° pianeta del Sistema Solare

0
voti

[5] Re: Problema con display HD44780

Messaggioda Foto UtenteJAndrea » 14 gen 2013, 7:50

Grazie mille Foto UtenteTardoFreak
Purtroppo io il C non lo conosco, conosco invece qualcosa di C++ per realizzare qualche piccolo programma per PC.
La mia intenzione sarebbe quella in futuro di cercare di imparare ad usare il C, ma per ora sono più pratico con l' ASSEMBLY.
Ti ringrazio comunque per il link, così potrò "prendere spunto" dal tuo programma, almeno per capire se ho svolto in maniera corretta tutte le operazioni per l' inizializzazione del display.
Saluti, e Grazie, Andrea.
Avatar utente
Foto UtenteJAndrea
3.987 4 6 9
Master
Master
 
Messaggi: 2117
Iscritto il: 16 giu 2011, 15:25
Località: Rovigo

2
voti

[6] Re: Problema con display HD44780

Messaggioda Foto UtentePaolino » 14 gen 2013, 8:22

Foto UtenteJAndrea, hai modo di fare debug in-circuit?

Ciao.

Paolo.
"Houston, Tranquillity Base here. The Eagle has landed." - Neil A.Armstrong

-------------------------------------------------------------

PIC Experience - http://www.picexperience.it
Avatar utente
Foto UtentePaolino
32,6k 8 12 13
G.Master EY
G.Master EY
 
Messaggi: 4226
Iscritto il: 20 gen 2006, 11:42
Località: Vigevano (PV)

0
voti

[7] Re: Problema con display HD44780

Messaggioda Foto UtenteJAndrea » 14 gen 2013, 15:37

I posseggo il Pickit 3, però mi sono sempre limitato ad usarlo come programmatore.
Quindi non ho molto chiaro come eseguire il debug.
Adesso proverò a vedere sul manuale mplab di capire meglio come funziona.
Ti ringrazio.
Avatar utente
Foto UtenteJAndrea
3.987 4 6 9
Master
Master
 
Messaggi: 2117
Iscritto il: 16 giu 2011, 15:25
Località: Rovigo

2
voti

[8] Re: Problema con display HD44780

Messaggioda Foto UtentePaolino » 14 gen 2013, 15:43

Che versione di MPLAB usi?
"Houston, Tranquillity Base here. The Eagle has landed." - Neil A.Armstrong

-------------------------------------------------------------

PIC Experience - http://www.picexperience.it
Avatar utente
Foto UtentePaolino
32,6k 8 12 13
G.Master EY
G.Master EY
 
Messaggi: 4226
Iscritto il: 20 gen 2006, 11:42
Località: Vigevano (PV)

0
voti

[9] Re: Problema con display HD44780

Messaggioda Foto UtenteJAndrea » 14 gen 2013, 15:49

Come versione di Mplab uso Mplab X v1.60
Avatar utente
Foto UtenteJAndrea
3.987 4 6 9
Master
Master
 
Messaggi: 2117
Iscritto il: 16 giu 2011, 15:25
Località: Rovigo

2
voti

[10] Re: Problema con display HD44780

Messaggioda Foto UtentePaolino » 14 gen 2013, 15:53

Ok, allora il debugger lo attivi premendo questa icona:

Debug_MPX.JPG
Debug_MPX.JPG (7.48 KiB) Osservato 4923 volte


Metti qualche breakpoint per stoppare il codice, così prendi dimestichezza. Poi, chiedi pure se hai dubbi.

Ciao.

Paolo.
"Houston, Tranquillity Base here. The Eagle has landed." - Neil A.Armstrong

-------------------------------------------------------------

PIC Experience - http://www.picexperience.it
Avatar utente
Foto UtentePaolino
32,6k 8 12 13
G.Master EY
G.Master EY
 
Messaggi: 4226
Iscritto il: 20 gen 2006, 11:42
Località: Vigevano (PV)

Prossimo

Torna a Realizzazioni, interfacciamento e nozioni generali.

Chi c’è in linea

Visitano il forum: Nessuno e 4 ospiti