ciao , volevo sapere se qualcuno potrrebbe consigliarmi un buon libro per la programmazione in C per driverare display usando PIC MICROCHIP.
Vi ringrazio ciao e grazie
PIC E DISPLAY LCD
Moderatore:
Paolino
0
voti
[102] Re: PIC E DISPLAY LCD
salve! anchio sto provando a scrivere su un display LCD 16x2 con un PIC ma sto programmando in assembler, ho anche postato il listato che purtroppo non funge
mi ha dato una mano DonJ (anche parecchio) a correggere alcune pecche ma ahimè continua a non funzionare; più rileggo il listato e più non riesco a capire cosa non funzioni. ho rivisto i collegamenti non so più quante volte. Qualcuno l'ha già fatto in assembler per confrontarci?
qualcuno sa se esiste un possibile test sui pin dell'LCD per verificare che non si sia guastata la logica interna o che altro?
grazie
qualcuno sa se esiste un possibile test sui pin dell'LCD per verificare che non si sia guastata la logica interna o che altro?
grazie
0
voti
[103] Re: PIC E DISPLAY LCD
demos81 ha scritto:salve! anchio sto provando a scrivere su un display LCD 16x2 con un PIC ma sto programmando in assembler, ho anche postato il listato che purtroppo non fungemi ha dato una mano DonJ (anche parecchio) a correggere alcune pecche ma ahimè continua a non funzionare; più rileggo il listato e più non riesco a capire cosa non funzioni. ho rivisto i collegamenti non so più quante volte. Qualcuno l'ha già fatto in assembler per confrontarci?
qualcuno sa se esiste un possibile test sui pin dell'LCD per verificare che non si sia guastata la logica interna o che altro?
grazie
Supponendo che tu abbia collegato:
DB7 con PORTB,7
DB6 con PORTB,6
DB5 con PORTB,5
DB4 con PORTB,4
E con PORTB,3
RW con PORTB,2
RS con PORTB,1
Devi per prima cosa programmare la Porta B Chiamando una routine simile:
- Codice: Seleziona tutto
prog_port
global prog_port
bsf STATUS,RP0 ;Programmazione della porta A come uscite
bcf STATUS,RP1
bcf STATUS,IRP
movlw b'10000110'
movwf ADCON1
movlw b'00111000'
movwf TRISA
movlw b'00000000' ;Qui è dove nella mia applicazione programmo
movwf TRISB ;la porta B come tutte uscite
movlw b'10111111'
movwf TRISC
bsf OPTION_REG,7
bcf STATUS,RP0
return
Ora prima di entrare nel Main devi inizializzare il display altrimenti non ti scrive nulla o ti scrive con una riga in nero.
Posto la mia routine di inizializzazione:
- Codice: Seleziona tutto
reset_iniziale
global reset_iniziale
call prog_port ;call che programma le porte
clrf time
call rit ;è un ciclo di ritardo che dipende dalla variabile
call rit ;time che se resettata, produce con rit un ritardo di circa 85ms
call rit ;con il quarzo da 20MHz
call rit
movlw b'00000000'
movwf PORTB ;Inizializzo la porta
movlw b'00001000' ;e mando i comandi per inizializzare il display
movwf PORTB ;per ricevere a 4 bit
movlw b'00101000' ;
movwf PORTB
call rit
movlw b'00100000' ;
movwf PORTB
call rit
movlw b'00000000'
movwf PORTB
call rit
movlw b'00001100' ;Ora che è inizializzato uso la mia routine imposta
call imposta ;che invia il comando al display preventivamente caricato
;in W in questo caso programmo il display senza cursore
;se avessi precaricato W con b'00001110' avrei cursore lampeggiante
;a forma di righetta. Se scrivo b'00001111' avrei cursore rettangolare
;lampeggiante
movlw b'00000110'
call imposta
movlw b'00000001' ;Qui pulisco il display e porto il cursore in alto a sinistra
call imposta
call rit
return
Qui di seguito ti posto le routine di ritardo e imposta e scrittura che vedremo in seguito:
- Codice: Seleziona tutto
;-------------------------------------------------------------------------------------------------
; ROUTINE DEL DISPLAY e di RITARDO
;-------------------------------------------------------------------------------------------------
scrittura
movwf lettera
andlw b'00000010'
movwf PORTB
call cip
movf lettera,0
andlw b'11110000'
iorlw b'00001010'
movwf PORTB
call cip
bcf PORTB,3
call cip
movf lettera,0
movwf temp
rlf temp
rlf temp
rlf temp
rlf temp
movf temp,0
andlw b'11110000'
iorlw b'00001010'
movwf PORTB
call cip
bcf PORTB,3
clrf PORTB
call cip
movf lettera,0
return
imposta
movwf comando
clrf PORTB
call cip
movf comando,0
andlw b'11110000'
iorlw b'00001000'
movwf PORTB
call cip
bcf PORTB,3
call cip
movf comando,0
movwf temp
rlf temp
rlf temp
rlf temp
rlf temp
movf temp,0
andlw b'11110000'
iorlw b'00001000'
movwf PORTB
call cip
bcf PORTB,3
clrf PORTB
call cip
movf comando,0
return
rit
movf time,0
movwf count
rit1 incfsz count,1
goto rit2
return
rit2 nop
nop
call crit
goto rit1
crit
movlw h'00'
movwf count1
crit1 incfsz count1,1
goto crit2
return
crit2 nop
nop
goto crit1
cip
movlw h'10'
movwf count1
cip1 decfsz count1,1
goto cip2
return
cip2 nop
nop
goto cip1
Le routine di ritardo sono spartane e buttate la senza calcoli. Possono essere modificate a seconda del
quarzo che usi. Io uso 20Mhz su un PIC16F873A.
Funzionano lo stesso anche su quarzi più piccoli solo che le lettere vengono scritte più lentamente.
Un'altra cosa, io uso un display 20x4 ma le cose vanno bene per qualsiasi taglio.
Ora, dopo aver inizializzato il display possiamo scrivere ciò che vogliamo hrazie alla routine scrittura.
Qui sotto un esempio:
- Codice: Seleziona tutto
schermo_principale
global schermo_principale
movlw b'00000001' ;Cancello tutto e porto
call imposta ;il cursore in home
call rit ;Lancio un ritardo perché l'operazione dura circa 40us
movlw ' ' ;scrivo uno spazio (0x20)
call scrittura
movlw ' '
call scrittura
movlw 'L' ;Scrivo L maiuscola
call scrittura
movlw 'a'
call scrittura
movlw 'p'
call scrittura
movlw ' '
call scrittura
movlw 'T'
call scrittura
movlw 'i'
call scrittura
movlw 'm'
call scrittura
movlw 'i'
call scrittura
movlw 'n'
call scrittura
movlw 'g'
call scrittura
movlw ' '
call scrittura
movlw 'P'
call scrittura
movlw 'l'
call scrittura
movlw 'u'
call scrittura
movlw 's'
call scrittura
movlw ' '
call scrittura
movlw ' '
call scrittura
movlw ' '
call scrittura
movlw b'11000000' ;Porto il cursore nella seconda riga
call imposta
movlw '1'
call scrittura
movlw ')'
call scrittura
movlw 'S'
call scrittura
movlw 't'
call scrittura
movlw 'a'
call scrittura
movlw 'r'
call scrittura
movlw 't'
call scrittura
movlw ' '
call scrittura
movlw 's'
call scrittura
movlw 'e'
call scrittura
movlw 's'
call scrittura
movlw 's'
call scrittura
movlw 'i'
call scrittura
movlw 'o'
call scrittura
movlw 'n'
call scrittura
movlw 'e'
call scrittura
movlw ' '
call scrittura
movlw ' '
call scrittura
movlw ' '
call scrittura
movlw ' '
call scrittura
movlw b'10010100' ;Porto il cursore nella terza riga
call imposta
movlw '2'
call scrittura
movlw ')'
call scrittura
movlw 'G'
call scrittura
movlw 'e'
call scrittura
movlw 's'
call scrittura
movlw 't'
call scrittura
movlw 'i'
call scrittura
movlw 'o'
call scrittura
movlw 'n'
call scrittura
movlw 'e'
call scrittura
movlw ' '
call scrittura
movlw 't'
call scrittura
movlw 'e'
call scrittura
movlw 'm'
call scrittura
movlw 'p'
call scrittura
movlw 'i'
call scrittura
movlw ' '
call scrittura
movlw ' '
call scrittura
movlw ' '
call scrittura
movlw ' '
call scrittura
movlw b'11010100' ;;Porto il cursore nella quarta riga
call imposta
movlw '3'
call scrittura
movlw ')'
call scrittura
movlw 'I'
call scrittura
movlw 'm'
call scrittura
movlw 'p'
call scrittura
movlw 'o'
call scrittura
movlw 's'
call scrittura
movlw 't'
call scrittura
movlw 'a'
call scrittura
movlw 'z'
call scrittura
movlw 'i'
call scrittura
movlw 'o'
call scrittura
movlw 'n'
call scrittura
movlw 'i'
call scrittura
movlw ' '
call scrittura
movlw ' '
call scrittura
movlw ' '
call scrittura
movlw ' '
call scrittura
movlw ' '
call scrittura
movlw ' '
call scrittura
return
Questa routine scrive sul display 40x4
0
voti
[105] Re: PIC E DISPLAY LCD
grazie!! finalmente col weekend senza lavorare mi metterò lì notte e giorno finché non la spunto!!
provo a adattare il tuo listato sul mio esercizio, un ultimo consiglio se ti è possibile..
c'è qualche tutorial o guida molto spartana per l'uso del debugger dell'MPLAb?
provo a adattare il tuo listato sul mio esercizio, un ultimo consiglio se ti è possibile..
c'è qualche tutorial o guida molto spartana per l'uso del debugger dell'MPLAb?
Torna a Realizzazioni, interfacciamento e nozioni generali.
Chi c’è in linea
Visitano il forum: Nessuno e 9 ospiti

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)


