-
Notifications
You must be signed in to change notification settings - Fork 14
Captura y visualización de señales
Para desarrollar los circuitos necesitamos ver las señales implicadas. Una manera es utilizando un analizador lógico. Pero también es posible crear nuestra propia herramienta dentro del circuito. Un ejemplo es el LEDOscopio, que muestra la información en los LEDs
En vez de visualizar en los LEDs, o además de, también podemos conectar un transmisor serie para enviar las muestras al ordenador, y luego visualizarlas con algún programa
En este documento haremos experimentos, y mostrando los resultados obtenidos
Una herramienta muy buena para visualizar es el PulseView, que permite importar un archivo con las muestras. El que vamos a utilizar es el formato .raw
. Este formato contiene las muestras (de 1 byte). Cada bit se corresponde con un canal (tenemos 8 canales en total).
Para probarlo vamos a generar nuestro propio fichero binario, de 2 muestras: test-2.raw
Le he preguntado Chat-GPT cómo crear un fichero binario que contenga los bytes 0,1 y 3:
Como pueo crear un fichero binario con los bytes 0, 1 y 3 desde la consola (bash)
Y esta es su respuesta:
Para crear un archivo binario con los bytes 0, 1 y 3 desde la consola de Bash, puedes utilizar el comando echo junto con la opción -ne para que los caracteres sean interpretados como bytes y no como caracteres ASCII.
El siguiente comando te permitirá crear un archivo llamado "archivo.bin" que contenga los bytes 0x00, 0x01 y 0x03 en secuencia:
echo -ne "\x00\x01\x03" > archivo.bin
Este comando utiliza la secuencia de escape \x para representar los bytes en hexadecimal.
Luego, el operador > redirige la salida del comando echo al archivo "archivo.bin". Si el archivo ya existe, el comando sobrescribirá su contenido; de lo contrario, lo creará.
Puedes verificar el contenido del archivo recién creado utilizando el comando hexdump de la siguiente manera:
hexdump -C archivo.bin
Este comando muestra el contenido del archivo en formato hexadecimal. La salida debería ser similar a la siguiente:
00000000 00 01 03 |...|
00000003
Vamos a probarlo. Este es el comando que ejecuto:
obijuan@Hoth:~
$ echo -ne "\x00\x01" > test-2.raw
Comprobamos que efectivamente el fichero test-2.raw
contiene lo que hemos indicado:
$ hd test-2.raw
00000000 00 01 |..|
00000002
También lo podmeos ver con la extensión hex editor
del Visual Code:
Ahora lanzamos el PulseView
y nos vamos a la opción Open/Import Raw Binary logic data
Seleccionamos el archivo test-2.raw
. Nos aparece una nueva ventana donde opcionalmente podemos indicar la frecuencia de muestreo. Ponemos 12000000
(12Mhz), que es la frecuencia del reloj del sistema de la Alhambra II:
Pinchamos en OK
. Nos aparecen los 8 canales
Vemos cómo efectivamente hay 2 muestras. Todas están a 0 salvo el canal 0 que está a 0 (muestrea 0x00) y luego se pone a 1 (0x01)
Repetimos el proceso, pero ahora generando 10 muestras, con los valores 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x00 y 0x00:
obijuan@Hoth:~
$ echo -ne "x01\x02\x04\x08\x10\x20\x40\x80\x00\x00" > test-10.raw
Lo guardamos en el fichero test-10.raw
. Y ahora lo importamos en el PulseView:
Para poder ver los valores de las muestras, usamos el decodificador de protocolo Numbers and State
. Lo configuramos para ver el número en hexadecimal:
Si ahora modificamos el archivo test-10.raw
, por ejemplo cambiando algunas meustras:
obijuan@Hoth:~
$ echo -ne "\xAA\x55\xFF\x00\x0F\xF0\xCC\x33\x80\x00" > test-10.raw
Basta con apretar el botón de reload
y veremos la nueva señal
Hacemos un circuito para transmitir 2 bytes por el puerto serie, a la velocidad del sistema (12_000_000 baudios). Este es el circuito:
Nada más arrancar el circuito se envían los byets 0x00
y 0x01
. Este envío se repite cada vez que se haga un reset de la placa. Abrimos el terminal de Icestudio y lo configuramos para una velocidad custom de 12000000
Limpiamos el terminal, activamos la opción Hexadecimal view
y le damos al Reset en la placa. Esto es lo que nos aparecerá:
Si apretamos el botón de reset sucesivas veces aparecerán más pares de bytes 0x00 y 0x01:
Directamente desde el terminal podemos guardar estas dos muestras en el fichero test-2.raw
y abrirlo con el Pulseview. Primero desconectamos el terminal del icestudio, pinchando en "Disconnect". Luego ejecutamos este comando:
obijuan@Hoth:~
$ cat /dev/ttyUSB1 > test-2.raw
Pulsamos el Reset
en la Alhambra II, pulsamos Ctrl-C
para terminar el cat. Comprobamos que el fichero test-2.raw efectivamente contiene los bytes 0x00 y 0x01, recién capturados:
obijuan@Hoth:~
$ cat /dev/ttyUSB1 > test-2.raw
^C
obijuan@Hoth:~
$ hd test-2.raw
00000000 00 01 |..|
00000002
obijuan@Hoth:~
$
y lo abrimos con el PulseView
:
Esta es una forma rápida para transferir información desde nuestros circuitos a la aplicación PulseView
Lo siguiente es crear scripts en python para leer los bytes por el puerto serie y dibujarlos en ASCII en la consola (así como también guardarlos en ficheros .raw)
- Unidad de PWM de frecuencia aproximada
- VGA Retro: Puesta en marcha. MonsterLED
- Pines de Entrada/Salida
- Control de LEDs
- SPI esclavo
- SPI Maestro
- Display SPI de 4 dígitos de 7 segmentos
- Entrada y Salida de Bits con Componentes Virtuales
- Memorias
- Entradas y pulsadores
- Señales del sistema. Medición con el LEDOscopio
- Controlador LCD 16x2
- Señales periódicas y temporización
- Buses: Medio compartido
- Memoria Flash SPI
- Conexión de LEDs en la Alhambra II. Placa AP‐LED8‐THT
- Periféricos PMOD
- Fundamentos. Sistema Unario
- Autómatas
- Pantallas de vídeo. Fundamentos. Display de 1x4 LEDs
- Pantallas de vídeo. Fundamentos. Matriz de 4x4 LEDs