-
Notifications
You must be signed in to change notification settings - Fork 1
Home
Voy a empezar a implementar bloques para realizar entrada/salida directamente desde los circuitos hardware. Cómo molaría tener una consola, con comandos, que esté implementandad totalmente en hardware 😄
Estos bloques además, permitirán depurar los circuitos más fácilmente
Vamos a partir del bloque serie de la colección Jedi. Para nosotros será una máquina básica, cuya función es la de transmitir un byte por el puerto serie. Como lo voy a tratar como una máquina, voy a modificar el compoente de la colección Jedi para darle el look de máquina
Ya tengo el bloque putc-bit, para enviar el estado de un bit. Voy a hacer la versión transparente (TC: Transparent channel) que permite encadenarlos. He hecho pruebas con caracteres normales y la cosa funciona bastante bien :-)
El componente putc-bit-TC también está listo. on este componente ya se puede hacer una "tabla de verdad" cutre, que aparezca bien muestreando a una frecuencia fija, o bien cuando hay un cambio en las entradas
El putc-bit (-TC) está funcionando muy bien. Ahora hay que permitir que se pueda enviar un carácter cualquiera Putc-char: ejemplo 2 hecho: Imprimir el estado del pulsador y un /n al final... OK!
Para probarlo con el tio hay que ejecutar esta línea:
tio -m INLCRNL /dev/ttyUSB1
El ejemplo 2 funciona muy bien directamente desde el terminal. Para configurarlo hay que poner:
stty -F /dev/ttyUSB1 raw ispeed 115200 ospeed 115200 cs8 -ignpar -cstopb -echo
Y luego con sólo hacer:
cat /dev/ttyUSB1
ya vemos lo que nos envía la placa :-) ¡¡Mola!!!
Ejemplo 3: puerta not. Se muestrean la entrada y la salida cada 100ms
Ejemplo 4 del Putc-char listo: tabla de verdad de la puerta not. Se envía el estado de la entrada y la salida cada vez que hay un cambio en el estado de la entrada
Putc-char-TC: Ejemplo 1 y 2 listos!
Ya tengo los ejemplos 3 y 4 de Putc-char-TC. Funcionan muy bien! :-) He hecho el ejemplo de monitorizar una puerta NOT, y va de lujo
Lo siguiente será meter el componente para las cadenas, que es super importante: PRINT!
¡Ya tengo una primera versión del bloque de Print! Voy a hacer algunons ejemplos
Para pasar de texto a ASCII se puede usar esta línea en python:
print(" ".join(["{:02X}".format(ord(i)) for i in "Mi cadena de texto"]) + " 00")
Ejemplos a hacer:
- Ejemplo 1: Imprimir dos cadenas, una al apretar el pulsador 1 y otra al apretar el 2 (OK)
- Ejemplo 2: Lo mismo pero con ASCII ART (OK)
- Ejemplo 3: Pantalla con mensaje inicial, al hacer reset: "HW STDIO...". Con el pulsador SW1 se cambia el estado de un LED (toggle) y se imprime la cadena OK!. Con el pulsador SW2 se imprime el estado actual del LED: ON u OFF
Para hacer pruebas con el terminal hw de entrada, se puede probar el ejemplo 3 pero usando la tecla r para "Leer" el estado del LED. Luego ampliarlo con otras teclas para cambiar las entradas
Para los mensajes en ARTE ASCII estoy usando este enlace: http://patorjk.com/software/taag/#p=display&f=Graffiti&t=Type%20Something%20
Ya tengo listo el bloque Getc-bit para recibir bits. Funciona muy bien!
TODO: Ejemplo 2 del getc-bit: Encender y apagar dos leds con 0,1 y 's' y 'n' TODO: InputLn-bit: para introducir un bit, con edición
Ejemplo 2 del getc-bit Listo! Se encienden y apagan los leds con 0,1 y 's' y 'n'
Ejemplo 3 del getc-bit Listo!: Preguntar inicialmente por el encendido de un circuito de prueba
TODO: Input-bit: para introducir un bit, con o sin eco. Es necesario porque hay que gestionar la habilitación o no de los receptores. Así, el receptor se convierte también en una máquina
Ya tengo los tres ejemplos del input-bit listos. También he hecho el bloque printLN-OK y su depurador correspondiente. Es el momento de hacer la Release 0.1. OK!
Ya tengo una versión de print para el bus stdout (print-asc). Se le pasa como parámetros caracteres ASCII (Colocando su código ascii en la memoria). Voy a modificar todos los ejemplos para usar este nueva rutina de print
¡Listo! El print-TC ya está eliminado y se ha sustituido por print-asc
¡Ya tengo el primer bloque print-str funcionando! Es para cadenas de 4 caracteres, y puesto que hay un 0 al final, solo podemos imprimir mensajes de 3 caracteres. Por ejemplo "OK\n" :-)
Antes de seguir voy a explorar más el bug que aparece en las memorias inicializadas desde cadena de texto al hacer la verificación: