Autor Tema: Comunicacion entre un IBUTTON y un PIC16F877A  (Leído 3230 veces)

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

Desconectado cliffmx

  • PIC10
  • *
  • Mensajes: 2
Comunicacion entre un IBUTTON y un PIC16F877A
« en: 24 de Mayo de 2006, 19:09:28 »
Hola Amigos..

Ando enredado, y no se si este haciendo bien las cosas, por eso vengo aqui a ver si alguno de ustedes ha trabajado antes con algun IBUTTON, lo que yo pretendo primeramente es hacer establecer la comunicacion con el, para despues leer su numero de serie, con el fin de comparar ese numero con otro previamente grabado en el pic.

Sin mas preambulo, estoy en la etapa en donde genero un pulso de reset y el ibutton debe contestarme con un pulso de presencia, cuando el ibutton me contesta y lo detecto, hago que RB0 se encienda, aqui es donde no logro hacer nada.

Pongo mi programa en asm, estoy utilizando el mplab para la edicion.

Espero que me puedan ayudar, o si alguien tuviera la rutina y quisiera compartirla conmigo se lo agradeceria infinitamente.

Gracias..

Felipe.

;*****************************************
;Programa para leer la serie de un Ibutton
;Procesador: 16f877a  Crystal: 4Mhz
;*****************************************
      LIST  P=16F877a
      INCLUDE <P16F877a.INC>

del0    equ 20h
del1   equ 21h

      ORG   0x000
       goto INICIO

INICIO
   
      clrf PORTA            ;Borra lacth del puerto A
       clrf PORTB            ;Borra lacth del puerto B
       bsf STATUS, RP0         ;Accedemos al
      bcf STATUS, RP1         ;Banco 1
      clrf TRISA            ;Ponemos como salida todo el puerto A
      clrf TRISB            ;Ponemos como salida todo el puerto B
      bcf STATUS, RP0         ;Accedemos al
      bcf STATUS, RP1         ;Banco 0

;//////////////////////////////////////////////////////////////////////////////////////////////////////
pulso_reset
      bsf STATUS, RP0         ;Accedemos al
      bcf STATUS, RP1         ;banco 1
      movlw 00h            
      movwf TRISA            ;Ponemos todo el puerto A como salida
      bcf STATUS, RP0         ;Accedemos al
      bcf STATUS, RP1         ;Banco 0
      bcf PORTA, 4         ;Ponemos a 0 el 4o. bit del Pto. A
      call retardo_reset      ;Llamamos a la subrutina que genera el pulso de reset
      bsf STATUS, RP0         ;Accedemos al
      bcf STATUS, RP1         ;Banco 1
      movlw 0ffh
      movwf TRISA            ;Ponemos todo el puerto A como entrada
      bcf STATUS, RP0         ;Accedemos al
      bcf STATUS, RP1         ;Banco O

;*********************************************************************************
det_presencia
      call retardo_presencia   
      btfsc PORTA, 4         ;Aqui el Ibutton deberia estar mandando un pulso bajo(pulso de presencia), si es asi, salta.
      goto pulso_reset      ;si no, regresa a generar de nuevo el pulso de reset
      bsf PORTB,0

ok   
         goto $+1            ;Bucle Infinito
      goto $-1

;*********************************************************************************
retardo_reset            ;550uS
      movlw   D'182'
      movwf   del0
loop0   decfsz   del0,1
      goto   loop0
      nop
      return
;*********************************************************************************
retardo_presencia         ;150uS
      movlw   D'49'
      movwf   del1
loop1   decfsz   del1,1
      goto   loop1
      nop
      return
;*********************************************************************************

      end       
« Última modificación: 24 de Mayo de 2006, 19:12:04 por cliffmx »

Desconectado LabPIC

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 143
Re: Comunicacion entre un IBUTTON y un PIC16F877A
« Respuesta #1 en: 24 de Mayo de 2006, 19:35:06 »
De entrada veo que antes de cargar al TRISA como salida hay que cargar al ADCON1 los valores adecuados para que sepa si se utilizara como entradas digitales o analogicas que en este caso sería de la siguiente manera:

movlw     b'0000011x'; esta opcion es para cuando quieres que el PORTA funcione como
movwf     ADCON1    ;      digital, la x es de no importa que valor pongas alli da lo mismo 1
clrf          TRISA        ;     o 0.

Una pregunta ¿Quieres que cuando des un Reset realice la rutina que tienes como pulso_reset?

Creo que por lo que he entendido necesitas utilizar algun tipo de interrupcion.

Saludos LabPIC
¡¡¡Viva México cabrones!!!

Desconectado cliffmx

  • PIC10
  • *
  • Mensajes: 2
Re: Comunicacion entre un IBUTTON y un PIC16F877A
« Respuesta #2 en: 25 de Mayo de 2006, 04:41:37 »
Es verdad se me habia pasado lo de TRISA, ya lo agregue pero sigo sin avance..

A lo que le llamo pulso_reset es a poner la linea en un nivel bajo por un lapso de 550uS que de hecho es la primer rutina que hace el pic, ya sea encendiendolo o reseteandolo.

Despues del generar el pulso_reset, pasamos a la etapa de deteccion de presencia, en donde el Ibutton como respuesta al pulso_reset, genera tambien un pulso de nivel bajo por un lapso de aproximadamente 200uS. Si el pic llegara a detectar ese pulso de presencia emitido por el ibutton RB7 se encendera.

Lamentablemente no he logrado nada y ya me ando volviendo loco..

Gracias por la aportacion LabPIC, has trabajado con Ibuttons?

Se siguen recibiendo Aportaciones

Felipe.

Desconectado josemyzm

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 309
Re: Comunicacion entre un IBUTTON y un PIC16F877A
« Respuesta #3 en: 25 de Mayo de 2006, 11:31:51 »
Yo estube trasteando con uno pero lo hice bajo Pic Basic. Lamento no poder aportarte nada nuevo.

Un saludo.
Saludos desde Logroño (España)

Desconectado LabPIC

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 143
Re: Comunicacion entre un IBUTTON y un PIC16F877A
« Respuesta #4 en: 25 de Mayo de 2006, 12:11:32 »
Pues no, nunca e trabajado con IBUTTON cliffmx, pero cualquier explicacion que quieras realizar sera bienvenida, dijo para poder dijerirlo mejor y pues si en algo se te puede apoyar aqui estamos  :mrgreen:.

Saludos LabPIC
¡¡¡Viva México cabrones!!!

Desconectado Sir Viciony

  • PIC10
  • *
  • Mensajes: 14
Re: Comunicacion entre un IBUTTON y un PIC16F877A
« Respuesta #5 en: 13 de Marzo de 2007, 13:20:18 »
Hola cliffmx, yo tengo codigo para leer el numero de serie en Lenguaje C CCS, si estas interesado contactame

Desconectado elreypic2

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1297
Re: Comunicacion entre un IBUTTON y un PIC16F877A
« Respuesta #6 en: 13 de Marzo de 2007, 13:39:14 »
Hola cliffinx:

Veo varios detalles por lo que pudieras tener el problema, (que pudieran ser suposiones, debido a que no hay esquematico, ojala pudieras ponerlo)

Los Ibutton utilizan una caracteristica conocida como "parasitic power" por lo que el bus de datos y la alimentacion son el mismo pin, entonces requiere que coloques un pull-up de 4.7 K en el.
El estado de presencia dura un cierto tiempo, pero no significa que tu debes esperar ese tiempo. Esto es el IBUTTON espera el pulso de reset el cual generas adecuadamente, e inmediatamente despues el IBUTTON genera el bit de presencia que es un nivel alto

1.- Colocas el pin como salida
2.- Generas un flanco de bajada y mantienes el nivel durante 550 us para gnerar el pulso de reset hacia el IBUTTON
3.- Debes cambiar el estdo del pin como entrada
4.- Leer el estado del pin

Espero esto te haya servido.
saludos

elreypic


 

anything