Autor Tema: interfaz FTDI y python  (Leído 1321 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Caracola

  • PIC10
  • *
  • Mensajes: 6
interfaz FTDI y python
« en: 05 de Agosto de 2020, 07:31:34 »
Hola, estoy haciendo un proyecto de comunicación serie, donde envio los datos de un sensor conectado a  mi PIC16F884 a travez del FT232r. La idea principal es lograr guardar los datos en un archivo de texto a través de python.

El programa en SPYDER/PYTHON ejecuta sin arrojar errores pero no muestra nada y tampoco guarda datos.

Intenté ver el puerto serie en el programa HERCULES, y se logra ver los datos, claro que intermitentemente, lo que me hizo pensar que estoy mal en python, pero el código en Python es super simple, se los comparto.



import serial

ser=serial.Serial('COM5',9600)

while True:
    data=ser.readline()
    print(data)
    file = open("salida_07_17_2020.txt", 'a')
    file.write(ser.readline())
    file.close()

(tipo de dato: serialwin32.Serial) No sé si eso tenga que ver, ya que mi computador es de 64-bit



También pensé que pude  haber arruinado mi FTDI, ya que está funcionando a 3.3v, y mas de una vez alimenté mi PIC con 5v, generando salidas digitales de 5.3 aprox. pero sigue mostrando datos en HERCULES, a veces me muestra los datos reales y otras veces solo garabatos o otros tipos de caracteres,  pero en python nada de nada.

Y ya ven! como hay pandemia, está dificil de conseguir otro FTDI.  :8}

o cómo puedo comprobar que el FTDI está bueno?

o quizás mi programa en MPLAB tiene fallas? la simulación en PROTEUS funciona perfecto con la diferencia que al cabo de un minuto aproximadamente la transformación ADC se detiene.

No sé que puede estar pasando, mi cerebro va a estallar. Haber si alguien me ayuda  :8}



.............me gusta este monito  :-/ me da ánimo...........

Desconectado remi04

  • PIC24F
  • *****
  • Mensajes: 657
Re:interfaz FTDI y python
« Respuesta #1 en: 05 de Agosto de 2020, 18:47:12 »
El FTDI lo puedes probar uniendo físicamente tx con rx y enviando datos desde la terminal. Si los recibes en la propia terminal “eco” el ftdi está bien. 

  Respecto a la detención de las conversiones adc será cosa del simulador.  Pruébalo en un pic real y a ver qué tal.

Desconectado Caracola

  • PIC10
  • *
  • Mensajes: 6
Re:interfaz FTDI y python
« Respuesta #2 en: 05 de Agosto de 2020, 21:38:52 »
Remi04 gracias por respoder!  :-)

Hice la prueba física enviando datos desde la terminal en HERCULES, y funciona, incluso cada vez que escribo un dato en la terminal se enciende un luz en el FTDI. Pero en python nada  :8}

Desconectado jorgeaf_59

  • PIC10
  • *
  • Mensajes: 26
Re:interfaz FTDI y python
« Respuesta #3 en: 05 de Agosto de 2020, 23:12:38 »
Hola,

Te sugiero algunas pruebitas, para tratar de circunscribir el problema.
Primero, completá la prueba que te sugirió remi04; creo entender que vos solamente verificaste que el FTDI recibe "algo", para completar la prueba tendrías que recibir nuevamente en la terminal exactamemte lo que enviaste.
Comprobado el paso anterior, conectá el PIC16F884 y fijate si en la terminal aparecen las lecturas del ADC (si entiendo tu programa, estas enviando datos continuamente).
Si esto funciona, el hardware está bien y hay que seguir verificando el soft.
Para verificar el funcionamiento del soft, te sugiero que primero compruebes que en tu programa en python estas usando los mismos parámetros de comunicación que en la terminal (que supuestamente en los pasos anteriores funcionó correctamente); luego que hagas la misma prueba de eco que con la terminal, y por último que conectes el ADC.
Espero no haberte confundido o malinterpretado.
Cordiales saludos,

Jorge

Desconectado Geo

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 922
    • Mexchip
Re:interfaz FTDI y python
« Respuesta #4 en: 06 de Agosto de 2020, 00:28:51 »
Si colocas algunas capturas o muestras el tipo de salida que puedes visualizar en Hercules serviría para ayudarte a analizar.

import serial

ser=serial.Serial('COM5',9600)

while True:
    data=ser.readline()
    print(data)
    file = open("salida_07_17_2020.txt", 'a')
    file.write(ser.readline())
    file.close()

Algunos comentarios:
* Para usar serial.readline debes estar enviando desde tu programa en el microcontrolador un caracter de fin/salto de línea '\n' de otra forma la función se bloquea esperando dicho caracter: https://pyserial.readthedocs.io/en/latest/shortintro.html#readline
* En tu programa primero asignas a *data* lo que se lee del puerto serie hasta un caracter de salto de línea '\n' (es el caracter terminador por defecto para la función *readline*), pero al guardar a archivo vuelves a ejecutar ser.readline() por lo que estarías guardando en el archivo una segunda línea perdiendo la primera, mientras que la primera si la visualizarías en pantalla pero la segunda no.
* Si desde el microcontrolador estás enviando texto, lo más conveniente sería ejecutar decode() sobre lo que leíste del puerto para poder visualizarlo correctamente en la terminal: data = ser.readline().decode()
La imaginación es el límite.
Visita mi blog, en inglés o en español :).
Mini curso de introducción a VHDL en MEXCHIP :-/

Desconectado Caracola

  • PIC10
  • *
  • Mensajes: 6
Re:interfaz FTDI y python
« Respuesta #5 en: 06 de Agosto de 2020, 01:51:51 »
Dios mio ! Geo! era el pinche salto de linea (/n)  :shock: ((:-))

jajaja .. pero sigo teniendo problemas...

HERCULES ahora me muestra puros garabatos, pero no me interesa, sólo quería comprobar que mi FTDI estuviera funcionando.

Ahora puedo ver esto en SPYDER/PYTHON:


b'\r198 \n'
b'\r198 \n'
b'\r197 \n'
b'\r198 \n'
b'\r197 \n'
b'\r198 \n'
b'\r197 \n'
b'\r197 \n'
b'\r198 \n'
b'\r197 \n'
b'\r198 \n'
b'\r198 \n'
...


import serial

ser=serial.Serial('COM5',9600)

while True:
    file = open("salida_07_17_2020.txt", 'a')
    data=ser.readline()
    print(data)
 # file.write(data)
    file.close()


creo que esa b'\r y ese \n' estorban, pero por el momento no puedo guardar en "file", ya que con ese comando deja de transmitir, así que lo #comenté

de todos modos para lograr leer mi sensor tengo que conectar y desconectar el USB unas 3 veces hasta que agarre, cambie los cables así que no creo que sea eso.

Antes de llegar a esta solución, programé mi PIC en ASSEMBLER y el código ASCII tiene un salto de linea d'10', pero en el simulador PROTEUS no lo ejecuta como salto de línea (no hacía nada y me mostraba todos los datos juntos), así que intenté con "retorno de carro" d'13' y funcionó, por lo tanto borré el salto de línea d'10'. y además le agregué un espacio (d'20')

Ahora le puse todo d'32' d'10' d'13', en ese orden y funcionó.

Bueno ahora estoy trabajando en eso, para refinar más mi trabajo, ya que tengo que agregarle mas sensores (ya lo hice en PROTEUS), pero de nada me servía avanzar en eso si no logro resolverlo con un solo sensor, luego aumentar los baudios, y guardarlos en un archivo de texto para ir graficando ojalá en tiempo real.

Les agradezco si tienen más comentarios.  :-/  Son unos genios! estoy hace dos semanas pegada con esto.




Desconectado Geo

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 922
    • Mexchip
Re:interfaz FTDI y python
« Respuesta #6 en: 06 de Agosto de 2020, 13:27:58 »
Qué bien que has avanzado, revisa mi tercer comentario, la función readline() de serial te devuelve un typo *bytes*, el cual como puedes ver al imprimirlo en pantalla te muestra en esa codificación los caracteres especiales de lo que estás enviando, según se puede ver desde el microcontrolador envías:
* un retorno de carro \r
* caracteres que representan el valor que leíste
* un caracter espacio
* un caracter salto/fin de línea \n

Prueba con esto:
Código: Python
  1. while True:
  2.     data = ser.readline().decode().strip()
  3.     print(data)

readline te devuelve un tipo *bytes*, sobre este aplicamos decode() que te devuelve un string, finalmente strip() elimina los caracteres espacio, retorno o saltos de línea al inicio y fin de tu cadena de texto. Haz pruebas quitando la función strip() para que veas el efecto.
La imaginación es el límite.
Visita mi blog, en inglés o en español :).
Mini curso de introducción a VHDL en MEXCHIP :-/

Desconectado Caracola

  • PIC10
  • *
  • Mensajes: 6
Re:interfaz FTDI y python
« Respuesta #7 en: 11 de Agosto de 2020, 10:31:45 »

 :-/ :-/ :-/ :-/ :-/ :-/ SOLUCIONADO!