PICAXE a i2c LCD s PCF8574

labus
Příspěvky: 19
Registrován: 30 čer 2018, 20:54

Re: PICAXE a i2c LCD s PCF8574

Příspěvek od labus »

Sice s ročním zpožděním, ale přeci sem dám můj kód pro ovládání LCD 1602 s expandérem PFC8574 (třeba to někdy budu hledat já sám :D ). Z číny se to dohromady nechá koupit za 2,5 USD. Jen bych opravdu doporučil zkontrolovat zda číňané dodrželi číslování nožiček expandéru.

Kód: Vybrat vše

; hodnota: 	 0  0  1  1  1  1  0  1 
; bit:	 7  6  5  4  3  2  1  0
; 		 1  2  3  4  5  6  7  8
; pozice:	 P0 P1 P2 P3 P4 P5 P6 P7	-jde opacne, takze do exp jde nejprve P7 a posledni P0
; promena:	 RS RW E  -  D4 D5 D6 D7
; drat LCD:	 4  5  6     11 12 13 14
; napeti:	 0  0  5  -  5  5  0  5	  V

Symbol  D7        = bit7      ; Data na D7
Symbol  D6        = bit6      ; Data na D6
Symbol  D5        = bit5      ; Data na D5
Symbol  D4        = bit4      ; Data na D4
;bit 3 nezapojen
Symbol  E         = bit2      ; 1 = enable (zapnuto zapis)
Symbol  RW        = bit1      ; zapsat do disp = 0, cist z disp = 1 -> ja mam vzdy 0
Symbol  RS        = bit0      ; zapis povelu = 0, zapis dat = 1

eeprom 0 ,("Teplota: ")

gosub inicializace

prvni_radek:
  for b2 = 0 to 8				; vypis textu "Teplota: "
   read b2, b1				; z EEPROM vezme informaci z pozice 0(dle b2) a ulozi do b1
   gosub zapis_dat
  next b2

end

inicializace:
	
	HI2cSetup I2CMASTER, %01001110, I2CSLOW, I2CBYTE
	
	b0 = %00110000			; nastaveno init 8-bit
	 gosub zapis_povelu
	;b0 = %00001100			mam jiz nastaveno pro 8-bit
	 gosub zapis_povelu
	;b0 = %00001100			mam jiz nastaveno pro 8-bit
	 gosub zapis_povelu
	b0 = %00100000			; nastaveno init 4-bit %0000 0010
	 gosub zapis_povelu
	b0 = %00100000			; prvni polovina z bytu %0010 0001 - 2 radky,font 5x8
	 gosub zapis_povelu
	b0 = %10000000			; druha polovina z bytu %0010 0001 - 2 radky,font 5x8
	 gosub zapis_povelu
	b0 = %00000000			; prvni polovina z bytu %0000 0001 - disp,kurzor,blik vyp
	 gosub zapis_povelu
	b0 = %10000000			; druha polovina z bytu %0000 0001 - disp,kurzor,blik vyp
	 gosub zapis_povelu
	b0 = %00000000			; prvni polovina z bytu %0000 1000 - smazat disp
	 gosub zapis_povelu
	b0 = %00010000			; druha polovina z bytu %0000 1000 - smazat disp	
	 gosub zapis_povelu
	b0 = %00000000			; prvni polovina z bytu %0000 0110 - posun kurzoru doprava
	 gosub zapis_povelu
	b0 = %01100000			; druha polovina z bytu %0000 0110 - posun kurzoru doprava
	 gosub zapis_povelu	
	b0 = %00000000			; prvni polovina z bytu %0000 0011 - zapnout disp
	 gosub zapis_povelu
	b0 = %11000000			; druha polovina z bytu %0000 0011 - zapnout disp
	 gosub zapis_povelu

return

zapis_povelu:
	;RS RW D7 D6 D5 D4
	;0  0  0  0  1  1
	E = 0					; nastav E na nulu
	hi2cout(b0)
	pause 10
	E = 1					; nastav E na jednicku pro zapis do displaye
	hi2cout(b0)
	pause 10
	E = 0					; nastav E na nulu
	hi2cout(b0)
	pause 100
	
return

zapis_dat:
	RS = 1				; nastav RS - 1 prijem dat, 0 prijem povelu (cmd)
	RW = 0	

	D4 = b1 / %10000000
	D5 = b1 / %01000000
	D6 = b1 / %00100000
	D7 = b1 / %00010000

	E = 0					; nastav E na nulu
	hi2cout(b0)
	pause 10
	E = 1					; nastav E na jednicku pro zapis do displaye
	hi2cout(b0)
	pause 10
	E = 0					; nastav E na nulu
	hi2cout(b0)
	pause 10
	
	D4 = b1 / %00001000
	D5 = b1 / %00000100
	D6 = b1 / %00000010
	D7 = b1 / %00000001	
	
	E = 0					; nastav E na nulu
	hi2cout(b0)
	pause 10
	E = 1					; nastav E na jednicku pro zapis do displaye
	hi2cout(b0)
	pause 10
	E = 0					; nastav E na nulu
	hi2cout(b0)
	pause 10
	
return
Odpovědět