TDSO112A
TDSO112A es un programa escrito en Tcl / Tk para controlar el oscilocopio DSO112A. Aunque aún es un WIP es totalmente funcional y extiende la funcionalidad de este pequeño oscilocopio añadiendo:
- Diferentes espectrogramas
- Trigger a altas frecuencias (inexistente via hardware: ver documentación oscilocopio User Manual: Setup Trigger)
- Lectura de protocolos: UART, DHT11… WIP
- Salvado de forma de onda mediante CSV
Documentación y drivers: DSO112A
La documentación del pequeño osciloscopio, la puedes encontrar en DSO112a.
Para que funcione la comunicación, hay que instalar los drivers si no los tienes ya.
Iniciando TDSO112A
Antes de inicial el programa conecta el oscilocopio al USB y espera que arranque.
Ahora ya puedes arrancar el fichero tdso112a.bat desde la línea de comandos o hacer doble click sobre tdso112a.exe y después run-clients.exe.
Consejo
Si no ha funcionado la configuración automática, tendrás que borrar el fichero serial_port.txt (o en su defecto indicar el puerto serie a mano si se diera el caso. Por ejemplo, COM3). De todas formas, si no ha funcionado indica que tienes problemas con el driver.
Versión 1.x
Aquí puedes ver el funcionamiento general del osciloscopio de la versión.
Versión 1.2
Lectura del protocolo del sensor de humedad y temperatura DHT11. Lectura de UART.
Versión 1.3
Lectura de UART utilizando Sigrok-cli esta versión es mucho más flexible que la v1.2 gracias a la integración de Sigrok. En teoría se puede utilizar cualquier configuración posible para UART. Por ejemplo, -P uart:baudrate=9600:format=hex -P uart:baudrate=9600:format=bin -A uart=rx-data indica que queremos ver las anotaciones en hexadecimal de los datos y debajo queremos el formato binario (podemor hacer stack de diferentes datos) del rx-data. Para ver las opciones disponibles, podemos hacer sigrok-cli.exe -P uart --show. Más documentación en Protocol_decoder:Uart.
Aviso
En esta versión he deshabilitado, por el momento, el decodificador del DHT11. La idea es usar Protocol_decoder:Am230x aprovechando la nueva integración.
Versión 1.3.1
Lectura del protocolo de los sensores de humedad y temperatura DHTX/AM230X utilizando Sigrok.
Aviso
Para poder decodificar este protocolo hay que utilizar el trigger externo.
Si has leído la documentación de sigrok al respecto, verás que se necesita mínimo un sampleado de 200ksps. Con esa cantidad de muestras y nuestro buffer limitado de 1024 puntos los números no dan, puesto que solo cuando la MCU pasa la línea de datos de HIGH a LOW, la línea se tira 18ms en ese estado…
La trampa que he realizado es utilizar un trigger externo que se dispare a los 16ms tras el cambio de estado, por parte de la MCU, de la línea de datos a nivel bajo. En teoría, todo esto era innecesario si simplemente usábamos un flanco de subida, puesto que solo se daba al comienzo de la transmisión de los datos.
pero resulta que hay un pequeño pulso, que desconocía que existiera, al inicio de la transición.
La verdad no sé si es algún tipo de error en mi hardware, pero nunca lo había visto. Es más, nunca me había fallado la estrategia de usar el flanco de subida (el hardware es exactamente el mismo y no se ha realizado ningún tipo de cambio).
El tener que usar un trigger externo implica tener que cambiar el típico programa para usar este sensor con Arduino para añadir un pin para sacar el pulso del trigger, y añadir una interrupción para detectar cuándo la MCU baja la línea de datos, añadir un temporizador (tal vez se habría podido usar millis(), pero quería algo preciso) y la interrupción del Timer para crear nuestro trigger artificial.
Gracias al trigger externo, empezamos a samplear 16ms tras la bajada de la línea y tenemos tiempo de sobra para examinar todos los datos.
La siguiente modificación necesaria ha sido cambiar, muy ligeramente, el decoder de Sigrok. La verdad que el decodificador creo que está muy bien escrito y eso me ha facilitado las cosas. Las modificaciones las he empotrado en la propia versión que trae TDSO112A. Se podrían haber integrado en lugar de machar partes del código… pero creo que así es más sencillo y además es algo tan específico que creo que no merece la pena hacerlo de otra manera.
Básicamente he cambiado los tiempos para que encajaran en 125ksps y cambiado el estado inicial (también he cambiado un pequeño error en las opciones, pero no es merecedor de mención).
Funcionamiento
La arquitectura es cliente/servidor, donde el servidor (el programa principal) se encarga de comunicarse con el osciloscopio y envía los datos a los clientes (que son los plugins). Básicamente los datos son los recibidos del ADC y la frecuencia de muestreo que se está utilizando.
El fichero tdso112a.bat se encarga de arrancar el servidor y los diferentes clientes. Tras el arranque parecerán 2 ventanas:
- La del osciloscopio
- run-clients
¿Por qué dos ventanas y el fichero tdso112a.bat?
El desarrollo principal es utilizando el propio intérprete: tclsh dso112a.tcl. El programa principal crea un servidor que envía/recibe datos de los diferentes clientes (Transformada Discreta de Hartley, DHT, -junto cálculos sencillos de: RMS, VMáx, Vmín, etc-; protocolo del sensor de humedad y temperatura DHT11, protocolo UART,… y lo que se nos ocurra). Éstos realizan los cálculos complejos y avisan al programa principal cuando están listos para mostrarlos. Esto permite una total independencia entre la GUI y los cálculos, y además es tan simple como lanzar exec tclsh client-measures.tcl & para por ejemplo, el DHT y las medidas habituales.
Al usar freewrap para crear el ejecutable, esto ya no es posible tal cual, y se necesitan 2 ejecutables (que en principio también es bueno, ya que ambos son independientes).
Como la intención nunca fue crear un ejecutable, nada de esto se ha tenido en cuenta, pero es cierto que tener un ejecutable facilita el uso del programa.
Cuándo estará disponible el código fuente
En principio, antes de final de año, aunque como digo, si sabes algo de Tcl/Tk ya lo tienes disponible. Aunque evidentemente con cada nueva versión habrá cambios.
Actualizaciones
Iré actualizando el software y esta página de ayuda cuando tenga tiempo, pero ya adelanto que las próximas actualizaciones son:
Versión 1.3.1
- Lectura del protocolo DHTX/AM230X gracias a la integración con Sigrok.
Versión 1.3
- Integración de sigrok-cli. Por el momento se está usando solo para UART.
- Se ha deshabilitado la lectura del protocolo DHT11.
Version 1.2
- Protocolo UART 9600bps 8N1. De momento es muy limitado, pero no por ello deja de ser útil.
Versión 1.1
- Protocolo DHT11
Versión 1.0
- Versión inicial. Cotiene todas las funcionalidades del osciloscopio sin plugins:
- Control absoluto (o casi) del DSO112A
- Fix software de errores del firmware como imposibilidad de trigger a altas frecuencias (mencionado en la documentación) o inconsistencias en el control mediante comandos (reportado por otros programadores).
- Mediciones automáticas: VM, Vm, Vpp, Vavg, Fre
- Mediciones de tiempo y tensión mediante cursores
- Salvado de forma de onda mediante CSV
- Diferentes espectrogramas usando la DHT
Página del proyecto
Road Map
- Adaptar el código para funcionar sobre DSO183 modificado (utilizar relés y transistores para poder controlar el osciloscopio mediante software). En principio no parece que sea posible… una lástima.
- Ídem sobre DSO138. Tengo que probarlo pero en este caso parece que no será útil porque por lo visto el envío de datos no es continuo.
Quiero experimentar con el entorno gráfico y darle un aspecto más atractivo a la interfaz, simplemente por gusto (y por aprender), porque evidentemente como ingeniero, solo me importa la funcionalidad, aunque es verdad que un aspecto agradable mejora las cosas. Con esto NO QUIERO decir que no me guste lo que me ofrece Tk por defecto, simplemente quiero experimentar y mejorar mis habilidades. Una intefaz que me atrae mucho es la del PicoScope 7.
Sobre el nombre
El deletreado del nombre en castellano es sugerente… y además es un desarrollo en Tcl/Tk sobre un Digital Storage Oscilloscope…
Contacto
Si tienes alguna sugerencia o consulta, estoy disponible en: tdso112a at hykrion com


