Jump to content
PLC Forum


Sign in to follow this  
overflow86

Hd44780 Pic16F877

Recommended Posts

overflow86

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

Share this post


Link to post
Share on other sites

Livio Orsini
è 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.

Share this post


Link to post
Share on other sites
GiRock

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

Edited by GiRock

Share this post


Link to post
Share on other sites
overflow86

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:

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

×
×
  • Create New...