# # Un sistema embebido es un sistema electrónico que contiene elementos de Hardware
# # y Software estrechamente acoplados para desempeñar una función simple o formar
# # parte de un sistema más grande.
# # Un microcontrolador es como el "cerebro" en miniatura de un sistema.
# # Es un pequeño chip que tiene todo lo necesario para controlar y hacer funcionar cosas específicas,
# # como un robot o un electrodoméstico.
# # Dentro de este chip hay una parte que toma decisiones (el procesador), otra que guarda información
# # (la memoria), y otra que se comunica con los botones, sensores o motores del aparato
# # (puertos de entrada/salida).
# # Un sistema embebido es un dispositivo o aparato específico que funciona de manera automática,
# # gobernado por un microcontrolador. Está diseñado para realizar tareas concretas, como
# # controlar el motor de una lavadora, hacer que un termostato ajuste la temperatura o manejar las
# # funciones de un reloj digital. No es como una computadora que puede hacer muchas cosas diferentes;
# # su trabajo está centrado en una o pocas tareas, y normalmente está integrado dentro de algo más,
# # como una máquina o un electrodoméstico.
# # Componentes de Hardware: Componentes de Software:
# Infraestructura electrónica. Funcionalidad del sistema
# - CPU - Firmware.
# - Memoria - Sistema operativo
# - Sistema de E/S. - Programas de aplicación.
# Unidad central de proceso Memoria
# - Registros, ALU, CU. - Memoria de Programa
# - Memoria de datos
# Dispositivos de E/S
# - Puertos de comunicación.
# - Interfaz de usuario
# - Sensores y actuadores
# - Administración de potencia
# Pequeños Distribuidos
# - Basados en un MCU - Multi-chip
# - Pocos componentes. - Multitarea
# - Alto volumen, bajo costo. - Volumen y costo medio
# - Tareas simples - Mantenimiento, actualizable
# - Poco mantenimiento
# Alto desempeño
# - Tarjeta de hardware dedicada.
# - Tareas intensivas.
# - Basados en RTOS.
# - Bajo volumen, alto costo.
# - Alto mantenimiento
# Microcontrolador: Es un Circuito Integrado con tecnología VLSI que contiene una Unidad Central de Procesamiento (CPU),
# memoria para código, memoria para datos, además de otros recursos necesarios para el desarrollo de aplicaciones,
# como temporizadores, ADC, puertos I/O, etc.
# Microprocesadores
# - Es una Unidad Central de Procesamiento en un circuito integrado.
# Microcontroladores
# Además de la CPU, contiene: RAM, ROM, interfaz serial, interfaz paralela, manejo de interrupciones, temporizadores, etc.
#Todo en un circuito integrado.
# La Unidad Central de Procesamiento
# Administra las actividades en el sistema, mediante la configuración y manejo de recursos.
# Se encarga de interpretar y ejecutar las instrucciones del programa que determina su comportamiento. Cada instrucción
#contiene un código de operación (opcode) y uno o más operandos sobre los que se realizará la operación. Las instrucciones
#usualmente se organizan por grupos e incluyen:
# – Aritméticas: suma, resta, producto, división, etc.
# – Lógicas: AND, OR, NOT, etc.
# – Transferencia de datos.
# – Bifurcaciones o saltos (condicionales o incondicionales)
# La mayoría de MCU utilizan una arquitectura Harvard. (Memoria de codigo, CPU, Memoria de datos)
"""
La memoria de código almacena las instrucciones que forman al programa. La memoria de código puede ser interna al microcontrolador o
externa. La memoria de código es No Volátil y puede ser del tipo EPROM, EEPROM, Flash, PROM o ROM enmascarable.
Para la memoria de datos los microcontroladores pueden contener RAM o EEPROM, para el uso de variables o de una pila.
Todos los microcontroladores tienen memoria interna de datos, en diferentes magnitudes, algunos además cuentan con la capacidad de
expansión usando una memoria externa.
"""
# El circuito de oscilación determina la frecuencia a la que la CPU va capturando, decodificando y ejecutando instrucciones.
#El oscilador es temporizado por un cristal de cuarzo externo o un circuito RC (interno o externo). El oscilador inicia su
#operación tan pronto se energiza al sistema.
# El temporizador es un registro de n-bits que se incrementa automáticamente en cada ciclo de reloj (timer) o con eventos
#externos (counter). Sus desbordamientos indican que ha transcurrido un intervalo de tiempo o cierto número de eventos.
#Empleado en tareas periódicas.
# El Watchdog Timer (perro guardián) también es un temporizador pero con una función especial. Sus desbordamientos reinician
#al procesador (aplican un reset). Si se utiliza, en posiciones estratégicas del programa debe incluirse una instrucción que
#lo reinicie para evitar que el sistema desborde. Sirve para terminar con ciclos de ejecución inesperados.
# Los Microcontroladores generalmente cuentan con una UART (Universal Asynchronous Receiver Transceiver), para comunicación
#serial con dispositivos o sistemas externos, bajo protocolos y velocidades de transmisión estándar. La comunicación serial
#puede ser síncrona o asíncrona.
# Los puertos digitales de Entrada/Salida sirven para intercambiar datos con el mundo exterior, generalmente son puertos de
#8 bits. Si el puerto es entrada se pueden conectar botones, interruptores, sensores con salida a relevador, etc. Si el puerto
#es salida sirve para el manejo de LEDs, displays de 7 segmentos, activación de motores, etc.
# Entradas analógicas: los microcontroladores incorporan Convertidores Analógico a Digital (ADC) o comparadores analógicos.
#Sin recursos adicionales permiten monitorear parámetros analógicos como temperatura, velocidad, humedad, etc. Salidas
#analógicas: No es común que un MCU incluya un Convertidor Digital a Analógico (DAC), generalmente incluyen salidas con
#Modulación por Ancho de Pulso (PWM), de esta forma pueden manejar circuitos analógicos desde salidas digitales.
# La arquitectura hace referencia a los atributos que se establecen durante el diseño de la CPU y que quedan visibles
#al programador, o dicho de otra manera, aquellos atributos que tienen un impacto directo en la ejecución i9o,l ,xlógica
#de un programa.
# from machine import Pin
# import time
# pines = [12, 13, 14, 15]
# leds = list()
# for i in range(4):
# leds.append(Pin(pines[i], Pin.OUT))
# buton1 = Pin(4, Pin.IN, Pin.PULL_DOWN)
# def salida(valor):
# aux = "{:04b}".format(valor)
# for k in range(len(leds)):
# leds[k].value(int(aux[k]))
# buton1.value()
# tabla = {
# 0 : [1, 1, 1, 1, 1, 1, 0],
# 1 : [0, 1, 1, 0, 0, 0, 0],
# 2 : [1, 1, 0, 1, 1, 0, 1],
# 3 : [1, 1, 1, 1, 0, 0, 1],
# 4 : [0, 1, 1, 0, 0, 1, 1],
# 5 : [1, 0, 1, 1, 0, 1, 1],
# 6 : [1, 0, 1, 1, 1, 1, 1],
# 7 : [1, 1, 1, 0, 0, 0, 0],
# 8 : [1, 1, 1, 1, 1, 1, 1],
# 9 : [1, 1, 1, 0, 0, 1, 1],
# }