PROGRAMMAZIONE
DI EEPROM SERIALI
Ecco i dettagli finali
del programmatore
di EEPROM
apparso sul numero
di ottobre.
Dato Finteresse dimostrato per il pro-
‘grammatore di BEPROM, pubblicato
sullo numero delfottobre scorso, ab-
biamo deciso di ritomare sull'argo-
mento per definire Laspetto software,
Jn questo breve articolo vengono il-
lustrate le funzioni utilizzate per la
programmazione delle EEPROM
H2C. Si tratta di funzioni scritte in
linguaggio C standard ¢ quindi utiliz~
zabili con tutti i compilatori. Per po-
ter gestire una EEPROM con proto-
collo I2C sono necessarie solo due li-
nee, una peril clock e una peri dati.
La linea dati (SDA) deve essere bidi-
rezionale, mentre quella utilizzata
per il clock (CLK) ® una linea di out-
pat. Tl protocollo per Ia lettura & rap-
presentato in Figura 1, mentre quello
per la scrittura @ riportato in Figura
2, Sono state scelte le modalita a sin-
I2Cc
acura di AUTOMAZIONI B&C
-¢ SURE ADOMESS >_< WORD ADRESS. >
=
‘golo byte, trascurando quelle sequen-
Ziali, dato che le prime consentono la
‘assim flessbilits al prezzo di una
maggiore lentezza. Essendo questa
una trattazione software, non sono
state definite le furzioni strettamente
collegate alla gestione delle linee,
dato che queste devono essere reali
zate in dipendenza del sistema di in-
put/output utilizzato, Esistono molte
schede per la gestione di input/output
igitali, ma ognuna possiede proto-
colli diversi impossibili da generaliz~
void clockout (Level x)
modifica livello linea
cuK
void sdaout(Level x)
modifica linea spa
Level sdain()
legge livello linea SDA
IL LISTATO:
B quello riportato in Listato 1. Le
funzioni principali sono: eew-
rite(unsigned char address, unsi-
gned char dato) € eeRead(unsigned
char address); che permettono rispet-
tivamente di scrivere e leggere un
byte all'indirizzo specificato. Il va-
lore scelto per la variabile globale
unsigned char Slaveaddress,
permette di gestire le EEPROM
24CO1 € 24C02 allindirizzo 0, Natu-
ralmente con la corretta gestione di
questa variabile & possibile il con-
trollo di tute le EEPROM 12C.
START
< SLAVEADDRESS >_< WORDADDRESS >_<
2 oe
STOP
2100 oicemare ‘95 @HARDWARE
2 eT
8
x80
Hofine 10H °
define HIGH 1
typedef int Levels
‘oxtorn uneigned char Slavonddzess;
J+ proteins +/
wos clockout (LeveL);
veld sdaout (vel);
Havel adarn(vosa))
vot
Lever
void
void
Level writobyte(unsigned cher);
Level Sevrite(uusiqued char address, unsigned char dato):
ine” Senead(uasigned char address)
Te itocet/
Hnetnde “s20.2"
yold clockout (Lever it)
Js dotinita ani1' utente */
yoid — sdaout (Lever bit)
v
(/ dotinien dali ‘utente */
)
Level sdarn(vosay
«
Laver bitnaraa
J+ definite dail'uteate */
return bity
2)
| void tyait, uevel 1¥)
J eragmotte sul bas dati il Livelle speciticate +/
t
‘saaout.(1v) 5
Lockout (HIGH >
elockout (L0H) 7
>
Level rxaitivoiay
(*"thoove dal bus dati 42 bit +/
Level 21 .
lockout xen) ;
me egarn()y
cteakoue (20H) 7
stare(roia)
20 ad etext */
| ctockout (x0H);
| Rdzoue cow)
‘ehoekowe (#208) 7
‘sdaout (HIGH) 7
lockout (uoN) +
y
Level writebyte(unsigned char x)
7"Yuvta on byte wal bas
i eitorna LOW so Ia traeaisatone o! ok
‘
”
”
unsigned char 4;
for(i = 0p 4 < umray +44
eRBLE( (RecA) E MABE) 2 HEGH + LOW);
Fotura exmit();
y
unsigned char readnyte(void)
(* togge un byte dal bus */
«
unsigned char 1,
for(h = 0) Scum; aHHe
ret |=
(unsigned char) exBit(yy
Level gevrite unsigned char address, unsigned char dato)
72" Serive all indiriato npecitionte della eeprom,
+ “pltorna Bien se exrore
7
4
extern unsigned cher Slavendds
searto:
Ef Gerdtenyte(Stavenadross)
‘return 1208)
sseeritabyea(adivess))
Acquritenyte(dato))
‘return #108)
stop?
eeuen LOM,
1208)
>
Ant eoRead (unsigned char addcess)
‘7? Legge 41 dato sulla eeprom all indiriazo specisicato
= so lottura scorretes sitorna -1, sitriment® il dato,
«
uneigaed char ret
(corn unsigned char Slavehdéress)
stare;
Le(weitenyte(siavendaress))
return <1;
starter
werltebyte(siaveadéress | 6x01);
Feesretanredy
‘Fetura (int) rety
>
nenentinnenanenenncennnennaietennennnnennnennnt |
mesr.c
Te tentae +/
Haeiace *2e.n°
snsigned char slavenddrens = 0320;
oid main)
7 unsigned char i;
1+ nerive 100 byte patie prise 100 lecat lent */
foctinoy a ¢ 106) set) :
AE(oomELte(4, b) == arom)
ee peace