

É o seguinte, eu criei um simples programinha no MikroC de um relógio. Na minha placa de experiência, ele funciona normalmente, mais no esquema do Proteus, não esta funcionando, aonde eu errei ?!?!? Não estou loxalizando !!!1
Segue codigo:
- Código: Selecionar todos
unsigned short horas,minuto,segundo;
unsigned short dia, mes, ano, dia_semana;
unsigned short var1, var2;
char *texto;
// Rotina de conversão de dados para BCD
void BCD(unsigned short lin, unsigned short col,unsigned short var) {
var1= (var >> 4) + 0x30; //converte o primeiro nibble em BCD e após em string
LCD_custom_Chr(lin,col,var1);//escreve caractere no LCD
var2= (var & 0x0F) + 0x30; //converte o segundo nibble em BCD e após isso, em string
LCD_custom_Chr_Cp(var2); //escreve caractere no LCD
}
void leitura_rtc() { //rotina de leitura do DS1307
I2C_Start(); //inicializa comunicação i2c
I2C_Wr(0xD0); //end fixo para DS1307: 1101000X, onde x = 0 é para gravação
I2C_Wr(0); //end onde começa a programação do relógio, end dos segundos.
I2C_Repeated_Start(); //Issue I2C signal repeated start
I2C_Wr(0xD1); //end fixo para DS1307: 1101000X, onde x=1 é para leitura
segundo= I2C_Rd(1); //lê o primeiro byte(segundos),informa que continua lendo
minuto= I2C_Rd(1); //lê o segundo byte(minutos)
horas= I2C_Rd(1); //lê o terceiro byte(horas)
dia_semana= I2C_Rd(1);
dia= I2C_Rd(1);
mes= I2C_Rd(1);
ano= I2C_Rd(0); //lê o sétimo byte(ano),encerra as leituras de dados
I2C_Stop(); //finaliza comunicação I2C
}
void grava_rtc(){
I2C_Init(100000);//iniciliza I2C com frequencia de 100KHz
I2C_Start(); //inicializa a comunicação I2c
I2C_Wr(0xD0); //end fixo para DS1307: 1101000X, onde x = 0 é para gravação
I2C_Wr(0); //end onde começa a programação do relógio, end dos segundos.
I2C_Wr(0x04); //inicializa com 04 segundos.
I2C_Wr(0x12); //inicializa com 12 minutos.
I2C_Wr(0x09); //inicializa com 09:00hs (formato 24 horas).
I2C_Wr(0x03); //inicializa com terça
I2C_Wr(0x17); //inicializa com dia 17
I2C_Wr(0x04); //inicializa com mês 04
I2C_Wr(0x07); //inicializa com ano 07
I2C_Stop(); //finaliza comunicação I2C
}
void encontra_dia_semana() {
switch (dia_semana) {
case 01: texto= "DOMINGO"; break; //caso dias_semana = 01 então..
case 02: texto= "SEGUNDA"; break; //caso dias_semana = 02 então..
case 03: texto= "TERCA"; break; //caso dias_semana = 03 então..
case 04: texto= "QUARTA"; break; //caso dias_semana = 04 então..
case 05: texto= "QUINTA"; break; //caso dias_semana = 05 então..
case 06: texto= "SEXTA"; break; //caso dias_semana = 06 então..
default: texto= "SABADO"; //se não for nenhum desses então...
}
}
void display_lcd() {
lcd_custom_cmd(lcd_clear); //apaga lcd
Lcd_Custom_Out(1,1,"(Hora)");
BCD(1,7,horas); //conversão da variável horas para BCD
LCD_custom_Chr_Cp(':'); //escreve no display LCD
BCD(1,10,minuto); //conversão da variável minuto para BCD
LCD_custom_Chr_Cp(':'); //escreve no display LCD
BCD(1,13,segundo); //conversão da variável segundo para BCD
Lcd_Custom_Out(2,1,"(Data)");
BCD(2,7,dia); //conversão da variável dia para BCD
LCD_custom_Chr_Cp('/'); //escreve no display LCD
BCD(2,10,mes); //conversão da variável mes para BCD
LCD_custom_Chr_Cp('/'); //escreve no display LCD
BCD(2,13,ano); //conversão da variável ano para BCD
encontra_dia_semana();
Lcd_Custom_out(3,1,texto); //mostra dia da semana
}
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);//config LCD no modo 4 bits
Lcd_custom_Cmd(Lcd_CLEAR); //apaga display
Lcd_custom_Cmd(Lcd_CURSOR_OFF); //desliga cursor
grava_rtc();
while(1){
display_lcd(); //escreve no display lcd o valor
leitura_rtc(); //efetua leitura de segundo, minuto e horas do DS1307
delay_ms(200); //delay de 200 milisegundos
}
}
Esquema do Proteus:

Esquema da Minha Placa de experiência:

Toda ajuda será bem vinda !!!!