Haz una pregunta
  Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos
Foros Registrarse ¿Olvidaste tu contraseña?
19/01/2012 #1601

Avatar de Dario

ok, aver si estoy entendiendo bien. lo que intentas decirme es que no importa que que numero o codigo traiga de fabrica el aparato, yo le puedo asignar una identificacion a mi gusto siempre que sea en binario? por ejemplo si enves de: CONT3 CON %11010010 yo quisiera ponerle: CONT3 CON %10010010 ¿es asi? perdon por lo cabeza dura jajaja
19/01/2012 #1602

Avatar de reyvilla

Mas o menos aun ni yo estoy muy seguro, según la hoja de datos te dice que el registro

WHO_AM_I:

Traductor de google:

Registro Quien soy yo?

Descripción:
Este registro se utiliza para verificar la identidad del dispositivo.

Parámetros:

ID Contiene la dirección I2C del dispositivo, que también se puede cambiar a través de este registro.

El Bit7 siempre debe estar en "0".
El valor de Power-on-reset de bit6: Bit1 es 110 100.
************************
Por lo que logro entender con siempre va hacer %110100
************************
Por otro lado dice tambien:

La dirección del esclavo del ITG-3205 dispositivos se b110100X que es de 7 bits de longitud. El bit LSB de la dirección de 7 bits es determinado por el nivel lógico en el pin 9. Esto permite que dos ITG-3205 dispositivos sean conectados al bus I2C mismo. cuando es utilizado en esta configuración, la dirección de uno de los dispositivos deben ser b1101000 (pin 9 es lógico bajo) y la dirección de la de la otra debe ser b1101001 (pin 9 es lógico alto). La dirección I2C es almacenado en el registro 0 (WHO_AM_I registro).

Entonces únicamente puedes conectar dos, uno con dirección %110100 y el pin nueve en 0V y otro con %1101001 y el pin 9 en alto. Y así tendrías dos ITG-3205 en la misma linea de querer conectar otro necesitarías otros pines del microcontrolador.

PD: Lo que tu hablas del 0xA6 se refiere a otro comando para otro dispositivo al parecer, ya que si lo pasas a binario queda %10100110, lo cual no coincide con la hoja de datos del que tu nombras ITG-3205, parece, mas bien el de una memoria eeprom que es %10100.
20/01/2012 #1603


yo le puedo asignar una identificacion a mi gusto siempre que sea en binario? por ejemplo si enves de: CONT3 CON %11010010 yo quisiera ponerle: CONT3 CON %10010010 ¿es asi? perdon por lo cabeza dura jajaja
mmm... yo creo que no.... todos los perifericos I2c como memoria, expansores, giroscopios...etc...

tienen un identificador unico y de fabrica que es el Addres.... en algunos se configuran 3bits o 2 bits por hardware para identificarse si se van a usar del mismo tipo...
ejemplo un expansor de 16bits tiene 3bits que hace que solo se puedan usar hasta 8 del mismo tipo...

poniendo esto: CONT3 CON %10010010 solo estas diciendo que cont3 es una constante (no variable) con el byte 10010010... ver lo que significa Variables y Constantes....

yo insisto... podrias poner la ficha tecnica del aparato... o estoy entendiendo mal y el wiimote es un giroscopio?
20/01/2012 #1604

Avatar de Dario

amigo mio, ahora comprendo porque no nos entendiamos jejeje... yo estoy tratando de leer el wiimotion directamente desde su conector y vos indicandome como leer el ITG3205 jejeje... he visto en un foro de aeromodelismo como cortan los pines de comunicacion i2c del itg y los sacan directamente a un arduino jejeje. aqui una imagen. ¿que opinas? ¿combiene hacer lo mismo?
saludosss

pd: amigo lubeck: no consigo la ficha tecnica del aparato

20/01/2012 #1605


he visto en un foro de aeromodelismo como cortan los pines de comunicacion i2c del itg y los sacan directamente a un arduino jejeje. aqui una imagen. ¿que opinas? ¿combiene hacer lo mismo?
a mi eso ya me suena mas coherente....

si puedes ponerlo directo entonces la direccion del giroscopio es segun el datashit....
The slave address of the ITG-3205 devices is b110100X which is 7 bits long
ahi tu puedes usar dos giroscopios en una misma red i2c y el 7bit lo defines por hardware con el pin 9 AD0 si lo pones a tierra ese pin la direccion seria 1101000 si lo pones a positivo la direccion seria 1101001

y el comando en PBP seria...
I2CRead Datapin,Dataclock,%1101000,27 'esto para leer el temp_out_H

espero se entienda...
20/01/2012 #1606

Avatar de reyvilla

Hola lubeck con lo que indicas no es lo mismo que mencione arriba de los dos dispositivos? y se entendió como una variable debido a que "cont" pareciera una, pero mas que una variable es como un symbol para el comando "con" que es el address que tu indicas que mencione o puse de ejemplo como si fuera un numero de teléfono para cara dispositivo, claro es una manera de decir, se sabe que es una identificación unica para cada tipo de dispositivo i2c, La que es variable es la Addr que utilizo para hacer el código mas claro para mi, por otro lado hubo una confusión con respecto a lo que se quiere hacer, una cosa es controlar el ITG-3205 directamente y otra es controlarlo a trabes de la tarjeta del control de wii, y por mi lado y para seguir aportando mas al foro voy a comprar unas memorias para hacer pruebas y quizás tal vez un control para hacer mas pruebas y según me vaya les voy indicando cualquier cosa si me equivoque me avisan saludoss

PD: Ya conseguí los controles unos tirados en mi casa de casualidad ahora los reviso y les aviso para empezar hacer pruebas...saludoss
20/01/2012 #1607


lubeck dijo: Ver Mensaje
pues yo creo que esta bien el diagrama....aunque veo que los diodos 1n4007 no se necesitan...
la resistencia R2 yo la pondria de 5M... y creo que el simbolo del Triac mas bien parece de Tiristor


lubeck gracias por tu comentarios . Lo que realmente es el símbolo de Tiristor es justo lo que había en Livewire. La resistencia y la más alto posible. Experimenté con el 16F628 y sólo funciona por debajo de 680K.
20/01/2012 #1608

Avatar de reyvilla

Hola reconato, yo utilice 2M y me funciono, con respecto a los diodos no utilice ningun diodo puse la resistencia directo al pin del pic, recuerda colocar como entrada el pin del pic a utilizar y de configurar bien las interrupciones, por otro lado te recomiendo trates de conseguir el proteus para realizar mejor tus esquemas y así también poder probar y depurar bien el código antes de montarlo físicamente...saludosss
20/01/2012 #1609


Hola lubeck con lo que indicas no es lo mismo que mencione arriba de los dos dispositivos?
Es que no habia leido bien lo que pusiste , pero efectivamente estamos hablando practicamente de lo mismo, y yo tambien me confundi de como querian controlar el dispostivo...

lo que creo que no queda muy claro es lo de una constante, una variable y un symbol...

segun yo en una variable su valor puede ser cambiado durante la ejecucion de un programa, y una constante no.. se asigna una sola vez y no puede ser cambiada durante la ejecucion... en PBP la instruccion symbol efectivamente pareciera una constante pero no lo es, symbol es un reemplazo de un nombre... o sea que cada que el compilador vea eso lo reemplaza por lo que se le haya asignado... los tres son similares pero no son lo mismo...
20/01/2012 #1610

Avatar de reyvilla

Exacto se supone que cada uno tiene un propósito especifico, symbol yo lo uso nombrar pines del pic, y "con" segun el pbp y lo que yo entiendo significa parámetro de control o dirección de control para el bus i2c, y las constantes nunca que yo recuerde las he manejado, a menos que sean definiciones
por ejemplo OSC 20 aunque no es parte del programa igual es una constante ya que su valor no cambia en todo el codigo.
20/01/2012 #1611


a ver si no estamos hablando ahora si de cosas diferentes ehhhh

esto es sacado de la ayuda de PBP
Named constants may be created in a similar manner to variables. It can be more convenient to use a constant name instead of a constant number. If the number needs to be changed, it may be changed in only one place in the program; where the constant is defined. Variable data cannot be stored in a constant.

Example

mice CON 3
traps CON mice * 1000
las llamadas constantes son creadas de manera similar a las variables, puede ser mas conveniente usar un nombre de una constante en lugar de un numero constante... si se necesita cambiar el numero, este puede ser cambiado solo en un lugar del programa,cuando esta es definida. el valor de una variable no puede ser definida en una constante... (o algo asi dice )

con el ejemplo mice siempre va a tener el valor de 3...
traps siempre va a ser 3000...

si yo durante la ejecucion del programa pongo mice=mice+1 seguramente me marcara un error(no lo he probado) porque es como si dijera 3=3+1...
20/01/2012 #1612

Avatar de reyvilla

Cierto ya logre ver porque el ejemplo del pbp, como el ejemplo es de una memoria, para simplificar lineas ellos colocan el valor de direccionamiento en una constante llamada cont, que se refiere al control del dispositivo i2c que este conectado.

Osea en ves de decir:

I2CREAD PORTA.0,PORTA.1,%10100000,0,[VAR1]

QUEDARIA ASI:

addr = 0
I2CREAD SDA,SCL,CONT,addr,[VAR1]

DONDE SDA = PORTA.0 ; SCL = PORTA.1 ; cont = %10100000 ; addr = 0

Osea el ejemplo del PBP es para ponerlo de una manera que se entienda a la hora de leer y se vea mas bonito por que de resto le veo mucho sentido.
20/01/2012 #1613
Moderador

Avatar de D@rkbytes

Saludos. Yo realize un programa para clonar memorias I2C
en ese programa obviamente se necesitan dos memorias o mas XD
Esa palabra de control %10100000 o $A0 no cambia por eso se usa una Constante
que coincidentemente la llaman de control.
Yo para referirme a una o a otra memoria lo que hago es solo definir dos líneas SDA y SCL

Esta es la traducción de la ayuda en PBP del uso de Constantes

4.6 CONSTANTES

Las llamadas constantes pueden ser creadas de manera similar a las variables.
Puede ser mas conveniente usar un nombre de constante en lugar de un número constante.
Si el número necesita ser cambiado, únicamente puede ser cambiando
en un lugar del programa donde se define la constante.
No pueden guardarse datos variables dentro de una constante.

Etiqueta CON expresión constante

Algunos ejemplos son:

Mice CON 3
Traps CON Mice *1000
20/01/2012 #1614


Osea el ejemplo del PBP es para ponerlo de una manera que se entienda a la hora de leer y se vea mas bonito por que de resto le veo mucho sentido.
Sip.. es solo por comodidad y que se vea mas bonito...

como dices es lo mismo poner
I2CREAD PORTA.0,PORTA.1,%10100000,0,[VAR1]

que:
SDA Var PortA.0
SCL var PortA.1
Cont Con %10100000
I2CREAD SDA,SCL,CONT,addr,[VAR1]

quizas cuando es una sola linea i2cread sea mas conveniente no definir las constantes y variables, pero si son dos o mas pues es mas conveniente usarlas, solo para ahorrarse tiempo y que se vea mas lindo el codigo....
20/01/2012 #1615

Avatar de Dario

hola amigos, gracias por sus comentarios. les cuento que mañana voy a hacer la primera prueba de lectura del wiimotion, primero voy a intentar leer directamente el wiimotion como dispositivo y despues leer directamente el giroscopio.
saludosss
20/01/2012 #1616


primero voy a intentar leer directamente el wiimotion como dispositivo
Oki... yo la verdad con la información que esta en el wiki, no me queda nada claro como es que se maneja como dispositivo si no te daba alguna opinion....

espero que funcione y te deseo suerte...
21/01/2012 #1617

Avatar de Dario

ok, gracias por tu ayuda amigo lubeck. te cuento que para intentar leer el wii directamente, voy a usar la direccion que aparece en el comentario del programa en c que a segun creo yo, es la direccion del integrado wiimotion. el comentario es el siguiente:

// I2C adress 1: 0xA6 (8bit) 0x53 (7bit)

yo creo que la direccion o bit de control es 0x53 a segun estuve leyendo en el foro todopic, aca dejo el enlace http://www.todopic.com.ar/foros/index.php?topic=30669.0

saludosss
21/01/2012 #1618


esto se me hizo interesante....
La dirección I2C de del mando es 0x52 (0b1010010), por lo que para realizar lecturas direccionaremos a 0xA5 (0b10100101) y para escrituras a 0xA4 (0b10100100).

El procedimiento para obtener los datos es el siguiente:

Paso 1.- Abrir comunicación, Inicializar el mando escribiendo en 0xA4 los bytes 0x40, 0x00, cerrar comunicación (solo necesario una vez mientras se mantenga alimentado).

Paso 2.-Abrir comunicación, Posicionar el puntero de lectura escribiendo en 0xA4 el byte 0x00, cerrar comunicación.

Paso 3.- Abrir comunicación, Leer 6 bytes de 0xA5, cerrar comunicación.

Paso 4.-Una vez obtenidos los 6 bytes deberemos decodificarlos realizándole la operación “XOR” 0x17 y seguidamente SUMARLE 0x17 a cada uno de ellos. Tras este tratamiento, los bytes contendrán la siguiente información (byte 1 es el primer byte recibido).
sacado de aqui
21/01/2012 #1619

Avatar de Dario

lubeck dijo: Ver Mensaje
esto se me hizo interesante....


sacado de aqui
si, eso seria para leer el nunchak. estube haciendo unas comparaciones entre los pasos que da para empezar a leerlo y el codigo en pbp que puse anteriormente y eso es exactamente lo que hace ese codigo, aca dejo la parte en la que creo que lo hace.
Código:
NUNCHUCK:
 i2cwrite sda,scl,$A4,$40,[$00]
  pause 10
 i2cwrite sda,scl,$A4,[$00]
  pause 10
 i2cread sda,scl,$A5,[STR buffer\6]
  pause 10
  
 Jx=(buffer[0] ^ $17)+ $17 
 Jy=(buffer[1] ^ $17)+ $17
 Ax=(buffer[2] ^ $17)+ $17
 Ay=(buffer[3] ^ $17)+ $17
 buffer[5]=((buffer[5] ^ $17)+ $17 )

 if (buffer[5] & $01) <> 0 then
   BE=1
  else
   BE=0
 endif
 
 if (buffer[5] & $02) <> 0 then
   BD=1
  else
   BD=0
 endif
 
RETURN
para escribir el mio, me voy a basar en ese haciendo primero rutinas simples de lectura de cada eje y como no tengo un lcd, voy a utilizar un servo para mostrar el movimiento del mismo, apenas tenga novedad la subo.
saludos
21/01/2012 #1620

Avatar de mecatrodatos

Dario mira estos proyectos:

http://www.starlino.com/usb_gamepad.html

http://www.photopete.com/swarm/balbot.htm

te serviran demasiado para tu proyecto saludos
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2016, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.