Curso de programación de PIC en PICBasic Pro

gracias amigo Darkbytes, esta buenisimo el link que me compartes, deantemano gracias a Luccassiglo21 por sus diseños ya que me ayudaran mucho es lo que andaba buscando
 
hola que tal pues sigo con mis practicas ya realice varias de motores a pasos pero una me cuestan trabajo,

la cuestion es que deves de controlar cuantos pasos da un motor segun la entrada del puerto D con 7 bit los cuales se utilizarian como numeros binarios para dictar cuantos pasos de el motor, talvez no me explique muy bien por eso dejo la imagen, no se como me tome esas entradas como binario.
 

Adjuntos

  • pap binario.jpg
    pap binario.jpg
    21.5 KB · Visitas: 36
Bueno pues les tengo buenas y malas noticias con mi proyecto, que en realidad es un temporizador y un cuenta goles para un futbolito de mesa

el 50% del problema restante era que el pic que estaba usando estaba dañado algun pin que iba al LCD, pero ese pic era nuevo asi que no supuse que estaba dañado, (se debio haber dañado con estatica o algo asi), puse otro nuevo y listo ya funciona como se supone que debia hacerlo :)

ya tenia los sensores de los goles, el monedero electronico para las monedas, y un bedito actuador para detener las pelotas cuando el tiempo se acabara.... todo funcionaba de maravilla peroooooooo... que se atora el bendito actuador y se sobrecalento el circuito y se quemo el ultimo pic 628A que me quedaba... :cry:

ahora hare lo mismo pero con uno de los dos 877A que tengo... y empezar de nuevo...:rolleyes:

Hola lubeck, disculpa me distraje con el trabajo y no preste mucha atencion, tengo un aporte de un programador https://www.forosdeelectronica.com/posts/572897/ con el cual llevo mas de 3 o 4 años utilizando sin ningún tipo de problemas, te comento esto porque incluso en un proyecto llegue a programar unos 300 pic's 12F509 con oscilador interno y todos fueron reconocidos luego de ser programados no causo ningun conflicto, igual con el 12F675, 12F629, 16F628A. Se que a lo mejor es algo tarde pero para que lo tengas de referencia. En un solo caso el winpic no me permitio programar el pic sin el MCL, y fue un receptor IR con interrupcion y sin embargo logre recuperar el pic activando el MCL y re-programandolo, en estos dias hago un vídeo para que observes que es lo que sucede y como lo solucione...saludosss:apreton:
 
Hola rey....

ese es el JDM no??'...

yo lo arme y no lo pude echar a andar... :cry:
y desisti de revisarlo a fondo porque haciendo pruebas con el winpic nunca deshabilitaba los 5v(vdd)....
lo que marco en el recuadro rojo es para controlar el vdd pero no se puede... o sea que siempre estan activos... si gustas verificarlo con tu multimetro....

dibujo.JPG
ahora que ya me haces dudar en cuanto a eso :unsure: si dices que se reprograma sin problema algo esta raro...
 
Última edición:
Bueno si yo también tuve muchas dudas en su momento que aun no aclare mucho ya que me da cierto miedo descubrir algo que no sabia y pueda que este haciendo mal...jejeje...Te digo porque justo el programador yo tome de referencia un pin que dice ser de gnd no porque así lo quise si no que mi programador es como un clon prácticamente del JDM llevado a solo icsp, a pesar de que el pin 5 del db9 es gnd normalmente, pero en el programador queda como +5V y de echo lo medi por la duda en aquel entonces y efectivamente mide +5V, entonces la duda porque si dice que es GND mido +5V?, con referencia a tierra de los diodos y el zener. Vistes el circuito?
 
Saludos.
Les quiero dejar aquí una información acerca del funcionamiento del JDM
Esta información explica como es que hace el programador para tomar los voltajes de funcionamiento.
Antes que nada les presento mi programador JDM 2-1 en la primer foto y en la tercera usando ICSP.
En la segunda foto, su diagrama esquemático.
Graba muchos tipos de PIC de la serie 12XXXX y la 16XXXX así como EEPROMS 24CXXX.
Trabaja con programas como los famosos PonyProg, el ICProg o el WinPIC800
Está fabricado en PCB de fibra de vidrio muy delgada con serigrafía, y cuenta con conector ICSP.
La información que muestro a continuación, la encontré hace años en una pagina que todavía esta en línea.
;******************************************************************
Este programador por puerto serie hace uso de las siguientes señales:
  • TXD
    • - Tensión de alimentación y de programación, patilla /MCLR
  • RTS
    • - Pulsos de reloj, patilla RB6
  • DTR (salida), CTS (entrada)
    • - Datos en serie (serial data), patilla RB7
La tensión de la entrada de reloj está limitada mediante D3 y D4 sin que sea necesaria ninguna resistencia limitadora.
Los diodos a Vdd internos del PIC protegen también las entradas.
Los dispositivos 24CXX no tienen ningún diodo a Vdd, y D4 es absolutamente necesario.

Q2 aumenta el voltaje de salida a niveles RS232. Entonces funciona como base común.
R2 es una resistencia pull-up que no resulta fundamental debido a la corriente limitada del puerto RS232.
Q2 también limita la tensión de la entrada al PIC cuando DTR es de nivel alto.
Entonces funciona como un seguidor de emisor y se reduce la tensión de la entrada a Vdd-0.7V.
Cuando DTR se pone a nivel bajo, Q2 trabaja invertido y la ganancia sólo es aproximadamente de 5.
La resistencia equivalente es aproximadamente 10K/5 = 2K.
Esto reduce la corriente de entrada de datos al PIC junto con la resistencia R2.
Cuando DTR cambia de nivel bajo a nivel alto, Q2 cambia de modo invertido saturado a seguidor de emisor activo.
Esta causa un pico sobre los datos, pero el pico está extinguido cuando cambia el reloj.
Esto garantiza que las EEPROM no pasen el modo de prueba.
Q1 trabaja en cierto modo como seguidor de emisor también, pero se satura cuando está activo.
En ese caso su tensión CE es muy baja. El transistor activa o desactiva la tensión para MCLR.
TXD alimenta a C2 para que alcance 13V a través de la unión base-colector de Q1.
La tensión en C2 está limitada por el zener D6 y es aproximadamente 5.1V+8.2V = 13.3V.
Cuando TXD está a nivel alto la tensión en MCLR no excede esta tensión.
La base sube a una tensión más alta, pero Q1 se satura y la salida no excederá la tensión de colector.
C2 proporciona el Vpp y el Vdd a través del diodo zener D6.
Pero Vdd sólo aparece si el voltaje en C2 es aproximadamente de 13V.
Si tiene 8V, entonces será posible controlar la alimentación mediante RTS y DTR.
La alimentación C2 se reduce aproximadamente a 8V por medio de TXD, DTR y RTS
mantenidas a nivel alto durante aproximadamente 0.5s.
El diodo extra, D5, limita la tensión sobre TXD.
En principio se utiliza para alimentar la EEPROM cuando DTR y RTS están a nivel alto.
También garantiza que MCLR sea mayor de -0.2V cuando TXD está a nivel bajo.
El diodo D7 pone MCLR a nivel bajo cuando TXD está a nivel bajo.
El PIC también es alimentado por RTS mediante D3.
La corriente de entrada "On Data" también alimenta el PIC por Vss.
Ambas señales necesitan ser negativas para alimentar al dispositivo con la máxima corriente posible.
C2 alimenta al PIC si las señales son positivas. RTS y DTR no son criticas al programar las 24CXX,
porque el diodo D5 pone Vss a nivel bajo.
Al programar un PIC sólo D3 puede utilizarse. RTS y DTR necesitan ser de nivel bajo para alimentarlo,
y no deben estar a nivel alto durante demasiado tiempo.
La corriente es excepcionalmente alta al leer los ceros del PIC,
y el tiempo de lectura activo con DTR a nivel alto debe ser corto.
Para compensar la corriente utilizada, un nivel bajo debe aplicarse a RTS durante un tiempo extra.
Si reemplaza D5 y D7 por un BC557B, es importante que sepa que,
la base-emisor se comporta como un un diodo zener.
Sólo D7 pueden actuar como un zener, y MCLR necesita ser conectado al emisor,
mientras el colector del BC557B se conecta a Vss.
El transistor trabaja en cierto modo como seguidor de emisor, y proporciona a MCLR una corriente alta extra.
Esta corriente alta no es necesaria, y puede incluso dañar al BC557B si el programador se conecta con alimentación externa.
Conectar el programador a una fuente de alimentación externa siempre puede causar problemas,
y no se permite para el uso normal.
El peligro de conectar una fuente de alimentación externa está en que el diodo zener interior reduce el voltaje a 5.1V.
Y puede ser perjudicial que se aplique una tensión demasiado alta.
Las conexiones externas pueden causar problemas también debido a tensiones negativas.
Vdd se conecta a la masa del PC y pueden provocarse cortocircuitos si un circuito externo se conecta con la masa del ordenador, por ejemplo a traves de la toma de tierra.
Una fuente de alimentación externa también puede dar problemas de seguridad si los PIC u otros dispositivos no se insertan adecuadamente.
;******************************************************************
Ok. Así es como funciona el programador JDM

Referencias:
Programador PIC y EEPROM JDM

Suerte y hasta luego. :apreton:
 

Adjuntos

  • JDM-2-1.jpg
    JDM-2-1.jpg
    98.9 KB · Visitas: 123
  • JDM 2-1 SCH.jpg
    JDM 2-1 SCH.jpg
    96.8 KB · Visitas: 131
  • JDM-ICSP.JPG
    JDM-ICSP.JPG
    187.9 KB · Visitas: 291
Última edición:
Que tal amigos lo que pasa es que quiero hacer un display que marca la hora...
y e conseguido por la red este circuito pero no me sale el codigo para programarlo en PIC BASIC..
espero me puedan ayudar a programarlo en PIC BASIC, les dejo el circuito diseñado en Proteus
pero si tienen algun otro modelo o diseño ayudenme....please....

Que tal espero te sirva el ejemplo que te anexo

Saludos
 

Adjuntos

  • reloj matrix.rar
    113 KB · Visitas: 189
Que tal mecatrodatos

esta padrisimo el circuito que me compartiste, lo voy a empezar a revisar pa entenderle muco mejor, a un que de entrada sabes tu por que la tempratura siempre meda negativo -10°C por ejemplo... sabes por que...o ay algo qe corregirle...???

saludos...amigo...
 
hola amigos, yo por aqui de nuevo.
bueno, en estos dias he retomado la experimentacion con el bendito itg3205 y he podido leer el numero que me dan sus ejes sin mover el gyro en mi pc utilizando el serial comunicator del microcode.
la lectura que me da sin moverlo de su lugar es la siguiente:

eje H/L numero
Xout-H = 255
Xout-L = 0
Yout-H = 255
Yout-L = 0
Zout-H = 0
Zout-L = 0

los ejes X-H, Y-H y Z-H, varian al mover el gyro pero X-L, Y-L y Z-L, no lo hacen, se quedan constantemente en 0. teoricamente al configurar el registro 22 – DLPF, Full Scale en $03, deberia cubrir toda la escala leyendo asi por ejemplo, el eje X en su parte alta y su parte baja y ambos deberian variar al mover el gyro, pero no lo hace. aca dejo el codigo que estoy usando para ver si alguien ve lo que yo no veo y me dice que estoy haciendo mal :D ... espero no sea mucho pedir jeje... :D (ah, el programa lee el eje Xout-H, la lectura que hice fue hecha de a un eje.)
saludosss

Código:
@ DEVICE MCLR_OFF, WDT_OFF, LVP_OFF, BOD_OFF, PWRT_ON, PROTECT_OFF
include "modedefs.bas"
 DEFINE   OSC   4              ' Para trabajar con un cristal de 4MHz
 DEFINE I2C_HOLD 1
 define I2C_SLOW 0 ' Velocidad de I2C de 400KHz
trisa=0           'puertos como salidas
trisb=0
porta=0 
portb=0
SDA VAR PORTB.1 'entrada y salida de datos
SCL VAR PORTB.2 'reloj 
a1 var byte     'variable para almacenar los datos recibidos
i2cwrite sda,scl,%11010000,62,[$80]  'resetear el ITG a 0
pause 10
i2cwrite sda,scl,%11010000,21,[$09]  'configuro SAMPLE RATE
pause 10
i2cwrite sda,scl,%11010000,22,[$3]  'registro 22 full scale a ±2000°/sec 
pause 10
i2cwrite sda,scl,%11010000,23,[$00] 'sin interrupcion
pause 10

leer:
I2CREAD sda,scl,%11010000,29,[a1]  'leer eje Xout-H y guardar en a1
pause 5
serout portb.0,N2400,[#a1,"-"]   'enviar el valor de a1 a la pc
pause 5
goto leer                        'vuelve a iniciar lectura
 
Última edición:
Hola d@rio, volvi a revisar el datasheet, y no veo por ningún lado lo de des-habilitar la interrupción, veo solo configuraciones de como hacer la interrupción, en todo caso revisa el pin 12 del integrado si esta al 5V o esta a 0V, porque de eso depende la configuración de la interrupción, aunque dices que la parte alta si cambia, por otro lado lo del registro 22, no es un solo registro son dos registros en la direccion 22, el FS_SEL que son los bit 4 y 3 y el registro DLPF_CFG que son los bit 0 1 2.
Yo te recomiendo no trabajar en hexadecimal ya que tiende a traer mas confuciones. Fijate tu estas enviando lo siguiente.

a la direccion 22 en hexa $3 en binario 00000011,

lo que quiere decir que al registro DLPF_CFG lo colocaste en hex $3 binario 011, lo que quiere decir que seleccionaste el parametro 3 del filtro pasa bajo.


y al registro FS_SEL le enviaste en hex $00 y en binario 00, lo que quiere decir que seleccionaste
otra escala.

revisa bien y me avisas, por cierto creo que esta semana ya estoy por comprar el motion plus.

cualquier cosa me avisas saludos
 
Última edición:
hola amigo rey, tenes razon con lo del registro full scale, lo que yo tendria que poner seria 00011000, asi pondria 3 en el registro fs_sel y 000 en el registro dlpf_cfg. por otra parte, seria de gran ayuda si compras un wiimotion con este itg, 2 cerebros piensan mejor que 1 :D ... ademas,la verdad que estoy a punto de tirar la tohalla jejeje... me tiene contra la cuerdas el muy desgraciado :LOL:
saludosss
 
Dario

Yo leeria los dos byte de una sola vez como en el adjunto:

Código:
@ DEVICE MCLR_OFF, WDT_OFF, LVP_OFF, BOD_OFF, PWRT_ON, PROTECT_OFF
include "modedefs.bas"
DEFINE   OSC   4                     'Para trabajar con un cristal de 4MHz
DEFINE I2C_HOLD 1
define I2C_SLOW 0                    'Velocidad de I2C de 400KHz
trisa=0                              'puertos como salidas
trisb=0
porta=0 
portb=0
SDA VAR PORTB.1                      'entrada y salida de datos
SCL VAR PORTB.2                      'reloj 
a1 var byte                          'variable para almacenar los datos recibidos
 
'#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#
a2 var byte     'variable para almacenar los datos recibidos   (LOW)
'#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#
 
i2cwrite sda,scl,%11010000,62,[$80]  'resetear el ITG a 0
pause 10
i2cwrite sda,scl,%11010000,21,[$09]  'configuro SAMPLE RATE
pause 10
i2cwrite sda,scl,%11010000,22,[$18]  'registro 22 full scale a ±2000°/sec
                                     'Modificado según ReyVilla 
pause 10
i2cwrite sda,scl,%11010000,23,[$00]  'sin interrupcion
pause 10
leer:
I2CREAD sda,scl,%11010000,29,[a1]    'leer eje Xout-H y guardar en a1
pause 5
 
'#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#
I2CREAD sda,scl,%11010000,30,[a2]    'leer eje Xout-L y guardar en a2
'#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#
 
serout portb.0,N2400,[#a1,"-"]       'enviar el valor de a1 a la pc
pause 5
 
'#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#
serout portb.0,N2400,[#a2,"-"]       'enviar el valor de a2 a la pc
pause 5
'#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#
 
goto leer                            'vuelve a iniciar lectura

Y lo enviaria a la PC siempre y cuando la manera que tengas implementado todo el banco de pruebas ahora te lo permita.

Por otra parte creo conveniente leer los 2 byte de los 3 Gyro de una sola vez.



Saludos, JuanKa.-
 
amigo juanka: gracias por tu codigo, lo acabo de probar y funciona perfecto, puedo leer el eje X completo, tanto la parte baja como la parte alta, muchas gracias por tu tiempo amigo, ahora voy a intentar leer los tre ejes de una sola vez como me sugieres.
ahora, lo que noto, es que la parte baja del eje X varia sin mover el aparato ¿a que podra deberse eso?
saludos y gracias (y)
 
D@rio

amigo juanka: gracias por tu codigo,.....

Que código ???, es tu código con un pequeño agregado mio (colaboración apenas) y sin probarlo cosa que has hecho tu. Muchas veces leyendolos en el pasado me doy cuenta de la dificultad de trabajar de esta manera, pero eso no quita que intente colaborar con alguien cuando veo que mi aporte tiene lógica para probar y tengo un tiempo para elaborar la respuesta/idea.



Ahora yendo a la cuestión técnica; respecto a las variaciones de la parte baja del eje X supongo varias alternativas distintas:

A) Son debido a la sensibilidad de posee este Gyroscopo= 2000°/seg.

B) Tenemos que pensar que el mismo tiene internamente 3 ADC's de 16bit, 65536 posibles posiciones!!!!!!!!!! dentro de un giro de 360°. O mejor pensando que la información por eje esta en 2 Byte y como Complemento a 2, divago que tengo 360° a la izquierda con 32768 posibles posiciones (una cada 0.010986328125°) y otro tanto hacia la derecha, MUCHISIMA precisión para mi gusto!!!.

C) Son ruidos de Cuantificación (http://es.wikipedia.org/wiki/Cuantificación_digital) producidos durante la Conversión de Analógico a Digital. Y para esto "creo" que se debe trabajar en la elección del DLPF_CFG dentro del byte 22 para filtrar mejor la señal con el "Digital Low Pass Filter" interno del Gyro aunque tal vez se pierda algo de exactitud, esto deberas probarlo ya que tu tienes el banco de pruebas funcional.



Por otra parte y tratando de avanzar más en la investigación te adjunto una modificación del código para leer los 3 Ejes y el Sensor de Temperatura, no se si funcionara ni si el tamaño del programa te entrara en el Pic que estas utilizando como Interfaz entre el Gyro y la PC.

Código:
@ DEVICE MCLR_OFF, WDT_OFF, LVP_OFF, BOD_OFF, PWRT_ON, PROTECT_OFF
include "modedefs.bas"
DEFINE   OSC   4                     'Para trabajar con un cristal de 4MHz
DEFINE I2C_HOLD 1
define I2C_SLOW 0                    'Velocidad de I2C de 400KHz
trisa=0                              'puertos como salidas
trisb=0
porta=0 
portb=0
SDA VAR PORTB.1                      'entrada y salida de datos
SCL VAR PORTB.2                      'reloj 
a1 var byte                          'variable para almacenar los datos recibidos
 
[COLOR=red]'#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#[/COLOR]
a2 var byte     'variable para almacenar los datos recibidos   (Low)
b1 var byte     'variable para almacenar los datos recibidos   (High)
b2 var byte     'variable para almacenar los datos recibidos   (Low)
c1 var byte     'variable para almacenar los datos recibidos   (High)
c2 var byte     'variable para almacenar los datos recibidos   (Low)
d1 var byte     'variable para almacenar los datos recibidos   (High)
d2 var byte     'variable para almacenar los datos recibidos   (Low)
[COLOR=red]'#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#[/COLOR]
 
i2cwrite sda,scl,%11010000,62,[$80]  'resetear el ITG a 0
pause 10
i2cwrite sda,scl,%11010000,21,[$09]  'configuro SAMPLE RATE
pause 10
i2cwrite sda,scl,%11010000,22,[$18]  'registro 22 full scale a ±2000°/sec
                                     'Modificado según ReyVilla 
pause 10
i2cwrite sda,scl,%11010000,23,[$00]  'sin interrupcion
pause 10
leer:
I2CREAD sda,scl,%11010000,29,[a1]    'leer eje Xout-H y guardar en a1
pause 5
 
[COLOR=red]'#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#[/COLOR]
I2CREAD sda,scl,%11010000,30,[a2]    'leer eje Xout-L y guardar en a2
pause 5
I2CREAD sda,scl,%11010000,31,[b1]    'leer eje Yout-H y guardar en b1
pause 5
I2CREAD sda,scl,%11010000,32,[b2]    'leer eje Yout-L y guardar en b2
pause 5
I2CREAD sda,scl,%11010000,33,[c1]    'leer eje Zout-L y guardar en c1
pause 5
I2CREAD sda,scl,%11010000,34,[c2]    'leer eje Zout-L y guardar en c2
pause 5
I2CREAD sda,scl,%11010000,27,[d1]    'leer eje Temp-L y guardar en d2
pause 5
I2CREAD sda,scl,%11010000,28,[d2]    'leer eje Temp-L y guardar en d2
pause 5
[COLOR=red]'#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#[/COLOR]
 
serout portb.0,N2400,[#a1,"-"]       'enviar el valor de a1 a la pc
pause 5
 
[COLOR=red]'#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#[/COLOR]
serout portb.0,N2400,[#a2,"-"]       'enviar el valor de a2 a la pc
pause 5
serout portb.0,N2400,[#b1,"-"]       'enviar el valor de b1 a la pc
pause 5
serout portb.0,N2400,[#b2,"-"]       'enviar el valor de b2 a la pc
pause 5
serout portb.0,N2400,[#c1,"-"]       'enviar el valor de c1 a la pc
pause 5
serout portb.0,N2400,[#c2,"-"]       'enviar el valor de c2 a la pc
pause 5
serout portb.0,N2400,[#d1,"-"]       'enviar el valor de d1 a la pc
pause 5
serout portb.0,N2400,[#d2,"-"]       'enviar el valor de d2 a la pc
pause 5
[COLOR=red]'#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#[/COLOR]
 
goto leer                            'vuelve a iniciar lectura


En lo personal me gustaria y si puedes armarlo aunque sea un archivo de texto (*.txt) tener una tirada de la respuesta que entraga el Gyro y visualizas en la PC aunque sean las respuestas en Hex minimamente separadas como:
Eje_X , Byte_L , Byte_H
Eje_Y , Byte_L , Byte_H
Eje_Z , Byte_L , Byte_H
Temp , Byte_L , Byte_H

para realizar una planilla en Excel y tratar de ver las variaciones a ver si se saca alguna idea de los cambios espaciales. Creo que seria mas fácil de comprender cambiando la posición de un eje a la vez digamos 45° y ver como varia. No se si te animas a probarlo pero ese archivo *.txt con pruebas de ese tipo nos enseñaria muchisimo acerca de la filosofia del funcionamiento del mismo Gyro, fuera que sepamos actualmente que es lo que hace.



Saludos, JuanKa.-


P.D.1: D@rio y demas foristas disculpen la extensión de esta respuesta.

P.D.2: Como siempre lo que se encuentra entre " '#=#=# " es el agregado que he realizado.

P.D.3: Corregido errores (HORRORES) dentro de los Comentarios del Código.
 
Última edición:
JAJAJA :LOL: amigos como que se nos desperto un gran interes por el giroscopio :LOL:, yo recien termino mi código, que coloco acá una mejora al que colocastes antes, es algo mas reducido y hace prácticamente lo mismo, ya sacaremos uno mas optimisado entre nosotros, este código es mas corto pero hace lo mismo en menos lineas...saludoss :apreton:


Código:
@ DEVICE MCLR_OFF, WDT_OFF, LVP_OFF, BOD_OFF, PWRT_ON, PROTECT_OFF
include "modedefs.bas"
DEFINE   OSC   4                     'Para trabajar con un cristal de 4MHz
DEFINE I2C_HOLD 1
define I2C_SLOW 0                    'Velocidad de I2C de 400KHz
trisa=0                              'puertos como salidas
trisb=0
porta=0 
portb=0
SDA VAR PORTB.1                      'entrada y salida de datos
SCL VAR PORTB.2                      'reloj 

TEMP_OUT_H  VAR BYTE  'variable de TEMP_OUT_H
TEMP_OUT_L  VAR BYTE  'variable de TEMP_OUT_L
GYRO_XOUT_H VAR BYTE  'variable de GYRO_XOUT_H
GYRO_XOUT_L VAR BYTE  'variable de GYRO_XOUT_L
GYRO_YOUT_H VAR BYTE  'variable de GYRO_YOUT_H
GYRO_YOUT_L VAR BYTE  'variable de GYRO_YOUT_L
GYRO_ZOUT_H VAR BYTE  'variable de GYRO_ZOUT_H
GYRO_ZOUT_L VAR BYTE  'variable de GYRO_ZOUT_L
 
'#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#
a2 var byte     'variable para almacenar los datos recibidos   (LOW)
'#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#
 
i2cwrite sda,scl,%11010000,62,[$80]  'resetear el ITG a 0
pause 10
i2cwrite SDA,SCL,%11010000,21,[$09,$18,$00] 'configuracion del igt
pause 10 

leer:
I2CREAD sda,scl,%11010000,27,[TEMP_OUT_H,TEMP_OUT_L,GYRO_XOUT_H,_
GYRO_XOUT_L,GYRO_YOUT_H,GYRO_YOUT_L,GYRO_ZOUT_H,GYRO_ZOUT_L]    'leer desde la direccion 27 a la 34
pause 10                                                         'y lo guarda en su respéctiva variable
 
serout portb.0,N2400,["TEMP-H",#TEMP_OUT_H,"-",10,13]       'enviar el valor de TEMP_OUT_H a la pc
serout portb.0,N2400,["TEMP-H",#TEMP_OUT_L,"-",10,13]       'enviar el valor de TEMP_OUT_H a la pc
pause 5
serout portb.0,N2400,["X-H",#GYRO_XOUT_H,"-",10,13]       'enviar el valor de GYRO_XOUT_H a la pc
serout portb.0,N2400,["X-L",#GYRO_XOUT_L,"-",10,13]       'enviar el valor de GYRO_XOUT_L a la pc
pause 5
serout portb.0,N2400,["Y-H",#GYRO_YOUT_h,"-",10,13]       'enviar el valor de GYRO_YOUT_H a la pc
serout portb.0,N2400,["Y-L",#GYRO_yOUT_l,"-",10,13]       'enviar el valor de GYRO_YOUT_L a la pc
pause 5
serout portb.0,N2400,["Z-H",#GYRO_ZOUT_h,"-",10,13]     'enviar el valor de GYRO_ZOUT_H  a la pc
serout portb.0,N2400,["Z-L",#GYRO_ZOUT_l,"-",10,13]       'enviar el valor de GYRO_ZOUT_L  a la pc
pause 5
goto leer                            'vuelve a iniciar lectura

EDITO: gracias, no lo habia usado antes, si me preguntaba como lo hacen pero gracias a ti ya lo se y lo tomare en cuenta y es cierto queda mejor asi...(y)
 
Última edición:
ReyVilla

...... yo recien termino mi código, que coloco acá una mejora al que colocastes antes, es algo mas reducido y hace prácticamente lo mismo.......

Perdón, pero yo solo modifique/amplie unas líneas del que coloco D@rio y ni sabia si iba a ser posible compilarlo y que funcionara, ya que aun a pesar de mi edad NO se programar todavía, me costo un triunfo con la ayuda del µCodePlus comprender el significado de algunas sentencias. Y si bien varias veces desde que pregunto el por el Gyro le respondi es por que vi al leer la Datasheet que la mayoria le daba respuestas fuera del tarro!!! (expresión tipica Argentina) y solo intente aclararle lo que yo comprendia.

También habia pensado colocar las variables en una matriz pero insisto, como no se programar aun tenias mas dudas que certezas. Y de esta manera quedaba 100% comprensible para el autor inicial del mismo y facilmente modificable con agregados o quitas de líneas.

Por otra parte y al desconocer todo el proceso no tengo la certeza que el producto final en formato *.hex sea mas corto, ya que desconozco como cambia el tamaño al compilar y linkear el µCodeStudioPlus :D :D!!. Y antes que me olvide te pediria que el proximo código que subas/coloques lo hagas dentro de las etiquetas ["CODE"] y ["/CODE"] ;) sin las comillas (") para que sea mas legible para quienes no estan practicos como yo.


En definitiva, el unico que podra tener avances es D@rio al ser el unico en tener el Gyro delante de sus ojos!!!, todo un Conquistador Avanzado :LOL:. Yo por ahora ni pienso en comprar uno para probar.



Saludos, JuanKa.-

P.D.: Todo lo expresado ha sido realizado con la MEJOR ONDA, de manera de aprender, trabajar y reirnos todos.-
 
Por otro lado, D@rio ya compre el wii motion el día de mañana me lo dan, me gustaría ir armando el circuito si no es mucha molestia de mi parte, como es tu circuito si tienes un esquema o una imagen, si le hicistes modificaciones y la interface si es con max-232...etc...gracias
 
hola saludos a todos, recurro a ustedes porque estoy realizando unas practicas de motores a pasos, ya realice la mayoria de las practicas solamente una no logro conseguir que me funcionen.

pic16f877a
el puerto b.0 a b.3 son para el motor pap unipolar
el puerto d se utiliza como entrada

es sobre una cierta cantidad de pasos que debe de dar el motor segun el puerto d. adjunto la imagen para que entiendan mejor, en este tambien logre hacer que funcionara pero no correctamente ya que yo logre que diera ciclos (4 pasos) y no pasos. me imagino que se deve de hacer con con el comando de desplazamiento pero no se como hacer el desplazamiento "<<" en solo las las salidas b.0,b.1,b.2,b.3


talvez no me explique muy bien por eso dejo la imagen
de antemano gracias y estare pendiente de sus respuestas
 

Adjuntos

  • pasos.png
    pasos.png
    38.5 KB · Visitas: 22
Última edición:
Atrás
Arriba