TODOPIC
Microcontroladores PIC => * PROYECTOS * => Mensaje iniciado por: cliffmx 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
-
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
-
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.
-
Yo estube trasteando con uno pero lo hice bajo Pic Basic. Lamento no poder aportarte nada nuevo.
Un saludo.
-
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
-
Hola cliffmx, yo tengo codigo para leer el numero de serie en Lenguaje C CCS, si estas interesado contactame
-
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