Una vez comunicado el integrado podes cambiar la velocidad de transmision? Podrias usar un max232 para conectarlo a la PC, cambiar ese valor y despues conectarlo con el pic.
Suerte!
Claro, como dice Micro23 puedes configurar los registros tu mismo si no te lo permite.
Con los 20 MHz a alta velocidad SPBRG=79 y a baja SPBRG=19 como te indican y error 0 en cualquiera de los 2 8) Así que tendrías que definir los registros y listo.
Saludos!
:? Como has probado hasta ahora? Porque por lo que entiendo el PIC debe enviar un Byte de Inicio (0x01 o 0x81) y luego de terminada la transmisión el módulo envía el byte de diagnostico mientras TXCT este en 0 o después de 20 ms de cambio de fase.
Chulísimo como todo lo que haces, Nano. Enhorabuena.
Jeje, ¿y me das las gracias sin saber lo que significa "chulísimo"? :D
Tiene muchos significados, pero quédate con el 3º y 4º:
3. adj. Lindo, bonito, gracioso.
4. adj. Guat., Hond., Méx. y P. Rico. guapo (‖ bien parecido).
(http://img222.imageshack.us/img222/3871/yb641.gif) Grande Nano! Felicitaciones!
Saludos 8) :mrgreen:
Excelente ... vuelas con todo NANO ... genial.
Una pregunta: Porque el titileo de los LEDs de activo y no activo cuando el emisor RFID esta cerca a la antena? No se supondria que cuando el emisor esta ahi deberia quedar enclavado en el estado activo? o como funciona?
Saludos
Está estupendo, Nano. ¿A qué distancia los detecta?
Por cierto, ¿qué código aparece si le acercas al Ché? :D
:tongue: una vez mas: Genial NANO ....
hola nano estoy muy interesado en el lector, ya habia checado el circuito en la pag de TI, no se si puedas ayudarme, puedes enviarme el diagrama completo por correo (nachomtl@hotmail.com) te lo agradezco muchisimo si es me respondes, gracias. :lol:
hola nano estoy muy interesado en el lector, ya habia checado el circuito en la pag de TI, no se si puedas ayudarme, puedes enviarme el diagrama completo por correo (nachomtl@hotmail.com) te lo agradezco muchisimo si es me respondes, gracias. :lol:
Que tal, mi nombre es Francisco y buscando justo me encontre con tu post. Te comento que estoy con ganas de hacer un proyecto como el tuyo, pero no me puedo decidir si encararlo por el lado del tms3705 o con el em4095, se me complica elegir por el tema de la compatibilidad con las tarjetas, ando medio perdido. Por lo que lei el tms3705 funciona sobre FSK y el em4095 sobre OOK, pero cuando busco tarjetas nadie especifica esto, solo aclaran la frecuencia (la mayoria en 125khz). Asi que la pregunta es, ¿donde conseguiste vos las tarjetas que sean compatibles con el tms3705?, o como puedo saber si son compatibles, algun modelo en especial o algo? (Se que Texas las vende pero supongo que tendria que mandar a pedirlas a USA). Felicitaciones por el proyecto, muy bueno. Gracias
Muy bueno NAno, muy interesante... quizás si saco algo de tiempo, me plantearé hacer algo parecido :mrgreen:hola nano estoy muy interesado en el lector, ya habia checado el circuito en la pag de TI, no se si puedas ayudarme, puedes enviarme el diagrama completo por correo (nachomtl@hotmail.com) te lo agradezco muchisimo si es me respondes, gracias. :lol:
Ya puestos, podías pedirle unas PCBs hechas y con los componentes soldados y el código fuente¿no?
Te sería mejor comprar el Sample RF Module de TI
Salu2
Desde Sevilla (España) hasta Tucumán (Argentina) se debe oír el aplauso que en estos momentos te estoy enviando.
Enhorabuena, mis mas sinceras felicitaciones por tu saber y buen hacer. :mrgreen:
Queda claro una vez más la diversidad que ofrece este maravilloso arte que es la electrónica!!! Enhorabuena maestro! :)
/*
* Tablas de Lookup (parte alta y baja) para 4 bits por iteración.
*/
BYTE CONST CRC16_LookupHigh[16] = {
0x00, 0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70,
0x81, 0x91, 0xA1, 0xB1, 0xC1, 0xD1, 0xE1, 0xF1
};
BYTE CONST CRC16_LookupLow[16] = {
0x00, 0x21, 0x42, 0x63, 0x84, 0xA5, 0xC6, 0xE7,
0x08, 0x29, 0x4A, 0x6B, 0x8C, 0xAD, 0xCE, 0xEF
};
/*
* Registro del CRC de 16 bits, implementado como 2 valores de 8 bits cada uno.
*/
unsigned int8 CRC16_High, CRC16_Low;
/*
* Antes de comenzar el calculo de un nuevo valor de CRC se debe
* inicializar el valor de Registro de CRC llamando a esta función.
*/
void CRC16_Init( void )
{
// Inicializa el CRC a 0xFFFF (según esecificación del CCITT)
CRC16_High = 0xFF;
CRC16_Low = 0xFF;
}
/*
* Procesa 4 bits del mensaje para actualizar el valor del CRC.
*
* Notar que los datos deben estar en el nibble bajo de val.
*/
void CRC16_Update4Bits( unsigned int8 val )
{
unsigned int8 t;
// Paso uno, extraer los 4 bits más significativos del registro CRC
t = CRC16_High >> 4;
// Realizar la XOR entre los datos y los bits extraidos
t = t ^ val;
// Desplazar el registro CRC 4 bits a la izquierda
CRC16_High = (CRC16_High << 4) | (CRC16_Low >> 4);
CRC16_Low = CRC16_Low << 4;
// Buscar el valor en las tablas de lookup y hacer la XOR con el CRC
CRC16_High = CRC16_High ^ CRC16_LookupHigh[t];
CRC16_Low = CRC16_Low ^ CRC16_LookupLow[t];
}
/*
* Procesa un mensaje de un byte para actualizar el valor del CRC actual.
*/
void CRC16_Update( unsigned int8 val )
{
CRC16_Update4Bits( val >> 4 ); // Primero el nibble alto
CRC16_Update4Bits( val & 0x0F ); // Luego el nibble bajo
}hola nano ya estoy trabajando en el proyecto pero tengo una duda respecto al circuto del lector que diseñaste, lo explico en la siguiente figura:
Claro que nos gusta, Nano, felicidades.
¿Dónde está escondido el 7805, en la cara de abajo?
A de ser D-PACK no?
Saludos
NANO estuve leyendo tu artículo y la única pregunta que te tengo es como haces para rendir en la universidad y al mismo tiempo para hacer tus proyectos. Yo lo he intentado y no soy capaz cual es el truco?
PD: Te felicito te quedo muy vacano el proyecto.
Y con respecto al diseño del pcb, lo hiciste en eagle? como hiciste para q te ponga las patitas del pic al reves?
Nano, te felicito por el proyecto!!! (aunq creo q te felicite unas paginas arriba jeje). Tengo una pregunta con respecto a la soldadura de los componentes. Tenes algun soldador especial para ello? porq no me imagino como soldaste el cuarzo y los capacitores electroliticos.. hay muy pocos espacios en la placa O.o
Y con respecto al diseño del pcb, lo hiciste en eagle? como hiciste para q te ponga las patitas del pic al reves?
saludos!!
Por mi parte tengo muchas dudas!!! :shock: porque tambien estoy tratando de comprender el funcionamiento del CI ?
consulta? por la lectura de la hoja de datos... cuando salen los datos por el terminal RXOUT estan invertidos y
tambien a su ves estan invertidos en el orden? ejemplo dato en la salida del RXOUT =b'11101100'
a este dato lo tengo que convertir asi = b'00010011' y luego =b'11001000' ,esto es lo que interpreto de la hoja
de datos esto esta bien? :shock: gracias de antemano por la ayuda
Saludos
otro tema que no tengo del todo claro es como alterna el TMS3705 sus propios datos con los del transponder que se lee?
Saludos!!!
Hola! lo decia por si el CI al leer los bytes los envia a su salia con un formato digamos una secuencia establecida
que alterne por ejemplo con un byte start cada tantos bytes de datos o algo por el estilo.. pero esta ahora no encontre
nada que me diga que haga eso el TMS3705... :shock: asi que voy a seguir trabajando con los datos a ver como hago para que me den las cuentas :shock:
Saludos!!! :-/
Solo tengo 2 tarjetas tipo de credito ,tienen el doble de espesor de una de estas.
quizas mas adelante siga con este tema ,cuando encuentre una aplicacion donde
darle una utilidad ,ahora estoy con un acelerometro! :shock:
Saludos!!!
#include <18F4550.h>
#fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN
#use delay(clock=48000000)
#USE RS232(BAUD=15625, XMIT=PIN_C6, RCV=PIN_C7, STREAM=RFID)
#USE RS232(BAUD=19200, XMIT=PIN_B7, RCV=PIN_B6, STREAM=PC)
//#use standard_io(C)
#define USB_HID_DEVICE FALSE //deshabilitamos el uso de las directivas HID
#define USB_EP1_TX_ENABLE USB_ENABLE_BULK //turn on EP1(EndPoint1) for IN bulk/interrupt transfers
#define USB_EP1_RX_ENABLE USB_ENABLE_BULK //turn on EP1(EndPoint1) for OUT bulk/interrupt transfers
#define USB_EP1_TX_SIZE 1 //size to allocate for the tx endpoint 1 buffer
#define USB_EP1_RX_SIZE 1 //size to allocate for the rx endpoint 1 buffer
#include <pic18_usb.h> //Microchip PIC18Fxx5x Hardware layer for CCS's PIC USB driver
#include <PicUSB.h> //Configuración del USB y los descriptores para este dispositivo
#include <usb.c> //handles usb setup tokens and get descriptor reports
char Dato=0; // *Rec;
unsigned char Mje_ini[] = "Inicia";
unsigned char Mje_AntOK[] = "Antena Sintonizada!";
unsigned char Mje_AntNOP[] = "Error en antena!";
char Configuracion;
main() {
setup_uart(false,RFID);
delay_ms(1000);
SET_TRIS_C(0xBF);
output_bit( PIN_C6, 1);
delay_ms(2000);
//Soft_Uart_Init(PORTB, 0, 1, 19200, 0); // PC <----> uC 19200baudios //
fprintf(PC,"Iniciando...\n"); //Text_To_Usart(Mje_ini); // muestra en el terminal de la Pc el mje "inicia"
//lo que me indica que el puerto funciona correctamente
//////////////////////////// INICIA CONFIGURACION DEL TMS3705 //////////
output_bit( PIN_C6, 0); //PORTC.F6=0; // baja linea TX
delay_us(50);//delay_us(50); // 50us pasa al modo IDLE
output_bit( PIN_C6, 1); //PORTC.F6=1; // levanta linea TX
delay_us(2050);// espera el Tinit = 2.05ms o 2050uS
output_bit( PIN_C6, 0);
//Usart_Init(15625); // inicializa usart uC <---> RFiD a 15625 Baudios
//--------------------------------------------------------------------
delay_us(2700); //2140
setup_uart(true,RFID);
//set_uart_speed(15625,RFID);
Configuracion=0x81;
fprintf(PC,"variable:%x\n\r",Configuracion);
DB: //fprintf(RFID,Configuracion); //Usart_Write (0b10000001); // manda configuracion
fprintf(PC,"Esperando Byte de diagnostico\n");
while (kbhit(RFID)==0) // espera byte de diagnostico
{
// fprintf(compu,"*"); //PORTC.F0=1; // enciende led rojo que indica la espera
//PORTC.F1=0; // mas que nada, es un indicador
}
Dato=fgetc(RFID);//Dato = Usart_Read();
fprintf(PC,"\n Byte de diagnostico:");
fprintf(PC,"%x \n",Dato);//Soft_Uart_Write(Dato); // manda el dato leido a la PC
if (Dato==0xAF)
{
fprintf(PC,"Dato leido Correctamente!!!...");//PORTC.F0=0;
//PORTC.F1=1; //enciende led verde como indicador
}
else {
goto DB; //si no es el caracter esperado vuelve
}
delay_us(49360); //retardo de aproximadamente 50uS
//Usart_Init(15625); //habilita el puerto serie nuevamente
output_bit( PIN_C6, 1); //PORTC.F6=1; //coloca en 1 la linea TX
////ESPERA LA TRAMA DE DATOS Y MANDA POR EL PUERTO SERIE EMULADO EN EL PORTB ///
fprintf(PC,"Esperando Codigo de Tarjeta");
TD: while (kbhit()==0)
{
fprintf(PC,"."); //PORTC.F0=1;
//PORTC.F1=0;
}
// PORTC.F0=0; led
// PORTC.F1=1;
Dato=fgetc(RFID); //Dato = Usart_Read();
fprintf(PC,"Codigo de Tarjeta:");
fprintf(PC,"%x",Dato); //Soft_Uart_Write(Dato); // manda datos a la pc
goto TD;
for ( ; ; );
}
NANO te hago una consulta... porq abri un foro por el problema del CCS y me dicen q es normal q se ponga en 1 el TX del serie por Hard...
y me dicen q si no quiero q se ponga en 1 que use el serie por soft... lo q no entiendo es como haces entonces vos... porq supuestamente el RFID si lo lees con el puerto serie por HARD o me equivoco???
por ejemplo, cuando uno crea un nuevo puerto en dos pines cualquiera del micro, y lo inicializamos, despues no se puede deshabilitar, es decir que los pines quedan inicializados con la funcionalidad asignada y por ende no podemos controlar el estado de los pines... es por ese motivo que preferí utilizar la USART del micro para comandar el TMS3705Porque razón no se pueden controlar los pines? :?:
[code]
'PIC 18F452
'Oscilador de 20Mhz
'Oscilador del TMS3705 de 4Mhz, Xtal, no resonador
DEFINE LOADER_USED 1
define OSC 20
'Definición Hyperterminal
' Set receive register to receiver enabled
DEFINE HSER_RCSTA 90h
' Set transmit register to transmitter enabled
DEFINE HSER_TXSTA 24h
' Set baud rate
DEFINE HSER_BAUD 9600
' Set SPBRG directly (normally set by HSER_BAUD)
'DEFINE HSER_SPBRG 19
ADCON1 = 7 ' Set PortA and E to digital operation
'Def. Puertos
'Comunicación micro RFID
txct var porte.1
scio var porte.0
'Led de aviso
led_wait var portb.7
led_accept var portb.6
'Variables
dato var byte[14]
diagnostico var BYTE
i var byte 'contador
'Constantes
config con %10000001 'Palabra de configuración TMS3705
input SCIO
pause 1000
'Limpia buffer de datos
'FOR I = 0 TO 14
' DATO[I]=1
'NEXT
I = 0
'diagnostico = 1
LOW led_wait
LOW led_accept
PAUSE 150
hserout ["INICIO PROGRAMA",13,10]
HIGH txct
INICIO:
hserout ["INICIO CONFIGURACION",13,10]
LOW TXCT
PAUSEUS 49
HIGH txct
PAUSEUS 2049
LOW TXCT
' pauseUS 2140 'Tiempo de espera del Bit de diagnostico
gosub rx
' DEBUGin 500,INICIO,[hex diagnostico]
hserout ["DIAGNOSTICO: ",HEX2 diagnostico,13,10]
GOTO INICIO
Rx:
while scio = 0
wend
IF SCIO = 1 THEN 'Bit de inicio
PAUSEUS 32
IF SCIO = 1 THEN 'AntiDebounce
PAUSEUS 64
if scio = 1 then
diagnostico.7 = 1
else
diagnostico.7 = 0
endif
PAUSEUS 64
if scio = 1 then
diagnostico.6 = 1
else
diagnostico.6 = 0
endif
PAUSEUS 64
if scio = 1 then
diagnostico.5 = 1
else
diagnostico.5 = 0
endif
PAUSEUS 64
if scio = 1 then
diagnostico.4 = 1
else
diagnostico.4 = 0
endif
PAUSEUS 64
if scio = 1 then
diagnostico.3 = 1
else
diagnostico.3 = 0
endif
PAUSEUS 64
if scio = 1 then
diagnostico.2 = 1
else
diagnostico.2 = 0
endif
PAUSEUS 64
if scio = 1 then
diagnostico.1 = 1
else
diagnostico.1 = 0
endif
PAUSEUS 64
if scio = 1 then
diagnostico.0 = 1
else
diagnostico.0 = 0
endif
endif 'Final antidebounce
endif 'Final If Bit de inicio
return [/code]
buenas muchachos... luego de rendir en la facultad y de tener algo de tiepo libre,... (no mas de un par de días)... me puse en el trabajito que tenía pendiente....
ensamblar un lector RFiD utilizando el controlador TMS3705, ya tengo varios tags de lectura, como ser tarjetas, llaveros, pequeñas capsulas de vidrio, botones con agujero pasante, etc... asi que ahora lo que hice fue, el diseño de la PCB y la antena que energiza y recibe los datos del transponder, el mismo resuena a una frecuencia de 134Khz aproximadamente
La antena la fabriqué de acuerdo a las especificaciones de los amigos de TI,... 440uHy y un Q>=30... por lo que el Medidor LC (http://www.todopic.com.ar/foros/index.php?topic=26840.0) me vino de 10 para armarlas y controlar su correcto valor...
la forma plástica la fabriqué con un caño de PCB de bajada de agua... es un plástico muy maleable, el mismo lo corté de 10mm de espesor y con una amoladora de banco fuí dejándo mas parejo su perfil,... luego con un minitorno y una fresa, hice un pequeño canal en toda la periferia, para que al bobinar, todas las espiras queden dentro de la pieza plástica.... y finalmente coloqué unos postes machos, donde soldé los hilos conductores de la antena... (el valor final de 55 vueltas de alambre esmaltado de 0.18mm - 439,45uHy Q=32,1)
bueno acá un par de fotos que hablan por si solas....
(http://img41.imageshack.us/img41/7196/0803085438.jpg)
(http://img136.imageshack.us/img136/9837/0803085522.jpg)
(http://img146.imageshack.us/img146/9534/0803090841.jpg)
ahora voy por unos capacitores del circuito resonante,... los mismos deben ser lo más precisos posibles, para lograr una frecuencia de enlace correcta para los tranponders...
SAludos y espero que les guste.- 8)
DEFINE LOADER_USED 1
'Definición Hyperterminal
' Set receive register to receiver enabled
DEFINE HSER_RCSTA 90h
' Set transmit register to transmitter enabled
DEFINE HSER_TXSTA 24h
' Set baud rate
DEFINE HSER_BAUD 9600
ADCON1 = 7 ' Set PortA and E to digital operation
'Def. Puertos
'Comunicación micro RFID
txct var porte.1
scio var porte.0
sw var porta.0
'Led de aviso
led_wait var portb.7
led_accept var portb.6
'Variables
dato var byte[24]
diagnostico var BYTE
i var byte 'contador
'Constantes
'config con %10000001 'Palabra de configuración TMS3705
'symbol modo = 8236
symbol modo =24620
'input SCIO
'OUTPUT TXCT
pause 1000
'Limpia buffer de datos
FOR I = 0 TO 24
DATO[I]=$00
NEXT
I = 0
diagnostico = $00
LOW led_wait
LOW led_accept
PAUSE 150
hserout ["INICIO PROGRAMA",13,10]
HIGH txct
INICIO:
'if sw == 1 then
diagnostico = $00
hserout ["INICIO CONFIGURACION",13,10]
LOW TXCT 'Tx en bajo
PAUSEUS 50 'Paso a modo IDLE
HIGH txct 'Tx en alto
PAUSEUS 2050 'espera el Tinit = 2.05ms o 2050uS
LOW TXCT 'baja linea TX
lectura:
HIGH led_wait
gosub tx
LOW TXCT
gosub rx
hserout ["DIAGNOSTICO: ",hex diagnostico,13,10]
IF DIAGNOSTICO = $50 THEN
LOW led_wait
HIGH led_accept
pauseus 49360
high txct
serin2 scio,modo,500,lectura,[str dato\15\13]
hserout ["SALIO ",13,10]
low led_wait
hserout ["DATOS TAG: ",13,10]
for i = 0 to 24
hserout [#I," ", HEX2 DATO[I],10]
PAUSE 150
next i
hserout [13]
FOR I = 0 TO 24 'limpio el registro
DATO[I]=$00
NEXT I
else
low led_accept
endif
pause 1000
diagnostico = $00
GOTO lectura
'****************************Fx hecha por hard**********************************
Rx:
serin2 scio,modo,[diagnostico]
return
Tx:
serout2 txct,modo,[%10000001]
return
Que tal amigos del foro.
He estado muy ocupado trabajando en otros asuntos así que no había podido escribir nada, ya tengo mi código funcionando, está en picbasic pro, la antena siempre estuvo funcionando, puedo leer los tags, claro está que el alcance es muy pobre, me da alrededor de 10 cm, mas allá de eso no lee.
bueno aquí está el código, espero si alguien ya trabajó con la parte de escritura, por favor me ayuden.Código: [Seleccionar]DEFINE LOADER_USED 1
'Definición Hyperterminal
' Set receive register to receiver enabled
DEFINE HSER_RCSTA 90h
' Set transmit register to transmitter enabled
DEFINE HSER_TXSTA 24h
' Set baud rate
DEFINE HSER_BAUD 9600
ADCON1 = 7 ' Set PortA and E to digital operation
'Def. Puertos
'Comunicación micro RFID
txct var porte.1
scio var porte.0
sw var porta.0
'Led de aviso
led_wait var portb.7
led_accept var portb.6
'Variables
dato var byte[24]
diagnostico var BYTE
i var byte 'contador
'Constantes
'config con %10000001 'Palabra de configuración TMS3705
'symbol modo = 8236
symbol modo =24620
'input SCIO
'OUTPUT TXCT
pause 1000
'Limpia buffer de datos
FOR I = 0 TO 24
DATO[I]=$00
NEXT
I = 0
diagnostico = $00
LOW led_wait
LOW led_accept
PAUSE 150
hserout ["INICIO PROGRAMA",13,10]
HIGH txct
INICIO:
'if sw == 1 then
diagnostico = $00
hserout ["INICIO CONFIGURACION",13,10]
LOW TXCT 'Tx en bajo
PAUSEUS 50 'Paso a modo IDLE
HIGH txct 'Tx en alto
PAUSEUS 2050 'espera el Tinit = 2.05ms o 2050uS
LOW TXCT 'baja linea TX
lectura:
HIGH led_wait
gosub tx
LOW TXCT
gosub rx
hserout ["DIAGNOSTICO: ",hex diagnostico,13,10]
IF DIAGNOSTICO = $50 THEN
LOW led_wait
HIGH led_accept
pauseus 49360
high txct
serin2 scio,modo,500,lectura,[str dato\15\13]
hserout ["SALIO ",13,10]
low led_wait
hserout ["DATOS TAG: ",13,10]
for i = 0 to 24
hserout [#I," ", HEX2 DATO[I],10]
PAUSE 150
next i
hserout [13]
FOR I = 0 TO 24 'limpio el registro
DATO[I]=$00
NEXT I
else
low led_accept
endif
pause 1000
diagnostico = $00
GOTO lectura
'****************************Fx hecha por hard**********************************
Rx:
serin2 scio,modo,[diagnostico]
return
Tx:
serout2 txct,modo,[%10000001]
return
Bueno, utilizé el 18F452 a 4Mhz y la antena que aparece en el application note. Y el crédito claro está lo tiene NANO, pues me basé en su firmware para hacer el mio, mis agradecimientos a el.
Que tal amigos del foro.
He estado muy ocupado trabajando en otros asuntos así que no había podido escribir nada, ya tengo mi código funcionando, está en picbasic pro, la antena siempre estuvo funcionando, puedo leer los tags, claro está que el alcance es muy pobre, me da alrededor de 10 cm, mas allá de eso no lee.
bueno aquí está el código, espero si alguien ya trabajó con la parte de escritura, por favor me ayuden.Código: [Seleccionar]DEFINE LOADER_USED 1
'Definición Hyperterminal
' Set receive register to receiver enabled
DEFINE HSER_RCSTA 90h
' Set transmit register to transmitter enabled
DEFINE HSER_TXSTA 24h
' Set baud rate
DEFINE HSER_BAUD 9600
ADCON1 = 7 ' Set PortA and E to digital operation
'Def. Puertos
'Comunicación micro RFID
txct var porte.1
scio var porte.0
sw var porta.0
'Led de aviso
led_wait var portb.7
led_accept var portb.6
'Variables
dato var byte[24]
diagnostico var BYTE
i var byte 'contador
'Constantes
'config con %10000001 'Palabra de configuración TMS3705
'symbol modo = 8236
symbol modo =24620
'input SCIO
'OUTPUT TXCT
pause 1000
'Limpia buffer de datos
FOR I = 0 TO 24
DATO[I]=$00
NEXT
I = 0
diagnostico = $00
LOW led_wait
LOW led_accept
PAUSE 150
hserout ["INICIO PROGRAMA",13,10]
HIGH txct
INICIO:
'if sw == 1 then
diagnostico = $00
hserout ["INICIO CONFIGURACION",13,10]
LOW TXCT 'Tx en bajo
PAUSEUS 50 'Paso a modo IDLE
HIGH txct 'Tx en alto
PAUSEUS 2050 'espera el Tinit = 2.05ms o 2050uS
LOW TXCT 'baja linea TX
lectura:
HIGH led_wait
gosub tx
LOW TXCT
gosub rx
hserout ["DIAGNOSTICO: ",hex diagnostico,13,10]
IF DIAGNOSTICO = $50 THEN
LOW led_wait
HIGH led_accept
pauseus 49360
high txct
serin2 scio,modo,500,lectura,[str dato\15\13]
hserout ["SALIO ",13,10]
low led_wait
hserout ["DATOS TAG: ",13,10]
for i = 0 to 24
hserout [#I," ", HEX2 DATO[I],10]
PAUSE 150
next i
hserout [13]
FOR I = 0 TO 24 'limpio el registro
DATO[I]=$00
NEXT I
else
low led_accept
endif
pause 1000
diagnostico = $00
GOTO lectura
'****************************Fx hecha por hard**********************************
Rx:
serin2 scio,modo,[diagnostico]
return
Tx:
serout2 txct,modo,[%10000001]
return
Bueno, utilizé el 18F452 a 4Mhz y la antena que aparece en el application note. Y el crédito claro está lo tiene NANO, pues me basé en su firmware para hacer el mio, mis agradecimientos a el.
Hola!
Un saludo para todos los amigos del foro Todopic que siguen este hilo!
Solo quiero aprovechar esta oprtunidad para comentarles que ademas de realizar el calculo del CRC de la informacion procedente de los TAG ya logre hacer funcionar la programcion de los mismos... fue mas complicado lograr comunicarme con el READER a travez del PIC que el hecho de programar los tag!
Ahora si este proyecto esta finalizado.
TENGO UN LECTOR/PROGRAMADOR DE TAG'S RFID! :) :o :lol: ;-) 8)
buenas.... acá les dejo un corto video del funcionamiento... donde detallo a grandes rasgos las parte del proyecto...
espero que les guste...
las tramas obtenidas que se mencionan en el video son las siguientes...
KEYRINGS (llavero)
(0xAF) 0xFD 0xFF 0xCF 0x9E 0x48 0xF1 0xF1 0xF1 0xFB 0xCF 0x8D 0xFD 0xF1
GLASS 23MM (capcula de vidrio)
(0xAF) 0xFD 0xAE 0x58 0xCA 0x48 0xF1 0xF1 0xF1 0xFB 0x6E 0xC8 0xFD 0xF1
BOTON (botón de 25mm de diametro)
(0xAF) 0xFD 0xE8 0x1A 0xEF 0x48 0xF1 0xF1 0xF1 0xF1 0xF3 0x9F 0xFD 0xF1
INLAY 24MM (bobina plana de 24mm)
(0xAF) 0xFD 0x8E 0x5E 0xEE 0x48 0xF1 0xF1 0xF1 0xF1 0xFB 0x3F 0xFD 0xF1
donde se vé que el primer byte comun para todas las tramas (0xAF) es el byte de diagnóstico, donde el controlador de antena nos informa el perfecto funcionamiento.
el byte que le sigue es el 0xFD que es el start byte,... y se repite luego de 10 caracteres más un stop byte igual....
saludos! 8)
WORD RFID::nCrC(BYTE* datos)
{
WORD crc = 0xFFFF; // initial value
WORD polynomial = 0x1022; // 0001 0000 0010 0001 (0, 5, 12)
bool a, c15;
for (BYTE j = 0; j < 9; j++)
{
for (int i = 0; i < 8; i++) {
a = ((datos[j] >> (7-i) & 1) == 1);
c15 = ((crc >> 15 & 1) == 1);
crc <<= 1;
if (c15 ^ a) crc ^= polynomial;
}
}
crc &= 0xffff;
return crc;
}