TODOPIC
Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: dyevenez en 31 de Julio de 2013, 18:45:25
-
HOLA!
necesito ayuda urgente!!
Resulta que tengo conectado dos lectores RFID ID-12 a un PIC 16F88.... uno funciona con int_ext (B0) y el otro lo leo con el kbhit(stream) (puerto B6)
la cosa es que cuando los conecto de a 1 funciona de maravillas!! pero cuando le conecto los dos al PIC se traba!!! :(
no se que podra ser... tengo un LED que me da feedback y repito, de a 1 funciona bien y el led parpadea... pero con los 2 lectores conectado se traba... funciona 1 y el otro no, o al reves... !!
gracias
-
Cual es la distancia que tienes entre los lectores?
Podrias colocar tu codigo y tu esquematico?
Elreypic.
-
La distancia entre los lectores es de 30cm
una imagen del esquemático:
(http://img839.imageshack.us/img839/3475/ryc8.jpg)
Aparte también tengo un XBee y un reloj RTC conectados al PIC.
el código es harto... pero lo que considero importante sería esto:
#include <16f88.h>
#FUSES HS, NOWDT, NOBROWNOUT, NOLVP
#use delay(clock=20000000)
#use i2c(master, sda=pin_B1, scl=pin_B4 )
#use RS232 (BAUD =9600, PARITY = N, RCV = PIN_B2, XMIT = PIN_B5, BITS = 8, STREAM = COM_1) //xbee
#use RS232 (BAUD =9600, PARITY = N, RCV = PIN_B0, XMIT = PIN_B5, BITS = 8, STREAM = COM_2) //rfid1
#use RS232 (BAUD =9600, PARITY = N, RCV = PIN_B6, XMIT = PIN_B5, BITS = 8, STREAM = COM_3) //rfid2
#int_ext // interrupción del RFID 1
void ext_isr(){
byte_1=fgetc(COM_2); //comienza trama
byte_2=fgetc(COM_2);
byte_3=fgetc(COM_2);
byte_4=fgetc(COM_2);
byte_5=fgetc(COM_2);
byte_6=fgetc(COM_2);
byte_9=fgetc(COM_2); //se envia inicial
byte_10=fgetc(COM_2);
byte_11=fgetc(COM_2);
byte_12=fgetc(COM_2);
byte_13=fgetc(COM_2);
byte_14=fgetc(COM_2); //se envia final
byte_7=fgetc(COM_2);
byte_8=fgetc(COM_2);
byte_15=fgetc(COM_2);
byte_16=fgetc(COM_2);
interrupcion=1;
}
void rb_rfid(){
byte_1=fgetc(COM_3); //comienza trama
byte_2=fgetc(COM_3);
byte_3=fgetc(COM_3);
byte_4=fgetc(COM_3);
byte_5=fgetc(COM_3);
byte_6=fgetc(COM_3);
byte_9=fgetc(COM_3); //se envia inicial
byte_10=fgetc(COM_3);
byte_11=fgetc(COM_3);
byte_12=fgetc(COM_3);
byte_13=fgetc(COM_3);
byte_14=fgetc(COM_3); //se envia final
byte_7=fgetc(COM_3);
byte_8=fgetc(COM_3);
byte_15=fgetc(COM_3);
byte_16=fgetc(COM_3);
interrupcion=1;
}
void main(){
while(1){
if(kbhit(COM_3)){ //interrupcion del rfid2
rb_rfid();}
if(cont==0 && interrupcion==1){
cadena.cadena1[0]=byte_9;
cadena.cadena1[1]=byte_10;
cadena.cadena1[2]=byte_11;
cadena.cadena1[3]=byte_12;
cadena.cadena1[4]=byte_13;
cadena.cadena1[5]=byte_14;
get_time();
tiempo1 = sec + min*60 + hrs*3600;
cont=2;
interrupcion=0;
led();
}
}
tengo las variables declaras y todo ok en el código.......
dentro del while(1) pregunta si tiene algo para leer y luego pregunta por la variable "interrupcion"
-
ME FUNCIONOOOOOOOOOOOO!! :D :D
La técnica es agregar un capacitor electrolítico de 47uF al lector RFID entre VCC y GND
imagino que se hacían interferencia entre los dos lectores y con estos capacitores ya no lo hacen xD
-
Efectivamente, lo que faltaba era un capacitor electrolítico entre VDD y GND en cada lector. Justo eso te iba a sugerir, pero vi que inmediatamente colocaste tu solucion.
Felicidades,
Elreypic.
-
Jajaja gracias :D