Como sabem não programa µc em linguagem C mas sei que muitos aqui podem ajudar.
A rotina é essa:
- Código: Selecionar todos
#include <16f628a.h>
#device ADC=10
#use delay (clock=8000000)
#define use_portb_lcd true
//#include <cuscostdio.h>
#use i2c(MASTER, SDA=PIN_B4, SCL=PIN_B3)//habilita comunicação i2c
#use RS232(baud=9600, parity=E, bits=8, xmit=PIN_B2,rcv=PIN_B1)//habilita comunicação serial RS-232
#define EEPROM_WRITE_ADDRESS 0xA4
#define EEPROM_READ_ADDRESS 0xA5
void main()
{
int num, hora, mim, seg, dia, mes, ano;
long j = 0;
int16 add = 0;
printf ("\n\rMECTRON AUTOMACAO INDUSTRIAL\n\rwww.mectron.ind.br");
while (1)
{
i2c_start();
i2c_write(EEPROM_WRITE_ADDRESS);
i2c_write(add >> 8);
i2c_write(add);
i2c_start();
i2c_write(EEPROM_READ_ADDRESS);
num = i2c_read();
hora = i2c_read();
mim = i2c_read();
seg = i2c_read();
dia = i2c_read();
mes = i2c_read();
ano = i2c_read(0);
i2c_stop();
j++;
if (((j % 4) == 0) && (j != 0))
{
add = 32 * (j / 4);
}
else
{
add += 7;
}
if ((num == 0xFF) && (hora == 0xFF))
{
add = 0;
j = 0;
}
if ((add != 0) && (j != 0))
{
printf ("\n\r%d - hora: %02d: %02d: %02d - data: %02d/ %02d/ %02d", num, hora, mim, seg, dia, mes, ano);
}
else
{
printf ("\n\rMECTRON AUTOMACAO INDUSTRIAL\n\rwww.mectron.ind.br");
}
}
}
Segundo ele não funcionou,veja se estou errado mas o endereçamento não seria:
- Código: Selecionar todos
#define EEPROM_WRITE_ADDRESS 0xA0
e
- Código: Selecionar todos
#define EEPROM_READ_ADDRESS 0xA1
Segundo ele estou errado e a rotina funciona em um PIC 40.
quem puder ajudar agradeço pois posso estar enganado tambem.
Aqui esta a biblioteca que ele fez:
- Código: Selecionar todos
#define SCL PIN_B3
#define SDA PIN_B4
void i2cWrite(int8 cmd)
{
int8 i;
int8 send;
short ack;
send = cmd;
do
{
for(i=0;i<=7;++i)
{
output_bit(SDA, shift_right(&send,1,0) );
output_high(SCL);
output_low(SCL);
}
output_high(SCL);
ack = input(SDA);
output_low(SCL);
}while (ack == 0);
}
int8 i2cRead(short cmd)
{
int8 i,data;
for(i=0;i<=7;++i) {
shift_right(&data,1,input(SDA));
output_high(SCL);
delay_us(2);
output_low(SCL);
delay_us(2);
}
i2cWrite(cmd);
return(data);
}
void i2cStart()
{
output_high(SCL);
output_low(SDA);
output_low(SCL);
}
void i2cStop()
{
output_low(SDA);
output_high(SCL);
output_high(SDA);
output_float(SCL);
output_float(SDA);
}