Micros

  • May 2020
  • PDF

This document was uploaded by user and they confirmed that they have the permission to share it. If you are author or own the copyright of this book, please report to us by using this DMCA report form. Report DMCA


Overview

Download & View Micros as PDF for free.

More details

  • Words: 4,002
  • Pages: 8
Tutorial: Microcontroladores y el PIC16F84 Juan Pablo Caram 4 de octubre de 2003

Resumen

C. Lista de Componentes para los Ejemplos

8

El objetivo de este documento es introducir al lec- D. Configuracion del Prog84 8 tor en el tema de los microcontroladores, y llevarlo rápida y económicamente a desarrollar prototipos utilizando el microcontrolador PIC16F84, sin depender de 1. Microcontroladores compleja instrumentación de laboratorio, y con componentes disponibles en cualquier local comercial del 1.1. Introducción rubro. Además las herramientas de trabajo y el software Estos dispositivos son, en un solo chip, un pequeño aquí expuesto son de libre distribución. computador, ya que cuentan con memoria para un programa, una CPU, memoria de datos y almacenamiento, y puertas de entrada y salida, que les permite funcionar Índice como el cerebro de dispositivos electronicos mas com1. Microcontroladores 1 plejos. Su comportamiento puede ser fácilmente descrito 1.1. Introducción . . . . . . . . . . . . . . . 1 por un programa escrito en distintos posibles lenguajes. Las aplicaciones de estos dispositivos son tantas co1.2. Características . . . . . . . . . . . . . . 1 1.3. Proceso de Desarrollo . . . . . . . . . . 2 mo lo permita la imaginación, y están en mas lugares de los que se cree. Por nombrar algunos, se encuentran 2. El PIC16F84 2 en casi todos los automobiles, hornos microondas, tele2.1. Introducción . . . . . . . . . . . . . . . 2 fonos celulares, etc. 2.2. Desarollo de Software . . . . . . . . . . 3 2.3. Programación . . . . . . . . . . . . . . 4 1.2. Características 2.4. Circuito Base . . . . . . . . . . . . . . 4 Los microcontroladores, o µC de ahora en adelante, 3. Ejemplo 1 5 son dispositivos digitales que pueden interactuar con el 3.1. Descripción . . . . . . . . . . . . . . . 5 resto de un circuito a travez de sus pines o líneas de 3.2. Programa . . . . . . . . . . . . . . . . 5 datos, que pueden configurarse como entradas o salidas. 3.3. Circuito . . . . . . . . . . . . . . . . . 5 Cuando son entradas, pueden adquirir datos, interpretando si en ellos existe un valor lógico 1 o 0, mientras que 4. Ejemplo 2 6 cuando son salidas, pueden controlar su valor lógico. En4.1. Descripción . . . . . . . . . . . . . . . 6 tonces su trabajo es básicamente interpretar los valores 4.2. Programa . . . . . . . . . . . . . . . . 6 en sus pines de entrada y realizar alguna acción según 4.3. Circuito . . . . . . . . . . . . . . . . . 7 estos, mediante los pines de salida. Para responder a eventos, como el cambio de estado 5. Más allá de este documento 7 en un pin de entrada por ejemplo, los µCs cuentan con A. Recursos en Internet y Bibliografia 8 un recurso conocido como interrupciones. Estos son los eventos para los que se detiene la ejecución del programa B. Lista de Componentes del Programador 8 y se ejecuta una parte específica de éste como respuesta. 1

Un caso típico es el de un botón pulsador conectado a un pin, y se desea realizar alguna acción determinada al pulsarlo. Las interrupciones pueden no solo ser el cambio de estado de un pin y dependera de las características del µC en cuestión. Características mas sofisticadas disponibles en algunos µCs, entre otras, son:

Figura 2: Programación

archivo.hex

Puerto serial, USB, u otro.

Convertidor análogo digital: Convierte un voltaje presente en una línea de entrada en un valor numérico manipulable por el programa.

Microcontrolador

Modulador por ancho de pulso, o PWM: Generador de onda cuadrada de frecuencia fija pero con ancho de pulso controlable.

1.

2.

Programación. Este proceso corresponde a utilizar un programa en el PC que toma el código ensamblado (.hex) para el µC específico, y lo envia mediante algún puerto (serial, paralelo, USB, etc.) a un dispositivo que lo escribe en la memoria del µC. Se acostumbra denominar ”programador” tanto al sofware como al hardware involucrados de este propósito, por separado, lo que puede llevar a confusión.

3.

Prueba real y corección de errores. Una vez programado el µC, se puede instalar en el circuito final para comprobar su adecuado funcionamiento. Existen heramientas de software que permiten simular el comportamiento de un µC, muy utiles cuando el programa alcanza cierta complejidad. Para resolver problemas en un circuito real, el instrumento mas utilizado es el analizador lógico.

Proceso de Desarrollo Desarrollo del software. Una vez determinada la funcionalidad del µC en un circuito, se debe escribir el programa que regirá su funcionamiento. Generalmente, los µCs se programan en leguaje Assembler, sin embargo, existen compiladores para leguajes de alto nivel, como C y C++, que pueden resultar de utilidad cuando se desea minimizar el tiempo de desarrollo. Es importante considerar que el codigo Assembler (.asm o .s) generado por los compiladores es generalmente mas largo e ineficiente que aquel concebido originalmente en Assembler.

Figura 1: Desarrollo de Software Usuario

2.

archivo.c

2.1. archivo.asm

Ensamblador

Hardware Programador

El último paso es ensamblar el programa en Assembler, procedimiento que lo convierte en codigo binario específico para cada µC. El programa que ensambla es denominado obviamente ensamblador.

Comunicación serial por hardware: Permite enviar y recibir datos serialmente en forma síncrona y asíncrona.

1.3.

Software Programador

El PIC16F84 Introducción

El microcontrolador PIC16F84 de Microchip (www.microchip.com) es uno de los microcontroladores mas utilizados en proyectos electrónicos pequeños. A diferencia de versiones mas avanzadas como el igualmente popular PIC16F87X, este carece de convertidor A/D, PWM, comunicación serial por hardware y a la

Compilador

archivo.hex

2

vez tiene menos memoria y puertos (conjuntos de lineas de datos) disponibles. Sin embargo, su fácil uso, bajo precio y altísima difusión, lo hacen el µC favorito en un gran rango de aplicaciones. De todos modos, muchas de las características que este µC no posee pueden ser implementadas por software.

Afortunadamente el compilador de JAL compila y ensambla a la vez, entregando el archivo .hex listo para programar. Con cualquier editor de texto puede escribir su código y grabarlo en un archivo .jal, para luego compilar desde la carpeta de JAL con el comando ./bin/jal -slib archivo.jal

Figura 3: Pines en el PIC16F84 1

18

RA1

RA3

2

17

RA0

16

OSC1/CLKIN

15

OSC2/CLKOUT

14

Vdd

13

RB7

12

RB6

RA4/T0CKl

3

MCLR

4

Vss

5

PIC16F84

RA2

RB0/INT

6

RB1

7

RB2

8

11

RB5

RB3

9

10

RB4

donde archivo.jal es el archivo donde reside su codigo. El parametro -slib indica al compilador que debe buscar las librerías utilizadas en la carpeta lib. JAL generara los archivos archivo.asm y archivo.hex, que corresponden al código en Assembler y ensamblado respectivamente.

C y PIC LITE Este compilador de C, desarrollado por Hitech (www.htsoft.com) es la versión gratuita de un compilador de características profesionales. La disponibilidad de PIC LITE en el futuro no está asegurada, pero existen otros compiladores disponibles grauitamente con características similares. El uso de C puede ser muy conveniente para aquellos que ya estan familiarizados con este lenguaje y quieren minimizar la curva de aprendizaje y desarrollo con µCs. El compilador tiene numerosas opciones que deben ser consideradas y todo está adecuadamente documentado. Éste también genera automáticamente el archivo .hex.

Este dispositivo tiene 13 líneas de entrada/salida, con tecnología TTL/CMOS, es decir, 5V para un estado lógico 1 y 0v para el estado 0. Requiere un oscilador externo de hasta 20MHz, se programa mediante un juego de 37 instrucciones en Assembler, que manejan datos de 8 bits, cuenta con un timer, un watchdog timer y responde a interrupciones ante cambios de estado en las líneas de la puerta B, RB4 hasta RB7, al flanco de subida o bajada en la línea RB0/INT, y al overflow1 del timer.

2.2.

Desarollo de Software

El proceso de desarrollo de aplicaciones para el PIC es ASSEMBLER equivalente a lo descrito en la figura 1. Aquí se describen algunos lenguajes de programación disponibles, con sus Los programas concebidos originalmente en Assemrespectivos compiladores. bler son los mas eficientes, sin embargo el proceso de desarrollo es tedioso y requiere de un aprendizaje mas largo que con lenguajes de mas alto nivel. Para seguir JAL esta via, se recomienda leer la hoja de datos, que perEste lenguaje fue desarrollado específicamente para mite familiarizarse con el conjunto de instrucciones. µCs PIC, lo que hace muy intuitivo trabajar con el. Su A la hora de ensamblar las opciones son varias, pero estructura es muy similar a la de Pascal, y cuenta con se recomienda utilizar las soluciones mas probadas. En librerías para realizar múltiples tareas comunes. el caso de Linux, gpasm es el ensablador del conjunto 1 Evento que ocurre al incrementar un registro por sobre su valor de aplicaciones gputils. En Windows, MPLAB de Microchip provee el ensablador por defecto para los PICs. maximo. 3

2.3.

Programación

este circuito es muy simple, y se suguiere construirlo directamente en una PCB, lo que lo hará mas confiable y Existen, en internet, numerosas duplas soft- duradero. ware/hardware para programar µCs PIC disponibles en forma gratuita para diferentes sistemas operativos. Es Figura 5: Programador Terminado importante considerar que, por lo general estas duplas hardware/software son interdependientes; lo que a veces Reg. 7805 C=100uF dificulta encontrar una combinación que cumpla las Base DIP18 espectativas del desarrollador. (para PIC16F84) Aquí se presenta una dupla con la que se pretende lograr los objetivos de simplicidad, bajo costo y disponibilidad tanto para Linux como para Windows. Para que el PIC16F84 entre en modo de programación se debe forzar un estado lógico 0 en RB7 (pin 13) y RB6 DB9 Hembra (pin 12), mientras que M CLR (pin 4) se lleva a 0 para R1, R2, R3 y D1 (Puerto Serial) resetear, y, finalmente se lleva y mantiene durante toda la programación a un voltaje de 12 a 14V. Una vez que se ha entrado en el modo de programación, se utiliza Las resistencias pueden ser de baja potencia (1/4W), RB7 para ingresar serialmente la información, y RB6 el diodo D1 es un diodo rectificador cualquiera, aunque se utiliza como señal de reloj para aceptar cada bit en RB7. Los detalles que se refieren al protocolo de pro- se recomienda el 1N4148, y el condensador C1 es elecgramación pueden encontrarse en la documentación del trolítico. El 7805 es un regulador de voltaje que entrega 5V (out) cuando tiene una entrada (in) mayor. fabricante. El diseño minimalista de este circuito requiere que el El circuito denominado COM84 logra estas especipuerto serial del PC entregue los niveles de voltaje y poficaciones en forma muy minimalista, e incluso toma tencia adecuados. Por esta razón el programador puede poder del puerto serial, por lo que no requiere de ali(y así ha resultado en ciertos casos) no funcionar en mentación externa. Notebooks. De todos modos, segun la especificación de programación ya descrita, este circuito puede ser modiFigura 4: Programador Serial Minimalista (COM84) ficado para utilizar una fuente de alimentación externa. 7805 D1 TXD (3)

in

C1 100u

R1 10k

1

18

2

17

3

16

4 GND (5)

RTS (7) R2 4.7k DTR (4) R3 4.7k CTS (8)

PROG84

PIC16F84

out

Este software programador puede ser utilizado con este y otros circuitos programadores. La configuración del tipo de hardware y puerto serial se realiza mediante un archivo de configuración. Ver anexo con un archivo de configuracion de ejemplo. Una vez configurado y conectado el hardware adecuadamente, la programación se lleva a cabo con el siguiente comando

15

MCLR

5 VSS

VDD 14

6

RB7

13

7

RB6

12

8

11

9

10

prog84 -x archivo.hex

2.4.

Circuito Base

Al lado izquierdo de la figura 4 se observan las enEn el circuito final, el PIC16F84 requiere ciertos comtradas del puerto serial, con sus respectivos numeros de ponentes basicos, iguales para cualquier configuracion: pin en el conector típico DB9. La implementación de un cristal y condensadores, que proveen la señal de reloj, 4

y las lineas de alimentación, Vdd, y tierra, Vss. M CLR este se cambia el estado del pin/led. En la linea 17, y en es el reset, por lo que debe mantenerse en estado lógico la linea 19 se llama a una función que detiene la ejecu1 durante su funcionamiento. Esto se puede observar en cion durante 250ms. la figura del ejemplo 1. La función delay_1ms() ejecuta un retardo de 1ms multiplicado por el parámetro. Su funcionamiento se basa en el hecho de que una instrucción (en Assembler) 3. Ejemplo 1 tarda 4 tiempos de reloj, por lo que se ejecuta un loop el número de veces que tome el tiempo requerido según la 3.1. Descripción velocidad del reloj. Esto se encuentra especificado en el La forma mas demostrativa y simple posible de inicia- programa dado que se incluyó la versión de 4MHz (linea rse con un µC es hacer parpadear un LED. Para esto, se 4) de las funciones específicas de este PIC. debe implementar un programa que continuamente cambie el estado de un pin y espere cierto tiempo antes de repetir. En este ejemplo utilizaremos JAL como lenguaje de 3.3. Circuito programación del PIC.

3.2.

Programa 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20:

Figura 6: Circuito Ejemplo 1

-- Ejemplo 1

PIC16F84 +5V

-- Inclusiones include 16f84_4 include jlib

R1 10k

18

2

17

3

OSC1 16

4

-- Configuracion pin_b7_direction = output C1

-- Variables var bit led is pin_b7 led = high

4.7u

-- Loop Principal forever loop -- Cambio de estado del pin led = ! led -- Retardo delay_1ms(250) end loop

+5V

1

MCLR

X1 4MHz

OSC2 15

5 VSS

VDD 14

6

RB7 13

7

12

8

11

9

10

C2,C3 22p

LED R2 470

En la figura se observa la circuitería mínima del PIC El alto nivel de JAL parmite que el código sea autoex- con excepción de aquella conectada al pin 13 que correplicativo, y además se incluyen comentarios (con el pre- sponde a la aplicación específica descrita en este ejempfijo –). Los archivos incluidos, en las líneas 4 y 5 con- lo. tienen definiciones específicas del PIC16F84, como las En este caso, cuando RB7 está en estado 1 tiene 5V y correspondientes posiciones de memoria para pin_b7 y encederá el LED. Debe limitarse la corriente que pasara pin_b7_direction, y las funciones que generan el retardo. por el LED con una resistencia (R2), para no dañarlo o En la línea 8 se define la dirección del pin RB7, como dañar el puerto del PIC. Una configuración alternativa es salida en este caso. En las líneas 11 y 12 se define la conectar el par LED/resistencia a Vdd (5V) y a RB7, lo variable led, se le asigna a RB7 y se asigna su estado que causará que el LED se encienda cuando RB7 tenga inicial activo. un estado lógico 0. Estos conceptos deben mantenerse Finalmente, entre las líneas 15 y 20 se encuentra el en mente al considerar cuanta corriente puede un pin enloop del programa, que se ejecuta indefinidamente. En tregar o recibir como máximo. 5

4. 4.1.

Ejemplo 2 Descripción

Este ejemplo es una extensión del ejemplo anterior, para ilustrar la implementación de respuesta a estímulos externos, mediante interrupciones. Utilizando el lenguaje C para el compilador PICLITE, implementamos un programa que permite encender y apagar un led al presionar un boton pulsador.

4.2.

Programa 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41:

#include ”pic.h” #include ”delay.h” #define PORTBIT(adr, bit) ((unsigned)(&adr)*8+(bit)) // Variables globales static volatile bit led @ PORTBIT(PORTB,7); static volatile bit presionado = 0; // Funcion interrupcion void interrupt isr() { if(INTF){ /* Ocurrio Interrupcion por INT * --> Deshabilitamos interrup. * por INT y al final restauramos * en indicador de interrupcion. */ INTE = 0; presionado = 1; INTF = 1; } }

ficas para los PIC, y para retardos (función delayUs()). El PIC específico y la velocidad de reloj se especifican al momento de compilar. La definición en la línea 4 simplemente permite indicar la dirección de memoria para un bit específico de un byte. Las variables han sido definidas como volatile, que es un requisito para pines y variables que son modificadas desde la función interrupción. La variable led se refiere al estado de RB7, y presionado indica si el pulsador ha sido presionado. La función isr() entre las líneas 13 y 25 está definida como la función interrupción con el indicador interrupt. El nombre de la función no tiene importancia. Esta es ejecutada cuando ocurre cualquiera de las posibles interrupciones, pero la variable INTF se torna verdadera si la interrupción fue producida por el pin RB0. Si es así, desactivamos las interrupciones por INT, marcamos verdadero presionado y reseteamos la variable INTF para poder detectar este tipo de interrupción posteriormente. La desactivación de la interrupción por INT, se hace para evitar nuevas interrupciones por el rebote del botón pulsador. Al hacer contacto un interruptor mecánico se producen rápidas oscilaciones antes de asentarse en su valor final, como se muestra en la figura. Esto se conove como rebote. Figura 7: Rebote de Boton Voltaje

5V

// Rutina principal void main() { ie(); /* Habilitada Ints. */

0V

/* Loop permanente */ for(;;){ if(presionado){ presionado = 0; led = !led; DelayUs(10); INTE = 1; } }

Boton Presionado

Tiempo

La función main() contiene el programa ejecutable. En este habilitamos las interrupciones en la línea 30, y en el loop permanente, al detectar que el botón ha sido } presionado, reseteamos la variable presionado, cambiamos el estado del led, esperamos 10us para asegurarnos Las líneas 1 y 2 incluyen librerías de funciones especí- que se halla asentado el rebote del botón, y habilitamos 6

5.

nuevamente las interrupciones por INT, en la linea 38. Las variables INTE e INTF son bits del registro INTCON. Este byte de configuración del PIC contiene información y configuración de las interrupciones, que permiten activarlas o desactivarlas según fuente (como INTE) e indican si ha ocurrido cada tipo de interrupción (como INTF). Todos los registro de información y configuración se encuentran documentados en la hoja de datos del PIC. Para compilar el programa en archivo.c para el PIC16F84, con un cristal de 10MHz utilizamos el comando

Más allá de este documento

La variedad de microcontroladores y sus aplicaciones son mucho mayor que lo propuesto es este documento. Sin embargo el medio para abordar nuevos temas en este rubro puede ser algo confuso por lo que se sugieren algunos caminos a proseguir. La hoja de datos del PIC16F84 provee los detalles técnicos de su funcionamiento. La correcta interpretación y comprensión de este documento es el camino para dominar en totalidad este µC. Microchip provee tambien documentos denominados Application Notes, que describen aplicaciones y técnicas específicas a cada versión de PIC. Estos son muy picl -16c84 -O -DXTAL_FREQ=10MHz programa.c ilustrativos y son una forma mas dinámica de aprender al respecto, manteniendo el profesionalismo de los fabricantes. El parametro -O indica optimización de código, necePor otro lado, la literatura disponible para este PIC es saria para la presición de las funciones delayUs() y re- extensa, al igual que los recursos disponibles en Internet. duce el tamaño total del código generado. Las aplicaciones posibles del PIC16F84 solo están limitadas por la imaginación. En Internet pueden encontrarse aplicaciones sorprendentemente creativas y otras 4.3. Circuito con las que se obtienen desempeño inesperado con este PIC. Figura 8: Circuito Ejemplo 2 PIC16F87X PIC16F84 +5V

+5V R1 10k

B1

18

2

17

3

OSC1 16

4

C1 4.7u

R3 10k

+5V

1

MCLR

OSC2 15

5 VSS

VDD 14

6

RB7 13

RB0/INT

7

12

8

11

9

10

Este PIC es el mas popular para aplicaciones de nivel intermedio y avanzado, y es una excelente opción para tener en mente cuando se requieren mas lineas de E/S, convertidores A/D, PWM, comunicación serial por hardware, entre otros. Existen versiones con distintas características como el tamaño de la memoria y numero de pines. Una vez que se ha dominado adecuadamente el PIC16F84, adquirir los conocimientos para utilizar este nuevo PIC es considerablemente mas facil. El costo de la versión PIC16F877, la mas poderosa, tiene un costo de aproximadamente el doble del PIC16F84.

X1 4MHz

C2,C3 22p

LED R2 470

Como se observa en la figura, la única modificacion al circuito del ejemplo anterior es la del pulsador B1 entre RB0/INT y +5V, con resistencia ”Pull-Down”. R3 mantiene el puerto en LOW (0), y al presionar, sube a HIGH (1), por lo tanto, la interrupción se produce al presionar. Si se desea que la interrupción se produzca al soltar el pulsador, solo basta intercambiarlo con R3.

MOTOROLA HC08 Otros fabricantes pueden tener productos considerablemente diferentes, tanto en su funcionamiento, instrucciones de CPU o método de programación, sin embargo, los µC de nivel de entrada (entry-level) tienen mucho en común. 7

Este es el caso la nueva línea Q de µCs Motorola. Han sido introducidos al mercado para competir con Microchip por este sector. A pesar de que todavía la disponibilidad de herramientas de software hoy es escasa, esta familia de dispositivos tiene ciertos atractivos, como lo son su precio, inferior al del PIC16F84 en todos sus modelos, convertidores A/D en casi todos ellos, PWM, oscilador interno, y la disponibilidad gratuita del popular entorno de desarrollo Code Warrior. Ademas estan disponibles en encapsulados de 8 y 16 pines.

1

Regulador de Voltaje 7805.

1

Diodo 1N4148 u otro diodo rectificador de senal.

1

Condensador Electrolitico de 100µF.

1

Conector DB9 Hembra para PCB en 90o .

1

Base DIP18.

C. A.

Recursos en Internet y Bibliografia

Lista de Componentes para los Ejemplos

1

WWW.MICROCHIP.COM

Cristal para mictrocontrolador de 4MHz.

Condensadores de 22pF. Sitio del fabricante de los PIC. Aqui encontrara las 2 hojas de datos y application notes para todos los mod1 Condensador de 4.7µF (Valor no critico). elos de PIC disponibles. 2 Resistencia de 10kΩ (Valor no critico). WWW.HTSOFT.COM 1 Resistencia de 470Ω (Valor no critico). Hitech produce el compilador PIC LITE para C. 1 Boton pulsador ”siempre abierto”. Este puede bajarse gratuitamente de su sitio web. La versión completa de este producto es uno de los compiladores mas poderosos existentes para microcontro- D. Configuracion del Prog84 ladores PIC. Este programa requiere un archivo de configuracion que indique el puerto serial a utilizar, y el tipo de hardJAL.SOURCEFORGE.NET ware programador. Para el hardware expuesto en este Sitio de la comunidad de desarrollo de JAL. Aqui documento, solo debe modificar este archivo para el puede bajar JAL para Linux, Windows o MacOS X, ba- puerto serial que desea utilizar (lineas 4 a 7). jar la documentacion y acceder a numerosos ejemplos. 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:

WWW.GNUPIC.ORG Recopilacion de recursos para el manejo y desarrollo de aplicaciones con PICs para Linux. Incluye links a ensambladores, desensambladores, compiladores, simuladores, programadores y mas. En la seccion programadores encontrara un link para bajar el Prog84.

B.

Lista de Componentes del Programador

2

Resistencias de 4.7kΩ (Valor no critico).

1

Resistencia de 10kΩ (Valor no critico).

port serial ### for serial port: base= 0x3f8 # com1, ttyS0 #base= 0x2f8 # com2, ttyS1 #base= 0x3e8 # com3, ttyS2 #base= 0x2e8 # com4, ttyS3 # settings for UniprogIV / BR870 # and similar seriel PIC programmers. no_power_C4C8 = 0 power: TxD mclr: TxD data: DTR data_f: CTS

17: clock: RTS

8

Related Documents

Micros
November 2019 14
Micros
May 2020 10
Micros
May 2020 10
Micros Of
November 2019 9
Inicio Micros 8bits
May 2020 5