Boa Tarde...
Não sei mais o que fazer....já procurei nos fórums...li...testei e nada adiantou até agora.
Troquei o DS, o cristal, tirei da placa coloquei no protoboard......
Vamos lá, vou descrever como estão as coisas aqui, estou usando MikroC.
- O DS está ligada à um PIC18F452.
- No protoboard está sem bateria, e o pino está aterrado, na placa de testes da microgenios está com bateria.
- Capacitor disco cerâmico de 100nF entre alimentação do DS.
- Resistores pull-up de 10k nos pinos RC3(SCL) e RC4(SDA).
- Carcaça do Cristal Aterrada.
Segue as Funções que estou usando:
- Código: Selecionar todos
//Função para converter BCD e mostrar no LCD.
void BCD(unsigned short x, unsigned short y,unsigned short var)
{
var1 = (var >> 4)+48; //converte 1º nibble em BCD, depois string
LCD_custom_Chr(x,y,var1); //escreve caractere no LCD
var2 = (var & 0x0F)+48; //converte 2º nibble em BCD, depois string
LCD_custom_Chr_Cp(var2); //escreve caractere no LCD
}
//Função de leitura do DS1307
void leitura_rtc()
{
I2C_Start(); //inicializa comunicação i2c
I2C_Wr(0xD0);//endereço do DS1307 acionado (0) para gravação
I2C_Wr(0x00);//endereço de inicio da programação, dos segundos.
I2C_Repeated_Start();// Issue I2C signal repeated start
I2C_Wr(0xD1);//endereço do DS1307 acionado (1) para leitura
segundo = I2C_Rd(1);//lê o 1º byte e avisa que iremos ler mais
minuto = I2C_Rd(1);//lê o 2º byte e avisa que iremos ler mais
hora = I2C_Rd(0);//lê o 3º byte horas e encerra as leituras de dados
I2C_Stop(); //finaliza comunicação I2C
}
//Função usada na inicialização do DS1307
void programa_i2c()
{
I2C_Init(100000); // iniciliza I2C com frequencia de 100KHz
delay_us(5);
I2C_Start(); //inicializa a comunicação I2C
I2C_Wr(0xD0);//endereço do DS1307 acionado (0) para gravação
I2C_Wr(0x00);//endereço de inicio da programação, dos segundos.
I2C_Wr(0x30);//inicia segundos, Bit 7 = 0, para ligar o cristal
I2C_Repeated_Start();// Repete Sinal de Start
I2C_Wr(0xD0);// Envia comando para modo de Escrita no RTC
I2C_Wr(0x07);// Posiciono no REG 7 - Registrador de Controle
I2C_Wr(0x80);// Desabilita pino de saída com frequencia ajustavel
I2C_Stop(); // Finaliza comunicação I2C
}
//Programa Principal
void main()
{
TRISD = 0; //define portd como saida
ADCON1 = 0x06;//torna todos os pinos AD como i/o de uso geral
Lcd_custom_Config(&PORTD,7,6,5,4,&PORTE,2,0,1); //configura e inicializa LCD no modo 4 bits
Lcd_custom_Cmd(Lcd_CLEAR); // apaga display
Lcd_custom_Cmd(Lcd_CURSOR_OFF); // desliga cursor
programa_i2c();
while(1) //inicializa loop
{
display_lcd(); //escreve no display lcd o valor
leitura_rtc(); //efetua leitura de segundo, minuto e horas do DS1307
delay_ms(1000); //gera delay de 1 segundo
}
}
Quando liga ele sempre aparece isso no LCD:
01:00:00 ------> depois -----> 3?:7?:50 e fica nisso
se eu desconecto do DS o pino RC4(SDA) aparece isso 00:00:50.....
Já estou ficando LOUCO.....não sei mais o que fazer.....pra esse negócio funcionar.....
Se alguém puder me ajudar......agradeço...
VALEWSSSSS......