desktop

Curso de programación de PIC en PICBasic Pro

Si de echo yo lo hice una vez asi y me funciono con el jdm, lo que te digo, programa el pic con la instrucción write después de leer la memoria y después lo lees con el mismo programador si logro leer la memoria entonces en la eeprom del pic al leerla con el mismo programador que lo quemaste te vas a datos de la eeprom y alli va estar la información leída, con respescto al bit de lectura y escritura eso lo hace automáticamente el comando I2CREAD y es igual para todos los dispositivos I2C...Y otra cosa fijate bien en la dirección de memoria que vas a leer colocarla en hex con $...Otra cosa como se llama el control que compraste no logro ubicar uno con ese integrado.
 
aaaaahhhhhh!!!! lo logreeee!!!! logre comunicarme con el itg!!!:aplauso::aplauso::aplauso::LOL: era ese bit faltante, el bit 0 :LOL: aca dejo el codigo funcionando, es para leer la parte alta del eje X pero ya de ahi es casi pan comido lo demas jajaja (y) gracias por la ayuda muchachos, graciaaasss!!! :apreton: (y) PD:(el ser-vo semueve, else-rvo se mueve, elser-vo se mueve!!! :LOL:) lo siento, estoy muy contento :D

Otra cosa como se llama el control que compraste no logro ubicar uno con ese integrado.
se llama wii motion plus, es el que se conecta al mando de la consola wii de nintendo. por otra parte, que suerte, yo solo consigo el mando con itg3205, pero tambien hay con un simlar que es el 3200. he visto que los que no traen el itg, son mas faciles de leer ya que sacan directamente las 3 señales de sus ejes en forma analogica. saludos

Código:
@ DEVICE MCLR_OFF, WDT_OFF, LVP_OFF, BOD_OFF, PWRT_ON, PROTECT_OFF
 DEFINE   OSC   4              ' Para trabajar con un cristal de 4MHz
 DEFINE I2C_HOLD 1
 trisa=%000000
 trisb=%00000000
 porta=%000000
 portb=%00000000
SDA VAR PORTB.1
 SCL VAR PORTB.2 
 
a1 var byte
a2 var byte
a3 var byte
a4 var byte
a5 var byte
a6 var byte
med1 var word
clear

leer:
I2CREAD sda,scl,%11010000,$1D,[a1]
I2CREAD sda,scl,%11010000,$1E,[a2]  
PAUSE 10
med1=a1+a2
pulsout portb.0,a1
pause10
goto leer
 
Última edición:
Que bueno amigo D@rio mis felicitaciones, por otra parte me gustaría que si puedes hicieras una prueba, el problema era ese bit, en el manual de picbasic pro solo sugiere colocar los primeros 4 que seria %1101 para el caso del itg3205, pudieras hacer esa pequeña prueba, lo digo ya que tu tenias 7 como indicas y a lo mejor eso mismo ocasionaba el problema, es solo para sacarme la duda si es necesario o no colocar los 8bit o solo con la ID addres es suficiente.
 
amigo rey: acabo de probar poniendo los primeros 4 bits como me dijiste y no funciona, asi que parece que hay que poner los 8 bits de control porque por lo que pude entender del datasheet, en esos bits tambien va el bit que le señala al dispositivo si el master esta intentando leer o escribir en el dispositivo esclavo. aca dejo una version light de la anterior donde controlo el movimiento de un servo segun el movimiento del eje x.
saludosss

pd: (el pic es un 16f628)

Código:
@ DEVICE MCLR_OFF, WDT_OFF, LVP_OFF, BOD_OFF, PWRT_ON, PROTECT_OFF
 DEFINE   OSC   4              ' Para trabajar con un cristal de 4MHz
 DEFINE I2C_HOLD 1
 trisa=%000000
 trisb=%00000000
 porta=%000000
 portb=%00000000
SDA VAR PORTB.1
 SCL VAR PORTB.2 
 
a1 var byte

clear

leer:
I2CREAD sda,scl,%11010000,$1D,[a1]  
PAUSE 10
pulsout portb.0,a1
pause10
goto leer
 
Si es importante colocar el valor de los 8 Bits
Porque %11010000 = D0 Hex. 208 Dec. Y %1101 = D Hex 13 Dec.
Osea que si cambia el valor del ID
No sería importante si los primeros son 0 y se omiten, porque los ceros a la izquierda no cuentan.

De hecho aquí D@rio otra vez está la redundancia:
trisa=%000000
trisb=%00000000
porta=%000000
portb=%00000000
; Se resume en:
trisa=0
trisb=0
porta=0
portb=0
 
Última edición:
A ok interesante y a tomar en cuenta ya que yo me guió mucho por el manual del PBP, debe ser que este mal escrito alli, muchas gracias D@rio por la prueba me sacas de una gran duda, Y si Darkbytes yo opino igual solo que tenia esa duda por lo que comento del manual, bueno ya lo tendré en cuenta...Bueno D@rio espero con ansias a ver como te queda el proyecto mucho éxito...Yo aun no termino con el brazo con servo aun lo ando armando me quedan como 3 horas mas de trabajo para poder arrancarlo y si me da chance subo un video para que lo vean en accion...:D
 
ok, gracias amigos. :) gracias por la aclaracion darkbytes, buena suerte con tu proyecto reyvilla y no te olvides del video :D
saludosss
 
Última edición:
:unsure: de que me perdi con eso del ITG :D buen al rato le doy una leida...

Rey... le acabo de dar una revizada a tu codigo... y yo intentaria algo asi como el archivo main.pbp del archivo que anexo...
 

Adjuntos

  • BRAZO ROBOT POT FINAL.rar
    62.8 KB · Visitas: 143
Ok el circuito y el codigo completo, cada motor tiene una funcion, hay dos que se mueven juntos, y uno que se mueve por dos pulsadores y todos los demas cada uno tiene un pot...Para grabar una secuencia de movimiento primero posicionas los motores y luego le das al pulsador grabar y el pin portb.6 se pone a 1 y luego a 0 para indicar que ya grabo esa posicion, luego de grabar varias posiciones le das al boton reproducir y ves como repite los movimientos grabados en los servomotores...cualquier cosa me avisas.

PD: Te dejo un vídeo para que veas como funciona por si acaso, los pot recuerda que son de un joystick por eso hay que estar pendiente de retornar el pot a 50%.

Gracias D@rio, corrijo:

http://www.youtube.com/watch?v=QjFXNAiXzak

felicitaciones que bien esta ojala logres hacer lo que deseas hacer
 
Muchas gracias amigos, aqui lo prometido la puesta en marcha del brazo, cabe destacar que aun le falta bastante para hacer lo cometido grabar una secuencia, hice unas pruebas pero al parecer el pic se resetea y no hace la secuencia de manera apropiada el brazo se vuelve loco y empieza a dar golpes por todos lados pareciera que tuviera vida propia :LOL:jejeje:LOL: ...Pero espero poder lograrlo, creo que es cuestión de velocidad esta muy rápido y lo otro lo de la fuente.
Bueno espero sus criticas y sugerencias...saludosss:apreton:

 
jeje... esta muy bueno tu brazo, un poco erratico pero con un poco de programacion eso se soluciona jeje... PD:(me acabo de dar cuenta que lo controlas con un stik de play station) y, hablando de programacion, les cuento que sigo practicando con el itg3205 y me he encontrado con la sorpresa de que no solo se trata de leerlo, sino tambien de escribirlo. ressulta que para que funcione correctamente, hay que configurar varios parametros que todavia no logro entender bien... :( uno de ellos es el que tiene que ver con la lectura correcta de sus ejes. como viene configurado por defecto, la lectura de sus ejes siempre es la minima y si no entiendo mal, configurando el registro que se ocupa de eso, se puede obtener una lectura que siempre mantenga el eje en su punto medio, por ejemplo: si yo le conecto un servo a mi circuito, este deberia quedar en su posicion central pero la lectura del sensor, le indica que tiene que ir a la posicion minima. traducido a pbp, seria como si yo pusiera: PULSOUT portb.0,100.
aca dejo el datasheet de nuevo, para ver si me ayudan a identificar cual es el registro que se necarga de eso. ami me parece que son los registros 23 y 26, pero no se que debo escribir para configurarlos. obviamente se como escribir el registro pero no se que poner... :( ¿me ayudan?
saludosss
 
Última edición:
D@rio

Creeria segun el siguiente parrafo:

5.6 Sensor Data Registers
The sensor data registers contain the latest gyro and temperature data. They are read-only registers, and are accessed via the Serial Interface. Data from these registers may be read at any time, however, the interrupt function may be used to determine when new data is available.


Que dichos registros son de "solo lectura" para el usuario (Nosotros) y que también "contienen los ultimos datos registrados/memorizados".


Una prueba a realizar que lo confirmaria podria ser:

Mover el componente y volverlo a leer pasados unos segundos, luego desconectar la alimentación lo suficiente como para que se descarguen los electroliticos y realizar la lectura a ver si han quedado los valores iniciales o los de la ultima posición que obtuviste al moverlo.



Saludos, JuanKa.-
 
Última edición:
Muchas gracias amigos, aqui lo prometido la puesta en marcha del brazo, cabe destacar que aun le falta bastante para hacer lo cometido grabar una secuencia, hice unas pruebas pero al parecer el pic se resetea y no hace la secuencia de manera apropiada el brazo se vuelve loco y empieza a dar golpes por todos lados pareciera que tuviera vida propia :LOL:jejeje:LOL: ...Pero espero poder lograrlo, creo que es cuestión de velocidad esta muy rápido y lo otro lo de la fuente.
Bueno espero sus criticas y sugerencias...saludosss:apreton:

http://www.youtube.com/watch?v=6Ui3kS5R2AY

una maquina que bueno felicitaciones !!!!!!
 
D@rio

Creeria segun el siguiente parrafo:

5.6 Sensor Data Registers
The sensor data registers contain the latest gyro and temperature data. They are read-only registers, and are accessed via the Serial Interface. Data from these registers may be read at any time, however, the interrupt function may be used to determine when new data is available.


Que dichos registros son de "solo lectura" para el usuario (Nosotros) y que también "contienen los ultimos datos registrados/memorizados".


Una prueba a realizar que lo confirmaria podria ser:

Mover el componente y volverlo a leer pasados unos segundos, luego desconectar la alimentación lo suficiente como para que se descarguen los electroliticos y realizar la lectura a ver si han quedado los valores iniciales o los de la ultima posición que obtuviste al moverlo.



Saludos, JuanKa.-

si, esos son los registros a los que ya puedo acceder, leer y procesar. pero el problema es que el giroscopio siempre comienza desde la posision 0, por lo tanto, el servo siempre se va a -45° cando lo que yo estoy intentando es que siempre comience a 90° y segun como mueva el sensor, ya sea izquierda o derecha, el servo se mueva a -45° y +45°. por otra parte, estaba pensando que talvez este leyendo mal los datos porque solo leo la parte alta de uno de los ejes y este cuenta con una salida alta y una salida baja, por ejemplo: GYRO_XOUT_H y GYRO_XOUT_L corespondientes a los registros 1D y 1E. como cada registro contiene 8 bits, en total sumados serian 16 bits, pero me pregunto si talvez cada registro medira un angulo distinto :eek: y al faltarme la medida de uno de los angulos, es que me ocurre esto :confused:
saludosss
 
D@rio

Es que te entrega los datos en formato de 16 bits y como "Complemento a 2", por lo que deberías leer los "dos byte" GYRO_XOUT_H y GYRO_XOUT_L y luego procesarlos para recien ahi obtener realmente el giro. Supongo que el H=Byte_High y el L=Byte_Low.


Pero por otra parte, leyendo mas detenidamente la datasheet (entre 8.1 y 8.7) hay toda una "secuencia de inicialización" que se deberia realizar al principio del trabajo, digamos cada vez que energizamos nuestro circuito. Me esta resultando bastante tediosa de entenderla dado que se reparte por varios Registros y los mismos no estan secuencialmente (uno a continuación del otro).

Te comento que cuando empeze a leer más detenidamente me enganche para tratar de entenderla, si me das un poco de tiempo trato de colocar algo hoy en formato de texto (no manejo el PBP) por que desde hace tiempo leo el thread para tratar de aprender algo.



Saludos, JuanKa.-
 
Gracias ya subiré otro cuando este terminado, D@rio recuerda que es un complemento a dos como te dije y como te indica J2C, por lo que logro entender va desde -255 a 255 o algo asi, son 16bits pero en si creo que esta dividido en dos 7 y 7 es el mismo, lo que quiere decir que debes saber diferenciar cuando es -255 y cuando es +255, y creo que si es 0 esta en plano y no has intentado grabar el dato como te dije y luego leerlo otra cosa que seria mejor aun es usar una interface por rs-232 y así verías todos los valores.
 
Última edición:
:cabezon: si... soy un porfiado cabeza dura :LOL: tiene que ser asi, -255 y +255 para el otro lado y 0 para el plano, pasa que la emocion de poder finalmente haber comunicado este integradito con el pic, fue mas grande que el uso de razon :LOL: . voy a retomar el asunto con mas calma y no tan rapido... voy a volver a la idea de ver los datos en la pc que tenia antes de haber logrado leer el ITG ;) ¿en algun momento die casi pan comido? :unsure: creo que me equivoque y me deje llevar por el momento jajaja... :LOL: gracias amigos, voy a seguir renegando hasta hayarle solucion.:) de todas formas, sigo escuchando sugerencias:D saludosss
 
Ok el circuito y el codigo completo, cada motor tiene una funcion, hay dos que se mueven juntos, y uno que se mueve por dos pulsadores y todos los demas cada uno tiene un pot...Para grabar una secuencia de movimiento primero posicionas los motores y luego le das al pulsador grabar y el pin portb.6 se pone a 1 y luego a 0 para indicar que ya grabo esa posicion, luego de grabar varias posiciones le das al boton reproducir y ves como repite los movimientos grabados en los servomotores...cualquier cosa me avisas.

PD: Te dejo un vídeo para que veas como funciona por si acaso, los pot recuerda que son de un joystick por eso hay que estar pendiente de retornar el pot a 50%.

Gracias D@rio, corrijo:

http://www.youtube.com/watch?v=QjFXNAiXzak

hola te felicito está super tu proyecto, lo estuve viendo y creo y me perdonas sí me equivoco pero creo que de los 2 motores que tienes trabajando juntos deberías retirar uno, ponerle otro potenciometro y usarlo para darle rotación a la muñeca ó te quedara faltando un movimiento en tu brazo, suerte con tu proyecto...(y)
 
Última edición:
Gracias ferdy575, lo hice así porque se limito el movimiento de la muñeca a un solo eje de rotación en la propuesta, y los dos motores es por la carga ya que uno solo temblaría, ahora estoy haciendo unas grandes modificaciones, ya que era la primera prueba para ver como se comportaba ahora viene la depuración del código y de la parte mecánica también dentro de 2 días o menos ya estará listo ya veras como queda, de momento esta a dieta...:LOL:jejeje:LOL:...lo que significa que regresara mas delgado por cuestiones de movimiento, y se reforzó el agarre y fijación de los motores para evitar el movimiento sobre el mismo, se bajo la velocidad ya que se perdía la precisión y la estabilidad de los motores y como todo proyecto tenias muchos detalles que mejorar...Pero ya lo verán en el próximo vídeo...saludos:apreton:
 
Que tal muchachos
estoy retomando lo del driver para servomotor con encoder en encuadratura
estoy trabajando con el pic 18f4431 que tiene su propio modulo QEI
gracias al ejemplo de autotronico he podido hacer algunos ejercicios con este pic
el problema que tengo ahorita es manejar las variables coma flotante (decimales)
para los parametros PID. alguien a manejado variables de tipo coma flotante en PBP? algun ejemplo?

el dia de hoy les publico el codigo que llevo hasta ahorita..
 
Atrás
Arriba