Curso de programación de PIC en PICBasic Pro

Dario

FELICITACIONES por el GRAN AVANCE (lindo dato encontre en la página del Cuadricoptero ;) , que me pasaste por MP).

Para completar lo que has avanzado, seria interesante ver que pasa cuando realizas los mismos movimientos que hiciste en tu video
desde el eje central pero hacia la derecha para ver como es la variación hacia el otro sentido.

Al ver ese video desde Yotube vi algunas cosas mas que aqui te pongo para que veas como interpretan el movimiento hacia ambos lados, con numeros positivos y negativos:

A: Muestra de la plaqueta que probaran en "B".

B: Prueba de la plaqueta de "A"

Use para la busqueda en Youtube "ITG3205" y aparecen mas videos, me centre en esos dos que dan una idea a lo que buscabas.



Saludos, JuanKa.-
 
amigo juanka gracias por tu comentario, te cuento que trate de hacer la prueba leyendo el eje Z_L pero no tube buenos resultados ya que el numero entregado no se queda fijo, es como si estuviese moviendose. estoy buscando la forma de leerlo sin que presente este inconveniente... el programa de calibracion o configuracion que esta en el video lo tengo pero no se bien como se usa ni como se conecta a la placa. por ahora sigo investigando, apenas tenga mas novedades las posteo. gracias a todos, saludosss
 
D@rio

..... el programa de calibracion o configuracion que esta en el video lo tengo pero no se bien como se usa ni como se conecta a la placa. .....
El link al programa de calibración lo puse solo para hacer notar los valores que toma el Gyro, en la imagen que adjunto a este post esta marcado como "Zona1". Y esos valores son totalmente distintos a lo que veo que tienes en tu video. Por eso te reitero el pedido de los valores girandolo hacia la derecha como indico a continuación.



..... te cuento que trate de hacer la prueba leyendo el eje Z_L pero no tube buenos resultados ya que el numero entregado no se queda fijo, es como si estuviese moviendose. estoy buscando la forma de leerlo sin que presente este inconveniente .....
No me molesta que se mueva un poco más de lo que se mueve ahora como cuando lo tenes fijo o lo moves hacia la izquierda. Me interesa conocer entre que valores oscila con el movimiento como en el video que has hecho.
No es necesario un video ya que si comentas para el equivalente del movimiento hacia la izquierda entre que valores varia cuando lo haces hacia la derecha a mi me da la información que ando buscando.




Personalmente para conocer el funcionamiento del Gyro no me molestan las oscilaciones de los valores como te comentado varias veces. Eso no quita que una vez que se sepa como funciona bien el Gyro y tu continues con el desarrollo de tu proyecto se les deba prestar mucha atención y hasta realizar promedios como en la página del Cuadricoptero.

En mi opinión nos cuesta (y me incluyo) conocer "con exactitud" (a ciencia cierta) que es esa info que nos entrega el Gyro, creo que sin eso no es posible avanzar en la programación de un µControlador para diseñar una aplicación determinada o proyecto que tu desees.




Saludos, JuanKa.-
 

Adjuntos

  • Zona1÷PrgCalibracion.jpg
    Zona1÷PrgCalibracion.jpg
    25.1 KB · Visitas: 19
Que tal, yo de nuevo

ya probe el codigo que me paso el compañero reyvilla .. y no no me funciona o por lo menos no hace lo que quiero.... mmm alguna otra sugerenciaa porfa.
 
bueno, aca subo un video girando el itg hacia la derecha usando como eje mi nueva silla de computadora usada jeje... :D tambien dejo el esquematico y el codigo que estoy utilizando para leer el eje Z_L que por cierto no me da el mismo resultado que la lectura del eje Z_H, solo da un numero muy confuzo. saludosss (ah, por cierto, el micro funciona con un cristal de 20MHZ)
esquematico:
Diagrama ITG3205.JPG
codigo:
Código:
@ DEVICE MCLR_OFF,HS_OSC, WDT_OFF, LVP_OFF, BOD_OFF, PWRT_ON, PROTECT_OFF
DEFINE   OSC   20                     'Para trabajar con un cristal de 20MHz
DEFINE I2C_HOLD 1
define I2C_SLOW 0                    'Velocidad de I2C de 400KHz
cmcon=7
trisa=0                              'puertos como salidas
trisb=0
porta=0 
portb=0
SDA VAR PORTA.1                      'entrada y salida de datos
SCL VAR PORTA.2                      'reloj 
numero var word
numero2 var word
unid var byte
dece var byte
cent var byte
mile var byte
 
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,[$1A]  'registro 22 full scale a ±2000°/sec 
pause 10
numero=0
leer:
  I2CREAD sda,scl,%11010000,33,[numero]    'leer eje Xout-H y guardar en a1
  pause 4
  I2CREAD sda,scl,%11010000,34,[numero2]    'leer eje Xout-H y guardar en a1
  pause 4
  numero2=numero2/10
  gosub display
goto leer

display:
  unid=numero2 dig 0
  dece=numero2 dig 1
  cent=numero2 dig 2
  mile=numero2 dig 3
  portb=224+mile
  pause 4
  portb=208+cent
  pause 4
  portb=176+dece
  pause 4
  portb=112+unid
  pause 4
  return

y video:
 
Última edición:
Hola dario creo que habria que trabajar manteniendo el ultimo dato de velocidad estatico con una variacion aceptable del 1°, con esto deberías de tener cual fue la velocidad del un punto a otro sin variar al llegar al punto final, si la calibracion es de escaneo es de una muestra cada 8ms, sabiendo esto puedes colocar una condición que si el nuevo valor esta 1 por encima o 1 por debajo no cambiar el valor del eje a mostrar, recordando que ese valor es la velocidad angular, si se pudiera mantener una velocidad lineal el valor se mantendría, pero como eso es mas complicado lo mejor es mantener el ultimo valor leído con un rango de +/- para que no cambie a menos que sea halla movido.
 
PodriaN pasarme el diagrama del ciruito para poder probar el archivo de "Ejemplos USB 18F4550"
Para armarlo fisicamente ..apenas me estoy iniciando :)..un saludo y que grandes son jeje
 
D@rio

Aqui te adjunto el esquemático incluyendo el "Led de Signo" que nos permitira saber cuando lo giras hacia la derecha solo encendiendo el led pero significando el "-". Es importante que lo conectes en el pin #2 = RA3 del µControlador.


Después de prepararlo y mientras editaba este post me di cuenta de dos cosas:

1) No conecte el pin #4/MCLR.VPP del µControlador a Vdd
2) También se podria haber usado los Puntos Decimales de los Display's, como no estaban en la imagen que subiste en el post #1898 me olvide pero supongo que esta conectado como corresponde.

Ahora me dedico a realizar los cambios en el programa del PBP para enviartelo y que controles que compila BIEN al menos, si no es lo esperado lo conversamos.



Saludos, JuanKa.-
 

Adjuntos

  • Itg3205-Dario.pdf
    26.9 KB · Visitas: 63
  • Itg3205-Dario.Eagle.pdf
    26.9 KB · Visitas: 53
bien, aqui la prueba en video del codigo modificado por el amigo juanka con resultados exelentes ya que va desde 0000 para arriva y desde 0000 para abajo con indicacion de - (menos). al fin estamos logrando domar a este giroscopio de... :LOL:


tambien dejo el codigo que al final quedo asi:
Código:
@ DEVICE MCLR_OFF, HS_OSC, WDT_OFF, LVP_OFF, BOD_OFF, PWRT_ON, PROTECT_OFF 
DEFINE   OSC   20                    'Para trabajar con un cristal de 20MHz
DEFINE I2C_HOLD 1 
define I2C_SLOW 0                    'Velocidad de I2C de 400KHz 
cmcon=7 
trisa=0                              'puertos como salidas 
trisb=0                              'puertos como salidas 
porta=0 
portb=0 
SDA VAR PORTA.1                      'entrada y salida de datos 
SCL VAR PORTA.2                      'reloj 
numero var word 
unid var byte 
dece var byte 
cent var byte 
mile var byte 
numero2 var word 
'#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#   'agrego variable de bit para signo 
sign var PORTA.3                     'RA3 = Port.A.3 = pin2 
'#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=# 
 
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,[$1A]  'registro 22 full scale a ±2000°/sec 
                                     'Modificado según ReyVilla 
pause 10 
i2cwrite sda,scl,%11010000,23,[$00]  'sin interrupción 
pause 10 
numero=0 
numero2=0 
leer: 
  I2CREAD sda,scl,%11010000,33,[numero]    'leer eje Xout-H y guardar en numero 
  pause 5 
 
'#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#   'primero detecto el signo 
gosub giro                               '+ ó - 
'#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#   'luego acomodo a solo 4 digitos 
numero=numero/10                         '0 a 3276 ; porque ahora sera 
'#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#   'entre +32768 , 0 , -32768 
 
  gosub display 
goto leer 
 
'#=#=#=#=#=#=#=#=#=#=#=#=#=#         'enciendo el signo y acomodo el Comp. a 2 
giro: 
  sign=1                             'lo coloco apagado por defecto 
  if numero > 32768 then             'verifico si gira a Derecha ó Izquierda 
  sign=0                             'lo enciendo por que es giro a la Derecha 
'#=#=#=#=#=#=#=#=#=#=#=# Rutina en elaboracion #=#=#=#=#=#=#=#=#=#=#=#=#=#=# 
  numero = 65535 - numero    'Realizo el calculo y acomodo a los limites   # 
  pauseus 10                 'de las variables el "Complemento a 2"        #
  'numero = 32767 - numero    'con una pausa de 10uSeg.                     # 
'#=#=#=#=#=#=#=#=#=#=#=# Rutina en elaboracion #=#=#=#=#=#=#=#=#=#=#=#=#=#=# 
  else 
  sign=1                             'lo mantengo apagado por giro a Izquierda 
  endif 
  return 
'#=#=#=#=#=#=#=#=#=#=#=#=#=#
 
display: 
  unid=numero dig 0 
  dece=numero dig 1 
  cent=numero dig 2 
  mile=numero dig 3 
  portb=224 + mile 
  pause 4 
  portb=208 + cent 
  pause 4 
  portb=176 + dece 
  pause 4 
  portb=112 + unid 
  pause 4 
  return
 
Buenas; Como les va a todos? Consulta; Por casualidad alguien trabajo con el protocolo x.25?
Hay CI especificos para codificar y decodificar con salida y entrada serial, pero queria saber si alguien trabajo con este protocolo en PIC basic para ver si puedo realizar un enlace de mayor distancia implementado un par de handies y un hardware relativamente sencillo...

Saludos
 
Heyy muchas gracias a mecatrodatos por este post etoy seguro que es de mucha utilidad para muchos......principalmente porque esta en lenguaje ipo microcode =) saludos
 
Buenas; Como les va a todos? Consulta; Por casualidad alguien trabajo con el protocolo x.25?
Hay CI especificos para codificar y decodificar con salida y entrada serial, pero queria saber si alguien trabajo con este protocolo en PIC basic para ver si puedo realizar un enlace de mayor distancia implementado un par de handies y un hardware relativamente sencillo...

Saludos

Correccion... en vez de X.25, queria decir AX.25; En definitiva, son muy similares; en fin.
Este protoclo lo que hace basicamente es codificar los datos e insertarlos en una protadora de RF (imagen de ejemplo extraidas de google). Mas info al respecto click aca
basic.jpg


Para el caso de transmision VHF, la modulación AFSK en FM, contiene tonos Bell 202 (1200/200 Hz)con una velocidad de 1200 baudios; Suficientes para mandar solo unos pocos bytes.

En la pagina de PicBasic, hacen referencia a este ejemplo:

principal:
si serial_pin = 1, entonces
freqout 1,1,2200
más
freqout 1,1,1200
endif
Ir a principal

Pero no me basta para entender y o tomar como ejemplo. Osea, no se como encarar la transformacion del dato a frecuencia, y luego, en el otro microcontrolador, decodificarlo...
Podria armar una tabla y los micros y despues comparar; pero los handies, se corren de banda segun la intensidad de la transmision... osea, si alguien tiene un frecuencimetro, podra notar que al modular la voz humana a un nivel, notara que esta transmitiendo a determinada frecuncia... cuando grita, podran notar que hay un corrimiento, lo cual me lleva a pesar que tendria que dar un margen de frecuencias relativamente ancho y jugar con la ganancia del volumen en el receptor....
Los CI especificos en el caso de que no lo pueda hacer en pbp, son los xr2006... estoy modulan y demodulan dandote una salida serial directamente... Como no los consigo, quizas alguien me pueda orientar o dar una mano de como arrancarlos en basic; Saludos
 
D@rio

Mirando una traducción de la ayuda del PBP en http://www.todopic.com.ar/pbp_sp.html encontre una función de "Valor Absoluto" que es perfecta para el programa de lectura del Gyro, te adjunto la sección de la sub rutina giro:

Código:
'#=#=#=#=#=#=#=#=#=#=#=#=#=# 'enciendo el signo y acomodo el Comp. a 2 
giro: 
  sign=1                     'lo coloco apagado por defecto 
  if numero > 32768 then     'verifico si gira a Derecha ó Izquierda 
  sign=0                     'lo enciendo por que es giro a la Derecha 
'#=#=#=#=#=#=#=#=#=#=#=# Rutina en elaboracion #=#=#=#=#=#=#=#=#=#=#=#=#=#=# 
  [B][COLOR=red]numero = ABS numero[/COLOR][/B]        'Realizo el calculo y acomodo a los limites   # 
  pauseus 10                 'de las variables el "Complemento a 2"        # 
  'numero = 32767 - numero   'con una pausa de 10uSeg.                     # 
'#=#=#=#=#=#=#=#=#=#=#=# Rutina en elaboracion #=#=#=#=#=#=#=#=#=#=#=#=#=#=# 
  else 
  sign=1                     'lo mantengo apagado por giro a Izquierda 
  endif 
  return 
'#=#=#=#=#=#=#=#=#=#=#=#=#=#

No he quitado la resta 'numero = 32767 - numero dado que no se aun si altera algo por no haber podido probar la función ABS (Absoluto). La información en la página de MeLabs (http://melabs.com/resources/pbpmanual/4_0.htm#4174) pareciera indicarme ser lo que se necesitaba y puede ser que hasta se podrian quitar algunas líneas de código, sera cuestión de realizar pruebas.



Saludos Serranos, JuanKa.-
 
Última edición:
Correccion... en vez de X.25, queria decir AX.25; En definitiva, son muy similares; en fin.
Este protoclo lo que hace basicamente es codificar los datos e insertarlos en una protadora de RF (imagen de ejemplo extraidas de google). Mas info al respecto click aca
basic.jpg


Para el caso de transmision VHF, la modulación AFSK en FM, contiene tonos Bell 202 (1200/200 Hz)con una velocidad de 1200 baudios; Suficientes para mandar solo unos pocos bytes.

En la pagina de PicBasic, hacen referencia a este ejemplo:

principal:
si serial_pin = 1, entonces
freqout 1,1,2200
más
freqout 1,1,1200
endif
Ir a principal

Pero no me basta para entender y o tomar como ejemplo. Osea, no se como encarar la transformacion del dato a frecuencia, y luego, en el otro microcontrolador, decodificarlo...
Podria armar una tabla y los micros y despues comparar; pero los handies, se corren de banda segun la intensidad de la transmision... osea, si alguien tiene un frecuencimetro, podra notar que al modular la voz humana a un nivel, notara que esta transmitiendo a determinada frecuncia... cuando grita, podran notar que hay un corrimiento, lo cual me lleva a pesar que tendria que dar un margen de frecuencias relativamente ancho y jugar con la ganancia del volumen en el receptor....
Los CI especificos en el caso de que no lo pueda hacer en pbp, son los xr2006... estoy modulan y demodulan dandote una salida serial directamente... Como no los consigo, quizas alguien me pueda orientar o dar una mano de como arrancarlos en basic; Saludos

Hola... con la los integrados tipo TCM3105 o MX614 puedes hacer un módem de 1200bps Bell 202. Busca informacion de MODEM Baycom en Google que esta plagado ya que es el utilizado por los radioaficionados para hacer Paket Radio.
También con el par XR2206 y XR2211 puedes hacer un modem pero me parece que ya nada de eso se consigue.
Básicamente tienes que emitir un tono de 1200 y otro de 2200Hz para la marca y el espacio respectivamente y decodificarlo del otro lado es lo mas complicado y no creo que en Basic te de la velocidad como para hacerlo sobre todo el RX.
Hace muchos años había unos módem comerciales en base al PIC16F84A pero no estaba disponible el software.

Saludos.

Ric.
 
Torres.Electronico
..... Para el caso de transmision VHF, la modulación AFSK en FM, .....
La modulación AFSK es una variante de la FSK (Frequency Shift Keying) dentro del espectro de frecuencias de audio en las transmisiones de radio. Hace años (1975/1980) cuando para la transmisión a larga distancia se usaban medios analógicos (Multiplex FDM y RadioEnlaces Analógicos) era usada para establecer comunicaciones digitales a tráves de líneas teléfonicas. Consiste en definir una frecuencia para transmitir los 0's y otra para los 1's, en el caso de una velocidad de 1200 Baud's usa 1200 Hz para el 1 y 2200 Hz para el 0 (según http://en.wikipedia.org/wiki/Bell_202).




..... pero los handies, se corren de banda segun la intensidad de la transmision... osea, si alguien tiene un frecuencimetro, podra notar que al modular la voz humana a un nivel, notara que esta transmitiendo a determinada frecuncia... cuando grita, podran notar que hay un corrimiento, lo cual me lleva a pesar que tendria que dar un margen de frecuencias relativamente ancho y jugar con la ganancia del volumen en el receptor .....
La transmisión en las bandas de VHF suele ser siempre en FM (Modulación de Frecuencia [FM] ó Modulación de Fase[PM]) y a potencia de emisión constante.
Y NO varia la frecuencia ante cambios de si se grita o no, es solo la impresión del oyente en el otro extremo o la variación del tono de voz en frecuencia de quien grita.
Hilando fino y si ambos equipos estan bien ajustados se puede decir que la frecuencia que emito es la que recibo, es el medio de transmisión por radio con mayor fidelidad y lamentablemente ocupa el mayor ancho de banda de todas las modulaciones (AM, BLU, FM).




..... Los CI especificos en el caso de que no lo pueda hacer en pbp, son los xr2006... estoy modulan y demodulan dandote una salida serial directamente... Como no los consigo, quizas alguien me pueda orientar o dar una mano de como arrancarlos en basic; Saludos
Imagino que te refieres al los CI XR2206 ó XR2207 ó XR2209 de EXAR, que realmente cuesta bastante conseguirlos y son mas bien usados para realizar "Generadores de Funciones".




Se puede hacer de dos maneras distintas con PIC's de gama media:
a-) Con un PIC que maneje las señales digitales y las entregue a un Oscilador de Audio que dependiendo de la señal 1 ó 0 entregue a su salida 1200 ó 2200 Hz respectivamente.

b-) Con un PIC que además de manejar las señales digitales genere las frecuencias de 1200 y/ó 2200 Hz según corresponda, pero creo que tendria el inconveniente de que dichas señales no serian senoidales y podrian generar algún inconveniente.



Sin dudas con alguno de los DSPIC se puede hacer todo con un solo integrado y con el agregado de dificultades en la programación del mismo si la versión del PBP no los soporta.



Saludos, JuanKa.-
 
Porsia acaso alguien no tiene el código en basic de una secuencia randomica con 8 leds y seguir la esa secuencia con 8 pulsantes todo hecho con el pic16f877a ??? se agradeceria mucho la ayuda
 
Atrás
Arriba