Autor Tema: Dispositivo RFID en 16f628a  (Leído 3958 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado MakiKagura

  • PIC10
  • *
  • Mensajes: 2
Dispositivo RFID en 16f628a
« en: 11 de Mayo de 2009, 15:20:25 »
Buenas tardes. Soy nuevo en estos asuntos y resulta que estoy haciendo un lector/escritor de RFID en un 16f628a; el transceiver que estoy utilizando es un Texas TIRIS TMS3705 y la idea es interconectar un PC por RS232 al transceiver con el pic.

Ahora bien, resulta que esta es la hora que no he podido hacer que el proyecto funcione y no encuentro el por qué, puesto que ni siquiera el oscilador me responde (lo intenté con INTOSC y con XTAL de 4 MHz, pero no reacciona con ninguno). las simulaciones en Proteus me funcionan sin ningún problema (bueno, casi) puesto que me habilita todas las opciones pero en la comunicación serial no está recibiendo nada (eso es lo de menos, igual en un step by step no creo que pueda emular eso). Como dato adicional, debo aclarar que estoy usando MPLab 8.20a con un PicStart Plus como programador. El PicStart era de un kit 6.4; pero le actualicé el Firmware y cada vez que le pido que me programe el pic, me dice que tengo los registros de memoria desactualizados. 

El código que desarrollé está en assembly puesto que la temporización en C estaba fallando demasiado, y es el siguiente, más o menos:

   include <p16f628a.inc>

STATUS   equ 03      ;se escribe un 3 en el registro STATUS
RP0       equ 5      ;
PORTB   equ 06
cont1   equ 2A
cont2   equ 2B
cont3   equ 2C
brate   equ 2D
rfdata   equ 30
flag   equ 40
flag1   equ 41

   org 0x00
   goto INICIO
   org 0x04
ISR
   bcf INTCON,GIE
   btfss PORTB,3
   btfsc flag1,0
   call  getchar
   btfss PORTB,3
   call  get1char
   bsf INTCON,GIE
   retfie   

INICIO
   bsf STATUS,RP0   ;bit set el bit RP0 del registro STATUS para cambiar de banco e ir al banco 1,paso a banco uno
   bcf PORTB,4   ;bit clear el bit 0 del registro PORTB para colocarlo como salida,configuro el pin rb0 del controlador como salida para poder mandar unos o ceros al mundo exterior.colocar en cero el bit 0 de registro trisb,�, conf el pin nb0 como salida
   bcf PORTB,3
   bsf PORTB,2
   bsf PORTB,1
   bcf PORTB,5
   bsf   PIE1,RCIE
   bcf STATUS,RP0   ;bit clear el bit RP0 del registro STATUS para cambiar de banco y regresar al banco 0,por lo general estamos en el banco cero, de regreso al banco por defecto, bank 0, de regreso al banco o
   bcf PORTB,2
   bsf PORTB,4
   bcf PORTB,5   
   bcf   PIR1,RCIF
   bcf PIR1,TXIF
   bsf INTCON,PEIE
   bsf INTCON,GIE
REPETIR ;rutina de onda para el transceiver
   bcf   PORTB,3
   bcf  PORTB,4   ;RB0 emite un 1, para encender un led, coloca en uno el bit cero del registro cero seir del banco cero, enciende el led
   call delay1   ;se llama a la subrutina delay3, durante un seg
   bsf  PORTB,4   ;RB0 emite un 0, para apagar un led,apagar led
   movlw d'40'
   movwf cont2
   call delay2   ;se llama a la subrutina delay3, durante un segundo
   bcf    PORTB,4
   movlw d'15'; baud rate 15625
   movwf flag
   call initserial
   call delay3
   bsf    PORTB,4
   movlw d'60'
   movwf cont2
   call delay2
   bsf  PORTB,3
   movlw d'25'
   call initserial
   call putchar
    call delay3
   call delay3
   goto REPETIR   ;regresamos a la etiqueta REPETIR, esta estructura es un ciclo infinito mientras el controlador este prendido

;Rutinas de Comunicaci�n serial

initserial
   bsf STATUS,RP0     ; selecciona Banco 1   
   movfw flag
   movwf SPBRG    ; carga en el registro de baud
   movlw d'36'     ; habilitar trasmisi�n, 8 bits
   movwf TXSTA     ; modo as�ncrono, alta veloc
   bcf STATUS,RP0     ; selecciona Banco 0
   movlw 0x90    ; receptor habilitado, 8 bits
   movwf RCSTA     ; puerto serial habilitado
   return

getchar
     movlw  0x2F ;carga valor de apuntador a RAM
    movwf  FSR ;inicializa apuntador
    clrf   RCREG
get
    btfss  PIR1, RCIF         ;�dato listo?
     goto   get                ;loop de espera hasta que el dato est� listo
     movf   RCREG,w              ;caracter recibido en w
     movwf    INDF
     incf    FSR,F ;incrementa apuntador 
    btfss    FSR,3 ;si ya termin� escapa a continuar   
    goto    get ;si no repite
    movlw  d'0'
    movwf  flag1
     return

get1char
      btfss  PIR1, RCIF                   ;�dato listo?
      goto   get1char                          ;loop de espera hasta que el dato est� listo
      movfw  RCREG                    ;caracter recibido en w
     movwf  flag
     movlw  d'1'
     movwf  flag1
      return

putchar      ;caracter contenido en w
    movlw 0x30 ;carga valor de apuntador a RAM
    movwf FSR ;inicializa apuntador
    clrf  TXREG 
put   
     btfss PIR1, TXIF     
     goto put
    movlw INDF
    movwf TXREG    ;env�a el contenido de w
     incf FSR,F ;incrementa apuntador   
    btfss FSR,3 ;si ya termin� escapa a continuar   
    goto put ;si no repite 
     return



;Rutinas de Tiempo

delay3
   movlw d'26'   ;se mueve al work register un 10 decimal
   movwf cont3   ;el work register se mueve a cont3

D3   
   movlw d'41'
   movwf cont2
   call   delay2   ;se llama a la subrutina delay2
   decfsz cont3,f   ;decrementa cont3, guarda el resultado directamente en el archivo y si cont3 llega a 0, la siguiente l�nea de c�digo no es ejecutada 
   goto   D3      ;regresamos a la etiqueta D3
   return      ;RETORNAMOS AL PROGRAMA PRINCIPAL

delay2

D2

   call   delay1
   decfsz cont2,f
   goto   D2
   return

delay1
   movlw d'11';
   movwf cont1 ;
D1:   
   nop      ; no operation, gasta tiempo de ejecucion.
   decfsz cont1,f   ; si no es cero no salta pero si es cero salta, estructura de desicion condicionada
   goto   D1      ; ejecuta
   return
   end

Espero que puedan sacarme del pequeño aprieto en el que estoy metido.

Muchas Gracias.

Desconectado Suky

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Dispositivo RFID en 16f628a
« Respuesta #1 en: 11 de Mayo de 2009, 16:13:23 »
Has probado con un programa más sencillo (Titilar un led) para saber si esta funcionando bien la grabación, la configuración de fuses y el hardware? Puede ser que estes habilitando Mclr y no este implementado por hardware, que este mal configurado algún fuse o que el programador no grabe correctamente...
No contesto mensajes privados, las consultas en el foro

Desconectado NANO1985

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1698
    • Desarrollos Tecnologicos - Tucuman - Argentina
Re: Dispositivo RFID en 16f628a
« Respuesta #2 en: 11 de Mayo de 2009, 21:18:18 »
hola MakiKagura,... yo inicé éste proyecto tambien, asi que podemos ir caminando paso a paso... que tipo de antela le adicionaste al lector?? como es tu hard??.
Saludos
"La inquebrantable voluntad de vencer"
"hay dos cosas infinitas... El universo y la Estupidez humana" Albert Einstein
 "El sabio actua sin anhelos, permanece sosegado,... así no es afectado por el resultado de sus acciones sean éstas el triunfo o el fracaso"
- UNIVERSIDAD TECNOLOGICA NACIONAL - FACULTAD REGIONAL TUCUMAN -

Desconectado MakiKagura

  • PIC10
  • *
  • Mensajes: 2
Re: Dispositivo RFID en 16f628a
« Respuesta #3 en: 13 de Mayo de 2009, 17:02:03 »
Suky, parece que ya encontré el problema... es un problema con la palabra de configuración: no puedo habilitar XTAL con Brown Out deshabilitado... estoy probando eso y por lo menos la simulación responde mejor.

Nano: La antena como tal era la que venía con el paquete. Yo pedí el Transceiver directo en PCB como muestra de Texas a través de un amigo y me lo mandaron con eso; eso me ha ahorrado cualquier infinidad de cálculos (la antena es circular concéntrica, para mí es la más adecuada). Para el asunto del puerto serial, estoy utilizando 74HCT240 para hacer direccionamientos del puerto Serial hacia el PC y hacia el transceiver y una compuerta Or a la entrada Serial del Transceiver porque esa referencia tiene modo de ahorro de energía y toca mandarle una onda especial para accionar el integrado (y como un micro puede hacer cualquier cosa excepto caminar y mascar chicle al tiempo, pues toca mandar la onda de activación por un lado y los datos a la tarjeta por otro).

Desconectado NANO1985

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1698
    • Desarrollos Tecnologicos - Tucuman - Argentina
Re: Dispositivo RFID en 16f628a
« Respuesta #4 en: 20 de Mayo de 2009, 01:39:49 »
me puedes pasar el link  de ese dispositivo que nombras?? (Transceiver directo en PCB )... yo solo tengo los TIRIS TMS3705...
saludos  8)
"La inquebrantable voluntad de vencer"
"hay dos cosas infinitas... El universo y la Estupidez humana" Albert Einstein
 "El sabio actua sin anhelos, permanece sosegado,... así no es afectado por el resultado de sus acciones sean éstas el triunfo o el fracaso"
- UNIVERSIDAD TECNOLOGICA NACIONAL - FACULTAD REGIONAL TUCUMAN -

Desconectado wilsonmm

  • PIC10
  • *
  • Mensajes: 8
Re: Dispositivo RFID en 16f628a
« Respuesta #5 en: 26 de Noviembre de 2010, 13:12:29 »
Hola MakiKagura

En este momento estoy trabajando con el transponder TMS3705 de TI... yo se que la antena que diseñe, segun la nota de aplicacion, tengo que mejorarla, pero mi problema recide en la informacion que envio y recibo desde el transponder. Estoy Utilizando el pic16f876, programo con el compilador CCS C pero  no logro tener el control de los terminales que declaro para recepcion/ transmision. Es decir si activo la recepcion por hardware uSART (se pone a 1 el pin TX) no puedo poner a 0 este mismo pin por el tiempo necesario para  inicializar, esperar byte diagnostico y cargar el transponder. El codigo que colgaste en el hilo te funciona?... podrias compartirme info de como lograste que te funcionara?

Gracias
Wilson Martinez
wlsn.martinez@gmail.com
Tambien desde Colombia!!!!



Suky, parece que ya encontré el problema... es un problema con la palabra de configuración: no puedo habilitar XTAL con Brown Out deshabilitado... estoy probando eso y por lo menos la simulación responde mejor.

Nano: La antena como tal era la que venía con el paquete. Yo pedí el Transceiver directo en PCB como muestra de Texas a través de un amigo y me lo mandaron con eso; eso me ha ahorrado cualquier infinidad de cálculos (la antena es circular concéntrica, para mí es la más adecuada). Para el asunto del puerto serial, estoy utilizando 74HCT240 para hacer direccionamientos del puerto Serial hacia el PC y hacia el transceiver y una compuerta Or a la entrada Serial del Transceiver porque esa referencia tiene modo de ahorro de energía y toca mandarle una onda especial para accionar el integrado (y como un micro puede hacer cualquier cosa excepto caminar y mascar chicle al tiempo, pues toca mandar la onda de activación por un lado y los datos a la tarjeta por otro).