GAMBAS Almenos es basic- Puerto Serie - PIC16F628A
5 participantes
Página 1 de 2.
Página 1 de 2. • 1, 2
GAMBAS Almenos es basic- Puerto Serie - PIC16F628A
Hola y saludos a todos los de la lista , hace un tiempo que no entro al foro debido a causas del trabajo, pues bien tengo pensado hacer una pequeña interfaz serial utilizando el lenguaje GAMBAS para Linux, se me hizo bastante amigable y cuenta con el control para trabajar con el puerto serial. Lo que trataré de controlar será una tarjetita que tengo con un piC16F628A que mueve unos servos :p.
Espero que sea de agrado para la comunidad, e iré publicando mis avances.
Si desean mayor informacion sobre GAMBAS lo pueden encontrar http://gambas.sourceforge.net/en/main.html.
Espero que pueda contar con su ayuda y si puedo ofrecersela a alguien, con todo gusto lo haré
Espero que sea de agrado para la comunidad, e iré publicando mis avances.
Si desean mayor informacion sobre GAMBAS lo pueden encontrar http://gambas.sourceforge.net/en/main.html.
Espero que pueda contar con su ayuda y si puedo ofrecersela a alguien, con todo gusto lo haré
Última edición por maigke el Miér 8 Jul 2009 - 19:28, editado 1 vez
maigke- Asiduo del Foro
- Mensajes : 210
Fecha de inscripción : 12/04/2009
Edad : 46
Localización : Mexico
Re: GAMBAS Almenos es basic- Puerto Serie - PIC16F628A
Algo así quería ver desde hace tiempo, Gambas me parece muy atractivo pero no he visto muchos proyectos (¿será que no he buscado?).
Ánimo con el proyecto, estaremos al pendiente de los avances .
Ánimo con el proyecto, estaremos al pendiente de los avances .
Re: GAMBAS Almenos es basic- Puerto Serie - PIC16F628A
Pues si que está interesante, nunca me había metido a probarlo a fondo, pero me ha picado la curiosidad y he echo algunas pruebillas y la verdad es que parece muy flexible y facil de manejar.
Y hay un par de cosa que me han gustado mucho: desde el mismo Gambas puedes crear el ejecutable y además puedes crear paquetes .deb para Ubuntu y también paquetes para otras distros.
Por lo que he leido el mismo proyecto te sirve para gtk, qt, y tanto para Gnome como Kde, etc.
A mí personalmente me interesa mucho el puerto serie, así que si encuentras información de como manejarlo y sobre todo ejemplos, pués se agradecería mucho que los postearas.
Saludos y suerte con el proyecto!
Y hay un par de cosa que me han gustado mucho: desde el mismo Gambas puedes crear el ejecutable y además puedes crear paquetes .deb para Ubuntu y también paquetes para otras distros.
Por lo que he leido el mismo proyecto te sirve para gtk, qt, y tanto para Gnome como Kde, etc.
A mí personalmente me interesa mucho el puerto serie, así que si encuentras información de como manejarlo y sobre todo ejemplos, pués se agradecería mucho que los postearas.
Saludos y suerte con el proyecto!
Re: GAMBAS Almenos es basic- Puerto Serie - PIC16F628A
Gambas2 ya trae el componente para manejar el puerto serie, además de traer un ejemplo, nunca lo he usado porque siempre uso el C++ y una librería que se llama lnxcomm (http://zsoluciones.com/datos/?page_id=11) para acceder al puerto serie.
tsk- Participante
- Mensajes : 11
Fecha de inscripción : 02/06/2009
Re: GAMBAS Almenos es basic- Puerto Serie - PIC16F628A
Gracias a pikitin, Geo y tsk por sus comentarios, y ánimos con este proyecto que inicio , en efecto el uso de gambas es muy atractivo, y simple, para quienes no nos dedicamos de lleno a la progra , en efecto algo que me llamo mucho la atención es la facilidad con la que son creados los paquetes para instalacion, tanto debian, ubuntu, suse, mandriva etc!, yo lo tengo instalado en una ubuntu 9.10 solo que para crear los paquetes me solicita autoconf y automake!. recuerden instalarlos antes de probar
Así que si se animan a desarrollar en Gambas!, Este es el link de descarga de un libro de Gambas bajo licencia GPL y naturalmente en formato de OpenOffice
http://gambas.gnulinex.org/libro/
http://arukard.wordpress.com/2008/09/10/el-libro-de-gambas-en-pdf-34-mb-aprende-programacion-en-forma-visual-desde-linux/
Espero les sea útil, como a mi!!
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
tsk, muchas gracias por la sugerencia de la biblioteca lnxcomm, esta muy interesante la opción que nos das, sin embargo, el desarrollo de momento lo realizaré con Gambas ya que me puedo generar de manera muy rápida una interfaz así como el control que deseo, posteriormente, tomeré en cuenta tu amable propuesta de desarrollo, y bueno a ver que tal me va con Glade + Anjuta, que es en lo que me he metido un poquillo ; Eclipse mmmm no lo he probado.
Bueno espero mañana mostrarles un pequeño avance, espero me de tiempo hay un buen de chamba este dia.
Gracias espero sugerencias!
Así que si se animan a desarrollar en Gambas!, Este es el link de descarga de un libro de Gambas bajo licencia GPL y naturalmente en formato de OpenOffice
http://gambas.gnulinex.org/libro/
http://arukard.wordpress.com/2008/09/10/el-libro-de-gambas-en-pdf-34-mb-aprende-programacion-en-forma-visual-desde-linux/
Espero les sea útil, como a mi!!
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
tsk, muchas gracias por la sugerencia de la biblioteca lnxcomm, esta muy interesante la opción que nos das, sin embargo, el desarrollo de momento lo realizaré con Gambas ya que me puedo generar de manera muy rápida una interfaz así como el control que deseo, posteriormente, tomeré en cuenta tu amable propuesta de desarrollo, y bueno a ver que tal me va con Glade + Anjuta, que es en lo que me he metido un poquillo ; Eclipse mmmm no lo he probado.
Bueno espero mañana mostrarles un pequeño avance, espero me de tiempo hay un buen de chamba este dia.
Gracias espero sugerencias!
maigke- Asiduo del Foro
- Mensajes : 210
Fecha de inscripción : 12/04/2009
Edad : 46
Localización : Mexico
Re: GAMBAS Almenos es basic- Puerto Serie - PIC16F628A
Saludos a la lista, bueno, pues aqui un pequeño avance con esto de Gambas, tal vez comentarán que no tiene nada que ver con PIc's, y en eso tienen toda la razon, sin embargo quería hacer la prueba con un ejemplo de punto_net, y pues funcionó muy bien en GAMBAS, de esta forma quienes vengan del lado oscuro como un servidor, podrán ver que es sencillo migrar desde alla.
Ademas mi motivo es que pudieran probar el paquete debian que he armado con el IDE, para ver que tan distribuible es. Así de esta manera aseguraré, que el codigo fuente generado en gambas, para el control de la tarjeta de servos es funcional. sin embargo, iniciamos despacio, paso a paso.
Por cierto aunque el paquete es Debian, como verán en la imagen tengo ubuntu, y si se instala, en el menú aplicaciones, pero no en juegos, si no en otros, espero ver que si haya sido posible instalar el paquete, y ver los pantallazos de sus escritorios aqui.
Este es el paquete debian http://www.savefile.com/files/2146472
El kernel que tengo es:
2.6.28-11-generic
automake 1.10
autoconf 2.63
Esta es la interfaz
Este es el código fuente
Gracias por su amable atención
Ademas mi motivo es que pudieran probar el paquete debian que he armado con el IDE, para ver que tan distribuible es. Así de esta manera aseguraré, que el codigo fuente generado en gambas, para el control de la tarjeta de servos es funcional. sin embargo, iniciamos despacio, paso a paso.
Por cierto aunque el paquete es Debian, como verán en la imagen tengo ubuntu, y si se instala, en el menú aplicaciones, pero no en juegos, si no en otros, espero ver que si haya sido posible instalar el paquete, y ver los pantallazos de sus escritorios aqui.
Este es el paquete debian http://www.savefile.com/files/2146472
El kernel que tengo es:
2.6.28-11-generic
automake 1.10
autoconf 2.63
Esta es la interfaz
Este es el código fuente
- Código:
' Gambas class file
PUBLIC SUB _new()
END
PUBLIC SUB Form_Open()
PictureBox1.Visible = FALSE
RANDOMIZE
END
PUBLIC SUB Button1_Click()
PictureBox1.Visible = FALSE 'Oculta la imagen
Label1.Text = CStr(Int(Rnd() * 10)) 'Elige los numeros
Label2.Text = CStr(Int(Rnd() * 10))
Label3.Text = CStr(Int(Rnd() * 10))
'Si alguno de los anteriores es 7 entonces aparece la imagen y produce un sonido
IF (Label1.text = "7") OR (Label2.text = "7") OR (Label3.text = "7") THEN
PictureBox1.Visible = TRUE
ENDIF
END
PUBLIC SUB Button2_Click()
ME.Close
END
Gracias por su amable atención
Última edición por maigke el Miér 8 Jul 2009 - 19:24, editado 1 vez
maigke- Asiduo del Foro
- Mensajes : 210
Fecha de inscripción : 12/04/2009
Edad : 46
Localización : Mexico
Re: GAMBAS Almenos es basic- Puerto Serie - PIC16F628A
Buena noche compañeros listeros, bien ahora presento otro programa hecho en gambas, se que pensaran que esta parte que estoy publicando no corresponde, sin embargo les pido paciencia
Bien esta vez se trata de como manejar controles slider + control spinbox haciendo que un background de un picturebox cambie de color, bien es cierto que tome como referencia el codigo fuente publicado en esta pagina, http://blog.ihtoa.org/2008/07/08/gambas-introduccion/ , a quien agradezco que haya colocado su codigo, sin el cual por el momento no me seria posible haber avanzado mas
.
bien AQUI coloco el paquete .deb
ahora AQUII coloco el codigo fuente -- Para que veas las propiedades aqui vienen
El codigo fuente esta aqui
La intencion de esto es que pueda controlar los servos, usando los slider, y viendo el resultado en los spinbox, pero si quiero un control mas preciso, puedo usar los spinbox!!!, como lo hago en el caso de estos colores, sin embargo, mi tarjeta controladora, funciona con caracteres ascii, y no con numeros, cada caracter ascii corresponde a un servo y cada caracter, corresponde a un avance positivo o negativo del servo. Hasta el dia de hoy he estado utilizando minicom, sin embargo para hacer almacenamiento de valores, lo hacia desde la tarjeta, lo cual hasta cierto punto la eeprom del micro, un pic16F628A funciona, pero pues queda muy limitado; debido a lo anterior, utilizaré un programa hecho en GAMBAS para hacer estas tareas y quitarle carga al micro, esto de momento.
veamos como irá quedando nuestro proyecto y tambien espero que a alguien del foro que se vaya interesando en usar GAMBAS, le sirvan estas breves notas como referencia y ayuda.
Gracias por su atencion
Bien esta vez se trata de como manejar controles slider + control spinbox haciendo que un background de un picturebox cambie de color, bien es cierto que tome como referencia el codigo fuente publicado en esta pagina, http://blog.ihtoa.org/2008/07/08/gambas-introduccion/ , a quien agradezco que haya colocado su codigo, sin el cual por el momento no me seria posible haber avanzado mas
.
bien AQUI coloco el paquete .deb
ahora AQUII coloco el codigo fuente -- Para que veas las propiedades aqui vienen
El codigo fuente esta aqui
- Código:
' Gambas class file
' Esta basado en un ejemplo que tome de la siguiente pagina web
' http://www.nabble.com/Saber-que-boton-del-spinbox-se-ha-pulsado-td21523755.html
' http://blog.ihtoa.org/2008/07/08/gambas-introduccion/
PRIVATE FUNCTION Cambia_color()
'Esta funcion será llamada cada vez que nuestro slider cambie
PictureBox1.BackColor = Color.RGB(sldRojo.Value, sldVerde.Value, sldAzul.Value) ' le pone color al backG
txtMiColor.Text = "#" & Format$(sldRojo.Value, "00") & Format$(sldVerde.Value, "00") & Format$(sldAzul.Value, "00")
' Al textbox le imprime el valor del color que esta tanto en el slide, como en el spinboX
END
PUBLIC SUB sldRojo_Change()
Cambia_color()
spinRojo.Value = sldRojo.Value 'Cuando cambiamos el valor de slide tambien se asigna al spinner
END
PUBLIC SUB sldVerde_Change()
Cambia_color()
spinVerde.Value = sldVerde.Value
END
PUBLIC SUB sldAzul_Change()
Cambia_color()
spinAzul.Value = sldAzul.Value
END
PUBLIC SUB spinRojo_Change()
sldRojo.Value = spinRojo.Value 'Cuando cambiamos el valor del spinner tambien se cambia el del slide
Cambia_color()
END
PUBLIC SUB spinVerde_Change()
sldVerde.value = spinVerde.Value
Cambia_color()
END
PUBLIC SUB spinAzul_Change()
sldAzul.Value = spinAzul.Value
Cambia_color()
END
La intencion de esto es que pueda controlar los servos, usando los slider, y viendo el resultado en los spinbox, pero si quiero un control mas preciso, puedo usar los spinbox!!!, como lo hago en el caso de estos colores, sin embargo, mi tarjeta controladora, funciona con caracteres ascii, y no con numeros, cada caracter ascii corresponde a un servo y cada caracter, corresponde a un avance positivo o negativo del servo. Hasta el dia de hoy he estado utilizando minicom, sin embargo para hacer almacenamiento de valores, lo hacia desde la tarjeta, lo cual hasta cierto punto la eeprom del micro, un pic16F628A funciona, pero pues queda muy limitado; debido a lo anterior, utilizaré un programa hecho en GAMBAS para hacer estas tareas y quitarle carga al micro, esto de momento.
veamos como irá quedando nuestro proyecto y tambien espero que a alguien del foro que se vaya interesando en usar GAMBAS, le sirvan estas breves notas como referencia y ayuda.
Gracias por su atencion
Última edición por maigke el Miér 8 Jul 2009 - 19:26, editado 1 vez
maigke- Asiduo del Foro
- Mensajes : 210
Fecha de inscripción : 12/04/2009
Edad : 46
Localización : Mexico
Re: GAMBAS Almenos es basic- Puerto Serie - PIC16F628A
Aqui coloco un vínculo para cargar el programa anterior en openSuse, DESCARGA AQUI
Saludos
un detalle en la instalacion, bueno, si bien al probar el paquete de instalacion en mi maquina todo funciona bien, al tratar de instalar el paquete en una openSuse que puse en una maquina virtual, me marca errores de dependencias , sin embargo estas parece que se pueden retirar mediante la instalacion de gambas2-runtime sin embargo como es una verion 11, pues ya me puso a actualizar todo el sistema, asi que dejaré la maquina aqui descargando y ya veré al ratillo
Si desean probar, supongo que en ubuntu haria lo mismo, solo instala el runtime del gambas 2 y listo!!, o bueno al menos eso debería
Saludos
un detalle en la instalacion, bueno, si bien al probar el paquete de instalacion en mi maquina todo funciona bien, al tratar de instalar el paquete en una openSuse que puse en una maquina virtual, me marca errores de dependencias , sin embargo estas parece que se pueden retirar mediante la instalacion de gambas2-runtime sin embargo como es una verion 11, pues ya me puso a actualizar todo el sistema, asi que dejaré la maquina aqui descargando y ya veré al ratillo
Si desean probar, supongo que en ubuntu haria lo mismo, solo instala el runtime del gambas 2 y listo!!, o bueno al menos eso debería
maigke- Asiduo del Foro
- Mensajes : 210
Fecha de inscripción : 12/04/2009
Edad : 46
Localización : Mexico
Re: GAMBAS Almenos es basic- Puerto Serie - PIC16F628A
Última edición por maigke el Miér 8 Jul 2009 - 19:28, editado 2 veces
maigke- Asiduo del Foro
- Mensajes : 210
Fecha de inscripción : 12/04/2009
Edad : 46
Localización : Mexico
Re: GAMBAS Almenos es basic- Puerto Serie - PIC16F628A
Igual que tu yo anduve experimentando con Gambas, y la neta que es muy bueno y fácil de usar.
Ya hace tiempo que porte un programita de un tutorial de meta (Puerto serie con PIC16F84A controlado por Visual C#) a GNU/Linux con Gambas, y ahora estoy escribiendo la documentación al estilo del tutorial de meta, pero para serte sincero creo voy a tardar demasiado, soy muy flojo, jejeje.
Ya hace tiempo que porte un programita de un tutorial de meta (Puerto serie con PIC16F84A controlado por Visual C#) a GNU/Linux con Gambas, y ahora estoy escribiendo la documentación al estilo del tutorial de meta, pero para serte sincero creo voy a tardar demasiado, soy muy flojo, jejeje.
aztk- Participante Activo
- Mensajes : 52
Fecha de inscripción : 08/06/2009
Edad : 35
Localización : Tenochtitlan
Re: GAMBAS Almenos es basic- Puerto Serie - PIC16F628A
Que tal maigke?
Oye... muy bien los ejemplos, seguro que nos viene bien a más de uno.
A mi los paquetes .deb me instalan sin problema, pero claro... yo ya tengo instalado Gambas2.
Una cosa, las imágenes yo no las puedo ver, solo aparece la miniatura, pero no hace nada al darle... mi a ver si puedes comprobar esto para poder darte opiniones.
Oye... muy bien los ejemplos, seguro que nos viene bien a más de uno.
A mi los paquetes .deb me instalan sin problema, pero claro... yo ya tengo instalado Gambas2.
Una cosa, las imágenes yo no las puedo ver, solo aparece la miniatura, pero no hace nada al darle... mi a ver si puedes comprobar esto para poder darte opiniones.
Re: GAMBAS Almenos es basic- Puerto Serie - PIC16F628A
Gracias por sus amables respuestas aztka y pikitin y sobretodo por comprobar el estado de los paquetes deb, y pues creo que si es necesario que este instalado gambas para que pueda correr, por cuestiones de dependencias, ahace un rato tambien probe con opensuse, y al instalar el runtime, pues no jalo, solo quito esa dependencia pero me pide tambien dependencias de gambas2.gb y delas gui.
Sip es cierto lo que me comentas pikitin,voy a ver que onda con las imagenes y gracias por comentar!
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Listo!!!! ya están corregidos los vínculos de las imagenes, ahora si espero sus comentarios, por cierto le hice un pequeño cambio, usando en lugar de GTK, use Qt, me gusto mas la forma que les da la libreria Qt, es muy estilizada ya que Gambas permite hacer ese cambio de una manera muy express!!
Sip es cierto lo que me comentas pikitin,
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Listo!!!! ya están corregidos los vínculos de las imagenes, ahora si espero sus comentarios, por cierto le hice un pequeño cambio, usando en lugar de GTK, use Qt, me gusto mas la forma que les da la libreria Qt, es muy estilizada ya que Gambas permite hacer ese cambio de una manera muy express!!
maigke- Asiduo del Foro
- Mensajes : 210
Fecha de inscripción : 12/04/2009
Edad : 46
Localización : Mexico
Re: GAMBAS Almenos es basic- Puerto Serie - PIC16F628A
Bueno... podrías comentar un poco como funcionaría el tema, para que sirve cada cosa y que se consigue al final.
Puestos a sugerir cosas mi opinión es que se podrían organizar los elementos algo mas "ordenados", por ejemplo como en dos bloques: los botones graba y salir ponerlos debajo del cuadrado de abierto y cerrado; así queda un bloque a la izquierda: foto + abierto/cerrado + botones y otro bloque a la derecha con los deslizanbtes y eso.
Solo es una opinión estética aunque también se dividen las cosas que tienen relacion en cada bloque...
Ya nos contarás como funciona el tema y para que es cada cosa.
Puestos a sugerir cosas mi opinión es que se podrían organizar los elementos algo mas "ordenados", por ejemplo como en dos bloques: los botones graba y salir ponerlos debajo del cuadrado de abierto y cerrado; así queda un bloque a la izquierda: foto + abierto/cerrado + botones y otro bloque a la derecha con los deslizanbtes y eso.
Solo es una opinión estética aunque también se dividen las cosas que tienen relacion en cada bloque...
Ya nos contarás como funciona el tema y para que es cada cosa.
Re: GAMBAS Almenos es basic- Puerto Serie - PIC16F628A
Estaría bien que se hicieran los mismos proyectos (o parecidos), pero en distintos lenguajes, para en un futuro tener varias alternativas y variedad de soluciones a la hora de realizar nuestros proyectos.
Por ahorita manejo el C,C++,Pascal(freepascal),Lazarus (Delphi), C# (Mono), Gambas, octave (estilo matlab), y los que vengan y se dejen.
Por ejemplo ahorita tengo funcionado en una PC un programa en C++ que manda pedir la lectura de temperatura a un PIC12f683 por medio del RS232 guarda la lectura en una base de datos de MySQL, genera una página web que contiene la lectura, los máximos y míninimos que han ocurrido durante el día, y además genera una gráfica del comportamiento a lo largo del día, y con el cron lo ejecuto cada 5 minutos. Y en otra PC tengo un 12f675 que toma la lectura de una foto-resistencia, para medir los luxes, hace lo mismo que el anterior programa, excepto lo de guardar los datos en MySQL y generar gráfica (tomo la lectura cada minuto).
También tienes tu Acer One
Por ahorita manejo el C,C++,Pascal(freepascal),Lazarus (Delphi), C# (Mono), Gambas, octave (estilo matlab), y los que vengan y se dejen.
Por ejemplo ahorita tengo funcionado en una PC un programa en C++ que manda pedir la lectura de temperatura a un PIC12f683 por medio del RS232 guarda la lectura en una base de datos de MySQL, genera una página web que contiene la lectura, los máximos y míninimos que han ocurrido durante el día, y además genera una gráfica del comportamiento a lo largo del día, y con el cron lo ejecuto cada 5 minutos. Y en otra PC tengo un 12f675 que toma la lectura de una foto-resistencia, para medir los luxes, hace lo mismo que el anterior programa, excepto lo de guardar los datos en MySQL y generar gráfica (tomo la lectura cada minuto).
También tienes tu Acer One
tsk- Participante
- Mensajes : 11
Fecha de inscripción : 02/06/2009
Re: GAMBAS Almenos es basic- Puerto Serie - PIC16F628A
gracias por las recomendaciones tanto de pikitin como de tsk bien pues haciendo un poco de caso, acabo de cambiar a Qt, como lo mencioné mas arriba y siguendo las recomendaciones de Pikitin la distribución de la interfaz quedó de la siguiente manera
Bien con respecto a esto ahora va un poco de como estoy pensando esto:
Es una tarjeta controladora de 5 servos con un pic16f628A programado en CCS con un Xtal a 20Mhz y comunicacion serial a 115200bps, para mover cada servo en la tarjeta esta implementado de la siguiente manera
Cada slider como se ve en la imagen incrementará o decrementará la posición de un servo a la vez con solo recorrerlo de una lado hacia otro, y en el spinner será visualizada de forma numérica la posición del servo ( bueno en realidad el valor que leerá del slider), si quisieramos un ajuste mas fino, a veces con el slider no es muy sencillo, modicaremos únicamente el valor numérico del spinbox , esta idea la tomé del ejemplo que les mostre de los colores
Ahora en la seccion grabado de posiciones, cuando tenga las posiciones adecuadas de los servos, usar el boton grabar, así será guardadas en un array el número de caracteres ascii que tienen que ser enviados por el puerto serie, este número será visualizado en las etiquetas, por el momento creo conveniente solo guardar dos posiciones, pero supongo que será necesario que más adelante tenga un número mayor de posiciones
Espero que no haya sido mucho texto!
Saludos, ahora a seguir con la progra
Ya nos contarás como funciona el tema y para que es cada cosa.
Bien con respecto a esto ahora va un poco de como estoy pensando esto:
Es una tarjeta controladora de 5 servos con un pic16f628A programado en CCS con un Xtal a 20Mhz y comunicacion serial a 115200bps, para mover cada servo en la tarjeta esta implementado de la siguiente manera
- Iniciar en el centro todos los servos
- para mover cada servo usamos un caracter predefinido en el microcontrolador
Cada slider como se ve en la imagen incrementará o decrementará la posición de un servo a la vez con solo recorrerlo de una lado hacia otro, y en el spinner será visualizada de forma numérica la posición del servo ( bueno en realidad el valor que leerá del slider), si quisieramos un ajuste mas fino, a veces con el slider no es muy sencillo, modicaremos únicamente el valor numérico del spinbox , esta idea la tomé del ejemplo que les mostre de los colores
Ahora en la seccion grabado de posiciones, cuando tenga las posiciones adecuadas de los servos, usar el boton grabar, así será guardadas en un array el número de caracteres ascii que tienen que ser enviados por el puerto serie, este número será visualizado en las etiquetas, por el momento creo conveniente solo guardar dos posiciones, pero supongo que será necesario que más adelante tenga un número mayor de posiciones
Espero que no haya sido mucho texto!
Saludos, ahora a seguir con la progra
maigke- Asiduo del Foro
- Mensajes : 210
Fecha de inscripción : 12/04/2009
Edad : 46
Localización : Mexico
Re: GAMBAS Almenos es basic- Puerto Serie - PIC16F628A
Bueno después de darle un poquito al código tengo el siguiente resultado
Se agregó un botón extra que se llama limpia para borrar después de grabar la posición inicial como final en las etiquetas, después serán las de los servos
Ademas fueron usadas dos variables globales que denominé flag y flag2 para el control de envio de datos a los labels que contienen la informacion de posicion inicial y de posicion final, y que no grabara mas de dos posiciones; si el usuario intenta grabar mas de dos posiciones, aparecerá una ventana de advertencia que debe ser presionado el botón de Limpiar si se desean grabar mas posiciones.
En la imagen se verá un pantallazo del como quedó el programa!!
Aún le falta un boton más para que envié los datos "almacenados" al microcontrolador
Se me olvidaba, si modifico el valor del spinner no se mueve aún el slider correspondiente eso ya lo haré al ratin , pero si se guarda en los labels la posicion del spinbox!!
Así como configurar el puerto serial entre otras cosas!!, espero sus comentarios para ir mejorando este pequeño proyecto, gracias! por los comentarios de los listeros
aqui les presento el código que se implemento!
Se agregó un botón extra que se llama limpia para borrar después de grabar la posición inicial como final en las etiquetas, después serán las de los servos
Ademas fueron usadas dos variables globales que denominé flag y flag2 para el control de envio de datos a los labels que contienen la informacion de posicion inicial y de posicion final, y que no grabara mas de dos posiciones; si el usuario intenta grabar mas de dos posiciones, aparecerá una ventana de advertencia que debe ser presionado el botón de Limpiar si se desean grabar mas posiciones.
En la imagen se verá un pantallazo del como quedó el programa!!
Aún le falta un boton más para que envié los datos "almacenados" al microcontrolador
Se me olvidaba, si modifico el valor del spinner no se mueve aún el slider correspondiente eso ya lo haré al ratin , pero si se guarda en los labels la posicion del spinbox!!
Así como configurar el puerto serial entre otras cosas!!, espero sus comentarios para ir mejorando este pequeño proyecto, gracias! por los comentarios de los listeros
aqui les presento el código que se implemento!
- Código:
' Gambas class file
PUBLIC flag AS Boolean = FALSE ' variable global para meter datos en los labels
PUBLIC flag2 AS Boolean = FALSE
PUBLIC SUB _new()
END
PUBLIC SUB Form_Open()
DIM flag AS Boolean = FALSE
END
PUBLIC SUB Button2_Click()
ME.Close
END
PUBLIC SUB sldServo1_Change()
spnServo1.Value = sldServo1.Value
END
PUBLIC SUB btnSalir_Click()
ME.Close()
END
PUBLIC SUB btnGraba_Click() ' graba las posiciones de los servos
IF flag = FALSE AND flag2 = FALSE THEN
lblS1a.Text = lblS1a.text & " " & spnServo1.Value
lblS2a.Text = lblS2a.text & " " & spnServo2.Value
lblS3a.Text = lblS3a.Text & " " & spnServo3.Value
lblS4a.Text = lblS4a.Text & " " & spnServo4.Value
lblS5a.Text = lblS5a.Text & " " & spnServo5.Value
flag = TRUE
ELSE IF flag = TRUE AND flag2 = FALSE
lblS1b.Text = lblS1b.Text & " " & spnServo1.Value
lblS2b.Text = lblS2b.Text & " " & spnServo2.Value
lblS3b.Text = lblS3b.Text & " " & spnServo3.Value
lblS4b.Text = lblS4b.Text & " " & spnServo4.Value
lblS5b.Text = lblS5b.Text & " " & spnServo5.Value
flag2 = TRUE
ELSE
Message.Warning("No puedes grabar mas de dos posiciones pulsa LIMPIAR")
END IF
END
PUBLIC SUB sldServo2_Change()
spnServo2.Value = sldServo2.Value
END
PUBLIC SUB sldServo3_Change()
spnServo3.Value = sldServo3.Value
END
PUBLIC SUB sldServo4_Change()
spnServo4.Value = sldServo4.Value
END
PUBLIC SUB sldServo5_Change()
spnServo5.Value = sldServo5.Value
END
PUBLIC SUB btnLimpia_Click() 'este boton pone en falso la flag para iniciar una nueva grabacion de posiciones
flag = FALSE
flag2 = FALSE
lblS1a.Text = "Pos="
lblS1b.Text = "Pos="
lblS2a.Text = "Pos="
lblS2b.Text = "Pos="
lblS3a.Text = "Pos="
lblS3b.Text = "Pos="
lblS4a.Text = "Pos="
lblS4b.Text = "Pos="
lblS5a.Text = "Pos="
lblS5b.Text = "Pos="
END
maigke- Asiduo del Foro
- Mensajes : 210
Fecha de inscripción : 12/04/2009
Edad : 46
Localización : Mexico
Re: GAMBAS Almenos es basic- Puerto Serie - PIC16F628A
Saludos a todos!!, de nuevo por aqui en el foro, ya hace tiempo que no me paraba por aqui, puesto que ando con un buen de chamba, bueno
Ahora las actualizaciones.
Debido a que la tarjeta controladora de los servos, para mover cada servo utiliza un caracter, cada caracter que recibe por el puerto serie del micro, hace que el servo se mueva un grado.
Pues bien, rediseñe (mas bien hice un poco mas fea ) la interfaz, para cuestiones de prueba, bueno, pues los sliders ahora van de 0 a 180 junto con los spinners, almacena la posicion y no deja que se graben mas de dos posiciones, una a la que llamo posicion final del servo y otra posicion inicial, bueno ahora lo interesante es que mueva cada servo por "pasos" de un grado, pues el problema que se plantea es el siguiente
Si un servo esta en la posición de 30° por ejemplo, y lo queremos mover a una posicion de 150°, moveriamos el slider correspondiente de la posicion 30 a 150 (o bien tambien se puede hacer con el spinner) ahora la tarjeta tendria que recibir un caracter por cada grado, es decir la simple resta entre el valor inicial y el valor final, pero si queremos que ahora se mueva de 150° a 120° entonces ahora notamos que la diferencia es negativa, bueno ¿cómo arreglamos esto? hacemos uso del valor absoluto!, con la instruccion abs(argumento) obtenemos el valor absoluto de la diferencia.
Otro detalle, pero que es mas simple, es lo siguiente, si el movimiento del servo es en el sentido positivo, pues debera enviar un numero, y si es negativo deberá enviar una letra, bueno esa parte es sencilla, solo con un if, bueno aqui presento el codigo de la parte que menciono.
ya comenze a entender el funcionamiento de las librerias del puerto serial en gambas, y la neta esta muy bueno!, espero pronto publicar mas avances con este tema.
Coloco a continuacion el codigo que he generado, disculpen las faltas al programar, pero ya queria avanzar y asi se me hizo muy rapido, sin uso de funciones.
tambien les coloco una foto de la nueva placa que armamos y un juego de engranes donde esta acoplado uno de los servos a controlar, esa parte no la hago yo, pero esta quedando muy cool:!:
[img=]
[img=]
Por cierto, debido a que se usa un gusano sinfin, y una corona, el servo no podrá mover un amplitud grande al eje principal, por lo que se ha optado por la siguiente solución, quitarle el freno mecanico del servo, y adaptar con un engranaje con igual relacion, al eje principal el potenciometro del servo, de esta forma, el servo queda libre de giro, pero el sensado, será en el eje principal, por lu cual, digamos que se hace una extension de la caja de engranes del propio servo a la que se ve en la fotografia.
Cabe aclarar que yo no soy quien diseña la parte mecánica, sino es mi compañero ruben, aquien le agradezco su trabajo y que ademas trabaja muy bien con el torno y la fresa.
Dejenme sus comentarios, espero no desorientarlos tanto, y pues en el caso de las partes mecanicas, pues lo poco que se, con gusto se los comparto, pero si tienen preguntas un poco mas avanzadas, pues le preguntaré a Ruben y les dire
Ahora las actualizaciones.
Debido a que la tarjeta controladora de los servos, para mover cada servo utiliza un caracter, cada caracter que recibe por el puerto serie del micro, hace que el servo se mueva un grado.
Pues bien, rediseñe (mas bien hice un poco mas fea ) la interfaz, para cuestiones de prueba, bueno, pues los sliders ahora van de 0 a 180 junto con los spinners, almacena la posicion y no deja que se graben mas de dos posiciones, una a la que llamo posicion final del servo y otra posicion inicial, bueno ahora lo interesante es que mueva cada servo por "pasos" de un grado, pues el problema que se plantea es el siguiente
Si un servo esta en la posición de 30° por ejemplo, y lo queremos mover a una posicion de 150°, moveriamos el slider correspondiente de la posicion 30 a 150 (o bien tambien se puede hacer con el spinner) ahora la tarjeta tendria que recibir un caracter por cada grado, es decir la simple resta entre el valor inicial y el valor final, pero si queremos que ahora se mueva de 150° a 120° entonces ahora notamos que la diferencia es negativa, bueno ¿cómo arreglamos esto? hacemos uso del valor absoluto!, con la instruccion abs(argumento) obtenemos el valor absoluto de la diferencia.
Otro detalle, pero que es mas simple, es lo siguiente, si el movimiento del servo es en el sentido positivo, pues debera enviar un numero, y si es negativo deberá enviar una letra, bueno esa parte es sencilla, solo con un if, bueno aqui presento el codigo de la parte que menciono.
- Código:
vfin5 = sldServo5.Value
tempo = 0
tempo = Abs(vfin5 - vini5)
IF (vfin5 - vini5) < 0
lblpossld_5.Text = ("Manda letras " & tempo & " a")
ELSE
lblpossld_5.Text = ("Manda numeros " & tempo & " 1")
ENDIF
vini5 = vfin5
ya comenze a entender el funcionamiento de las librerias del puerto serial en gambas, y la neta esta muy bueno!, espero pronto publicar mas avances con este tema.
Coloco a continuacion el codigo que he generado, disculpen las faltas al programar, pero ya queria avanzar y asi se me hizo muy rapido, sin uso de funciones.
- Código:
' Gambas class file
'http://www.alcancelibre.org/staticpages/index.php/introduccion-a-gambas-datos-variables
PUBLIC flag AS Boolean = FALSE ' variable global para meter datos en los labels
PUBLIC flag2 AS Boolean = FALSE
'Vaiables para saber cuantos pasos hubo de diferencia entre la posicion actual y la previa
PUBLIC vini1 AS Integer
PUBLIC vfin1 AS Integer
PUBLIC vini2 AS Integer
PUBLIC vfin2 AS Integer
PUBLIC vini3 AS Integer
PUBLIC vfin3 AS Integer
PUBLIC vini4 AS Integer
PUBLIC vfin4 AS Integer
PUBLIC vini5 AS Integer
PUBLIC vfin5 AS Integer
'Variable temporal para realizar los calculos, este valor será usado para enviar los
'caracteres por el puerto serial
PRIVATE tempo AS Integer
PUBLIC SUB _new()
END
PUBLIC SUB Form_Open()
DIM flag AS Boolean = FALSE
vini1 = 0 'Damos un valor inicial = 0 con este numero inicia el sld
vini2 = 0
vini3 = 0
vini4 = 0
vini5 = 0
END
PUBLIC SUB Button2_Click()
ME.Close
END
PUBLIC SUB sldServo1_Change()
spnServo1.Value = sldServo1.Value
vfin1 = sldServo1.Value
tempo = 0
tempo = Abs(vfin1 - vini1)
IF (vfin1 - vini1) < 0
lblpossld_1.Text = ("Manda letras " & tempo & " a")
ELSE
lblpossld_1.Text = ("Manda numeros " & tempo & " 1")
ENDIF
vini1 = vfin1
END
PUBLIC SUB btnSalir_Click()
ME.Close()
END
PUBLIC SUB btnGraba_Click() ' graba las posiciones de los servos
IF flag = FALSE AND flag2 = FALSE THEN
lblS1a.Text = lblS1a.text & " " & spnServo1.Value
lblS2a.Text = lblS2a.text & " " & spnServo2.Value
lblS3a.Text = lblS3a.Text & " " & spnServo3.Value
lblS4a.Text = lblS4a.Text & " " & spnServo4.Value
lblS5a.Text = lblS5a.Text & " " & spnServo5.Value
flag = TRUE
ELSE IF flag = TRUE AND flag2 = FALSE
lblS1b.Text = lblS1b.Text & " " & spnServo1.Value
lblS2b.Text = lblS2b.Text & " " & spnServo2.Value
lblS3b.Text = lblS3b.Text & " " & spnServo3.Value
lblS4b.Text = lblS4b.Text & " " & spnServo4.Value
lblS5b.Text = lblS5b.Text & " " & spnServo5.Value
flag2 = TRUE
ELSE
Message.Warning("No puedes grabar mas de dos posiciones pulsa LIMPIAR")
END IF
END
PUBLIC SUB sldServo2_Change()
spnServo2.Value = sldServo2.Value
vfin2 = sldServo2.Value
tempo = 0
tempo = Abs(vfin2 - vini2)
IF (vfin2 - vini2) < 0
lblpossld_2.Text = ("Manda letras " & tempo & " a")
ELSE
lblpossld_2.Text = ("Manda numeros " & tempo & " 1")
ENDIF
vini2 = vfin2
END
PUBLIC SUB sldServo3_Change()
spnServo3.Value = sldServo3.Value
vfin3 = sldServo3.Value
tempo = 0
tempo = Abs(vfin3 - vini3)
IF (vfin3 - vini3) < 0
lblpossld_3.Text = ("Manda letras " & tempo & " a")
ELSE
lblpossld_3.Text = ("Manda numeros " & tempo & " 1")
ENDIF
vini3 = vfin3
END
PUBLIC SUB sldServo4_Change()
spnServo4.Value = sldServo4.Value
vfin4 = sldServo4.Value
tempo = 0
tempo = Abs(vfin4 - vini4)
IF (vfin4 - vini4) < 0
lblpossld_4.Text = ("Manda letras " & tempo & " a")
ELSE
lblpossld_4.Text = ("Manda numeros " & tempo & " 1")
ENDIF
vini4 = vfin4
END
PUBLIC SUB sldServo5_Change()
spnServo5.Value = sldServo5.Value
vfin5 = sldServo5.Value
tempo = 0
tempo = Abs(vfin5 - vini5)
IF (vfin5 - vini5) < 0
lblpossld_5.Text = ("Manda letras " & tempo & " a")
ELSE
lblpossld_5.Text = ("Manda numeros " & tempo & " 1")
ENDIF
vini5 = vfin5
END
PUBLIC SUB btnLimpia_Click() 'este boton pone en falso la flag para iniciar una nueva grabacion de posiciones
flag = FALSE
flag2 = FALSE
lblS1a.Text = "Pos="
lblS1b.Text = "Pos="
lblS2a.Text = "Pos="
lblS2b.Text = "Pos="
lblS3a.Text = "Pos="
lblS3b.Text = "Pos="
lblS4a.Text = "Pos="
lblS4b.Text = "Pos="
lblS5a.Text = "Pos="
lblS5b.Text = "Pos="
END
PUBLIC SUB spnServo1_Change()
sldServo1.value = spnServo1.Value
END
PUBLIC SUB spnServo2_Change()
sldServo2.Value = spnServo2.Value
END
PUBLIC SUB spnServo3_Change()
sldServo3.Value = spnServo3.Value
END
PUBLIC SUB spnServo4_Change()
sldServo4.Value = spnServo4.Value
END
PUBLIC SUB spnServo5_Change()
sldServo5.Value = spnServo5.Value
END
PUBLIC SUB lblpossld_1_MouseDown()
END
PUBLIC SUB radioCierraPuerto_Click()
IF SerialPort1.Status = Net.Active THEN
CLOSE SerialPort1
Message.Info("El puerto ha sido cerrado")
ELSE
Message.Info("El puerto no ha sido abierto")
ENDIF
END
PUBLIC SUB radioAbrePuerto_Click()
IF SerialPort1.Status = Net.Active THEN
Message.Info("El puerto ya esta abierto")
ELSE
Message.Info("Abriendo el puerto")
ENDIF
END
PUBLIC SUB ToolButton1_Click()
IF radioCierraPuerto.Value = TRUE
Message.Info("Da clic en la opcion abre el puerto")
ELSE
'Aqui viene lo de la apertura del puerto serial
'tomando los valores seleccionados de los combo box
'Me base en el ejemplo que trae la documentacion de gambas
Message.Info("Abriendo el puerto serial NOW!")
ENDIF
END
tambien les coloco una foto de la nueva placa que armamos y un juego de engranes donde esta acoplado uno de los servos a controlar, esa parte no la hago yo, pero esta quedando muy cool:!:
[img=]
[img=]
Por cierto, debido a que se usa un gusano sinfin, y una corona, el servo no podrá mover un amplitud grande al eje principal, por lo que se ha optado por la siguiente solución, quitarle el freno mecanico del servo, y adaptar con un engranaje con igual relacion, al eje principal el potenciometro del servo, de esta forma, el servo queda libre de giro, pero el sensado, será en el eje principal, por lu cual, digamos que se hace una extension de la caja de engranes del propio servo a la que se ve en la fotografia.
Cabe aclarar que yo no soy quien diseña la parte mecánica, sino es mi compañero ruben, aquien le agradezco su trabajo y que ademas trabaja muy bien con el torno y la fresa.
Dejenme sus comentarios, espero no desorientarlos tanto, y pues en el caso de las partes mecanicas, pues lo poco que se, con gusto se los comparto, pero si tienen preguntas un poco mas avanzadas, pues le preguntaré a Ruben y les dire
maigke- Asiduo del Foro
- Mensajes : 210
Fecha de inscripción : 12/04/2009
Edad : 46
Localización : Mexico
Re: GAMBAS Almenos es basic- Puerto Serie - PIC16F628A
Esto va tomando forma..ehh?
Tiene muy buena pinta el proyecto, la parte mecánica también se ve muy bién trabajada (felicitaciones a Rubén)... que envidia!!
Veo que estás empezando con el tema del puerto serie, esto me interesa. Por lo poco que he visto en Gambas hay una función que lee automaticamente el puerto serie cuando llegan datos y uno puede leer el bufer en cualquier momento o algo así... es algo diferente a como funciona en python y se me hace complicado.
Una cosa que he notado es que el programa parece quedarse bloqueado mientras el puerto está abierto, las pocas pruebitas que he hecho tengo que abrir y cerrar continuamente para que no se me bloquee... a ver si me aclaro cuando publiques el código completo que maneja el puerto.
No dejes de publicar fotos y explicaciones de la parte electrónica y mecánica, creo que pueden ser muy útiles
Saludos y ánimo con el proyecto, se está poniendo muy interesante.
Tiene muy buena pinta el proyecto, la parte mecánica también se ve muy bién trabajada (felicitaciones a Rubén)... que envidia!!
Veo que estás empezando con el tema del puerto serie, esto me interesa. Por lo poco que he visto en Gambas hay una función que lee automaticamente el puerto serie cuando llegan datos y uno puede leer el bufer en cualquier momento o algo así... es algo diferente a como funciona en python y se me hace complicado.
Una cosa que he notado es que el programa parece quedarse bloqueado mientras el puerto está abierto, las pocas pruebitas que he hecho tengo que abrir y cerrar continuamente para que no se me bloquee... a ver si me aclaro cuando publiques el código completo que maneja el puerto.
No dejes de publicar fotos y explicaciones de la parte electrónica y mecánica, creo que pueden ser muy útiles
Saludos y ánimo con el proyecto, se está poniendo muy interesante.
Re: GAMBAS Almenos es basic- Puerto Serie - PIC16F628A
Saludos de nuevo, aqui como siempre de noctambulo
Bueno le he avanzado un poco al tema, y bueno espero que les gusten los avances,
He probado el funcionamiento de la tarjetita, por el momento en esta prueba no le meti nada por el puerto serial, unicamente es la tarjeta alimentada, y la estamos monitoreando a través de un osciloscopio de dos canales,
bueno pero menos palabras y mas imagenes
Circuito Funcionando
Dos canales cercanos en la tarjeta
La dos señales mas alejadas.
Bueno le he avanzado un poco al tema, y bueno espero que les gusten los avances,
He probado el funcionamiento de la tarjetita, por el momento en esta prueba no le meti nada por el puerto serial, unicamente es la tarjeta alimentada, y la estamos monitoreando a través de un osciloscopio de dos canales,
bueno pero menos palabras y mas imagenes
Circuito Funcionando
Dos canales cercanos en la tarjeta
La dos señales mas alejadas.
maigke- Asiduo del Foro
- Mensajes : 210
Fecha de inscripción : 12/04/2009
Edad : 46
Localización : Mexico
Re: GAMBAS Almenos es basic- Puerto Serie - PIC16F628A
Probando el ejemplo que trae GAMBAS
Bien, como sabran, gambas trae un ejemplo base (de hecho a mi se me hizo muy completo!!), del manejo del puerto serial, para esto, probe la tarjeta que mostre en el anterior post, pero ya con la maquina.
Antes que nada el ejemplo si lo instalas en ubuntu, lo vas a encontrar en la siguiente ruta
/usr/share/gambas2/examples/Networking/SerialPort
copia esta carpeta a lugar donde desees de tu home, esto hace que al colocarla en otro lugar, ahora esta carpeta, junto con su contenido te pertenezcan
bueno, ahora aqui tuve un gran problema. probe mi tarjeta con la aplicacion minicom, y pues funciona perfecto, con cada caracter que recibe el micro, este modifica el ancho de pulso del servo que esta controlando, por lo tanto su posicion.
Sin embargo al trabajar con el ejemplo que trae gambas, pues nada que me reconocia el caracter, y es que en el programa del micro que tengo, pasa lo siguiente
*lee el caracter desde el buffer del puerto serial
* lo convierte a mayuscula
* usa switch y case para definir como va a tratar al dato recien llegado
* genera las interrupciones adecuadas para modificar el ancho del pulso
Sin embargo no me di cuenta de algo!!, despues de unas horas , que el problema no era tanto el codigo del micro, si no mas bien el codigo de gambas, ya que en una parte hace lo siguiente
En efecto, ahora como pude evitar eso, pues la forma mas sencilla y más rapida que se me ocurrio fue la siguiente.
Si el primer caracter me lo detecta, pero tambien el segundo y hace lo que quiere la tarjeta
Pues entonces, mandale 2 caracteres iguales!!!, pero ambos deben ser mayusculas!!, ya que el programa únicamente
recibe el primer dato, y lo transforma, pero aun no averiguo que diablos le hace al segundo, ya que este ultimo mencionado
es el que acepta.
Bueno aqui les coloco unas imagenes y un video, espero sea de su agrado, algo que se me hizo interesante, deje funcionando la aplicacion un buen de horas y con todo conectado y nunca se trabo, o tuve que cerrar el puerto o abrirlo
Pikitin, la funcion de lectura es la siguiente:
Bien, como sabran, gambas trae un ejemplo base (de hecho a mi se me hizo muy completo!!), del manejo del puerto serial, para esto, probe la tarjeta que mostre en el anterior post, pero ya con la maquina.
Antes que nada el ejemplo si lo instalas en ubuntu, lo vas a encontrar en la siguiente ruta
/usr/share/gambas2/examples/Networking/SerialPort
copia esta carpeta a lugar donde desees de tu home, esto hace que al colocarla en otro lugar, ahora esta carpeta, junto con su contenido te pertenezcan
bueno, ahora aqui tuve un gran problema. probe mi tarjeta con la aplicacion minicom, y pues funciona perfecto, con cada caracter que recibe el micro, este modifica el ancho de pulso del servo que esta controlando, por lo tanto su posicion.
Sin embargo al trabajar con el ejemplo que trae gambas, pues nada que me reconocia el caracter, y es que en el programa del micro que tengo, pasa lo siguiente
*lee el caracter desde el buffer del puerto serial
* lo convierte a mayuscula
* usa switch y case para definir como va a tratar al dato recien llegado
* genera las interrupciones adecuadas para modificar el ancho del pulso
- Código:
do{
if(comando!='\0')
{ //solo entra aqui si comando es diferente a nulo
//comando = toupper(comando);
ComandoValido=0;
printf("%c\r\n",comando);
//delay_ms(1000);
switch(comando){
case '1':{
printf("> S_1 +\r\n");
Servo_PWM[0]+=20;
ComandoValido=1;
}break;
case 'A':{
printf("> S_1 -\r\n");
Servo_PWM[0]-=20;
ComandoValido=1;
}break;
case '2':{
printf("> S_2 +\r\n");
Servo_PWM[1]+=20;
ComandoValido=1;
}break;
case 'B':{
printf("> S_2 -\r\n");
Servo_PWM[1]-=20;
ComandoValido=1;
}break;
default:{
printf("<%c>no se encontro \n",comando);
ComandoValido=0;
disable_interrupts(int_rda);
delay_ms(10);
enable_interrupts(int_rda);
//delay_ms(10);
}break;
}
if(ComandoValido==0) {
if(comando== '\0'){printf("EOL\n");}
else
printf("*%c \n",comando); }
comando='\0';
//delay_ms(1);
}
//delay_ms(50);
}while(1);
Sin embargo no me di cuenta de algo!!, despues de unas horas , que el problema no era tanto el codigo del micro, si no mas bien el codigo de gambas, ya que en una parte hace lo siguiente
- Código:
PUBLIC SUB Button2_Click()
IF Sport.Status = Net.Inactive THEN
Message("Open port first!")
ELSE
'Cuando damos clic al boton 2, lee el texto que hay en txtSend y lo manda por el flujo Sport
' Pero ademas de eso envia dos caracteres mas, un Retorno de Carro y Alimentacion de Línea
'Esto me daba en la torre (T_T)
PRINT #Sport, txtSend.Text; Chr$(13); Chr$(10);
END IF
END
En efecto, ahora como pude evitar eso, pues la forma mas sencilla y más rapida que se me ocurrio fue la siguiente.
Si el primer caracter me lo detecta, pero tambien el segundo y hace lo que quiere la tarjeta
Pues entonces, mandale 2 caracteres iguales!!!, pero ambos deben ser mayusculas!!, ya que el programa únicamente
recibe el primer dato, y lo transforma, pero aun no averiguo que diablos le hace al segundo, ya que este ultimo mencionado
es el que acepta.
Bueno aqui les coloco unas imagenes y un video, espero sea de su agrado, algo que se me hizo interesante, deje funcionando la aplicacion un buen de horas y con todo conectado y nunca se trabo, o tuve que cerrar el puerto o abrirlo
Pikitin, la funcion de lectura es la siguiente:
- Código:
PUBLIC SUB SPort_Read()
DIM s AS String 'Variable donde se almacena lo recibido por el buffer
READ #Sport, s, Lof(Sport) 'Leer el stream del puerto, almacenarlo en s y medir su tamaño
TextArea1.Text = TextArea1.Text & s 'manda el texto recibido por el puerto paralelo a un textArea
END
maigke- Asiduo del Foro
- Mensajes : 210
Fecha de inscripción : 12/04/2009
Edad : 46
Localización : Mexico
Re: GAMBAS Almenos es basic- Puerto Serie - PIC16F628A
Gracias maigke, en cuanto pueda lo pruebo y te comento... a ver si me aclaro con el puerto serie en Gambas.
Y tu proyecto se va poniendo cada vez más interesante, me alegro de que ya estés obteniendo resultados y todo esté funcionando.
Por ahora no estoy haciendo nada con servos, pero la parte del puerto serie si que me interesa. Tengo una pequeña aplicación para graficar datos enviados por el PIC (estilo Liberlab) hecha en Gambas... la verdad es que es muy facil y rápido hacer y modificar interfaces gráficas en Gambas. Pero lo del puerto serie me tenía bloqueado, a ver si ahora consigo avanzarla un poco hasta llegar al siguiente escollo (los gráficos).
Saludos.
Y tu proyecto se va poniendo cada vez más interesante, me alegro de que ya estés obteniendo resultados y todo esté funcionando.
Por ahora no estoy haciendo nada con servos, pero la parte del puerto serie si que me interesa. Tengo una pequeña aplicación para graficar datos enviados por el PIC (estilo Liberlab) hecha en Gambas... la verdad es que es muy facil y rápido hacer y modificar interfaces gráficas en Gambas. Pero lo del puerto serie me tenía bloqueado, a ver si ahora consigo avanzarla un poco hasta llegar al siguiente escollo (los gráficos).
Saludos.
Re: GAMBAS Almenos es basic- Puerto Serie - PIC16F628A
Hola a todos!!, despues de como 20 días sin avance, y bueno por fin podre mas o menos seguir adelante con esto !!!
Espero que no hayan pensado que deje abandonado pero bueno, poe el momento y asi como que de rápido, por fin consegui una interfaz serial usb, y eso es lo que estaba deteniendo mucho.
acabo de probar mi tarjeta controladora de servos con la interfaz usb-rs232 y minicom, que es una aplicacion muy padre de comunicacion serial para linux en linea de comandos., para que podamos usar la interfaz haremos lo siguiente.
conectar nuestro cable
abrir una terminal
teclear el siguiente comando $dmesg y esperar que nos diga algo como esto
[ 2106.356084] usb 3-1: new full speed USB device using uhci_hcd and address 3
[ 2106.521639] usb 3-1: configuration #1 chosen from 1 choice
[ 2106.525273] pl2303 3-1:1.0: pl2303 converter detected
[ 2106.545611] usb 3-1: pl2303 converter now attached to ttyUSB0
En este caso la interfaz es reconocida por ubuntu de forma automática como ttyUSB0, ahora solo toca configura el minicom.
para esto tecleamos
minicom -s
+-----------------------------------------------------------------------+
| A - Dispositivo Serial : /dev/ttyUSB0 |
| B - Localización del Archivo de Bloqueo : /var/lock |
| C - Programa de Acceso : |
| D - Programa de Salida : |
| E - Bps/Paridad/Bits : 115200 8N1
Al terminar si estamos en una lap, conviene guardar la configuracion,
así que al salir, pues a guardar como
| Salvar configuración como dfl |<--- Esta!!
| Salvar configuración como.. |
| Salir |
y pues a comunicarse!!.
+--------------------------------------
boxpic> 1
> S_1 +
1
> S_1 +
2
> S_2 +
2
> S_2 +
3
> S_3 +
3
> S_3 +
4
> S_4 +
4
> S_4 +
5
> S_5 +
+-----------------------------------------
La verdad el programa del microcontrolador no tiene muchos printf
ya que estos se acaban la memoria, entonces, mejos solo uso los necesarios
El unico detalle que hasta el momento le veo es el siguiente.
cuando cierro el minicom, automáticamente se desconecta la interfaz USB-RS
y entonces tengo sacar el cable y conectarlo de nuevo. espero, que en el
siguiente post, pues ya tenga mas avances!
Por cierto hoy no coloco imagenes por que ando de prisas, hoy, voy a la casa
de mi novia, y pues voy por ella!!
+------------------------------------------+
Espero que no hayan pensado que deje abandonado pero bueno, poe el momento y asi como que de rápido, por fin consegui una interfaz serial usb, y eso es lo que estaba deteniendo mucho.
acabo de probar mi tarjeta controladora de servos con la interfaz usb-rs232 y minicom, que es una aplicacion muy padre de comunicacion serial para linux en linea de comandos., para que podamos usar la interfaz haremos lo siguiente.
conectar nuestro cable
abrir una terminal
teclear el siguiente comando $dmesg y esperar que nos diga algo como esto
[ 2106.356084] usb 3-1: new full speed USB device using uhci_hcd and address 3
[ 2106.521639] usb 3-1: configuration #1 chosen from 1 choice
[ 2106.525273] pl2303 3-1:1.0: pl2303 converter detected
[ 2106.545611] usb 3-1: pl2303 converter now attached to ttyUSB0
En este caso la interfaz es reconocida por ubuntu de forma automática como ttyUSB0, ahora solo toca configura el minicom.
para esto tecleamos
minicom -s
+-----------------------------------------------------------------------+
| A - Dispositivo Serial : /dev/ttyUSB0 |
| B - Localización del Archivo de Bloqueo : /var/lock |
| C - Programa de Acceso : |
| D - Programa de Salida : |
| E - Bps/Paridad/Bits : 115200 8N1
Al terminar si estamos en una lap, conviene guardar la configuracion,
así que al salir, pues a guardar como
| Salvar configuración como dfl |<--- Esta!!
| Salvar configuración como.. |
| Salir |
y pues a comunicarse!!.
+--------------------------------------
boxpic> 1
> S_1 +
1
> S_1 +
2
> S_2 +
2
> S_2 +
3
> S_3 +
3
> S_3 +
4
> S_4 +
4
> S_4 +
5
> S_5 +
+-----------------------------------------
La verdad el programa del microcontrolador no tiene muchos printf
ya que estos se acaban la memoria, entonces, mejos solo uso los necesarios
El unico detalle que hasta el momento le veo es el siguiente.
cuando cierro el minicom, automáticamente se desconecta la interfaz USB-RS
y entonces tengo sacar el cable y conectarlo de nuevo. espero, que en el
siguiente post, pues ya tenga mas avances!
Por cierto hoy no coloco imagenes por que ando de prisas, hoy, voy a la casa
de mi novia, y pues voy por ella!!
+------------------------------------------+
maigke- Asiduo del Foro
- Mensajes : 210
Fecha de inscripción : 12/04/2009
Edad : 46
Localización : Mexico
Re: GAMBAS Almenos es basic- Puerto Serie - PIC16F628A
Hola a todos de nuevo!
Bien, pues el dia de hoy y despues de varios infructuosos intentos de hacer la comunicacion con la aplicacion que estoy desarrollando, me puse a pensar un poquito
Me volví a fijar en el archivo que viene de ejemplo en GAMBAS 2, y pues ya que me cayo el 20, decidi, de nuevo emplear todas las opciones de la conexion por el puerto serial, y bueno ahora usando la interfaz usb-serie, que por cierto para linux no requiere de algún tipo en partícular de driver.
basado en esto y analizando mas a conciencia el código de ejemplo vi los siguientes aspectos
1. Existe una funcion para abrir el puerto (Demasiado obvio, pero por esto mismo me equivoque en el anterior), no unicamente se pasan los paramtros, sino que tambien, se hace necesario un chequeo de estado pasando a unos indicadores chkbox los valores de algunos valores importantes de la comunicacion serial como son Ring, DCD, CTS, etc. en este caso, si todo va bien, al hacer el chequeo, unicamente se marcarán DTR, RTS (Data Terminal Ready - Request to Send) Que nos indican que la terminal de datos esta lista para funcionar y que ademas esta en petición para enviar datos
Fuente: http://www.beyondlogic.org/serial/serial.htm
2. Una parte de asignación de cambio de valores booleanos a los chkbox de los pines del RS232
3. La implementación de la función de lectura, usando el comando READ a través de un flujo (stream) que viene del objeto instanciado hacia el Puerto Serial. y almacenandolo en una cadena llamada s.
4. El envio de datos, es la parte que personalizamos, para poder enviar datos, primero debemos verificar que se encuentre activo el puerto serie, esto se hace usando el siguiente comando
IF ttyUSB.Status = Net.Inactive THEN
posterior a esto puede colocar una ventana de mensaje o algún otro tipo de dato; en el ELSE usted podrá colocar el envio de los datos, para nosotros fué más facil el pensar en trabajarlo con un PRINT a través de flujo (stream) #ttyUSB, quedando de esta forma
PRINT #ttyUSB, "a" 'Esto envia el caracter ascii de la letra 'a' por el puerto serial, siempre y cuando este abierto dicho puerto.
para el envio de los datos use, dos commmandButton, que envian únicamente una letra por cada clic, y un slider con un spinbox, como lo hice en el programa anterior, pero ademas, coloque, dos toolbutton, que ya se que no son para eso pero los use como indicadores cambiando de color cuando un dato ha sido enviado.
Tuve problema primero, pues al enviar cantidades pequeñas de datos, es decir, unas 3 letrs, todo trabajaba a la perfección, el problema se sucitó, cuanod enviaba mas de 10 elementos, y pues esto se moría, y bueno como se arreglo mas o menos el asunto, espero en verdad encontrar una mejor solución.
Colocando un wait 0.1 que genera un retardo de 100ms, tiempo suficiente para que enie el dato y le de chance a nuestro programa que responda de forma adecuada, de hecho así lo hizo!!!
les dejo el código fuente que hemos realizado
Lo mas padre de todo esto es que si funciona aunque lento pero funciona
Bien, pues el dia de hoy y despues de varios infructuosos intentos de hacer la comunicacion con la aplicacion que estoy desarrollando, me puse a pensar un poquito
Me volví a fijar en el archivo que viene de ejemplo en GAMBAS 2, y pues ya que me cayo el 20, decidi, de nuevo emplear todas las opciones de la conexion por el puerto serial, y bueno ahora usando la interfaz usb-serie, que por cierto para linux no requiere de algún tipo en partícular de driver.
basado en esto y analizando mas a conciencia el código de ejemplo vi los siguientes aspectos
1. Existe una funcion para abrir el puerto (Demasiado obvio, pero por esto mismo me equivoque en el anterior), no unicamente se pasan los paramtros, sino que tambien, se hace necesario un chequeo de estado pasando a unos indicadores chkbox los valores de algunos valores importantes de la comunicacion serial como son Ring, DCD, CTS, etc. en este caso, si todo va bien, al hacer el chequeo, unicamente se marcarán DTR, RTS (Data Terminal Ready - Request to Send) Que nos indican que la terminal de datos esta lista para funcionar y que ademas esta en petición para enviar datos
Fuente: http://www.beyondlogic.org/serial/serial.htm
2. Una parte de asignación de cambio de valores booleanos a los chkbox de los pines del RS232
3. La implementación de la función de lectura, usando el comando READ a través de un flujo (stream) que viene del objeto instanciado hacia el Puerto Serial. y almacenandolo en una cadena llamada s.
4. El envio de datos, es la parte que personalizamos, para poder enviar datos, primero debemos verificar que se encuentre activo el puerto serie, esto se hace usando el siguiente comando
IF ttyUSB.Status = Net.Inactive THEN
posterior a esto puede colocar una ventana de mensaje o algún otro tipo de dato; en el ELSE usted podrá colocar el envio de los datos, para nosotros fué más facil el pensar en trabajarlo con un PRINT a través de flujo (stream) #ttyUSB, quedando de esta forma
PRINT #ttyUSB, "a" 'Esto envia el caracter ascii de la letra 'a' por el puerto serial, siempre y cuando este abierto dicho puerto.
para el envio de los datos use, dos commmandButton, que envian únicamente una letra por cada clic, y un slider con un spinbox, como lo hice en el programa anterior, pero ademas, coloque, dos toolbutton, que ya se que no son para eso pero los use como indicadores cambiando de color cuando un dato ha sido enviado.
Tuve problema primero, pues al enviar cantidades pequeñas de datos, es decir, unas 3 letrs, todo trabajaba a la perfección, el problema se sucitó, cuanod enviaba mas de 10 elementos, y pues esto se moría, y bueno como se arreglo mas o menos el asunto, espero en verdad encontrar una mejor solución.
Colocando un wait 0.1 que genera un retardo de 100ms, tiempo suficiente para que enie el dato y le de chance a nuestro programa que responda de forma adecuada, de hecho así lo hizo!!!
les dejo el código fuente que hemos realizado
- Código:
' Gambas class file
'Midiendo con el Osciloscopio, el ancho de pulso de la tarjeta mide 1500us
'si con en programa, suponemos que por cada caracter que envie al micro, un servo tendrá un
'movimiento de un grado, parece que este dato es totalmente erroneo, a pesar de que los
'calculos esten bien realizados.
'Para iniciar el programa solo manda caracteres, pero creo que estos incluyen muchos
'CR & LF en los cuales el micro al recibirlos se ataranta.
'como recibi muchos datos y tambien los envia, es impresindible que solo
'envie una señal cuando yano reciba datos, pero como asegurarnos que ha recibido
'el correcto numero de pulsos, que no sea a traves del uso del printf
' y/o de alguna incorrecta inicializacion de otro dispositivo
' el uso de wait, realmente ha hecho que el programa sea muy lento
'Variables Globales
PUBLIC vini1 AS Integer
PUBLIC vfin1 AS Integer
PUBLIC tempo AS Integer
PUBLIC SUB Form_Close()
IF ttyUSB.Status = Net.Active THEN CLOSE ttyUSB
END
'***************************Seccion para la comunicacion del puerto serial
'Esta parte es bastante modificable
PUBLIC SUB Check_Status()
ChkDSR.Value = ttyUSB.DSR
ChkDTR.Value = ttyUSB.DTR
ChkCTS.Value = ttyUSB.CTS
ChkRTS.Value = ttyUSB.RTS
ChkDCD.Value = ttyUSB.DCD
ChkRNG.Value = ttyUSB.RNG
END
PUBLIC SUB Form_Open()
cmdVelocidad.Index = cmdVelocidad.Find("115200")
vini1 = 0
vfin1 = 0
sldS1.Value = 90
END
PUBLIC SUB Button1_Click()
ME.Close
END
PUBLIC SUB cmdAbreCierra_Click()
IF ttyUSB.Status = Net.Active THEN
CLOSE ttyUSB
cmdAbreCierra.Text = "Abre"
ELSE
'Linea de parametros
ttyUSB.PortName = txtPortText.Text
ttyUSB.Speed = cmdVelocidad.Text
ttyUSB.Parity = cmbParidad.Index
ttyUSB.DataBits = cmbDataBits.Text
ttyUSB.FlowControl = cmbControlFlujo.Index
ttyUSB.StopBits = cmbBitParo.Text
ttyUSB.Open()
Check_Status()
TextArea1.Text = "Puerto Abierto : " & ttyUSB.PortName & " Ajustes : " &
ttyUSB.Speed & " , " & ttyUSB.Parity & " , " & ttyUSB.DataBits & " , " &
ttyUSB.StopBits & " , " & Chr(13) & Chr(10)
cmdAbreCierra.Text = "Cierra"
ENDIF
END
PUBLIC SUB ttyUSB_Read()
DIM s AS String
IF TabStrip1.Text = "Configuracion" THEN
READ #ttyUSB, s, Lof(ttyUSB)
TextArea1.Text = TextArea1.Text & s
ELSE IF TabStrip1.Text = "Servo 1" THEN
READ #ttyUSB, s, Lof(ttyUSB)
TextArea2.Text = TextArea2.Text & s
ENDIF
END
PUBLIC SUB ttyUSB_RNGChange(ival AS Boolean)
ChkRNG.Value = ival
END
PUBLIC SUB ttyUSB_DTRChange(ival AS Boolean)
ChkDTR.Value = ival
END
PUBLIC SUB ttyUSB_DSRChange(ival AS Boolean)
ChkDSR.Value = ival
END
PUBLIC SUB ttyUSB_CTSChange(ival AS Boolean)
ChkCTS.Value = ival
END
PUBLIC SUB ttyUSB_DCDChange(ival AS Boolean)
ChkDCD.Value = ival
END
PUBLIC SUB ttyUSB_RTSChange(ival AS Boolean)
ChkRTS.Value = ival
END
PUBLIC SUB ChkDTR_Click()
ttyUSB.DTR = ChkDTR.Value
Check_Status
END
PUBLIC SUB ChkRTS_Click()
ttyUSB.RTS = ChkRTS.Value
Check_Status
END
PUBLIC SUB cmbControlFlujo_Click()
ttyUSB.FlowControl = cmbControlFlujo.Index
END
'************************************************************************************************
'Esta parte corresponde a los controles que se encuentran en el tab SERVO 1
'Los primeros son dos botones con dos toolbuttons que sirven como leds indicadores
'La segunda parte corresponde a un spinbox y aun slider
PUBLIC SUB cmdAtras_Click()
IF ttyUSB.Status = Net.Inactive THEN
Message("Primero abre el Puerto, NO JODAS")
ELSE
PRINT #ttyUSB, "a"
ToolButton2.Background = &FF0000&
ToolButton2.Text = "A"
WAIT 0.3 'Este retardo es para el parpadeo, entre colores, pero no tiene mucho caso
ToolButton2.BackColor = &00FF00&
ToolButton2.Text = ""
ENDIF
END
PUBLIC SUB cmdAdelante_Click()
IF ttyUSB.Status = Net.Inactive THEN
Message("Primero abre el puerto NO JODAS")
ELSE
PRINT #ttyUSB, "11"
ToolButton1.Background = &FF0000&
ToolButton1.Text = "1"
WAIT 0.3
ToolButton1.Background = &00FF00&
ToolButton1.text = ""
ENDIF
END
'**************************************************************************
PUBLIC SUB spnboxS1_Change()
DIM maximo AS Integer
DIM i AS Integer
sldS1.Value = spnboxS1.Value
vfin1 = spnboxS1.Value
tempo = 0
tempo = Abs(vfin1 - vini1)
IF (vfin1 - vini1) < 0 THEN
IF ttyUSB.Status = Net.Active THEN
maximo = tempo
FOR i = 1 TO maximo
PRINT #ttyUSB, "AAA"
ToolButton2.Background = &FF0000&
ToolButton2.Text = "A"
WAIT 0.1 'Este retardo es importante, ya que la tarjeta no responde muy rápido
ToolButton2.BackColor = &00FF00&
ToolButton2.Text = ""
NEXT
maximo = 0
ELSE
Message.Info("NO JODAS A")
ENDIF
ELSE
IF ttyUSB.Status = Net.Active THEN
maximo = tempo
FOR i = 1 TO maximo
PRINT #ttyUSB, "111"
ToolButton1.Background = &FF0000&
ToolButton1.Text = "1"
WAIT 0.1
ToolButton1.Background = &00FF00&
ToolButton1.text = ""
NEXT
maximo = 0
ELSE
Message.info("NO JODAS 1")
ENDIF
ENDIF
vini1 = vfin1
END
'**********************************************************************************
PUBLIC SUB sldS1_Change()
DIM maximo AS Integer
DIM i AS Integer
spnboxS1.Value = sldS1.Value
vfin1 = spnboxS1.Value
tempo = 0
tempo = Abs(vfin1 - vini1)
IF (vfin1 - vini1) < 0 THEN
IF ttyUSB.Status = Net.Active THEN
maximo = tempo
FOR i = 1 TO maximo
PRINT #ttyUSB, "AAA"
ToolButton2.Background = &FF0000&
ToolButton2.Text = "A"
WAIT 0.3
ToolButton2.BackColor = &00FF00&
ToolButton2.Text = ""
NEXT
maximo = 0
ELSE
Message.Info("NO JODAS A")
ENDIF
ELSE
IF ttyUSB.Status = Net.Active THEN
maximo = tempo
FOR i = 1 TO maximo
PRINT #ttyUSB, "111"
ToolButton1.Background = &FF0000&
ToolButton1.Text = "1"
WAIT 0.3
ToolButton1.Background = &00FF00&
ToolButton1.text = ""
NEXT
maximo = 0
ELSE
Message.info("NO JODAS 1")
ENDIF
ENDIF
vini1 = vfin1
END
PUBLIC SUB cmdBorrar_Click()
TextArea2.Text = ""
END
PUBLIC SUB cmdColor_Click()
cmdColor.text = "Rojo"
FMain.BackColor = &H00FF0000&
END
Lo mas padre de todo esto es que si funciona aunque lento pero funciona
maigke- Asiduo del Foro
- Mensajes : 210
Fecha de inscripción : 12/04/2009
Edad : 46
Localización : Mexico
Re: GAMBAS Almenos es basic- Puerto Serie - PIC16F628A
Hola a todos!!, bueno aqui estoy dando avances del proyecto que llevamos , bueno pues he seguido trabajando con GAMBAS con el Puerto serial y con un adaptador USB-RS232, el cual en el post anterior mencione que me funcionaba muy bien!!, bueno, pues les comento que el anterior interfaz tuve que abandonarla ya que no me gusto mucho y se revolvio todo el codigo , sin embargo decidi comenzar casi desde cero con la interfaz, pero basandome en los códigos anteriores que puse al inicio de este hilo y de los ejemplos que he estado haciendo.
Bueno ahora en lugar de un solo panel colocamos un panelStrip que son las solapas o pestañas, para que en cada una de ellas estuviera el control de un servomotor, controlando el ancho del pulso por medio del envio de caracteres ascii, a través de un spinbox y de un slider, pero ahora ya mas separado, con un textArea, donde se puede visualizar la respuesta del micro, unos botones que puse como indicadores LEDs ( bueno simulandolos ) y pues por el momento un grabado de posicionado home.
Ya medimos los anchos de pulsos con un oscilosocipio y la variacion que tiene es muy aceptable, digamos unos 20us de variacion de ancho de pulso, pero como estos servo, van a unos engranajes un tanto grandes, esta variacion no me perjudica mucho, bueno esta respuesta es empirica aun, luego nos meteremos con los numeritos
Lo que aun nos falta, es que grabe mas posiciones, que sea mas raṕido, bueno eso por el momento no creo que sea posible debido al
formato de datos que acepta el micro, luego lo reprogramamos, que este mas bonita la GUI, mmmm y bueno las sugerencias que me hagan favor de hacerme.
Una disculpa de antemano si no coloco imagenes, pero aqui esta retringido el servicio de internet y todo lo que es multimedia, no pasa, si alguien me sugiere el uso de TOR y privoxy se lo agradezco, pero realmente no quiero romper las politicas ya que me dejarian sin servicio al localizarme, ademas de que seria facil ya que sus servidores Linux esta bien configgurados.
Las imagenes las colacaré al rato cuando esté en casa. Les coloco de mientras el código
Me dice que el post es muy largo!!!
maigke- Asiduo del Foro
- Mensajes : 210
Fecha de inscripción : 12/04/2009
Edad : 46
Localización : Mexico
Re: GAMBAS Almenos es basic- Puerto Serie - PIC16F628A
Esta es la Parte de la comunicacion
- Código:
' Gambas class file
'Variables Globales
PUBLIC flag1 AS Boolean = FALSE
PUBLIC flag2 AS Boolean = FALSE
PUBLIC fTermine AS Boolean = FALSE ' bandera para indicar que ya acabo de mover un servo
'Variables para posicionamiento
PUBLIC S1Pos1 AS Integer PUBLIC S2Pos1 AS Integer PUBLIC S3Pos1 AS Integer PUBLIC S4Pos1 AS Integer
PUBLIC S5Pos1 AS Integer
PUBLIC S1Pos2 AS Integer PUBLIC S2Pos2 AS Integer PUBLIC S3Pos2 AS Integer PUBLIC S4Pos2 AS Integer
PUBLIC S5Pos2 AS Integer
'Variables para HOME
PUBLIC s1 AS Integer PUBLIC s2 AS Integer PUBLIC s3 AS Integer PUBLIC s4 AS Integer PUBLIC s5 AS Integer
PUBLIC vini1 AS Integer PUBLIC vfin1 AS Integer PUBLIC vini2 AS Integer PUBLIC vfin2 AS Integer PUBLIC vini3 AS Integer
PUBLIC vfin3 AS Integer PUBLIC vini4 AS Integer PUBLIC vfin4 AS Integer PUBLIC vini5 AS Integer PUBLIC vfin5 AS Integer
PUBLIC tempo AS Integer
PUBLIC SUB Form_Close()
IF ttyUSB.Status = Net.Active THEN CLOSE ttyUSB
END
'***************************Seccion para la comunicacion del puerto serial
'Esta parte es bastante modificable
PUBLIC SUB Check_Status()
ChkDSR.Value = ttyUSB.DSR
ChkDTR.Value = ttyUSB.DTR
ChkCTS.Value = ttyUSB.CTS
ChkRTS.Value = ttyUSB.RTS
ChkDCD.Value = ttyUSB.DCD
ChkRNG.Value = ttyUSB.RNG
END
PUBLIC SUB Form_Open()
cmdVelocidad.Index = cmdVelocidad.Find("115200") 'Lo que sigue no es valido separa las lineas indicadas por ';'
vini1 = 0; vfin1 = 0; vini2 = 0; vfin2 = 0; vini3 = 0; vfin3 = 0; vini4 = 0; vfin4 = 0; vini5 = 0; vfin5 = 0; sldS1.Value = 250
sldS2.Value = 250; sldS3.Value = 250; sldS4.Value = 250; sldS5.Value = 250
END
PUBLIC SUB Button1_Click()
ME.Close
END
PUBLIC SUB cmdAbreCierra_Click()
IF ttyUSB.Status = Net.Active THEN
CLOSE ttyUSB
cmdAbreCierra.Text = "Abre"
ELSE
'Linea de parametros
ttyUSB.PortName = txtPortText.Text
ttyUSB.Speed = cmdVelocidad.Text
ttyUSB.Parity = cmbParidad.Index
ttyUSB.DataBits = cmbDataBits.Text
ttyUSB.FlowControl = cmbControlFlujo.Index
ttyUSB.StopBits = cmbBitParo.Text
ttyUSB.Open()
Check_Status()
TextArea1.Text = "Puerto Abierto : " & ttyUSB.PortName & " Ajustes : " &
ttyUSB.Speed & " , " & ttyUSB.Parity & " , " & ttyUSB.DataBits & " , " &
ttyUSB.StopBits & " , " & Chr(13) & Chr(10)
cmdAbreCierra.Text = "Cierra"
ENDIF
END
'Funcion para leer puerto serial RS232
PUBLIC SUB ttyUSB_Read()
DIM s AS String
IF TabStrip1.Text = "Configuracion" THEN
READ #ttyUSB, s, Lof(ttyUSB)
TextArea1.Text = TextArea1.Text & s
ELSE IF TabStrip1.Text = "Servo 1" THEN
READ #ttyUSB, s, Lof(ttyUSB)
TextArea2.Text = TextArea2.Text & s
ELSE IF TabStrip1.text = "Servo 2" THEN
READ #ttyUSB, s, Lof(ttyUSB)
TextArea3.Text = TextArea3.Text & s
ELSE IF TabStrip1.Text = "Servo 3" THEN
READ #ttyUSB, s, Lof(ttyUSB)
TextArea4.Text = TextArea4.text & s
ELSE IF TabStrip1.Text = "Servo 4" THEN
READ #ttyusb, s, Lof(ttyUSB)
TextArea5.Text = TextArea5.text & s
ELSE IF TabStrip1.Text = "Servo 5" THEN
READ #ttyUSB, s, Lof(ttyUSB)
TextArea6.Text = TextArea6.Text & s
ENDIF
END
PUBLIC SUB ttyUSB_RNGChange(ival AS Boolean)
ChkRNG.Value = ival
END
PUBLIC SUB ttyUSB_DTRChange(ival AS Boolean)
ChkDTR.Value = ival
END
PUBLIC SUB ttyUSB_DSRChange(ival AS Boolean)
ChkDSR.Value = ival
END
PUBLIC SUB ttyUSB_CTSChange(ival AS Boolean)
ChkCTS.Value = ival
END
PUBLIC SUB ttyUSB_DCDChange(ival AS Boolean)
ChkDCD.Value = ival
END
PUBLIC SUB ttyUSB_RTSChange(ival AS Boolean)
ChkRTS.Value = ival
END
PUBLIC SUB ChkDTR_Click()
ttyUSB.DTR = ChkDTR.Value
Check_Status
END
PUBLIC SUB ChkRTS_Click()
ttyUSB.RTS = ChkRTS.Value
Check_Status
END
PUBLIC SUB cmbControlFlujo_Click()
ttyUSB.FlowControl = cmbControlFlujo.Index
END
maigke- Asiduo del Foro
- Mensajes : 210
Fecha de inscripción : 12/04/2009
Edad : 46
Localización : Mexico
Página 1 de 2. • 1, 2
Temas similares
» Otro de GAMBAS con el puerto serie
» QextSerialPort: Controlando el puerto Serie con Qt
» manejo del puerto serie con Python
» Puerto serie en octave / serial port octave
» Grabar con un bootloader a través el puerto serie o el USB
» QextSerialPort: Controlando el puerto Serie con Qt
» manejo del puerto serie con Python
» Puerto serie en octave / serial port octave
» Grabar con un bootloader a través el puerto serie o el USB
Página 1 de 2.
Permisos de este foro:
No puedes responder a temas en este foro.
|
|