Přístup do sériový Eeprom 24LC64
Moderátor: Moderátoři
Přístup do sériový Eeprom 24LC64
Je tu někdo, kdo si s I2C paměťma hrál? Jde mi o to, abych to nemusel celý číst a pak nezjistil, že je s tím problém...
Díky
Jirka
PETR48, ak budem mať čas, zverejním na svetelektro.com
Já to mám s tou 24LC64 trochu komplikovaný, protože nemám k dispozici žádnej bididekt port Atmela. Asi budu muset přes třístavový registr zapisovavat na jednom portu SDA a SCL a na druhým portu přes třístavový odělovač číst SDA.
Nenapadá tě prosím něco lepšího?
Díky
Jirka
Čo sa týka ďalšieho Vášho dotazu, celkom som nepochopil čo znamená bididekt, ale pokiaľ už sú všetky porty obsadené, nezostáva nič iné, len použiť lacht.
Myslím si, že pokiaľ to zvládol procesor zo 48 rady, s ATMELOM rady 51 je to omnoho jednoduhšie, vzhľadom k jeho lepšiemu inštrukčnému súboru.
Tu je odkaz na moju nostalgickú skladačku:
http://svetelektro.com/Forum/petr-48-mini-t36310.html
lesana87 píše:Čemu říkáš Atmel? Řada 51 má všechny porty obousměrné s otevřeným drainem a I2C je právě potřebuje, takže z HW hlediska máš, co potřebuješ, je to jen o SW.
Ano, A51. Je to ale "velkej" systém, kde je datová a adresová sběrna a externí Eprom27C256, 82C55 a Timekeeper s 2KB RAM, takže P0 a P2 není. P1 je na 16 tlačítek maticový klávesnice a P3 je komplet využitý. Takže se to musí pověsit na datovou sběrnici. Adresovej dekodér je na GALu a jsou tam k dispozici 3 výstupy. Na čtení SDA stačí 1/4 74LS125 ale co tam dát na zápis SDA? Na SCL stačí 74LS74 ale pokud vím, něco s funkcí 74LS74 s třístavovým výstupem nebo aspoň otevřeným kolektorem není. Jedině za 74LS74 nabastlit tranzistor jako otevřený kolektor.
Jirka
videl som aj také riešenie: Zapojiť EEPROM na niektorý vstup a výstup klávesnice. Tých pár milisekúnd obsluhy EEPROM užívateľ ani nezbadá pri zadávaní z klávesnice. Výhoda použitia I2C na EEPROM je tá, že pri činnosti klávesnice by nemala EEPROM reagovať, pokiaľ nebude aktivovaná správnym adresovaním (postupných sériových dát). Uvediem príklad symbolického zápisu čítania SDA:
stĺpec matice (1) daj do "L"
čítaj riadok 1 (tam je zapojený aj SDA) -teraz testuje stlačenie klávesy
čítaj riadok 2
. atd
.
stĺpec matice daj do "H"
čítaj riadok 1 - toto je dôležité, lebo v tomto okamžiku testuje SDA
na budenie stlpcov by bolo dobre použiť oddelovacie R,
aby pri prípadnom stlačení tlač. neovplyvňoval SDA
stĺpec matice (2) daj do "L"
.
.atd
Bude to chodit, nebo jsem něco nedomyslel?
Díky
Jirka
to vlado5: 74573 je jednostrannej trojstavovej Latch, oboustrannej je asi jen
74ls646
to lesana 87: registrovej mód Galu nejde použít, je na něm 10 vstupů.
- Přílohy
-
EEPR.pdf- (12.45 KiB) Staženo 97 x
Tie dve EEPROM, čo tam máte zapojené, je treba adresovať aj hardverovo.
To znamená kombinovať (H alebo L) vstupy A0,A1,A2-podľa dataseetu. Pri jej výbere ju treba aj softverovo adresovať. Ukážka rutín v asm:
WRADRE: CLR EMOD ;rezim PAGEWRITE
ACALL STARTE ;START podminka
ACALL EADRS ;vyber pameti pro zapis adresy!!!!
ACALL WBYTEE ;zapis
JC WRADRE ;opakuj je BUSY
MOV A,R2 ;zapis adresy
ACALL WBYTEE ;zapis
RDADRE: ACALL STARTE ;START podminka
ACALL EADRS ;vyber pameti pro zapis adresy!!!!!
ACALL WBYTEE ;zapis
JC RDADRE ;opakuj je BUSY
MOV A,R2 ;zapis adresy
ACALL WBYTEE ;zapis
ACALL STARTE ;restart
ACALL EADRS ;inicializace pameti
SETB ACC.0 ;pro cteni
ACALL WBYTEE ;zapis
Adresa je (pre pamete EEPROM A0h), pokiaľ sú adresné vstupy na GND
aj toto je v datašite-prvý byte zápisu
Teraz pozerám na schému druhý krát a vidím že to máte aj hardwarovo
rozlíšené. No zas ma moje myšlienky predbiehajú. Mohlo by to tak fungovať. Pri použití toho obojsmerného lachtu by sa ušetrilo miesto- o jedeno púzdro menej. No a teraz sa pustiť do vývoja SW- uff, držím palce!!
Akorát mám trochu problém s adresací těch dvou EEPROM. Na DHSERVISu píšou, že starší Microchip má nohy A0-A2 bez funkce? Předpokládám, že se konkrétní EEPROM (1 z
Slave adresa je mi snad jasná:
-pokud budu zapisovat do EEPROM 7 tak pošlu 1010 1110, pak adresu H a adresu L a datový byte. Těch můžu poslat kolik chci, adresa v EEPROM se sama inkrementuje. Skončí se stop bitem.
-pokud budu číst z EEPROM 0 tak pošlu 1010 0000, pak adresu H a adresu L. Pak tomu dál moc nerozumím. Při čtení se posílá další start bit a control byte 1010 0001 a teprve pak jdou z EEPROM čtený byte??? Těch zase můžu číst kolik chci, adresa v EEPROM se sama inkrementuje. Skončí se zase stop bitem.
Načetl jsem to z šítu Microchip. Překvapuje mě, že to je při čtení složitější než při zápisu, třeba u Flash je to opačně, pro zápis se posílá hromada řídících slov.
Jo a ještě na závěr, předpokládám, že adresa v EEPROM a data jsou z hlediska co pošlu nebo přijmu vše inverzní, je to tak?
Díky za pomoc.
Jirka
Akorát mám trochu problém s adresací těch dvou EEPROM. Na DHSERVISu píšou, že starší Microchip má nohy A0-A2 bez funkce? Předpokládám, že se konkrétní EEPROM (jedna z osmi) vybere podle shody HW adresy a SW adresy poslaný v Slave adres po Start bit. Pokud ale nohy A0 - A1 nemají funkci, tak se nemá SW adresa s čím komparovat a bude stále vybíraná stejná EEPROM a tudíž může být osazená pouze jedna?
Slave adresa je mi snad jasná:
-pokud budu zapisovat do EEPROM 7 tak pošlu 1010 1110, pak adresu H a adresu L a datový byte a po každé čekám na ACK bit. Datových byte můžu poslat kolik chci, adresa v EEPROM se sama inkrementuje. Skončí se Stop bitem po posledním ACK.
-pokud budu číst z EEPROM 0 tak pošlu 1010 0000, pak adresu H a adresu L. Pak tomu dál moc nerozumím. Při čtení se posílá další Start bit a control byte 1010 0001 (pro EEPROM 0) a teprve pak jdou z EEPROM čtený byte??? Těch zase můžu číst kolik chci, adresa v EEPROM se sama inkrementuje. Skončí se zase stop bitem ale bez předchozího ACK.
Načetl jsem to z šítu Microchip. Překvapuje mě, že to je při čtení složitější než při zápisu, třeba u Flash je to opačně, pro zápis se posílá hromada řídících slov.
Jo a ještě na závěr, předpokládám, že adresa v EEPROM a data jsou z hlediska co pošlu nebo přijmu vše inverzní, je to tak?
Díky za pomoc.
Jirka
To je na vysvetlenie prvých dvoch otázok. Na otázku, či sú adresa a data
inverzné, môžem odpovedať že nie. Zadávajú a čítajú sa v pôvodnom stave.
Príklad: všetky adresové vstupy uzemnené - pvrý byte: 1010 0000
adresový vstup A0 EEPROM na "H" - prvý byte: 1010 0010
Ja som si pomohol aj týmto:
http://winide51.wz.cz/downloads/51/mit_cviceni.pdf
a odniekal som stiahol aj programy k tomu, prikladám obsluhu EEPROM a displeja. Tu je jasne vidieť, ako pracuje s device addres:
- Přílohy
-
- M019_1.asm
- (5.96 KiB) Staženo 96 x