Vai al contenuto
PLC Forum


Hd44780 Pic16F877


overflow86

Messaggi consigliati

Buongiorno a tutti,

E' un po di tempo che seguo questo forum, ma è la prima volta che vi chiedo aiuto

Ho recuperato da un vecchio fax un display LCD 20x2 e sto tentando di interfacciarlo con un

PIC16F877.

Non avendo esperenzia con i display, sto facendo un po di sperimentazioni,

cercando di fargli visualizzare qualche scritta.

Il display è un MDLS20265SS-01 / KL SN102 94V-0

e da un datasheet trovato in rete ho letto che è un HD44780 compatibile.

Con il simulatore mi stampa correttamente la scritta,

mentre dal "vero", montando il circuito su breadboard

mi stampa dai caratteri strani, simili al giapponese

Cosa sto sbagliando ?

Allego programma


				PROCESSOR	   16F877

				;4,00 MHz

				RADIX		   HEX

				INCLUDE		 "P16F877.INC"

				ERRORLEVEL	  -302

				__CONFIG _CP_OFF & _WDT_OFF & _BODEN_ON & _PWRTE_ON & _HS_OSC & _WRT_ENABLE_ON & _LVP_ON & _DEBUG_OFF & _CPD_OFF


ATIME EQU 0x24

;PORTB,2 = ENABLE

;PORTB,1 = R/W

;PORTB,0 = RS

;PORTD = DATA (DBO-DB7)

;display 20x2

;2 righe

;8 bit



	org 0  MOVLW 0x07   ; CONFIGURE ALL PORT A PINS

  MOVWF ADCON1  ; AS DIGITAL I/O

  BSF STATUS, RP0 ; SELECT BANK1  MOVLW B'00000000' ; ALL BITS FOR PORT A

  MOVWF TRISA   ; AS O/P, HANDLES KEYPAD V+

  MOVLW B'00000000' ; ALL BITS FOR PORT B

  MOVWF TRISB   ; AS O/P  MOVLW B'00000111' ; ALL BITS FOR PORT C

  MOVWF TRISC   ; AS I/P, HANDLES KEYPAD OUTPUT AND O/P


  MOVLW B'00000000' ; ALL BITS FOR PORT D

  MOVWF TRISD   ; AS O/P

  BCF STATUS,RP0 ; SELECT BANK0

MAIN

  CLRF PORTD

  CLRF PORTC

  CLRF PORTB

  CLRF PORTA	CALL INIZIALIZZA

  CALL CHR ;RS=1


  MOVLW 'S'

  MOVWF PORTD

  CALL EXEC

  MOVLW 'U'

  MOVWF PORTD

  CALL EXEC

  MOVLW 'N'

  MOVWF PORTD

  CALL EXEC

  MOVLW 'P'

  MOVWF PORTD

  CALL EXEC

  MOVLW 'L'

  MOVWF PORTD

  CALL EXEC		

  MOVLW 'U'

  MOVWF PORTD

  CALL EXEC

  MOVLW 'S'

  MOVWF PORTD

  CALL EXEC


	CALL FINE


loop

	goto loop


FINE	CALL CMD ;RS=0


	MOVLW B'00000111' ;ENTRY MODE

  MOVWF PORTD

  CALL EXEC


  CALL CMD ;RS=0


	MOVLW B'00000010' ;BACK HOME

  MOVWF PORTD

  CALL EXEC


	RETURN  


INIZIALIZZA


	CALL CMD ;RS=0

	CALL DLY ;WAIT TIME

	CALL DLY ;WAIT TIME

  CALL DLY ;WAIT TIME  

  CALL DLY ;WAIT TIME

  CALL DLY ;WAIT TIME

  CALL DLY ;WAIT TIME

	CALL DLY ;WAIT TIME

  CALL DLY ;WAIT TIME  

  CALL DLY ;WAIT TIME

  CALL DLY ;WAIT TIME


  MOVLW B'00111000'

  MOVWF PORTD

  CALL EXEC

  CALL DLY ;WAIT TIME

  CALL DLY ;WAIT TIME

  MOVLW B'00111000'

  MOVWF PORTD

  CALL EXEC

  CALL DLY ;WAIT TIME

  CALL DLY ;WAIT TIME

  MOVLW B'00111000'

  MOVWF PORTD

  CALL EXEC

  CALL DLY ;WAIT TIME

  CALL DLY ;WAIT TIME  


BF_CHECK	btfsc PORTD,7

	goto BF_CHECK


  MOVLW B'00001111'

  MOVWF PORTD

  CALL EXEC

  MOVLW B'00000001'

  MOVWF PORTD

  CALL EXEC  MOVLW B'00000110'

  MOVWF PORTD

  CALL EXEC


	RETURN



CLR

	BCF PORTB,0

	BCF PORTB,1

	BCF PORTB,2  MOVLW B'00111000'

  MOVWF PORTD

  CALL EXEC

  MOVLW B'00001110'

  MOVWF PORTD

  CALL EXEC  MOVLW B'00000110'

  MOVWF PORTD

  CALL EXEC



	return


CMD  BCF PORTB,0

  RETURN

CHR  BSF PORTB,0

  RETURN

EXEC

	BCF PORTB,2 ;ENABLE FALSE

  CALL DLY ;WAIT TIME

  CALL DLY ;WAIT TIME

  CALL DLY ;WAIT TIME

  CALL DLY ;WAIT TIME

  CALL DLY ;WAIT TIME

  BSF PORTB,2 ;ENABLE TRUE

  CALL DLY ;WAIT TIME

  CALL DLY ;WAIT TIME

  CALL DLY ;WAIT TIME

  CALL DLY ;WAIT TIME

  CALL DLY ;WAIT TIME

  RETURN


DLY

	MOVLW D'255'

  MOVWF ATIME

SUBT

	NOP

  NOP

  NOP

  NOP

  NOP

  DECFSZ ATIME,1

  GOTO SUBT

  RETURN  


	END

Grazie in anticipo

Link al commento
Condividi su altri siti


è un HD44780 compatibile.

Se veramente compatibile non ci devono essere problemi.

Io non uso da anni l'assembler, se non in casi particolarissimi quando devo ottimizzare al 100% il codice.

Se vuoi possi metterti a disposizione le funzioni "C" (compilate con CCS) che uso normalmente e che ti posso garantire non danno problemi.

Link al commento
Condividi su altri siti

Solo per vedere se è veramente compatibile, prova a buttargli dentro questo eseguibile, se visualizzi 40 caratteri standard, allora è il tuo codice che non funziona a dovere, altrimenti bisogna indagare più a fondo...

La PORTB è settata uguale alla tua, mentre viene utilizzata solo metà della PORTD ovvero, RD4-5-6-7 collegati ai rispettivi pin del display D4-5-6-7...

P.S. In effetti la simulazione funziona correttamente, quindi è probabile che ci sia sotto qualcosa d'altro, solo un test completo a questo punto ci potrà togliere eventuali dubbi...


:020000000129D4

:10000600103083120313FD00FD0B072800000800C3

:10001600083083120313FC002330FD00FD0B11286A

:06002600FC0B112808008C

:04002C0000000800C8

:1000300083120313D21B1E2888131F288817521BF4

:100040002328081324280817D21A282888122928B8

:100050008816521A2D2808122E2808164C183228F5

:10006000061433280610061516200611D2193A2850

:1000700088133B28881752193F280813402808176F

:10008000D218442888124528881652184928081280

:100090004A2808164C184E2806144F280610061534

:1000A000162006114C1C56280B2057280320080048

:0E00B000831203134B088A004A0882000800DE

:1000BE00831203134C105108D20018204C14080060

:1000CE0083160313061106100812881208138813DC

:1000DE0083120611061088130813881208120B20BB

:1000EE000B200B20881608160615162006110B205D

:1000FE000615162006110B200615162006110B20CC

:10010E0008120615162006110B20061516200611CC

:10011E00881288170615162006110B20881308164C

:10012E0006151620061108120615162006110B20AC

:10013E0006151620061108160615162006110B2098

:10014E0008120615162006118817081788160816A5

:0C015E000615162006110B204C1408009A

:10016A00C728803083120313CD00DA28C030CD00AF

:10017A00DA289430CD00DA28D430CD00DA2880305D

:10018A00CD00DA28831203134D08013A0319B62861

:10019A004D08023A0319BB284D08033A0319BE2831

:1001AA004D08043A0319C128C4284E03F0004D082B

:1001BA00F0077008CD007008D20018204C10D0014A

:1001CA0050084F07840000080319F32850084F0706

:1001DA0084000008D1005F20D00AE5284C140800EA

:1001EA0058208A110A128000840ACA0A0319CB0A03

:0801FA00F003031DF5280800C5

:100202005E210730831603139F0085018312850147

:100212008316860183128601831687018312870162

:10022200831688018312880183168901831289014A

:1002320067200130D20018200C30D2001820013083

:10024200CD000130CE002030CF00B5200230CD00ED

:0C0252000130CE003530CF00B5202E2941

:1002BC00203084002A3083120313F0003430CA003B

:0802CC000130CB00F520080011

:1002680041344234433444344534463447344834C2

:1002780049344A344B344C344D344E344F34503472

:0A028800513452345334543400341E

:10029200553456345734583459345A34303431344E

:1002A2003234333434343534363437343834393400

:0A02B2002B342D342A343A34003482

:02400E00713B04

:00000001FF

Modificato: da GiRock
Link al commento
Condividi su altri siti

Grazie mille per l'aiuto,

ho caricato il codice di GiRock (anch'esso funzionante in simulazione), ma nulla.

Il display rimane spento, e regolando il contrasto con il trimmer, mi annerisce solo la prima riga.

A questo punto penso che il problema sia hardware

Nei prossimi giorni acquistero' un display nuovo, poi vi faro' sapere.

Grazie nuovamente per la disponibilità :smile:

Link al commento
Condividi su altri siti

Crea un account o accedi per commentare

Devi essere un utente per poter lasciare un commento

Crea un account

Registrati per un nuovo account nella nostra comunità. è facile!

Registra un nuovo account

Accedi

Hai già un account? Accedi qui.

Accedi ora
×
×
  • Crea nuovo/a...