Académique Documents
Professionnel Documents
Culture Documents
1
EL BUS
2
IC
PERIFRICOS
Memorias serie
Uno los elementos que se utilizan en la comunicacin i2c son las
memorias serie, como ejemplo tomamos la memoria M24512 se ST.
Esta memoria posee una capacidad de 64K x 8 bits, por lo que se
necesitan 16 bits para direccionarla o lo que es lo mismo 2 bytes.
El pinout y diagrama lgico de dicha memoria es:
Como podemos comprobar existe una parte fija (b7 a b4), y otra
seleccionable por hard (b3-b1), adems del bit de seleccin de
lectura/escritura (R/W#)
SCL
SDA
WC
E0
E1
E2
1
2
3
M24512
SCL
SDA
WC
E0
E1
E2
1
2
3
M24512
U2
6
5
7
SCL
SDA
WC
E0
E1
E2
1
2
3
M24512
SCL
SDA
WC
1
2
3
E0
E1
E2
M24512
U2
6
5
7
SCL
SDA
WC
E0
E1
E2
1
2
3
M24512
10
11
12
Analicemos el driver:
void write_ext_eeprom(long int address, BYTE data)
{
short int status;
i2c_start();
i2c_write(0xa0);
i2c_write(address>>8);
i2c_write(address);
i2c_write(data);
i2c_stop();
i2c_start();
status=i2c_write(0xa0);
while(status==1)
{
i2c_start();
status=i2c_write(0xa0);
}
1
//inicializamos la transmisin reloj a nivel bajo
//direccin del esclavo + bit de escritura
//byte H de la direccin de memoria donde queremos escribir
//mandamos byte L de la direccin de memoria
//enviamos el dato a escribir
//finalizamos la transmisin
//reinicio de la transmisin
//en status debo recibir un 0 para indicar que el esclavo
//ha devuelto ACK# y evitar escrituras incorrectas
//si no he recibido ACK = 0 espero a que responda el sclavo
//lazo de espera para que responda el esclavo
13
14
3
void init_ext_eeprom()
{
output_float(EEPROM_SCL); //pone en SCL en como entrada y nivel H en colector A.
output_float(EEPROM_SDA); //pone en DA en como entrada y nivel H en colector A
}
#ifndef EEPROM_SDA
//compilacion condicional
#endif
15
Ejercicio de Aplicacin
Como aplicacin realicemos el siguiente circuito:
16
17
18
19
20
Programa:
21
22
23
24
25
Comenzamos la simulacin:
26
27
28
29
30
31
32