Académique Documents
Professionnel Documents
Culture Documents
La comunicacin serial entre integrados y elementos de una misma placa o circuito impreso
ha sido objeto de investigacin y propuestas diversas por parte de algunos fabricantes o
grupos de ellos. Sin llegar a establecerse como estndares, dos de estas propuestas ocupan
un rol sobresaliente, son los llamados Bus I2C y SPI.
I2C e I2C son denominaciones usadas indistintamente para hacer referencia al Bus de
comunicacin serial creado en 1991 por Phillips bajo el nombre Inter Integrated Circuit.
Tal Bus concibe la existencia de dos lneas para dar soporte a una comunicacin serial
bidireccional entre un dispositivo Maestro y mltiples Esclavos: SCL, seal de reloj
establecida por el Maestro y SDA, canal de datos (figura 1). Una tierra comn a todos los
elementos conectados al Bus, no visible en la figura 1, es un requerimiento sobre entendido.
Vdd
Rp
SCl
SDA
Master
Slave
Slave
Slave
Objetivo: Disear un sistema capaz de leer y grabar informacin en una memoria serial no
voltil, mediante el Bus I2C
El objetivo planteado implementar un circuito que har lo siguiente:
-
LCD
SCL
Vin
A/D
Selector:
Programacin /
Control
Memoria
Serial
Mdulo I2C
SDA
Microcontrolador
Seal Digital
R5
R6
2.4k
2.4k
CTRL/PROG
Enter
MEMORIA SERIAL
6
5
7
SCK
SDA
WP
A0
A1
A2
1
2
3
24C02C
Entre las caractersticas listadas por Microchip para esta memoria se encuentran:
-
Secuencias de escritura.
Dos modos de escritura especifica el fabricante: de Bytes y de Pginas. La secuencia o
tramas de bits para la escritura de Bytes puede detallarse a travs de la figura 5.
Bit de Start: Transicin Beta en la lnea SDA, mientras SCL permanece en alto.
Dato: Luego de otro bit ACK han de enviarse los 8 bits de los cuales consiste el
dato que desea grabarse o escribirse en la memoria.
Bit de Stop: Posterior al dato prosigue un nuevo bit ACK y por ltimo un bit de
parada. ste bit se implementa como una transicin Alfa en la lnea SDA mientras
SCL permanece en alto.
Secuencias de Lectura
Bit de Start.
Byte de Control, (1010A2A1A0) seguido del bit R/W igual a 0 (para escritura) y un
bit ACK.
Byte de Control, pero ahora finalizado con el bit R/W igual al 1 (para lectura) y
continuado con un bit ACK.
Dato: En este caso el Maestro recibe los 8 bits que conforman el dato ledo desde la
memoria.
Bit de Stop.
330
330
330
RED-PROG
BLUE-CTRL
YELLOW-OUT
+5V
LCD1
+5V
50%
LM032L
D0
D1
D2
D3
D4
D5
D6
D7
RS
RW
E
VSS
VDD
VEE
20 MHz
VSS
7
8
9
10
11
12
13
14
4
5
6
1
2
3
10k
VSS
+5V
1k
U2
1
2
3
A0
A1
A2
SCK
SDA
WP
U1
1k
6
5
7
24C02C
SW CTRL/'PRG
R3
10k
10k
15
16
17
18
23
24
25
26
RC0/T1OSO/T1CKI
RE3/MCLR/VPP
RC1/T1OSI/CCP2
RC2/P1A/CCP1
RA0/AN0/ULPWU/C12IN0RC3/SCK/SCL
RA1/AN1/C12IN1RC4/SDI/SDA RA2/AN2/VREF-/CVREF/C2IN+
RC5/SDO
RA3/AN3/VREF+/C1IN+
RC6/TX/CK
RA4/T0CKI/C1OUT
RC7/RX/DT
RA5/AN4/SS/C2OUT
RA6/OSC2/CLKOUT
RD0
RA7/OSC1/CLKIN
RD1
RD2
RB0/AN12/INT
RD3
RB1/AN10/C12IN3RD4
RB2/AN8
RD5/P1B
RB3/AN9/PGM/C12IN2RD6/P1C
RB4/AN11
RD7/P1D
RB5/AN13/T1G
RB6/ICSPCLK
RE0/AN5
RB7/ICSPDAT
RE1/AN6
RE2/AN7
19
20
21
22
27
28
29
30
BOTN
R2
8
9
10
+5V
330
VCC
VSS
330
330
VSS
1
2
3
4
5
6
7
14
13
33
34
35
36
37
38
39
40
PIC16F887
+5V
RED-PROG
BLUE-CTRL
VIN
YELLOW-OUT
40%
1k
+88.8
Volts
Facultad de Ingenieria
Fig. 11 Circuito final del Sistema de lectura / escritura de la memoria serial 24C02C
Inicio
Configuracin:
PortB: Ctrl LCD. RC3: SCL, RC4: SDA,
Asignar Vin, SW, Enter, LEDS: Blue. Red, Yellow
Inicializacin
LCD, I2C
Yellow
0
Si
Intercambiar V1 y V2
V2<V1
No
Mostrar V1 y V2
Control
Blue: On, Red: Off
1
SW
Programacin
0
Blue: Off, Red: On
Adquirir Vin
Mostrar Vin
Yellow: ON
Si
Adquirir Vin
No
V1<Vin<V2
No
Yellow: Off
Enter
Si
Adquirir Vin
No
Enter
Si
Intercambiar V1 y V2
Si
V2<V1
No
No
Enter
Si
Delay_ms(2000);
YELLOW = 0;
Lcd_Cmd(_LCD_CLEAR);
Soft_I2C_Init();
// initialize I2C communication
// ******* Lectura de V1 y V2 **************
Soft_I2C_Start();
// issue I2C start signal
Soft_I2C_Write(0xA0);
// Control
Soft_I2C_Write(0);
// Direccin 0 para V1
Soft_I2C_Start();
Soft_I2C_Write(0xA1);
// Control Lectura
VxL = Soft_I2C_Read(1);
// Lectura Byte bajo de V1 con ACK
VxH = Soft_I2C_Read(0);
// Lectura Byte alto de V1 sin ACK
Soft_I2C_Stop();
// issue I2C stop signal
Vin = VxH & 0x00FF;
Vin = Vin << 8;
// Desplazamiento del byte alto de V1
Vin = Vin | VxL & 0x00FF; // Mask para byte bajo y OR con byte alto
V1 = (float)Vin*5/1024;
Delay_ms(500);
//Pausa
Soft_I2C_Init();
// initialize I2C communication
Soft_I2C_Start();
// issue I2C start signal
Soft_I2C_Write(0xA0);
// Control
Soft_I2C_Write(2);
// Direccin 2 para V2
Soft_I2C_Start();
Soft_I2C_Write(0xA1);
// Control Lectura
VxL = Soft_I2C_Read(1);
// Lectura Byte bajo de V2 con ACK
VxH = Soft_I2C_Read(0);
// Lectura Byte alto de V2 sin ACK
Soft_I2C_Stop();
// issue I2C stop signal
Vin = VxH & 0x00FF;
Vin = Vin << 8;
// Desplazamiento del byte alto de V2
Vin = Vin | VxL & 0x00FF; // Mask para byte bajo y OR con byte alto
V2 = (float)Vin*5/1024;
// *** El siguiente if logra que V1 siempre sea la cota inferior y V2 la superior ***
if (V2 < V1)
{
Vchange = V1;
V1 = V2;
V2 = Vchange;
}
//
do
{
FloatTostr (V1,txt);
Lcd_Out(1,1,txt);
FloatTostr (V2,txt);
Lcd_Out(1,10,txt);
if (SW == 1) // *** Este es el ciclo de monitoreo y control
{
BLUE = 1;
RED = 0;
Vin = ADC_read(5);
Vinf = (float)Vin*5/1024;
FloatTostr (Vinf,txt);
Lcd_Out(2,1,txt);
V1 = (float)Vin*5/1024;
// Formato decimal de V1
// *** Dato 2
Lcd_Cmd(_LCD_CLEAR);
Lcd_Out(1, 1, "Pulse para prog. V2");
// Antirebote
do
{
Delay_ms(20);
} while (BOTON == 1);
do
{
Delay_ms(20);
} while (BOTON == 0);
// Fin antirebote
Vin = ADC_read(5);
// Lectura del dato
Vx = Vin;
VxL = Vin & 0x00FF;
VxH = (Vin & 0xFF00)>>8;
// Escritura I2C
Soft_I2C_Init();
// initialize I2C communication
Soft_I2C_Start();
// issue I2C start signal
Soft_I2C_Write(0xA0); // Control Escritura
Soft_I2C_Write(2);
// send byte (address of EEPROM location)
Soft_I2C_Write(VxL); // send data (data to be written)
Soft_I2C_Write(VxH);
Soft_I2C_Stop();
// issue I2C stop signal