Vyvolavaci panel pro urady

ing.Jaroslav Kotlaba kotlaba
Středa Březen 17 14:54:54 CET 2004


Preji pekny den.

Vracim se k dotazu na nacitani a zapis EEPROM 24C16 pomoci Visual
Basicu 6.0 a knihovny PORT.DLL z knihy pana Kainka pres seriove
rozhrani (dva odpory 5k6 a dve zenerky 5V1 - no ja mam 4V7, protoze
5V1 zrovna nemeli).

Jedna se o program pro cteni a zapis pameti do modelarskych RC
vysilacu Futaba a tyto pameti (CAMPac-y) jsou dve. Prvni pouziva prave
24C16 a vetsi 64kb pouziva specialni na zakazku Futaby delany
mikroprocesor, ktery komunikuje podobne jako 24C16. V principu ma jen
osekany identifikator ve stavovem slovu na tvar 00xx misto 1010 a takto
ziskane dva bity pouziva pro adresaci. Chova se to pak jako ctyri
pameti 24C16 s ruznym ID a do xx se zapisuji bity A12 a A11 z adresy.

Zda se, ze mi zakladni rutiny uz pracuji velmi dobre. Zkousim to doma
na dvou ruznych pocitacich (Pentium 130 a PIII-1000) a cteni i zapis
probiha naprosto bez chyb. Pouzivam zapis i cteni po jednom bajtu.
Vice bajtu zaraz zapisovat ani cist nechci i kdyz by to bylo vyrazne
rychlejsi a s malou pameti mi to pracovalo spolehlive, ale neumi to
prave ten vetsi CAMPac.
(Pokud se u teto pameti cte podruhe a neuda se znovu adresa, vraci
vzdy bajty z prvni "pameti")

Zapis delam jako:
1.start
2.zapis (ID + h_adresa*2 + 0)
3.pokud neni ack tak stop a GOTO 1
4.zapis (l_adresa)
5.zapis bajt
6.stop
To opakuji 2048x nebo 8192x (ve 4-tem a 5-tem kroku ACK nekontroluji)

Cteni delam skoro stejne:
1.start
2.zapis (ID + h_adresa*2 + 0)
3.pokud neni ack tak stop a GOTO 1
4.zapis (l_adresa)
5.start
6.zapis bajt
7.zapis (ID + h_adresa*2 + 1)
8.nactu bajt
9.noack a stop
To opakuji 2048x nebo 8192x

Konecne popisi problem. V praci mam rychlejsi PC (P4-1800) a obcas a
velmi nepravidelne a pokazde u jine adresy se mi stane, ze pamet
zustane v jakemsi divnem stavu a drzi stazeny ACK a ignoruje SCL
impulsy. No a protoze v tom kroku 3 ACK testuji, tak si program mysli,
ze pamet data prijala a spokojene probehne a pritom to neni pravda a
precte se (nebo zapise) spravne treba jen prvnich 1852 bajtu.

Netusite v cem je problem a jak z neho ven? Napadla mne dost kostrbata
myslenka. Udelat po startu SDA 1 a testovat ACK. Pokud bude porad v
nule, je jasne ze pamet "zustala" viset a mohl bych se o adresu vratit
a zacit uplne znovu. Ale nemam poneti, jak "legalne" pamet z teto
letargie dostat. Hybat s SCL a az se chytne dat stop a znovu start?

Mozna by bylo lepsi neresit dusledek, ale pricinu, ale nejsem si vubec
vedom toho, co je spatne.

Dekuji za kazdou radu.

Roman Kolbabek
rkolbabek@volny.cz




Další informace o konferenci Hw-list