Cypress Creator IDE está repleto de útiles módulos de hardware FPGA listos para usar. Suelte y arrastre a la página de esquemas del Creator IDE para crear el diseño de sus sueños.
Cypress Creator IDE está repleto de útiles módulos de hardware FPGA listos para usar. Suelte y arrastre a la página de esquemas del Creator IDE para crear el diseño de sus sueños.
Como saben, Crusty (el autor) nunca es feliz a menos que empuje sus límites. Durante los últimos 60 años, he usado muchos artilugios técnicos, pero nunca entendí realmente cómo funcionaban estos artilugios. Un clon UK101 perdido hace mucho tiempo de mi propia computadora Ohio Scientific Superboard 6502 con una versión de hardware más nueva.
Este deseo de recuperar la juventud perdida me ha llevado a muchas áreas de tecnología antigua. Soy de.)
Recientemente incorporé la antigua tecnología de visualización de video del circuito de visualización de video de línea PAL 625 en un chip Cypress PSoC 5. Utiliza todos los módulos lógicos FPGA estándar que Cypress ha proporcionado en el IDE de PSoC Creator estándar. Descubrí que tenía que aprender mucho sobre la tecnología de video que quería emular. No había mucho hardware PSoC en la web que cubriera esta antigua tecnología de video. Así que tuve que aprender a acceder a la red y alcanzar mis objetivos.
Habiendo mostrado con éxito la imagen de video, decidí usar un teclado PS2 estándar (PC) para ingresar las pulsaciones de teclas en el UK101 reproducido. Al igual que con la pantalla de video, debería poder crear un decodificador de teclado PS2 a partir de componentes estándar del IDE de PSoC Creator, ¿verdad?

Pensé que habría toneladas de componentes precompilados y proyectos disponibles de usuarios de Cypress que ya habían logrado decodificar las transmisiones del teclado PS2, pero para mi sorpresa, no hubo resultados en la web que quisiera usar. . Habiendo dicho eso, hice mi propia solución, por lo que mis búsquedas recientes parecen tener muchas otras formas de hacer esto. ¿Quizás Google sabía que quería hacer lo mío?
Anteriormente había considerado usar un módulo de interfaz de teclado PS2 disponible en Amazon o E-Bay por unas pocas libras esterlinas, pero ninguno parecía funcionar. Mucho mejor si no está conectado a un teclado defectuoso. Cuando lo conecto a un teclado que funciona, funciona, pero no como yo quiero.
He perdido algunas libras esterlinas para estos módulos, por lo que van a la escuela técnica local para que los usen las niñas y los niños.
El resultado final es otra ronda de aprendizaje sobre cómo se comunica el teclado PS2 con la PC anfitriona. Por suerte, la web tiene mucha información al respecto. Alguna información es buena y otra no.
Craig Peacock tiene un excelente artículo aquí que muestra cómo se envían los datos en ambos sentidos. Además, Scott Larson y Robert Nelson muestran cómo implementar un decodificador Verilog para FPGA. Esto fue una gran inspiración para mi hardware, ya que demostró que solo se necesitaba un contador inactivo para activar el enlace de hardware a software.
Lo importante es que no quiero atacar demasiado los bits de los puertos individuales. Si tiene la estructura FPGA a su disposición, creo que seguramente manejará muchas interrupciones y tendrá que esperar a que los pines de los puertos individuales se activen mientras el hardware puede hacer la mayor parte del trabajo pesado.
Entonces, ¿qué tan difícil es lograr que la estructura PSoC capture los datos y los flujos de reloj de PS2? De hecho, es sorprendentemente fácil y podría explicar por qué nadie publica sus proyectos en la web. Eso no disuade a Crusty de escribir un blog sobre el tema. A continuación se muestra el esquema de Cypress Creator del hardware utilizado.

Anteriormente había considerado usar un módulo de interfaz de teclado PS2 disponible en Amazon o E-Bay por unas pocas libras esterlinas, pero ninguno parecía funcionar. Mucho mejor si no está conectado a un teclado defectuoso. Cuando lo conecto a un teclado que funciona, funciona, pero no como yo quiero.
He perdido algunas libras esterlinas para estos módulos, por lo que van a la escuela técnica local para que los usen las niñas y los niños.
El resultado final es otra ronda de aprendizaje sobre cómo se comunica el teclado PS2 con la PC anfitriona. Por suerte, la web tiene mucha información al respecto. Alguna información es buena y otra no.
Craig Peacock tiene un excelente artículo aquí que muestra cómo se envían los datos en ambos sentidos. Además, Scott Larson y Robert Nelson muestran cómo implementar un decodificador Verilog para FPGA. Esto fue una gran inspiración para mi hardware, ya que demostró que solo se necesitaba un contador inactivo para activar el enlace de hardware a software.
Lo importante es que no quiero atacar demasiado los bits de los puertos individuales. Si tiene la estructura FPGA a su disposición, creo que seguramente manejará muchas interrupciones y tendrá que esperar a que los pines de los puertos individuales se activen mientras el hardware puede hacer la mayor parte del trabajo pesado.
[Sponsored: Learn more about Automotive-grade SLC High Quality NAND Flash ICs]
Entonces, ¿qué tan difícil es lograr que la estructura PSoC capture los datos y los flujos de reloj de PS2? De hecho, es sorprendentemente fácil y podría explicar por qué nadie publica sus proyectos en la web. Eso no disuade a Crusty de escribir un blog sobre el tema. A continuación se muestra el esquema de Cypress Creator del hardware utilizado.
/* ======================================== * * Copyright YOUR COMPANY, THE YEAR * All Rights Reserved * UNPUBLISHED, LICENSED SOFTWARE. * * CONFIDENTIAL AND PROPRIETARY INFORMATION * WHICH IS THE PROPERTY OF your company. * * ======================================== */ #include "project.h" #include "D:CypressUK101Workspace03Design01.cydsnI2C_Port_8Bit.h" #include "D:CypressUK101Workspace03Design01.cydsnHD44780I2C.h" #include <stdbool.h> #include "D:CypressMyIncludesBit_Control.h" #include "D:CypressMyIncludesPS2_Keyboard.h" #include "D:CypressMyIncludesPS2_Key_lookup.h" CY_ISR(Get_Key_Frame) { Raw_Data = ShiftReg_1_ReadRegValue();// read the data from the shift reg direct no clock needed Raw_KeyBuf[KeyBuf_In_Count] = Raw_Data; // put the value in the buffer KeyBuf_In_Count++; //Incriment the buffer NewValFlag = 1; // set the flag to say a new value got and return from the interrupt }; int main(void) { CyGlobalIntEnable; /* Enable global interrupts. */ BackLight = BL_On; Initalise_LCD(HD44780I2C); SetLine_HD44780(0,0,true); WriteMessage_HD44780("Keyboard Test"); CyDelay(2000); Timer_1_Start(); Timer_1_Enable(); ShiftReg_1_Start(); New_Byte_StartEx(Get_Key_Frame); New_Byte_Enable(); /* Place your initialization/startup code here (e.g. MyInst_Start()) */ for(;;) { /* Place your application code here. */ if (NewValFlag == 1 ) //test if there is a new key value sent from keyboard { Read_Key_Buf(); }; CyDelay(1000); } } /* [] END OF FILE */
De hecho, creé un módulo Verilog en lugar del esquema, pero consumió más recursos que el módulo Cypress utilizado en el esquema. Después de mirar los módulos Cypress que he usado, descubrí que muchos de ellos usan telas Cypress UDB para levantar y mover objetos pesados.
Esto me lleva a otra pregunta que espera una respuesta. ¿La lógica UDB utiliza recursos de microprocesador o tejido digital?
Me gustaría saber más sobre el uso de lógica/pegamento UDB, pero tengo miedo de este nuevo fantasma en mis alas. ¿Cypress recibió una conferencia en video que explica cómo usar los recursos de UDB?
Soy un usuario frecuente de las conferencias de Cypress Video y me gusta mucho la voz de uno de los disertantes. Su voz se parecía mucho a la de Alistair Cook, quien, de niño, escuchaba en sus audífonos la transmisión de radio de la BBC “Letters from America” por las noches.
Actualmente, la verificación del código de paridad (impar) y el inicio de la parada del marco de datos se escriben para obtener el código hexadecimal ASCII del código clave transmitido. Max este artículo.

Según tengo entendido, los teclados de PC nunca eligen enviar caracteres estándar ASCII para cada tecla enviada, sino que usan lo que parecen ser códigos arbitrarios para cada tecla física. Debido a esto, configurar una matriz de datos de búsqueda con los códigos clave correspondientes y los códigos ASCII vinculados a lo largo del código imprimible fue un poco complicado.
Siguiente pregunta: Aparte de las tablas de búsqueda, ¿hay alguna forma numérica o computacional de calcular los valores ASCII de los códigos clave de PS2? Esto es para mi propia satisfacción. UK101 tiene una matriz de claves de escaneo de 8 x 8 de su propio diseño, por lo que necesitamos una tabla de búsqueda para hacer coincidir las claves con sus valores ASCII al revivir la salida, por lo que eso no es realmente un problema. Entonces, parte de este proyecto es generar un código de inserción cuasi-clave que será escaneado por el puerto mapeado de memoria UK101.
Hay más en la tubería, lo que significa que podemos mantener las cosas aburridas el próximo año, y el año siguiente, y con suerte, más.