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

Avatar de alejandrozama

interrupcion
hola que tal, pues yo nuevamente por aqui lo cuestion es que hay una practica donde devo de utilizar la interrupcion externa.

la cuestion es que solo he visto 2 ejemplos en internet y no logro que el programa haga lo que quiero. como que hay algo que no entiendo

lo que el programa debe de realizar es lo siguiente, se devera estar ejecutando un programa principal (por ejemplo un corrimiento de luces en cualquier puerto pic16f877a) y cuando se presione un boton de b.0 entonces se encendera a.0 y este dato se rotara de a.0-a.3 por cada pulsacion del boton.

como siempre creo que no me explique, bueno la cuestion es que solo necesito algo de ayuda para hacer uncionar algo parecido ya que ahora no logro que funcione nada

explicacion de la practica textual
"Armar el circuito y realizar el programa que utilice la interrupción externa (RB0/INT) del PIC. Cuando suceda la interrupción hacer rotar el dato 01H del puerto A y así por cada interrupción que suceda, hacer rotar el dato del puerto A.
La rotación a la izquierda contrólela para que sea del Bit 0 al Bit 3"

Código:
@ device xt_osc 
define osc 4

x var byte



trisb=%00000001

trisa=%000000
porta=%000000


INTCON=%10100000
on interrupt goto pulsador


inicio:
portb=%00000010
pause 200
portb=%00000100
pause 200
portb=%00001000
pause 200
portb=%00010000
pause 200
portb=%00100000
pause 200
portb=%01000000
pause 200
portb=%10000000
pause 200
goto inicio
end

disable 
pulsador:
if x=8 then x=1
x=1
porta=x
pause 200
if (portb.0=1) then x=x*2
resume
enable

no se burlen de mi codigo. dejo la imagen
14/03/2012 #1782

Avatar de J2C

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.-
14/03/2012 #1783

Avatar de atricio

eso esta de lujo una bestia para aplicaciones de movimiento
15/03/2012 #1784

Avatar de Dario

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
15/03/2012 #1785

Avatar de J2C

D@rio

D@rio dijo: Ver Mensaje
..... 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.



D@rio dijo: Ver Mensaje
..... 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.-
Imágenes Adjuntas
Tipo de Archivo: jpg Zona1÷PrgCalibracion.jpg (25,1 KB (Kilobytes), 16 visitas)
15/03/2012 #1786


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.
16/03/2012 #1787

Avatar de Dario

bueno, aca subo un video girando el itg hacia la derecha usando como eje mi nueva silla de computadora usada jeje... 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:

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:
Imágenes Adjuntas
Tipo de Archivo: jpg Diagrama ITG3205.JPG (44,9 KB (Kilobytes), 335 visitas)
16/03/2012 #1788

Avatar de reyvilla

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.
17/03/2012 #1789


Holaaa que tal
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
18/03/2012 #1790

Avatar de J2C

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.-
Archivos Adjuntos
Tipo de Archivo: pdf Itg3205-Dario.pdf (26,9 KB (Kilobytes), 49 visitas)
Tipo de Archivo: pdf Itg3205-Dario.Eagle.pdf (26,9 KB (Kilobytes), 41 visitas)
18/03/2012 #1791

Avatar de Dario

ok, el circuito asi de pasada se ve bien. amigo: muchas gracias por la ayuda, un cordial saludo.
18/03/2012 #1792

Avatar de Dario

amigo J2C: acabo de probar el codigo que me enviaste y el resultado es este:
que opinas?
19/03/2012 #1793

Avatar de Dario

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...


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
23/03/2012 #1794

Avatar de torres.electronico

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
23/03/2012 #1795
Excluido


el 7447 no dispone del sinvolo menos??
26/03/2012 #1796


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
28/03/2012 #1797

Avatar de torres.electronico

torres.electronico dijo: Ver Mensaje
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


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
28/03/2012 #1798

Avatar de J2C

Gyro ITG-3205
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 #=#=#=#=#=#=#=#=#=#=#=#=#=#=# 
  numero = ABS 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 
'#=#=#=#=#=#=#=#=#=#=#=#=#=#
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.-
28/03/2012 #1799


torres.electronico dijo: Ver Mensaje
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


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.
28/03/2012 #1800

Avatar de J2C

Torres.Electronico
torres.electronico dijo: Ver Mensaje
..... 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).




torres.electronico dijo: Ver Mensaje
..... 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).




torres.electronico dijo: Ver Mensaje
..... 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.-
¿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.