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.

Elettrotecnica e non solo (admin)
Un gatto tra gli elettroni (IsidoroKZ)
Esperienza e simulazioni (g.schgor)
Moleskine di un idraulico (RenzoDF)
Il Blog di ElectroYou (webmaster)
Idee microcontrollate (TardoFreak)
PICcoli grandi PICMicro (Paolino)
Il blog elettrico di carloc (carloc)
DirtEYblooog (dirtydeeds)
Di tutto... un po' (jordan20)
AK47 (lillo)
Esperienze elettroniche (marco438)
Telecomunicazioni musicali (clavicordo)
Automazione ed Elettronica (gustavo)
Direttive per la sicurezza (ErnestoCappelletti)
EYnfo dall'Alaska (mir)
Apriamo il quadro! (attilio)
H7-25 (asdf)
Passione Elettrica (massimob)
Elettroni a spasso (guidob)
Bloguerra (guerra)



