Bom dia pessoal....
Funcionou no Proteus, quando fui para a protoboard nao funcionou, para debugar o código e saber até onde a inicialização estava chegando eu coloquei para piscar um led. No proteus funciona inclusive o "debug", já quando gravo (usando o pickit3) e coloco o pic na protobard o led do "debug" nao pisca, fica aceso direto. Meu conhecimento técnico de pic é muito baixo, eu nao faço a menor ideia do motivo, se puderem me ajudar mais uma vez fico agradecido.
Tem um detalhe, quando eu comento a interrupção (configuração do intcom o restante funciona porém, como é de se esperar, sem interrupção.
void main()
{
ADCON1 = 0b00001111;
TRISB = 0b11111111;
TRISD = 0b10000000; //d7 estou usando com input, para inicializar o RTC caso esta porta esteja em 5v, as demais como output
PORTB = 0;
PORTD = 0;
// ja tentei com essas duas formas de iniciliar o intcon
//INTCON = 0b11011000;
// INTCON2 = 0b11011000;
//INTCON3 = 0b11011000;
// INTCON = 0b11011000;
// INTCON2 = 0b11110101;
//INTCON3 = 0b11011110;
INT0F_bit = 0;
INT1F_bit = 0;
INT2F_bit = 0;
LATD6_bit = 1;
Delay_ms(1000);
LATD6_bit = 0;
Delay_ms(5000);
UART1_Init(9600);
Delay_ms(100);
LATD6_bit = 1;
Delay_ms(1000);
LATD6_bit = 0;
Delay_ms(5000);
I2C1_Init(100000); //inicia comunication i2c
//minute, hour, weekday, day, month, year (6 - Saturday)
if(RD7_bit == 1) { //se d7 estiver alta inicio o relógio e pisco o led d5
WriteTime(0,2,7,22,11,17);
LATD5_bit = 1;
Delay_ms(1000);
LATD5_bit = 0;
Delay_ms(5000);
}
LATD6_bit = 1;
Delay_ms(1000);
LATD6_bit = 0;
Delay_ms(5000);
Sound_Init(&PORTD, 4); // inicia o buzzer
init();
//Delay_ms(5000); //aguarda 5s para o arduino ficar pronto
LATD6_bit = 1;
Delay_ms(1000);
LATD6_bit = 0;
Delay_ms(5000);
while (1) {
...
}
void interrupt(){
if(INT0F_bit==1) { //botão mais
/* LATD0_bit = 0xFF;
Delay_ms(100);
LATD0_bit = 0x00; */
INT0F_bit = 0;
alterado = 1;
alterando = 1;
valor++;
if(tela == 6) {
exibindo = 0;
}
}
if(INT1F_bit == 1 ) { //botão Menu/ok
/* LATD1_bit = 0xFF;
Delay_ms(100);
LATD1_bit = 0x00; */
INT1F_bit = 0;
if(alterando) { //OK
gravar = 1;
exibindo = 1;
alterado = 1;
alterando = 0;
}else{//menu
exibindo = 1;
alterado = 1;
tela++;
}
}
if(INT2F_bit == 1 ) { // botao menos
/* LATD2_bit = 0xFF;
Delay_ms(100);
LATD2_bit = 0x00; */
INT2F_bit = 0;
valor--;
alterando = 1;
alterado = 1;
}
o esquema elétrico é o mesmo, porém adicionado outras coisas como i2c para o rtc, serial para trocar informações com um arduino e acionamento de relés