Stránka 1 z 3

ATMEL 89C2051 komunikacia z displayom cez I2C

Napsal: 29 dub 2023, 13:11
od kajsmentke
Zdravim mam AT89C2051 na programovanie pouzivam mikroPascal PRO for 8051

potreboval by som pochpit ako komunikovat z tymto displayom

https://www.aliexpress.com/item/1005005 ... 18026gCq8V

je nejaka obdoba prikazov TextXY(x,y,'string'); pre vypisanie textu na suradnice pripadne PLOT(x,y) MOVE(X,Y) pre kreslenie ?
Ako vobec rozbehat komunikaciu z displejom po I2C
cinan k nemu nedodava ziadny katalogovy list, predpokladam ze to bude nejake uviverzalne.

Dik za nasmerovanie

Napsal: 29 dub 2023, 17:56
od ZdenekHQ
Na to se rád podívám, jestli to někdo vyřeší.

Hlavně, jak to procesor s 2kB flash dá. Navíc displej, co má úhlopříčku cca 12mm a 10 písmen na řádek, to je tak pro J. Bonda, to patří spíš do špionážní techniky.

Napsal: 29 dub 2023, 18:24
od kajsmentke
Ovladat podobny display zjavne zvladne
https://www.youtube.com/watch?v=nq3GbQI ... byProjects

len nemam paru ako obsluzit tu I2C zbernicu a co po nej poslat :oops:

Napsal: 29 dub 2023, 18:25
od Ruprecht
Tady je datasheet a můžete si hrát. Stačí po I2C poslat pár správných bytů :lol:
Jestli si dobře vzpomínám, tento malý displej 64x32 je hardwarově posunutý na řadiči, myslím, že levý dolní roh je sloupec 32 a řádek 32 (souřadnice rohových bodů úhlopříčně x32, y32 a x95, y63)

Napsal: 29 dub 2023, 18:27
od ZdenekHQ
I2C se musí emulovat softwarově. Všechno žere paměť.

Má to vůbec nějakej interní textovej font?

Napsal: 29 dub 2023, 18:55
od kajsmentke
Ruprecht píše:Tady je datasheet a můžete si hrát. Stačí po I2C poslat pár správných bytů :lol:
Jestli si dobře vzpomínám, tento malý displej 64x32 je hardwarově posunutý na řadiči, myslím, že levý dolní roh je sloupec 32 a řádek 32 (souřadnice rohových bodů úhlopříčně x32, y32 a x95, y63)
ten datasheet je zjavne k niecomu inemu , moj display ma 4 piny GND,VCC,SDA,SCK

Napsal: 29 dub 2023, 19:06
od kajsmentke
mam pripadne este jeden, trochu vacsi ten ma uplne rovnake piny

https://www.aliexpress.com/item/3277721 ... 1802xLEl0c

Napsal: 29 dub 2023, 22:23
od pocitujlasku
zvladnut to zvladne, ale mozno tak vyladeny asm.

Napsal: 29 dub 2023, 22:25
od Ruprecht
"Displej" je to, co svítí. "Řadič" je ten obvod pod displejem. Ty 4 piny (resp. 2, SDA a SCL) jsou vyvedeny z řadiče, řadič je připojený k displeji páskovým vodičem. Datašít v odkazu popisuje komunikaci I2C s řadičem od strany 19 v pdf, příkazy jejich formát je od strany 28 v pdf. Když chceš něco zobrazit na displeji, musíš prostě mluvit s řadičem.

Napsal: 30 dub 2023, 11:44
od nixdorf
v podstate otázka, či 128B RAM a 2K flash toho 8051 klonu od Atmelu, bude stačiť na mikropascalovskú štandardnú knižnicu + kód, ktorý k tomu bude ešte stíhať obhospodarovať IIC, je básnickou otázkou.
Kamoš, toto nie je tebou zavrhované, "hračkárske" Arduino, kde si pohodlne zavoláš nejakú TextOut funkciu, ktorú za teba naprogramoval niekto iný, tu dokonca ešte v Pascale. Stráviš čas nad strojovým kódom a lúštením datasheetov, ako si si prial. Ostatne, to isté spravil ten s tou Happy New Year animáciou - aspoň zavesil svoju HEX binárku na download, začal by som tam a skúsil to rozbehať. Následne možno nad tým pôjde zavolať nejaký 8051 disassembler na pochopenie toho, čo posiela po IIC - môj predpoklad je, že to demo musel napísať v dobre optimalizovanom asm, a nie high level jazyku typu Pascal/C(++) - ostatne, či je to pravda, uvidíš z disassembly.

Napsal: 30 dub 2023, 16:10
od ZdenekHQ
Do toho Atmelu si nahraju převodník UART/I2C, to se tam vleze, a pak můžu dělat machra, protože zbytek zvládne počítač. :D

Napsal: 30 dub 2023, 16:44
od Mahoney
Nj, ale to pořád nic nemění na tom, že ten MCU je MCS51 a ne AVR, a že nemá hw I2C a všechnu komunikaci musí dělat softwarově programem. Jestli takový program jak píšeš máš, tak mu ho dej i se zdrojákem a on si bude mít s čím hrát a na čem se učit.

kajsmentke: Je to tvoje věc, ale podle mého názoru bych radil "na pascal zapomeň", a to myslím obecně, ne jen v tomto případu. Jinak sw I2C tady na tom MCU byla v ASM myslím v Matouškovi (doufám že nekecám, moc si to nepamatuju; je k tomu i CD s programy).

Napsal: 30 dub 2023, 16:49
od ZdenekHQ
Myslíš tu I2C, nebo mu mám napsat i ten převod na UART?

Napsal: 30 dub 2023, 16:52
od Mahoney
To záleží jak se ti chce, dej co máš a pokud se ti chce něco připsat tak bude určitě rád, ale to byste se měli domlouvat spíš spolu.

Napsal: 30 dub 2023, 17:05
od ZdenekHQ
V tom je právě ten problém, když to píšeš v JSA, tak šetříš každej byte paměti, takže si tu vlastní knihovnu pro každej externí čip nějak optimalizuješ. Protože napsat to univerzálně, tak to bude nafouknutý jak žaba. Něco jinýho je EEPROM, FRAM či CO2 čidlo. Bohužel.

Vytáhl jsem to z nějakýho starýho projektu, momentálně používám spíš SPI.

Tohle je jen část a musí si to upravit podle potřeby. To asi nebude jeho nejlepší cesta.

Kód: Vybrat vše

	;======*************************==================
	;======PODPROGRAMY - START + STOP + ACK ...=======
	;======*************************==================

Start_bit:	
;*********
	setb	sda		;toto se predpoklada
	call	Wait_I2C
	setb	scl
	call	Wait_I2C
	clr	sda
	call	Wait_I2C
	clr	scl
	call	Wait_I2C
	setb	sda
	call	Wait_I2C_zpracuj

	;KONECNY STAV
	;============
	;clr = 0
	;sda = 1

	ret

Sd_DWA:
;********
	mov	r0,#8		;8 cyklu
Senx_1:	
	rlc	a
	mov	sda,c
	call	Wait_I2C
	setb	scl
	call	Wait_I2C
	clr	scl
	call	Wait_I2C
	djnz	r0,Senx_1	
	setb	sda
	call	Wait_I2C_zpracuj
	ret

Test_ack:
;*******

	setb	sda		;ACK
	call	Wait_I2C
	setb	scl
	call	Wait_I2C
	mov	c,sda
	clr	scl
	mov	Stav,c
	call	Wait_I2C_zpracuj
	ret

Posli_ack:
;*********
	clr	sda		;ACK
	call	Wait_I2C
	setb	scl
	call	Wait_I2C
	clr	scl
	call	Wait_I2C
	setb	sda
	call	Wait_I2C_zpracuj
	ret

Stop_bit:
;********
	clr	sda		;STOP bit
	call	Wait_I2C
	setb	scl
	call	Wait_I2C
	setb	sda
	call	Wait_I2C
	clr	scl
	call	Wait_I2C
	setb	sda
	call	Wait_I2C_zpracuj
	ret

;*****************
;*** INIT I2C  ***
;*****************

Clear_i2c:

	;vychozi nastaveni bitu
	;----------------------
        clr	Stav
	clr	scl	
	setb	sda
	mov	r1,#32d		;max pocet chyb init eeprom
	
	mov	r0,#9
Cl_1:

	call	Wait_I2C
	setb	scl
	call	Wait_I2C
	mov	c,sda
	jc	Cl_2
	mov	r0,#9		;prisel nulovy bit,musim znovu

	;KONTROLA CHYB
	;=============
	dec	r1
	mov	a,r1
	jnz	Cl_2
	setb	Stav
	ret			;chyba init eeprom
	
Cl_2:
	clr	scl
	call	Wait_I2C
	djnz	r0,Cl_1	


				;sda = 1 = vstupni
				;scl = 0 = ready
	call	Stop_bit
	ret
	
	;==========================================
	;	     CASOVACI PAUZY
	;==========================================

Wait_I2C:
;********
;pulka periody
;zakladni casovani I2C
;pomalejsi kvuli HW key

	
	call	Wait_5us
	call	Wait_5us
	ret
	
		
Wait_I2C_zpracuj:
;****************
;cas pro HW key na zpracovani

	;klasicka EEPROM

	call	Wait_5us
	ret
	

	
Wait_I2C_WRITE_int_EE:
;*********************
;cas pro HW key na zapis do interni EEPROM
;melo by stacit 3.4ms, ale i READ potrebuje timeout 10ms
	
        call	Wait_10ms
	ret
	
Wait_I2C_READ_int_EE:
;*********************
;cas pro HW key na zapis do interni EEPROM
;READ potrebuje timeout 10ms
	
        call	Wait_10ms
	ret