AT89S52 a nejaka externi EEPROM ???

Diskuze a poradna o programátorech a programování různých obvodů

Moderátor: Moderátoři

Odpovědět
Zpráva
Autor
Uživatelský avatar
alvr
Příspěvky: 288
Registrován: 25 led 2008, 01:00

AT89S52 a nejaka externi EEPROM ???

#1 Příspěvek od alvr »

Zdravim. Kazdy jednou zacina a ja se nyni seznamuji s mikroprocesory a to konkretne na AT89S52. Chytlo me to, ale zacina mi chybet nejaka EEPROM pro ukladani dat. Hledal jsem na netu neco srozumitelneho pro zacatecnika, ale marne. Nemate nekdo nejakou radu, doporuceni, odkaz, nebo cokoliv pro srozumitelne a jednoduche uvedeni do teto problematiky ja rozchodit jednoduche propojeni nejake seriove EEPROM (napr. 24Cxxx s procesorem AT89S52)? Budu moc rad! Diky

Uživatelský avatar
ZdenekHQ
Administrátor
Administrátor
Příspěvky: 25593
Registrován: 21 črc 2006, 02:00
Bydliště: skoro Brno
Kontaktovat uživatele:

#2 Příspěvek od ZdenekHQ »

Rutiny pro komunikaci 24C16 s Atmelem (I2C) můžu poslat. Běžně tuhle kombinaci používám.
Pro moje oslovení klidně použijte jméno Zdeněk
Správně navržené zapojení je jako recept na dobré jídlo.
Můžete vynechat půlku ingrediencí, nebo přidat jiné,
ale jste si jistí, že vám to bude chutnat[?
]

Uživatelský avatar
alvr
Příspěvky: 288
Registrován: 25 led 2008, 01:00

#3 Příspěvek od alvr »

to by jsi byl moc hodny. Kdyz tak to posli na alvr@seznam.cz. ja se na to kouknu a nad z toho budu chytrejsi:-) A bude to chodit s tim procesorem AT89S52? Predem diky!

Uživatelský avatar
ZdenekHQ
Administrátor
Administrátor
Příspěvky: 25593
Registrován: 21 črc 2006, 02:00
Bydliště: skoro Brno
Kontaktovat uživatele:

#4 Příspěvek od ZdenekHQ »

Pošlu to sem, ale je to odladěný,upravený a tudíž poněkud méně přehledný než "syrovej" kód. Chodí na všech 89C5x, 89S5x či 89C2051 atd.
Pro moje oslovení klidně použijte jméno Zdeněk
Správně navržené zapojení je jako recept na dobré jídlo.
Můžete vynechat půlku ingrediencí, nebo přidat jiné,
ale jste si jistí, že vám to bude chutnat[?
]

Uživatelský avatar
alvr
Příspěvky: 288
Registrován: 25 led 2008, 01:00

#5 Příspěvek od alvr »

OK.diky

Uživatelský avatar
alvr
Příspěvky: 288
Registrován: 25 led 2008, 01:00

#6 Příspěvek od alvr »

kdy to tady das?

Uživatelský avatar
Kado
Příspěvky: 44
Registrován: 27 říj 2007, 02:00
Bydliště: PB, SVK

#7 Příspěvek od Kado »

pozri si toto http://hw.cz/Teorie-a-praxe/Programovan ... o-x51.html
obsahuje popis rutin pre komunikaciu mcu x51 s pamatou 24Cxx

Uživatelský avatar
ZdenekHQ
Administrátor
Administrátor
Příspěvky: 25593
Registrován: 21 črc 2006, 02:00
Bydliště: skoro Brno
Kontaktovat uživatele:

#8 Příspěvek od ZdenekHQ »

alvr píše:kdy to tady das?
Mám to v druhý mašině.

Řešení je hromada, jenom každej programátor má svůj styl a občas jeden druhýho nechápe :)
Pro moje oslovení klidně použijte jméno Zdeněk
Správně navržené zapojení je jako recept na dobré jídlo.
Můžete vynechat půlku ingrediencí, nebo přidat jiné,
ale jste si jistí, že vám to bude chutnat[?
]

Uživatelský avatar
alvr
Příspěvky: 288
Registrován: 25 led 2008, 01:00

#9 Příspěvek od alvr »

ok, pockam.A jsou ty rutiny v asm nebo v C?

Uživatelský avatar
ZdenekHQ
Administrátor
Administrátor
Příspěvky: 25593
Registrován: 21 črc 2006, 02:00
Bydliště: skoro Brno
Kontaktovat uživatele:

#10 Příspěvek od ZdenekHQ »

Tady jsem našel jednu zálohu:

Kód: Vybrat vše

;=====================================================================

;
; Cteni probiha od adresy E_adresa  porad dopredu
; Zapis je jen v ramci poslednich 3 bitu stranky

Zapis_8b:	
;********

	mov	E_wradr,a		;kam to patri do EEPROM
	mov	E_wram,#Buf_eepr	;pozice bufferu	
	clr	w1_byte
 	call	E_write			;zapise jen 8 byte
	ret	  

Nacti_8b:		; v aku je odkud
;*********
	mov	E_adresa,a		;adresa v eeprom
	mov	E_pkrok,#8d
	mov	E_ram,#Buf_eepr		;kam nacist
	clr	w1_byte
	call	E_read
	ret

;************************************
;********	EEPROM	    *********
;************************************
; NOVA ZKRACENA PROCEDURA
; =======================
;

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

Clear_i2c:

	clr	scl
	clr	Stav
	nop
	nop
	setb	sda
	mov	r1,#32d		;max pocet chyb init eeprom
	
	mov	r0,#9
Cl_1:
	nop
	nop
	setb	scl
	nop
	nop
	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:
	nop
	nop
	clr	scl
	nop
	nop
	djnz	r0,Cl_1	
	nop
	nop
				;sda = 1 = vstupni
				;scl = 0 = ready
	call	Start_bit
	ret
	
	
E_read:
;******
	clr	Wr_och
	call	E_rea2
	ret

E_write:
;*******
	clr	Wr_och
	call	E_wri2
	ret	

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

Start_bit:	
;*********
	setb	sda		;toto se predpoklada
	nop
	nop
	setb	scl
	nop
	nop
	nop
	clr	sda
	nop
	nop
	nop
	clr	scl
	nop
	nop
	setb	sda

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

	ret

Sd_DWA:
;********
	mov	r0,#8		;8 cyklu
Sen_1:	
	rlc	a
	mov	sda,c
	nop
	nop
	setb	scl
	nop
	nop
	nop
	clr	scl
	nop
	djnz	r0,Sen_1	
	setb	sda
	ret

Test_ack:
;*******

	setb	sda		;ACK
	nop
	nop
	setb	scl
	nop
	nop
	mov	c,sda
	nop
	nop
	clr	scl
	nop
	nop
	mov	Stav,c
	ret

Posli_ack:
;*********
	clr	sda		;ACK
	nop	
	nop
	setb	scl
	nop
	nop
	nop
	clr	scl
	nop
	nop
	setb	sda
	nop
	ret

Stop_bit:
;********
	nop
	clr	sda		;STOP bit
	nop
	nop
	setb	scl
	nop
	nop
	nop
	setb	sda
	nop
	nop
	clr	scl
	nop
	nop
	setb	sda
	nop
	nop
	ret
				
;******************************************
;*** 		CTENI EEPROM		***
;******************************************
	
E_rea2:				

				;posle start + device adress
				;Stav ... 0 = OK , 1= ERROR 
	clr	scl
	nop
	nop			
	setb	sda
	clr	Stav
 

	;*********
	;START BIT

	call	Start_bit		;1

	;***********************
	;DEVICE ADRESS

	mov	a,#10100000b	;1010+adresa+R/W bit
				; 0 = dummy write

	call	Sd_DWA		;2 device adr
	
	call	Test_ack	;3 test ACK

	jnb	Stav,Sen_1aa
	ret			;neprislo ACK
	
Sen_1aa:
	
	setb	sda		;jako vstupni

;*********************
;WORD ADRESS

	mov	a,E_adresa
	mov	r0,#8
		
	call	Sd_DWA		;4
	
	call	Test_ack	;5

;***********************************
;TED ZNOVU START BIT + DEVICE ADRESS
	
	call	Start_bit	;6

	mov	a,#10100001b	;1010+adresa+R/W bit
	mov	r0,#8		;8 cyklu

	call	Sd_DWA		;7

	call	Test_ack	;8
	
	jnb	Stav,Sen_1bb

	ret			;neprislo ACK

Sen_1bb:
	;****************
	;****** cteni dat
	;****************		
	
	
	mov	r2,E_pkrok	;pocet kroku
	mov	r1,E_ram	;kam nacist
	jnb	w1_byte,Sr_1st	;neni to jen 1 byte jako adr apod. ?
	mov	r2,#1
	mov	r0,#8		;1 krok, 1 byte
				;adresa MUSI byt zadana !!!!
	
Sr_1st:
	mov	r0,#8
Sr_1:	
	setb	scl
	nop
	nop
	mov	c,sda
	rlc	a		;ulozim do aku,LSB se posila jako posl.
	clr	scl
	nop
	nop
	djnz	r0,Sr_1
	nop
	nop
	mov	b,a
	
	;***********************************************
	;OCHRANA PAMETI ZASOBNIKU, JEN PRO TUTO APLIKACI
	
	mov	a,r1
	clr	c
	cjne	a,#ZASOBNIK,Och_1
Och_1:
	jc	Och_OK

	setb	Wr_och
	setb	Stav
	ret	
Och_OK:
	
	mov	a,b
	
	mov	@r1,a		;ted to ulozim na adresu r1

	inc	r1
	nop
	nop
	djnz 	r2,Sr_3	
	jmp	Sr_10

Sr_3:
	
	call	Posli_ack
	jmp	Sr_1st

Sr_10:				;NO ACK + STOP
	setb	sda	
	nop
	nop
	setb	scl
	nop
	nop
	nop
	clr	scl
	nop
	nop
	setb	sda

	call	Stop_bit	;9
	
	clr	Stav		;proslo to....
	clr	w1_byte
	ret

;******************************************
;*** 		ZAPIS DO EEPROM		***
;******************************************

E_wri2:	
	

	;Stav ... 0 = OK , 1= ERROR (no ACK)
	
	clr	scl
	nop
	nop			;pro jistotu
	setb	sda
	clr	Stav
	
	call	Start_bit	;11
		
	mov	a,#10100000b	;1010+adresa+R/W bit
	mov	r0,#8		;8 cyklu

	call	Sd_DWA	;12

	call	Test_ack	;13
	
	jnb	Stav,Wer_1a
	
	ret			;konec zapisu,chyba !!!

Wer_1a:	
	;*********************
	;WORD ADRESS

	mov	r0,#8		
	mov	a,E_wradr	;adresa pro 24C02 ma 8 bitu
	
	call	Sd_DWA	;14

	call	Test_ack	;15

	jnb	Stav,Wen_y

	ret			;neprislo ACK
Wen_y:
	mov	r1,E_wram
	mov	r2,#8		;8 bytu na stranku
	jnb	w1_byte,Wer_5
	mov	r2,#1		;jen 1 byte
	
Wer_5:	
	mov	r0,#8
	mov	a,@r1
	
Wer_1:			;TOTO JE ZAPIS VEN !!!
	rlc	a	;NEPLEST S CTENIM !!!!
	mov	sda,c
	nop
	nop
	setb	scl	;VEN
	nop
	nop
	nop
	clr	scl
	nop
	djnz	r0,Wer_1
	nop
	nop

;------------------
;zapsal jsem 8 bitu
;------------------

	call	Test_ack	;16 ack
		
	jnb	Stav,Wer_2
	
	setb	Stav		;neodpovedel ACK
	ret			;konec zapisu,chyba !!!
Wer_2:	
	nop
	nop
	inc	r1
	djnz	r2,Wer_5

Wer_10:				

	;STOP
	;*****
	
	call	Stop_bit	;17

	clr	w1_byte
	call	Wait_10ms
	call	Wait_10ms
	ret

	;=================================
	;=====   KONEC AKCE EEPROM =======
	;=================================
Pro moje oslovení klidně použijte jméno Zdeněk
Správně navržené zapojení je jako recept na dobré jídlo.
Můžete vynechat půlku ingrediencí, nebo přidat jiné,
ale jste si jistí, že vám to bude chutnat[?
]

Uživatelský avatar
ZdenekHQ
Administrátor
Administrátor
Příspěvky: 25593
Registrován: 21 črc 2006, 02:00
Bydliště: skoro Brno
Kontaktovat uživatele:

#11 Příspěvek od ZdenekHQ »

Obecně:

Stav - bit, 0=OK, 1= nějaká chyba při zápisu/čtení
w1_byte - bit, 0= čte/zapisuje celou stránku, 1= čte jen 1 byte


Zápis:

E_wram - adresa bufferu EEPROM v RAM paměti ATMEL
E_wradr - adresa v paměti EEPROM


Čtení:

E_adresa - adresa v EEPROM
E_pkrok - kolik bytů číst
E_ram - na jakou pozici v RAM Atmelu

Procedury:

Zapis_8b - zápis stránky EEPROM
Nacti_8b - čtení stránky EEPROM
Clear_i2c - inicializace EEPROM / I2C

nebo přímo

E_read
E_write


Potřebné podprogramy:

Wait_10ms - čekací smyčka 10ms


Pokud zapisuješ celou stránku, musí být poslední 3 bity v adrese nula (adresa dělitelná osmi).
Naposledy upravil(a) ZdenekHQ dne 22 kvě 2008, 21:26, celkem upraveno 2 x.
Pro moje oslovení klidně použijte jméno Zdeněk
Správně navržené zapojení je jako recept na dobré jídlo.
Můžete vynechat půlku ingrediencí, nebo přidat jiné,
ale jste si jistí, že vám to bude chutnat[?
]

Uživatelský avatar
ZdenekHQ
Administrátor
Administrátor
Příspěvky: 25593
Registrován: 21 črc 2006, 02:00
Bydliště: skoro Brno
Kontaktovat uživatele:

#12 Příspěvek od ZdenekHQ »

Ale každopádně pošlu originál pro 24C16, teď nevím, jestli to není jen pro 24C02 (ovšem to je jedno, jen to nenaadresuje celou paměť).
Pro moje oslovení klidně použijte jméno Zdeněk
Správně navržené zapojení je jako recept na dobré jídlo.
Můžete vynechat půlku ingrediencí, nebo přidat jiné,
ale jste si jistí, že vám to bude chutnat[?
]

Uživatelský avatar
alvr
Příspěvky: 288
Registrován: 25 led 2008, 01:00

#13 Příspěvek od alvr »

ok, zatim diky.

Odpovědět

Zpět na „Programování PIC, ATMEL, EEPROM a dalších obvodů“