Sei sulla pagina 1di 2
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

Potrebbero piacerti anche