Les cuento que he decidido modificar el circuito, e ir poco a poco pues mis conocimientos en programación no son tan amplios, estoy presentando un problema, durante la simulación de proteus cuando le doy al pulsador para que lea el IBUTTON, este se comporta erroneamente a veces lee, a veces no, a veces lee hasta 4 veces con un solo pulso. Quisiera ver si alguien me puede ayudar al respecto para continuar con mi codigo hasta el momento esto es lo que llevo.
'PARAMETROS DE CONFIGURACIÓN
Include "modedefs.bas"
Device = 18F2550 'PIC Y CLOCK
Xtal = 8
CMCON = 7 'APAGO COMPARADORES
TRISC = %00000010 'Asigno RC como Salida y RC1 como Entrada para lectura de IBUTTON
'DECLARO LOS PINES DEL BUS I2C
Declare SDA_Pin PORTB.0 'DECLARO QUE RB0 VA A SER SDA
Declare SCL_Pin PORTB.1 'DECLARO QUE RB1 VA A SER SCL
Declare Slow_Bus On 'PARA BAJA VELOCIDAD DENTRO DEL BUS (100Khz COMO TRABAJA EL DS1307)
'VARIABLES DEL RELOJ
Dim HORA As Byte 'HORAS
Dim MINU As Byte 'MINUTOS
Dim SEG As Byte 'SEGUNDOS
Dim DIA As Byte 'DIA
Dim MES As Byte 'MES
Dim YEAR As Byte 'AÑO
'VARIABLES DE LA CONVERSIÓN BCD A BINARIO
Dim TEMP1 As Byte 'TRES VALORES TEMPORALES
Dim TEMP2 As Byte 'PARA REALIZAR OPERACIONES
Dim TEMPVAL As Byte 'DE CONVERSIÓN DE DATOS
'VARIABLE DE LA GRABACIÓN/LECTURA DE LA MEMORIA
Dim CUENTA As Word 'POSICIÓN DE LOS BYTES DENTRO DE LA EEPROM QUE SE VAN GRABANDO/LEYENDO
'VARIABLE QUE ALMACENA Y LEE CODIGO DE IBUTTON
ib VAR Byte[8]
i VAR Byte
'I2C RELOJ
Symbol PROGCLOCK = %11010000 'ALIAS DEL CODIGO PARA PROGRAMAR EL DS1307
Symbol LEOCLOCK = %11010001 'ALIAS DEL CODIGO PARA LEER EL RELOJ
'MEMORIA EEPROM
Symbol PROGMEMO = %10100000 'ALIAS PARA DIRECCIÓN E INDICACIÓN DE ESCRITURA DE LA EEPROM
Symbol LEOMEMO = %10100001 'ALIAS PARA DIRECCIÓN E INDICACIÓN DE LECTURA DE LA EEPROM
CUENTA = 0 'INICIO A GRABAR EN LA PRIMER POSICIÓN DE LA EEPROM
'*****************************************************************************************************
'*****************************************************************************************************
MOSTRAR: 'COMIENZA EL PROGRAMA PRINCIPAL
BStart 'ABRIMOS EL CONTACTO I2C
BusIn LEOCLOCK,0,[HORA] 'LEEMOS LA HORA Y LO PONGO EN LA VARIABLE CORRESPONDIENTE
BusIn LEOCLOCK,1,[MINU] 'LEEMOS LOS MINUTOS Y LO PONGO EN LA VARIABLE CORRESPONDIENTE
BusIn LEOCLOCK,2,[SEG] 'LEEMOS LOS SEGUNDOS Y LO PONGO EN LA VARIABLE CORRESPONDIENTE
BusIn LEOCLOCK,3,[DIA] 'LEEMOS EL DIA DEL Y LO PONGO EN LA VARIABLE CORRESPONDIENTE
BusIn LEOCLOCK,4,[MES] 'LEEMOS EL MES DEL Y LO PONGO EN LA VARIABLE CORRESPONDIENTE
BusIn LEOCLOCK,5,[YEAR] 'LEEMOS EL AÑO DEL Y LO PONGO EN LA VARIABLE CORRESPONDIENTE
BStop 'TERMINO EL CONTACTO I2C
'ME FIJO SI HAY LECTURA DE IBUTTON Y VOY A GRABAR LOS DATOS EN LA EEPROM
start:
DelayMS 20
OWrite PORTC.1,1,[$33] 'output command
ORead PORTC.1,0,[Str ib\8] 'read 64 bit string
If ib[1]<>255 Then
BStart 'INICIO CONTACTO I2C
For i=7 To 1 Step -1
BusOut PROGMEMO, CUENTA, [ib[ i ]] 'GRABO LOS BYTES
CUENTA = CUENTA + 1
Next i
DelayMS 20 'TIEMPO PARA FINALIZAR LA GRABACIÓN
BStop 'CIERRO EL CONTACTO I2C
EndIf
DelayMS 20
GoTo start