Construye tu computadora Mínimum.

Parte 2: Diagrama esquemático.

Por: Oscar Toledo Esteva.       Septiembre de 2018.


Al conocer por primera vez el mundo digital, existe el riesgo de ver los árboles y no el bosque, de ver solo laptops, smartphones, o un pequeño algoritmo, olvidando la estructura del tema, compuesta de hardware, firmware y software con nidos de algoritmos para los circuitos microelectrónicos que manejan señales análogas al dominio digital. De esto está hecho la computadora Mínimum, orientada al campo educativo, control de mecanismos, para manipular algoritmos con el repertorio de instrucciones del microprocesador, activar las puertas de entradas, salidas o analógicas para monitorizar el tiempo y el medio ambiente al construir instrumentos de laboratorio, manejar las señales de otros dispositivos para diseñar productos industriales o desarrollar nuevas tareas en el area de la ingeniería y la ciencia. Para crear Mínimum con pocos componentes en una dimension de 3x3 centímetros, se emplearon varias computadoras e instrumentos de precisión de diseño propio, para comprobar cada etapa del circuito, la fabricación del circuito impreso, comunicación con el lenguaje ensamblador, programas para ilustrar el uso de cada periférico interno del microprocesador, instrumentos para medir los intervalos de temporización, creación del software para cumplir los protocolos de grabación del MicroSD. UART, I2C, etc, grabación de datos en la memoria flash interna, y el programa externo para el interface con el microprocesador.

Fig 3. Interfaz serializado con norma RS232C para comunicar la computadora anfitrión con el microprocesador. El switch de botón momentaneo reinicia Mínimum desde una locación prefijada para iniciar el programa del usuario.

Con la electrónica hay un tercer estado (triestado), es la ausencia de los estados uno y cero binarios en el umbral eléctrico o alta impedancia, y representa la desconexión de la señal de salida en la pata del microprocesador, esperando ser usado como entrada de una señal, esta habilidad facilitó la fabricación de microprocesadores al alcance de todos.

Al principio del desarrollo de las computadoras el triestado utilizaba diodos para conducir, bifurcar y desconectar el flujo de datos en computadoras con relevadores, bulbos o transistores. Hoy los microprocesadores usan compuertas lógicas triestado que conectan y desconectan sus señales en nanosegundos, pero sus patas operativas operan en milisegundos, velocidad suficiente para manejar periféricos externos, y ser analizados los estados lógicos por instrumentos multicanales, sofisticados y costosos. Una alternativa económica es utilizar un buen detector lógico capaz de detectar en cada pata sus tres estados lógicos, pulsos de flancos positivos y negativos, y la respuesta lo indican varios leds.

Fig 4. Diagrama de la computadora Minimum. Las patas de las puertas para entradas y salidas GPIO (General Purpose Input/Output) disponibles del microprocesador al inicio siempre están en el modo para entrada, el modo para salida y otras funciones alternas deben ser programadas, para controlar visualizadores LCD, canales de timer, lineas de control para manipular periféricos, motores paso a paso, CNC, impresoras 3D, robots, drones, teléfonos y automóviles. Otras puertas pueden interfazar lectores de memoria SD, sensores, teclados, etc.
Foto 4. La computadora Mínimum montada en dos circuitos impresos comerciales con el regulador de voltaje, conectores para el interfaz UART, la fuente regulada de 5 voltios, display LCD, memoria SD, y botón RESET.
Foto 5. Circuito impreso de 3x3 centímetros exclusivo para Mínimum, con doble capa de pistas conectadas a los componentes del diseño del microprocesador de nuestra computadora, con regulador de voltaje e interfaz RS232, incluye islas de conexión para otros componentes como: condensadores de acoplo, resistencias e inductores contra ruidos eléctricos, diodo para batería, cristales de cuarzo para el reloj calendario y el microprocesador con la precisión que exige el interfaz USB.

Manejo de puertas

GPIO (General Purpose Input/Output) son puertas que manejan las señales de entradas y salidas. Cada puerta corresponde a una pata programable del microprocesador para una función específica: para que la pata se utilice como salida de un bit, o como entrada para un bit, un modo alterno para usar con los periféricos integrados del chip, y un uso exclusivo para manejar las patas con señales análogas, cada pata puede manejar diferentes funciones en forma multiplexada, es un lujo usar cada puerta para interfazar en paralelo una memoria externa de 2 megabytes, que ocuparía 40 patas del microprocesador, concientes de esto, los fabricantes de microprocesadores incluyen la memoria en su producto.

El GPIO agrupa 16 puertas programables en 16 patas, cada grupo utiliza una letra, por ejemplo: GPIOA (0) indica que es el GPIO del grupo A señalando el GPIO 0 con 0-15 patas. Cada puerta puede manejar un bit de dato en una conexión en paralelo, o miles de bits en una comunicación serializada. Hay 10 registros para operar los grupos de puertas y fijar los parámetros de cada función.

Registros para manejo de puertas

Indice Función  Significado
  00   MODER    Función con 2 bits para transmitir o recibir datos
  04   OTYPER   Convierte la puerta en niveles eléctricos Open Colector o Push Pull
  08   OSPEEDR  Fija la velocidad mínima o máxima de trabajo de cada puerta
  0C   PUPDR    Fija un estado lógica 0 o 1 a cada puerta
  10   IDR      Dato de lectura del exterior
  14   ODR      Dato de la escritura al exterior
  18   BSPR     Fija y borra los bits de la puerta
  1C   LCKR     Fija el candado de la puerta
  20   AFRL     16 bits bajos de la función alterna (AF0-AF15)
  24   AFRH     16 bits altos de la funciòn alterna (AF0-AF15)

Al reiniciar el microprocesador la mayoría de los registros de las puertas contienen ceros, por ejemplo: MODER es igual a 00, cada par de bits cubre 32 bits para 16 puertas.

MODER   00      Modo como entrada de la puerta
        01      Modo como salida de la puerta
        10      Modo para una función alterna
        11      Modo para uso análogo de la puerta

El registro MODER (Mode Register) usa dos bits para fijar la función de cada puerta, el bit 0 y el bit 1 es para colocar la clave del GPIOC puerta 0, el bit 2 y 3 es la clave del GPIOC puerta 1, y así sucesivamente. Cada grupo de puertas tiene una dirección para colocar la clave de cada registro. La dirección del registro MODER de GPIOC (0) es una cifra hexadecimal de 32 bits = 4002:0800. Al reinicio esta dirección contiene ceros.

4002:0800 = MODER = 0000 0000 hexadecimal

Contenido de MODER y sus funciones

Clave de la función MODER       Bit 31 30 29 28 ... 3  2  1  0

                                    0  0  0  0  ... 0  0  0  0  =  Modo entrada

Puerta                               15    14         1     0

Una vez fijados los parametros del GPIO para una tarea, el siguiente paso es activar el GPIO con el registro Reset and Clock Control (RCC) que fija la cadencia de trabajo con la frecuencia del microprocesador. Por ejemplo; para activar GPIOC, se utiliza el registro Peripheral Clock 1 Enable (RCC_AHB1ENR), con el bit 2=1 se fija el reloj del grupo GPIOC. El binario equivalente se coloca en la dirección de RCC = 4002:3800 hexadecimal + 30 hexadecimal, correspondiente a RCC_AHB1ENR = 4002:3830. Con esta programación quedan activadas las 16 puertas de GPIOC.

Lenguaje ensamblador

La mayoría de los programas para los sistemas computarizados, están escritos con lenguaje de alto nivel como el C. Incluso los fabricantes de microprocesadores lo usan en sus ejemplos de programación, dejando de lado el lenguaje que ensambla directamente las instrucciones de sus procesadores.

El lenguaje ensamblador maneja sin barreras de un compilador C los códigos del microprocesador, no hay librerías para las partes íntimas de instrucciones especializadas, puertas de entrada y salida o la interrupción en multitareas. Por lo que manejar con lenguaje ensamblador es más efectivo, más donde la velocidad de un programa es crítica.

Un programador con lenguaje ensamblador, sabe que al escribir con su editor de texto los nemónicos de una instrucción, el editor convierte la sintaxis a un código binario, el cual se almacena en la memoria para programas ejecutables. Cada línea de código almacenado se lee en la pantalla con un desensamblador u ordenador de instrucciones del programa, que ilustra la dirección, el código y el mnemónico de cada instrucción.

Los microprocesadores usan celdas de memoria llamadas registros, para guardar y traspasar datos a otros registros o guardar en la memoria, cada registro es una memoria temporal que guarda un valor binario, desde un bit hasta 32 bits.

Minimum usa un procesador con 16 registros básicos de 32 bits cada uno, utiliza tres de ellos para uso exclusivo del procesador para ejecutar sus instrucciones, los demás son de uso general. Estos son: registro 0 hasta registro 15 (r0-r15). r13, r14 y r15 son para la pila de memoria, retorno de subprogramas y el contador de la dirección ejecutable. Además usa un registro de estatus del programa (XPSR) para activar los banderines lógicos condicionales de un programa.

Instrucciones del microprocesador

Cada instrucción tiene un código de operación de 16 o 32 bits. Las instrucciones agrupadas son:

Todas las instrucciones directas o indirectas, usan los registros para fijar los parametros iniciales, el proceso y el resultado de un programa. Las instrucciones tienen un formato que el ensamblador usa para presentar los mnemónicos, aquí se ilustran algunas instrucciones con el registro 0:


        MOVS R0,#20             ; Se guarda en R0 un valor de 8 bits, 20 hexadecimal = 32 decimal
        MOVW R0,#2000           ; Se guarda en R0 un valor de 16 bits, 2000 hexadecimal = 8192 decimal
        MOV.W R0,#20000000      ; Se guarda en R0 un valor de 16 bits, 2000:0000 hexadecimal = 536870912 decimal.

Fijación preliminar de GPIOC y RCC_AHBTENR con instrucciones de Minimum, esto permite activar las 16 puertas del GPIOC con GPIOC(0) como puerta de salida:


        MOVW R0,#3800
        MOVT R0,#4002   ; R0 = 4002:3800 dirección base del registro RCC_CR
        MOVS R1,#04     ; R1 = 0100 binario, bit 2 = 1
        STR R1,[R0,#30] ; Valor de R1 se guarda en la dirección 4002:3830 = registro RCC_AHB1ENR
        BIC R0,R0,#3000 ; Ahora R0 = 4002:0800 GPIOC
        MOVS R1,#01     ; R1 = 01 solo GPIOC(0) seleccionado en modo de puerta de salida.
        STR R1,[R0]     ; Valor de R1 se guarda en la dirección 4002:0800 y modo de puerta de salida 0 de GPIOC esta activado.

 

Artículo anterior Artículo anterior Siguiente artículo Siguiente articulo