HOLA AMIGOS. ES MI PRIMERA VEZ CREANDO UN TEMA, NO LO HABÍA NECESITADO PORQUE INTERNET HABÍA SIDO MUY GENEROSO CONMIGO. PERO AGOTADO EL RECURSO GOOGLE...
...AQUÍ ME TIENEN ESPERANDO ALGUNA LÁGRIMA DE SUS SABIDURÍAS...
EL TEMA ES ESTE: ME DECIDÍ HACER UN SISTEMA DE CONTROL DE ACCESO RFID DE 125KHZ, HABIENDO LEIDO ATENTAMENTE LA NOTA DE APLICACIÓN DE CIKA, CON EL 12F629, TOMÉ EL BARCO SIN MAS QUE UN MODERADO CONOCIMIENTO DE ASM EN LA MALETA. TRAS PEDIR EN CIKA EL GP8F-R2, ME MANDARON EL GP8F-W5, Y SUPONIENDO QUE ERAN COMPATIBLES ME DI CUENTA DE ALGUNAS DIFERENCIAS QUE NO LOGRO DILUCIDAR COMPLETAMENTE.
HE AQUÍ EL MOTIVO DE ESTE APARTADO.
PARECE SER QUE EL W5 FUNCIONA CON 5V Y NO CON 12 COMO EL R2. CONEXIONÉ TODO SEGÚN LA NOTA DE APLICACIÓN, PERO A 5V PORQUE A 12V NO ANDA, Y LO ÚNICO QUE RECIBO CON CADENAS DE CEROS LÓGICOS(+5V), DESPUES DEL START, A 9600BPS.
¿SERÁ QUE LA "W" SIGNIFICA "WRITE"?
LO ÚNICO QUE CONSEGUÍ, Y EN TAIWANÉS (O CHINO, DE CUALQUIER MANERA NO ME QUEDA CLARO), ES LA IMAGEN QUE ADJUNTO AQUÍ ABAJO (EL DATASHEET ME LO DEBEN)
SI ALGUIEN FUERA TAN AMABLE DE ACLARARME UN POCO ESTE TEMA ESTARÉ MAS QUE AGRADECIDO.
SALUDO AFECTUOSO
LUCAS
Lucas, como andas, la W es de Wiegand 26, es el protocolo electrico que usa a la salida, es un estandar en los lectores de tags para control de accesos, basicamente se utilizan dos pines, uno envia la secuencia de "1" logicos y por el otro el tren de pulsos correspondientes a los "0" logicos que conforman el numero del tag o tarjeta, en total tendrás 26 bits. Ah, si es de 5V y no es a 9600bps, las lineas estan a nivel alto y bajan a 0 indicando el tipo de bit logico que te mencione antes, tenes que hacer la rutina en el micro para que detecte los pulsos bajos (en dos pines) y según baje uno u otro pin tenes "1" o "0", los encadenas como entraron y descartas el primer bit y el último que son de paridad, te quedan 24 bits, 8 bits altos del fabricante y 16 bits bajos del numero de tag o tarjeta.
Espero que te ayude y no confunda
Abajo te pego un código en "C" para HI-TECH que uso para leer esos lectores:
//**********************************************************************
// CARD TEST
#define CARDDETECT RB0
#define DATA0 RB1
#define DATA1 RB2
volatile bank2 WORD gwUserid;
bit ACCESO;
bit even;
bit odd;
bit indata;
volatile bank1 BYTE bcount;
volatile bank1 BYTE gbFacilitycode; // not used
#define PRO_TIMEOUT 0xFFFF
#define PRO_CODLENG 26
#define PRO_TOFAC 9
#define PRO_PAR 13
bit P_SER_IN(void)
{
WORD x;
static bit res;
// di(); // disable all interrupts
odd=0;
even=0;
bcount=0;
res = 0;
gbFacilitycode = 0;
gwUserid = 0;
x=100;
while( --x )
CLRWDT();
do { // read data
indata=(DATA1)?0:1;
// BITCELL TIMEOUT
x=PRO_TIMEOUT;
while( --x ) {
CLRWDT();
if( DATA1&&DATA0 ) break;
}
if(x==0) goto fin;
switch(bcount)
{
case 0:
case (PRO_CODLENG-1):
break;
default:
if( bcount < PRO_TOFAC ){
if( indata )
gbFacilitycode=(gbFacilitycode<<1)|0x01;
else
gbFacilitycode=(gbFacilitycode<<1)&0xFE;
} else {
if(indata)
gwUserid=(gwUserid<<1)|0x0001;
else
gwUserid=(gwUserid<<1)&0xFFFE;
}
} // switch
// Parity check
if( bcount < PRO_PAR ) // even
even^=indata;
else // odd
odd^=indata;
if( ++bcount > (PRO_CODLENG-1) ) break;
// SPACE TIMEOUT
x=PRO_TIMEOUT;
while( --x ) {
CLRWDT();
if( !DATA1 || !DATA0 ) break;
}
if(x==0) goto fin;
}while( bcount < PRO_CODLENG );
#ifdef WPAR
if( even ) goto fin;// even fail
if( !odd ) goto fin;// odd fail
#endif
res = 1;
fin:
x=100;
while( --x ) {
CLRWDT();
if( !DATA1 || !DATA0 ) x=100;
}
// ei();
return res;
} // P_SER_IN
//**********************************************************************
Saludos y suerte con el proyecto.