TODOPIC
Microcontroladores PIC => * PROYECTOS * => Mensaje iniciado por: clavo182 en 23 de Noviembre de 2015, 03:30:33
-
YA HACE COMO DOS SEMANAS QUE ANDO CON ESTE PROYECTO Y LA VERDAD ME HE ESTADO ROMPIENDO LA CABEZA PARA QUE FUNCIONE. Y NO HE LOGRADO PODER SIQUIERA SIMULARLO, AUNQUE LOS PROGRAMAS YA ME FUNCIONAN.
EL COMUNICACION DEL ESTA BASADA EL PROTOCOLO SPI (BIDIRECCIONAL) DE LOS PICS 16F877 (QUE LA MAYOR PARTE DEL TIEMPO ES RECEPTOR) Y EL 18F4550 (LA MAYOR PARTE TRANSMISOR).
LA COMUNICACION ES POR RADIOFRECUENCIA Y PARA ESTO USO EL TRANSCEPTOR NRF24L01 Y SU RESPECTIVA LIBRERIA. LA MANERA EN QUE FUNCIONA EL SISTEMA ES LA SIGUIENTE:
EL PIC 18F VA RECOLECTANDO TODO EL TIEMPO DATOS DE HUMEDAD, TEMPERATURA Y INTENSIDAD DE LUZ POR MEDIO DE SENSORES Y LOS MANDA AL PIC 16F, ESTE LOS RECEPCIONA Y LOS PROCESA (SE VA COMPARANDO CADA DATO CON UN RANGO DE VALORES), DEPENDIENDO DEL RESULTADO, ESTE TIENE QUE MANDAR UNA SEÑAL DE ACTIVACION DE LOS RESPECTIVOS ACTUADORES.
MUY APARTE DECIDI AÑADIRLE AL PIC 16F LA POSIBILIDAD DE MODIFICAR EL RANGO DE VALORES DE CADA DATO(HUMEDAD, TEMPERATURA E INTENSIDAD DE LUZ) POR MEDIO DE LA INTERRUPCION RB
MI PROBLEMA ES QUE NO HE PODIDO SIMULAR LA COMUNICACION Y ADEMAS NO ME FUNCIONA LA LA INTERRUPCION RB DEL PIC 16F, QUISIERA SABER DE ALGUIEN YA HAYA TENIDO ALGUNA EXPERIENCIA CON SPI Y ESTOS TRANCEPTORES
PD: ADJUNTO EL PROGRAMA EN C PARA AMBOS PICS Y LA SIMULACION (PROTEUS 8.1)
-
Intenta no escribir en mayusculas por favor. Podemos leerlo de la misma forma.
Consejo de mi parte, la simulacion es muy linda, pero olvidate de esto, aprende a programar sin simulacion, sino vas a estar toda tu vida atrapado en el Proteus, y cuando no puedas simular eso vas a morir ahi, es horrible cuando te acostumbras a eso y programas pensando en eso, total si le erras lo ves en el proteus, fin, pero cuando no lo tenes sea por lo que sea ahi tenes que buscarle otras formas. No recuerdo si el Proteus tiene un NRF24L01 como para "simularlo", y es algo que no vas a poder probar exactamente muy facil.
Para mi el SPI es maestro en ambos, nomas que se envia un dato para leer y/o escribir. Asi que queda descartado el conectar ambos PIC juntos. Sin los NRF.
ADEMAS NO ME FUNCIONA LA LA INTERRUPCION RB DEL PIC 16F,
Es mas que obvio que no te va a funcionar..
Jamas pero JAMAS pongas delays, while(), funciones de LCD, dentro de la interrupcion.
Ademas que hace lcd_init() y kbd_init() dentro de la interrupcion? cuando eso deberia estar en la parte de la configuracion antes del while del main. Ademas lo repetis muchisimas veces.. Cuando 1 sola ves donde dije bastaria.
Tu interrupcion es EXTREMADAMENTE larga.
Si.. Nada complejo ni que lleve tiempo en las interrupciones, es actuar rapido y salir. Asi debe ser una interrupcion.
Eso respecto a la interrupcion, Sobre el programa en si, solo con ver el de PIC16F veo DEMASIADOS while, cuando tal ves solo necesitarias creo que 1 solo ( el while(true) );
Y tambien Muchisimos delays por todos lados.
No es por nada pero:
hum=(int)((((float)read_adc())*0.02)+0.01)*20;
es igual a :
hum=(int)((((float)read_adc())*0.4)+0.2);
Y otra mas que encontre:
temp=(int)(((float)read_adc())*2);
Con que necesidad de pasarlo a float ? Era un simple:
temp=read_adc()*2;