Haz una pregunta
  Foros de Electrónica » Principiantes » Cuestiones Elementales de Electrónica
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

28/07/2011 #1


Problema con un Lector RFID wiegand26
Buenas, resulta que me he estado cabeceando para poder leer tarjetas y tag RFID con un lector RFID que tiene salida Wiegand26, (esto lo tengo conectado a un PIC18F1320), coo no he encontrado mucha info sobre la conexion del hardware ( o sea como conectar el lector al PIC) medi los pines de datos, y como mientras no hay lectura ambas lineas de datos (D0 y D1) estan en estado logico alto, y efectivamente estaban en 5 v, por lo que los conecte directo al PIC (data0 a la INT0 que en este pic es el pin RB0, y la data1 a la INT2 que en este pic esta en el pin RB2), hice una rutina pequeña, solo quiero leer la tarjeta (y para poder mostrar sin LCD ni nada, separo en 3 bytes el codigo que (supuestamente estoy leyendo) que es un longword (si no me equiboco), pero solo me lee ceros, y me muestra ceros (esto lo se por que despues de leer y separar el codigo lo escribi a la eeprom del pic y despues lo lei del PC)...mucho blba bla no?? bueno este es el codigo que estaba haciendo. cualquier ayuda sera bienvenida. (esta escrito en mikrobasic)

program Comunicacion_vRFID_wiegand26
dim tarjeta_leida, FC, D1, D2, B, i as byte
'dim codigo as longint
'################################################# #########
'### ################
'### Procedimiento que me devuelve FC, D1 y D2 ################
'### a partir de la variable codigo ################
'### ################
'################################################# #########
sub procedure arreglo_codigo (dim codigo as longword)
dim n, i, primer_dato, B as byte
'for i = 0 to 7 '<--
' if codigo.i = 1 then ' \
' FC.i = codigo.i ' \ FC <- este fue el primer intento de lectura
' end if ' \
'next i '<--
FC = Lo(codigo) ' <----este fue el segundo

'for i = 8 to 15 '<--
' if codigo.i = 1 then ' \
' n = i-8 ' \ D1
' D1.n = codigo.i ' \
' end if ' \
'next i '<--
D1 = hi(codigo)

'for i = 16 to 23 '<--
' if codigo.i = 1 then ' \
' n = i-16 ' \ D2
' D2.n = codigo.i ' \
' end if ' \
'next i '<--
D2 = higher(codigo)

tarjeta_leida = 1
primer_dato = 0
B = 0
codigo = $0000
end sub
'################################################# ##############################
sub procedure Interrupt
dim primer_dato, B, FC, D1, D2, tarjeta_leida as byte
dim codigo as longword
clearbit(INTCON, 7) 'deshabilito interrupciones globales
clearbit(INTCON, 4) 'deshabilito interrupciones int0
clearbit(intcon3, 4) 'deshabilito interrupciones int2

if TestBit(INTCON, INT0IF) = 1 then ' si es data 0 INT0 (RB0)
if primer_dato = 0 then
primer_dato = 1
B = $00
goto Fin_Interrupcion
else
codigo.B = 0
INC(B)
if B = 23 then
arreglo_codigo(codigo)
goto Fin_Interrupcion
else
goto Fin_Interrupcion
end if
end if
else

if TestBit(INTCON3, INT2IF) = 1 then ' si es data 1 INT2 (RB2)
if primer_dato = 0 then
primer_dato = 1
B = $00
goto Fin_Interrupcion
else
codigo.B = 1
INC(B)
if B = 23 then
arreglo_codigo(codigo)
goto Fin_Interrupcion
else
goto Fin_Interrupcion
end if
end if
end if
end if

Fin_Interrupcion:
setbit(INTCON,7) ' Habilita interrupciones Globales
setbit(INTCON,4) ' Habilita interrupcion INT0IE (RB0)
setbit(INTCON3,4) ' Habilita interrupcion INT2IE (RB2)
ClearBit(INTCON2, 6) ' Interrupcion por canto de bajada INT0/RB0.
ClearBit(INTCON2, 4) ' Interrupcion por canto de bajada INT2/RB2.
clearbit(INTCON,INT0IF)' Borro flag INT0IF
clearbit(INTCON3,INT2IF) ' Borro flag INT2IF
end sub

main:
setbit(INTCON,7) ' Habilita interrupciones Globales
setbit(INTCON,INT0IE) ' Habilita interrupcion INT0IE (RB0)
setbit(INTCON3,INT2IE) ' Habilita interrupcion INT2IE (RB2)
ClearBit(INTCON2, 6) ' Interrupcion por canto de bajada INT0/RB0.
ClearBit(INTCON2, 4) ' Interrupcion por canto de bajada INT2/RB2.
OSCCON = $7E
ADCON1 = $7F
setbit(TRISB, 0) ' RB0 entrada
setbit(TRISB, 2) ' RB2 entrada
TRISA = $00
LATA = $00
LATB = $00
tarjeta_leida = 0

Inicio:
While true
if tarjeta_leida = 1 then
tarjeta_leida = 0
eeprom_write($00, FC)
eeprom_write($01, D1)
eeprom_write($02, D2)
PORTA = FC
delay_ms(2000)
PORTA = $00
delay_ms(1000)
PORTA = D1
delay_ms(2000)
PORTA = $00
delay_ms(1000)
PORTA = D2
delay_ms(2000)
PORTA = $00
delay_ms(1000)
end if
sleep
wend
end.



Desde ya muchas gracias
Respuesta
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Buscar más temas sobre:
Lupa Cuestiones Elementales de Electrónica

Deseas aprender electrónica y necesitas ayuda para comenzar? Resuelve tus dudas en esta sección.

Cerrar
Foros de Electrónica » Principiantes » Cuestiones Elementales de Electrónica

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.