Follow along with the video below to see how to install our site as a web app on your home screen.
Nota: This feature currently requires accessing the site using the built-in Safari browser.
QUE TE PARESE LO SIGUIENTEGRABANDO:
WRITE ADDRM1,MPOS1 'GRABA EN LA EEPROM EL VALOR DE MPOS1 EN LA DIRECCION ADDRM1
WRITE ADDRM2,MPOS2 'GRABA EN LA EEPROM EL VALOR DE MPOS2 EN LA DIRECCION ADDRM2
WRITE ADDRM3,MPOS3 'GRABA EN LA EEPROM EL VALOR DE MPOS3 EN LA DIRECCION ADDRM3
WRITE ADDRM4,MPOS4 'GRABA EN LA EEPROM EL VALOR DE MPOS4 EN LA DIRECCION ADDRM4
WRITE ADDRM5,MPOS5 'GRABA EN LA EEPROM EL VALOR DE MPOS5 EN LA DIRECCION ADDRM5
PAUSE 10
ADDRM1 = ADDRM1 + 5 'INCREMENTA ADDRM1 DE 5 EN 5 PARA DIRECCION DE MEMORIA
ADDRM2 = ADDRM2 + 5 'INCREMENTA ADDRM2 DE 5 EN 5 PARA DIRECCION DE MEMORIA
ADDRM3 = ADDRM3 + 5 'INCREMENTA ADDRM3 DE 5 EN 5 PARA DIRECCION DE MEMORIA
ADDRM4 = ADDRM4 + 5 'INCREMENTA ADDRM4 DE 5 EN 5 PARA DIRECCION DE MEMORIA
ADDRM5 = ADDRM5 + 5 'INCREMENTA ADDRM5 DE 5 EN 5 PARA DIRECCION DE MEMORIA
RETURN 'Retorna
*****************************************************
Cada vez que se va esta subrutina incrementa la dirección de memoria de 5 en 5 para lograr que al grabar nuevamente no se monten los datos uno sobre otro.
Así como esta funciona pero creo que con un next se puede mejorar...saludoss
Así como esta funciona pero creo que con un next se puede mejorar
MPos Var Byte[5]
I var byte
Add var byte
Add=0
Main:
Goto Main
Grabando:
for I=0 to 4
write i+add,mpos[i]
pause 10
Next I
add=add+5
if add>=256 then add=0 'limite de direccion de memoria
Return
No...el codigo seria dificilll???
No....se pueden realizar con cualquier pic??
MPos Var Byte[5]
I var byte
Add Var byte
SM Var Byte
Add=0
Main:
PulsOut PortA.0,MPos[I]
Pause 10
Gosub ADC_X
Gosub Rec_Mem
Goto Main
ADC_X:
For I=0 to 4
ADCIn I, SM
If SM <= 400 Then
MPos[i] = MPos[I] - 2
If MPos[I] <= 55 Then MPos[I] = 55
EndIf
If SM => 600 Then
MPos[I] = MPos[I] + 2
If MPos[I] => 250 Then MPos[I] = 250
EndIf
Next I
Return
Rec_Mem:
For I=0 to 4
Write I+Add,MPos[I]
Pause 10
Next I
Add=Add+5
If Add>=256 Then Add=0 'limite de direccion de memoria
Return
lo que no estoy seguro es si lograre mover los 5 servomotores ya que estan en distintos pines del pic por lo cual quedaria la duda si usar otro for next para ir alternandolo de salida,
por otro lado aun no entiendo bien lo de porque usar una variable tipo byte estoy algo confundido con eso ya que creía que tenia que ser de tipo word para el adc?
Que crees que pueda ser?
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%.
http://www.youtube.com/my_videos_upload
saludos y espero puedan ayudarmeprotocolo de comunicaion
condiciones de Start y Stop
La comunicacion en el bus i2c comienza cuando el master pone la condicion de start (S)
en el bus, lo cual es definido como la transicion de alto a bajo de la linea SDA
mientras que la lina SCL esta a nivel alto (ver figura abajo). el bus se considera ocupado hasta
hasta que el master pone una condicion de stop (P) en el bus, esto se define como la transicion
de bajo a alto en la linea SDA mientras SCL esta en alto (ver figura abajo).
ademas el bus sigue estando ocupado si un COMIENZO repetido (sr) se genera en vez de una
condición de DETENCIÓN.
formato de datos y reconocimiento
los bytes de datos son definidos para ser de 8 bits de largo. No hay restricción al número de
bytes transmitidos por transferencia de datos. Cada byte transferido se debe estar seguido
por una señal del reconocimiento (ACK). El reloj para la señal de reconocimiento ACK es
generado por el master, mientras que el receptor genera la señal de reconocimiento actual
tirando abajo SDA y manteniendose este bajo durante la porcion alta deldel impulso de reloj
de reconocimiento.
Si un esclavo está ocupado y no puede transmitir o recibir otro byte de datos hasta que se
haya realizado una cierta otra tarea, puede sostener scl a nivel bajo y asi forzar al master a un estado de espera.
La transferencia de datos normal reasume cuando el esclavo está listo, y relanza la línea del reloj (véase la figura abajo).
comunicaciones
despues de comenzar las comunicaciones con la condicion de start (S), el master envia 7 bits con la direccion de slave
seguida por un octavo bit, el bit de lectura/escritura. el bit de lectura/escritura, indica si el master esta
recibiendo o escribiendo datos en el dispositivo esclavo. entonces el master lanza linea SDA y espera por
la señal de reconocimiento ACK desde el dispositivo esclavo. cada byte transferido debe estar seguido por una
señal de reconocimiento ACK. para el reconocimiento, el dispositivo esclavo tira la linea SDA a nivel bajo y lo mantiene bajo
para el periodo alto de la linea scl. La transmisión de datos es terminada siempre por el master con una condición de Stop (p),
así libera la línea de comunicaciones. Sin embargo, el master puede generar una condición repetida del COMIENZO (sr), y direccionar otro
slave sin generar primero la condicion de stop (p).
la transicion de bajo a alto en la linea SDA mientras SCL es alto, define la condicion de STOP (P)
Todos los cambios de SDA deben ocurrir cuando la linea SCL es baja, con la excepción de las condiciones del comienzo y de parada.
lectura de registros
Para leer los registros internos del dispositivo ITG-3205, el master primero
transmite la condición de Start (s),seguido por la direccion i2c y el bit
de escritura (0). En el 9no el ciclo de reloj (cuando el reloj es alto), el
ITG reconoce la transferencia. El master entonces escribe la dirección del registro
que va a ser leído. Sobre la recepción de la señal ACK del ITG-3205, el master
transmite la señal de start seguida por la direccion de slave y el bit de lectura.
como resultado, el ITG-3205 envía una señal de ACK y los datos. la comunicacion termina
con una señal (NACK) y un bit de stop enviado por el master.la condición NACK se define de manera tal
que la línea de SDA sigue siendo alta en el 9no ciclo de reloj. para leer multiples
bits de datos, el master puede hacer salir una señal de reconocimiento (ACK)
en vez de una señal de no reconocimiento (NACK) En este caso, el ITG-3205 incrementa
automáticamente la dirección del registro y la salida de datos del registro apropiado
Las figuras siguientes muestran las secuencias leídas solas y de dos bytes
segun lo que yo se, deberia ser asi y no deberia existir ningun problema. y con respecto a la prueba que me sugeriste, no se ¿se puede con el programador jdm? ahora estoy armando un cable para conectar al puerto serie de mi pc y ver si puedo ver los datos en la ventana de comunicacion del microcode ahora lo que he visto es que ahi habla del bit de lectura/escritura ¿cual seria este en el comando que estoy enviando? lo que yo hago es esto: I2CREAD sda,scl,%1101000,$1D,[a1] ademas, la direccion i2c tiene 7 bits y no deberia ser de 8 bits? ¿acaso sera este 1 o 0 faltante la causa del problema?Yo te diria que es exactamente igual a la comunicacion con una memoria 24C o un reloj de tiempo real tipo ds1307, la diferencia es que este tiene unos registros de control y configuración para los ejes x,y,z. Tu has trabajado con memorias i2c y las has logrado leer alguno? Digo ya que no cambia leer en i2c es igual para todos los sistemas colocar la id del dispositivo, colocar la dirección a leer y ya deberías poder leer sin ningún problema tu realizaste la prueba que te sugerí?