fbpx

Expresate

Si además quieres enviarnos un Artículo para el Blog y redes sociales, pulsa el siguiente botón:

Avisos
Vaciar todo

Menos PIC y mas control directo, leñe! xD

11 Respuestas
9 Usuarios
0 Reactions
5,401 Visitas
berseker
Respuestas: 2
Topic starter
(@berseker)
New Member
Registrado: hace 18 años

Hola!

Primero, soy MAS que novato.

He ido leyendo y todo el mundo se empeña en hacer robots la mar de autónomos... pero vamos a imaginarnos que yo lo unico que quiero hacer es MOVER 2 MOTORES en un sentido o en otro cuando presiono unas teclas u otras de mi teclado.. Como si, por ejemplo, quisiera construirme una de esas torretas USB que tanto exito tienen ahora.

¿Es realmente necesario uno de esos PIC? no quiero controlar los 20 servos de un robot, solo 2!!!

Imaginemos ahora que quiero hacer justo lo contrario, que cuando pase corriente por el circuito externo, con la programacion correcta, en el pc ocurra "ALGO"

Por ejemplo, Un interruptor (fisico) que al pulsarlo hace que el pc ejecute un programa o reproduzca un sonido de "alarma"

¿Con que consigo estos efectos? Esto me abriria muchas posibilidades. ( domotica a muerte, se me ocurre asi de pronto el poder colocar un sensor de movimiento y que al pasar el ordenador sepa donde estoy dentro de mi casa para realizar por mi tareas especificas, lo que sea!)

¿Hay algo que me recomendeis leer para ir iniciandome? NO estoy interesado en robots autonomos etc, mas bien en aplicaciones mas sencillas que pueden resultarme mas utiles.

Gracias por vuestro tiempo y ayuda!

Responder
10 respuestas
oceano
Respuestas: 14
(@oceano)
Active Member
Registrado: hace 16 años

Saludos amigos,

He buscado por todo el google, he preguntado a gente que controla mogollón sobre USB, pero de momento nadie sabe nada sobre este tema:

Me compré unos convertidores de USB a RS-232 y cuando quise usarlos como si estuviera comunicándome con una UART me llevé la sorpresa de que no entiende.

Existe alguna persona que sepa cómo manejar los bits RST, DTR, DCD, etc... del convertidor USB a RS232 de forma directa con algún lenguaje de programación?

He intentado de todas las formas posibles haciendo Inp y Out, pero "nanay" de la china.

Lo que llevo realizado funciona perfectamente por la UART del PC, pero no así con el puerto virtual RS-232. En mi programa manejo bits de forma directa, no transmito datos de forma convencional, consigo velocidades muy elevadas, pero claro, ahora necesito que sea por un puerto Com(x) virtual, ya que los Com (con UART) de siempre están desapareciendo y sustiyéndose por la comunicación vía USB.

No quiero manejar pics porque la diferencia de precio es muy notable. El proyecto que estoy haciendo es para gestionar 8 encoders para un brazo robot.

Saludos y gracias.

Responder
beamspot
Respuestas: 1132
(@beamspot)
Noble Member
Registrado: hace 17 años

El C# tiene las funciones de control de los bits de DTC, CTS, RI, etc desde el mismo objeto del puerto serie.

FTDI, con sus integrados y módulos, da unas librerías para control directo pin a pin de los diferentes bits. Justo lo que tu quieres.

Por cierto, el PC para el control (al menos bajo Windouz) es en Tiempo I-Real, así que igual no sirve tanto como parece. Controlar motores con semejante pepino puede ser Muuuuucho más complicado de lo que parece. Además, el Guillermito Puertas tiene auténtica 'fobia' al HW, así que no deja que la gente lo trastee mucho, empeorando la situación.

Aún así, ¿alguen ha probado el Robot Studio de Microsoft?

Responder
fj_sanchez
Respuestas: 1083
(@fj_sanchez)
Ardero
Registrado: hace 19 años

Respecto al asunto del tema, sinceramente prefiero usar un pequeño microcontrolador cuando pueda, ya que es más barato, ocupa muy poco espacio y sobre todo, consume mucha menos electricidad. Además, seguramente nunca necesites la suficiente potencia de cómputo (al menos en tareas de domótica) como para que un micro de 8-bits se te quede corto. Y sino, a tirar de un ARM de 32bits que los hay muy baratos. (STM32 por ejemplo, por 4€).

Responder
ranganok
Respuestas: 3875
(@ranganok)
Ardero
Registrado: hace 19 años

Oceano, tienes que comprobar dos cosas
1.- El control de flujo de la comunicación, si es Hardware, Software o no tiene (el último caso es el mejor).
2.- Que la placa que está al otro lado de la comunicación no use las líneas de control para alimentarse.

Por otro lado existen programas que manejan los pines de control del COM (aunque no se si funcionarán con un conversor USB-Serie).

S2

Ranganok Schahzaman

Responder
oceano
Respuestas: 14
(@oceano)
Active Member
Registrado: hace 16 años

Después de 9 meses he encontrado un respuesta:

Para manejar los Bits de forma independiente en un FTDI FT232xx o su homónimo PL232xx:

Salidas: DTR - RTS
Entradas: CTS - DSR - (RI*) - DCD

* ("RI" sólo es compatible con la UART (Com[x]) que viene en el PC; en los FTDI no suele tener implementada esta patilla, porque sólo se usan en los antiguos Modem)

He comprobado la frecuencia máxima de cambio de estado con un osciloscopio. Si pones a cambiar el estado sólo una de las salidad (DTR ó RTS) se obtiene una frecuencia máxima de 166 Hercios. Y si usas los dos a la vez (DTR y RTS), la frecuencia es de 85 hercios. Esto es muy pobre, y para lo que necesitaba no me es factible, pero comunico los resultados por si alguien le encuentra alguna función a todo esto.

El programa está escrito en FreeBasic. No sé cómo se hace en otros lenguajes de programación. Si no puedes acceder al zip que adjunto, copio aquí los dos programas. Hace parpadear dos LED conectados al DB9 del FTDI (también es válido para la UART del PC, pero hay otras formas mucho más sencillas de manejarlo, directamente con la instrucción "Out puerto, dato" [has de abrir el puerto de comunicaciones previamente con 'Open com "com1:2400,8,n,1,rs,ds,cd" as #1' si estás en plataformas de SO de 32 ó 64 bits como el Win XP; en win98 no hace falta abrir el puerto porque el kernel del SO es de 16 bits, es decir, tipo msdos] y puedes alcanzar más de 20KHz de parpadeo). Las conexiones están en el JPG que adjunto. En pantalla no sale nada porque se trata de ver el parpadeo de los LEDs. Antes de ejecutar el programa has de averiguar en qué puerto Com está tu FTDI; lo puedes encontrar en: Inicio > Panel de Pontrol > Sistema > Hardware > Administrador de Dispositivos > Puertos Com & LPT > y pulsas en el símbolo '+', ahí verás la referencia del puerto donde esté. Si quieres tb puedes cambiar el Com a otro que tu quieras mientras esté libre, pulsando con el botón derecho y le das a "Propiedades" y después pulsas en la pestaña "Configuración del puerto". Pulsas sobre el botón "Opciones avanzadas" y verás abajo de esa ventana que te permite cambiar el Com a otro puerto si está libre.

En cualquiera de los dos programas has de pulsar "Escape" para salir.

Puedes descargar los códigos fuentes, esquema y los ejecutables aquí:
http://sites.google.com/site/proyectosroboticos/manejo-de-pines-del-ftdi-ft232 " onclick="window.open(this.href);return false;

Pines:
RTS -----> patilla 7 del DB9
DTR -----> patilla 4 del DB9
Masa ----> patilla 5 del DB9

Manejo de RTS y DTR:

-----------------------

#Include "windows.bi"
#Include "file.bi"

Dim Letra As String
Dim h As HANDLE
Dim ComX As Integer
Dim Puerto As String

Screen 9

Locate 10,1: Input "Escribe solo el -numero- del puerto COM donde tengas tu FTDI. COM:"; ComX

Cls

Locate 10,1
Print "Observa el cambio de estado de los LED. Ha de parpadear"
Print "primero uno y luego el otro, un segundo de tiempo cada uno."
Print
Print "Pulsa 'Escape' para salir. Igual tarda 2 segundos en tener efecto"
Print "hasta finalizar la temporizacion."

Puerto="Com"+Str(ComX)

Open Com Puerto+":9600, N, 8, 1, CS, DS, RS, CD" As #1
' El valor 9600 puede ser cualquier otro valor porque no estamos haciendo comunicaciones asincronas.

While Letra <> Chr(27)

Letra=InKey()

h = Cast(HANDLE, FileAttr( 1, fbFileAttrHandle ))

EscapeCommFunction( h, SETDTR ) ' DTR=1

Sleep 500

EscapeCommFunction( h, CLRDTR ) ' DTR=0

Sleep 500

EscapeCommFunction( h, SETRTS ) ' RTS=1

Sleep 500

EscapeCommFunction( h, CLRRTS ) ' RTS=0

Sleep 500

Wend

Close #1

End

---------------------------------------------

Y ahora el programa para leer las entradas. Si las patillas de entrada (CTS - DSR - DCD) están sueltas lo interpreta como un 1. Hay que llevarlas a masa para que se ponga a cero. Los resultados podrás leerlo en el monitor.

Patillaje de entradas:

CDC -----> patilla 1 del DB9
DSR -----> patilla 6 del DB9
CTS -----> patilla 8 del DB9
RI -----> patilla 9 del DB9 (opcional)
Masa ----> patilla 5 del DB9

El programa está escrito en FreeBasic, no sé cómo se hace en otros lenguajes de programación. En el ZIP adjunto los ficheros fuente y ejecutable.

Manejo de las patillas CDC DSR y CTS del FTDI FT232xx ó PL232xx:

--------------------------------------

#Include Once "windows.bi"

Dim Letra As String
Dim hCom As HANDLE
Dim modemStat As Dword
Dim ComX As Integer

Screen 9

Locate 10,1: Input "Escribe solo el -numero- del puerto COM donde tengas tu FTDI. COM:"; ComX

Cls

hCom = CreateFile( "Com" + Str(ComX), GENERIC_READ Or GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL )

While Letra = ""

Letra=InKey()

GetCommModemStatus( hCom, @modemStat )

Locate 10,10

If modemStat And MS_CTS_ON Then Print "CTS=1 "; Else Print "CTS=0 ";
If modemStat And MS_DSR_ON Then Print "DSR=1 "; Else Print "DSR=0 ";
If modemStat And MS_RING_ON Then Print "RING=1 "; Else Print "RING=0 ";
If modemStat And MS_RLSD_ON Then Print "RLSD=1" Else Print "RLSD=0"

Print modemstat

Wend

CloseHandle( hCom )

End

---------------------------------------

Responder
Página 2 / 3
Compartir: