TODOPIC
Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: psnven en 10 de Mayo de 2011, 18:49:52
-
Hola buenas tardes amigos foreros necesito haber si alguien me hecha una mano por aqui; estoy culminando un proyecto de un pic 18f2550 mas un ds1307 y un dispositivo ibutton + una memoria por i2c; todo me a funcionado a la perfecciòn exepto que tengo un problema a la hora de leer la memoria i2c y enviar su contenido via usb; la conexiòn con el ordenador por usb funciona a la perfección pero el problema esta a la hora de enviar una variable que es de tipo string*8; les pego partes del codigo haber quien seria tan amable de por favor echarme una mano con el trasto este.
CODIGO DEL PIC
ProgramLoop2:
BStart 'INICIO CONTACTO I2C
BusOut WMEM, [CUENTA] 'ESCRIBO EN LA MEMORIA LA POSICIÓN EN QUE VOY A LEER
BReStart
BusIn RMEM, CUENTA, [DIA,MES,YEAR,HORA,MINU]
CUENTA = CUENTA + 5
DelayMS 2
BStop
If CUENTA > 1500 Then GoTo SALIR 'SI LA CUENTA LLEGA AL FINAL DE LA MEMORIA REINICIO
USBBuffer[0] = 0
USBBuffer[1] = DIA
USBBuffer[2] = MES
USBBuffer[3] = YEAR
USBBuffer[4] = HORA
USBBuffer[5] = MINU
GoSub DoUSBOut
For Index=7 To 0 Step -1
BStart
BusOut WMEM, [CUENTA]
BReStart
BusIn RMEM, CUENTA, [codigo] 'LEO LOS BYTES
DelayMS 10
BStop
CUENTA = CUENTA + 1
USBBuffer[6] = codigo
GoSub DoUSBOut
Next Index
GoTo ProgramLoop2 'COMPLETO EL LAZO HASTA TERMINAR DE LEER LA MEMORIA
CODIGO VISUAL BASIC
Public Sub OnRead(ByVal pHandle As Long)
' read the data (don't forget, pass the whole array)...
If hidRead(pHandle, BufferIn(0)) Then
' ** YOUR CODE HERE **
' first byte is the report ID, e.g. BufferIn(0)
' the other bytes are the data from the microcontrolller...
'**********************************************************************************************
'* LEO LOS DATOS DESDE LA EEPROM *
'**********************************************************************************************
dia = BufferIn(2)
MES = BufferIn(3)
ANO = BufferIn(4)
HORA = BufferIn(5)
MINU = BufferIn(6)
codigo = BufferIn(7)
If dia <> 255 Then
Text1.Text = Text1.Text & " FECHA:" & dia & "/" & MES & "/" & ANO & " -- HORA: " & HORA & ":" & MINU & " -- SERIAL: " & codigo & vbCrLf
End If
End If
End Sub
RESULTADO QUE OBTENGO EN EL PC
FECHA:10/5/11 -- HORA: 0:18 -- SERIAL: 1
FECHA:10/5/11 -- HORA: 0:18 -- SERIAL: 14
FECHA:10/5/11 -- HORA: 0:18 -- SERIAL: 0
FECHA:10/5/11 -- HORA: 0:18 -- SERIAL: 0
FECHA:10/5/11 -- HORA: 0:18 -- SERIAL: 18
FECHA:10/5/11 -- HORA: 0:18 -- SERIAL: 209
FECHA:10/5/11 -- HORA: 0:18 -- SERIAL: 104
FECHA:10/5/11 -- HORA: 0:18 -- SERIAL: 140
FECHA:10/5/11 -- HORA: 0:18 -- SERIAL: 1
FECHA:10/5/11 -- HORA: 0:18 -- SERIAL: 1
FECHA:10/5/11 -- HORA: 0:18 -- SERIAL: 14
FECHA:10/5/11 -- HORA: 0:18 -- SERIAL: 0
FECHA:10/5/11 -- HORA: 0:18 -- SERIAL: 0
FECHA:10/5/11 -- HORA: 0:18 -- SERIAL: 18
FECHA:10/5/11 -- HORA: 0:18 -- SERIAL: 209
FECHA:10/5/11 -- HORA: 0:18 -- SERIAL: 104
FECHA:10/5/11 -- HORA: 0:18 -- SERIAL: 140
FECHA:10/5/11 -- HORA: 0:18 -- SERIAL: 1
FECHA:10/5/11 -- HORA: 0:18 -- SERIAL: 1
FECHA:10/5/11 -- HORA: 0:18 -- SERIAL: 14
FECHA:10/5/11 -- HORA: 0:18 -- SERIAL: 0
FECHA:10/5/11 -- HORA: 0:18 -- SERIAL: 0
FECHA:10/5/11 -- HORA: 0:18 -- SERIAL: 18
FECHA:10/5/11 -- HORA: 0:18 -- SERIAL: 209
FECHA:10/5/11 -- HORA: 0:18 -- SERIAL: 104
FECHA:10/5/11 -- HORA: 0:18 -- SERIAL: 140
FECHA:10/5/11 -- HORA: 0:18 -- SERIAL: 1
DONDE DESEARIA OBTENER LO SIGUIENTE
FECHA:10/5/11 -- HORA: 0:18 -- SERIAL: 11400182091041401
FECHA:10/5/11 -- HORA: 0:18 -- SERIAL: 11400182091041401
FECHA:10/5/11 -- HORA: 0:18 -- SERIAL: 11400182091041401
Es decir que realmente la memoria I2C solo tiene 3 registros completos que comprenden
(DD/MM/YY HH:MM codigo[8]
Entonces ando confundido no se donde tengo el problema si en codigo del PIC o en el codigo de VISUAL BASIC :? :?
-
Si es necesario el codigo completo para mejor analisis pues lo posteo espero que alguien me pueda solventar la situacion :(
-
¿y que tipo de comunicación es psnven?
puerto serial virtual, hid o mpusbapi.dll?
tu problema es que no hay control de flujo. debe haber un buffer que almacene todos los caracteres deseados, se puede hacer por hardware y/o por software.
-
El tipo de comunicacion es por HID, y como podria hacer el desarrollo del buffer para que por ejemplo me almacene los bytes del "SERIAL" que me esta mostrando de forma incorrecta, y que luego por VB cuando haga bufferIn, me los coloque en una sola linea ?
-
Alguna ayudita :( ??? sera algo de la definicion de las variables ??? :( No consigo donde tengo el problema