Cómo controla la MCU la pantalla LCD y consideraciones de diseño
Clasificación y aplicación de microcomputadoras de un solo chip.
Según su tipo de memoria, la MCU se puede dividir en dos tipos sin ROM en chip y con ROM en chip. Para chips sin ROM en chip, deben estar conectados con una EPROM externa (normalmente 8031); Los chips con ROM en chip se dividen a su vez en EPROM en chip (normalmente 87C51), ROM de máscara en chip MASK (normalmente 87C51), el chip es 8051), tipo Flash en chip (el chip típico es 89C51) y otros tipos.
Según su finalidad, se puede dividir en de finalidad general y de finalidad especial; Según el ancho del bus de datos y la longitud de los bytes de datos que se pueden procesar al mismo tiempo, se puede dividir en MCU de 8, 16 y 32 bits.
En la actualidad, el mercado nacional de aplicaciones de MCU es el más utilizado en el campo de la electrónica de consumo, seguido por el campo industrial y el mercado de la electrónica automotriz. La electrónica de consumo incluye electrodomésticos, televisores, consolas de juegos y sistemas de audio y vídeo, entre otros. Los campos industriales incluyen el hogar inteligente, la automatización, las aplicaciones médicas y la generación y distribución de nueva energía. El campo de la automoción incluye sistemas de control de seguridad y sistemas de propulsión de automóviles, etc.
Shenzhen Hongjia Technology Co., Ltd. se especializa en I+D, producción y venta de pantallas LCD y pantallas táctiles de 1,14 a 10,1 pulgadas, que se pueden personalizar y proporcionan pantallas MCU compatibles, incluida la interfaz SPI, la interfaz MCU, la interfaz RGB, Interfaz MIPI, etc. Hay muchos tamaños y modelos. También se pueden proporcionar una pantalla táctil resistiva y una pantalla táctil capacitiva a juego.
La función básica de una microcomputadora de un solo chip.
Para la mayoría de las MCU, las siguientes funciones son las más comunes y básicas. Para diferentes MCU, la descripción puede ser diferente, pero en esencia son básicamente iguales:
1. TImer (temporizador): aunque existen muchos tipos de TImer, se pueden clasificar en dos categorías: uno es TImer con intervalo de tiempo fijo, es decir, el tiempo lo establece el sistema y el programa de usuario no se puede controlar. Solo se proporcionan varios intervalos de tiempo fijos para que los programas de usuario elijan, como 32 Hz, 16 Hz, 8 Hz, etc. Este tipo de temporizador es más común en MCU de 4 bits, por lo que se puede utilizar para implementar funciones relacionadas, como reloj y temporización. .
El otro tipo es Programmable Timer (temporizador programable). Como sugiere el nombre, el tiempo de este tipo de temporizador puede ser controlado por el programa del usuario. Los métodos de control incluyen: selección de fuente de reloj, selección de división de frecuencia (Preescala) y configuración de número prefabricado, etc. Algunas MCU tienen los tres al mismo tiempo, mientras que otras pueden tener uno o dos de ellos. Este tipo de aplicación de temporizador es muy flexible y el uso real también cambia constantemente. Una de las aplicaciones más comunes es utilizarlo para realizar una salida PWM.
Dado que la fuente del reloj se puede seleccionar libremente, estos temporizadores generalmente se combinan con contadores de eventos.
2. Puertos IO: cualquier MCU tiene una cierta cantidad de puertos IO. Sin puertos IO, la MCU perderá el canal de comunicación con el mundo exterior. Según la configuración del puerto IO, se puede dividir en los siguientes tipos:
Puerto de entrada pura o salida pura: este tipo de puerto IO está determinado por el diseño del hardware de la MCU. Solo puede ser entrada o salida y no puede configurarse mediante software en tiempo real.
Lectura y escritura directa de puertos IO: por ejemplo, los puertos IO del MCS-51 pertenecen a este tipo de puertos IO. Al ejecutar la instrucción de lectura del puerto IO, es un puerto de entrada; al ejecutar una instrucción de escritura en el puerto IO, automáticamente es un puerto de salida.
Programación del programa para establecer la dirección de entrada y salida: el programa establece la entrada o salida de este tipo de puerto IO de acuerdo con las necesidades reales, la aplicación es relativamente flexible y se pueden realizar algunas aplicaciones a nivel de bus, como I2C. Bus, varios LCD, bus de control de controladores LED, etc.
Para el uso del puerto IO, se debe tener en cuenta un punto importante: para el puerto de entrada, debe haber una señal de nivel clara para garantizar que no pueda flotar (se puede lograr agregando un pull-up o pull-up). resistencia de bajada); para el puerto de salida, su nivel de estado de salida debe considerar su conexión externa y debe asegurarse de que no haya una fuente o sumidero de corriente en el estado de espera o estático.
3. Interrupción externa: la interrupción externa también es una función básica de la mayoría de las MCU. Generalmente se utiliza para la activación de señales en tiempo real, muestreo de datos y detección de estado. Hay varios tipos de interrupciones: disparador de flanco ascendente, disparador de flanco descendente y disparador de nivel. Las interrupciones externas generalmente se implementan a través de puertos de entrada. Si es un puerto IO, la función de interrupción solo se habilitará cuando esté configurada como entrada; si es un puerto de salida, la función de interrupción externa se desactivará automáticamente (hay algunas excepciones en la serie ATiny de ATMEL, el puerto de salida también puede activar la función de interrupción). La aplicación de la interrupción externa es la siguiente:
Detección de señales de disparo externas: una se basa en requisitos en tiempo real, como el control de rectificadores controlados por silicio, detección de señales de ráfaga, etc., y la otra es la necesidad de ahorro de energía.
Medición de la frecuencia de la señal: para garantizar que no se pierda la señal, una interrupción externa es la opción ideal.
Decodificación de datos: en el campo de las aplicaciones de control remoto, para reducir el costo de diseño, a menudo es necesario utilizar software para decodificar varios datos codificados, como la decodificación de codificación Manchester y PWM.
Detección de clave y activación del sistema: para una MCU que ingresa al estado de suspensión, generalmente es necesario activarla mediante una interrupción externa. La forma más básica es una clave y el cambio de nivel se genera mediante la acción de la clave.
4. Interfaz de comunicación: la interfaz de comunicación proporcionada por la MCU generalmente incluye interfaz SPI, UART, interfaz I2C, etc., que se describen a continuación:
Interfaz SPI: este tipo de interfaz es el método de comunicación más básico proporcionado por la mayoría de las MCU. Su transmisión de datos está controlada por un reloj síncrono. Las señales incluyen: SDI (entrada de datos en serie), SDO (salida de datos en serie), SCLK (reloj en serie) y señal Listo; en algunos casos, es posible que no haya señal de Listo; este tipo de interfaz puede funcionar en modo Maestro o modo Esclavo, el dicho popular es para ver quién proporciona la señal del reloj, la parte que proporciona el reloj es el Maestro, y la parte contraria luego es el Esclavo.
UART (Transmisión de recepción asíncrona universal): es la interfaz de transmisión asíncrona más básica. Sus líneas de señal son sólo Rx y Tx. El formato de datos básico es: bit de inicio + bit de datos (7 bits/8 bits) + bit de paridad (par, impar o ninguno) + bit de parada (1~2 bits). El tiempo que tarda un bit de datos se llama Baud Rate (velocidad en baudios).
Para la mayoría de las MCU, la longitud de los bits de datos, el método de verificación de datos (verificación impar, verificación par o sin verificación), la longitud del bit de parada (Stop Bit) y la velocidad en baudios se pueden configurar de manera flexible mediante programación. Ciertamente. La forma más utilizada de este tipo de interfaz es comunicarse con el puerto serie de la PC.
Interfaz I2C: I2C es un protocolo de transmisión de datos desarrollado por Philips, que también se implementa mediante dos señales: SDAT (entrada y salida de datos en serie) y SCLK (reloj en serie). Su mayor ventaja es que a este bus se pueden conectar múltiples dispositivos, los cuales se pueden identificar y acceder a través de direcciones; Uno de los mayores beneficios del bus I2C es que es muy conveniente utilizar software para realizarlo a través del puerto IO, y su velocidad de transmisión de datos está completamente controlada por SCLK. Para controlarlo, puede ser rápido o lento, a diferencia de la interfaz UART. , que tiene estrictos requisitos de velocidad.
5. Watchdog (temporizador de vigilancia): Watchdog también es una configuración básica de la mayoría de las MCU (es posible que algunas MCU de 4 bits no tengan esta función), y la mayoría de las MCU Watchdog solo pueden permitir que los programas las restablezcan y no pueden restablecerlas. Está cerrado (algunos se configuran cuando se graba el programa, como la MCU de la serie Microchip PIC), y algunas MCU determinan si se abre de una manera específica, como la serie KS57 de Samsung, siempre que el programa acceda al registro Watchdog. , se enciende automáticamente y no se puede volver a apagar. En términos generales, el tiempo de reinicio del mecanismo de vigilancia se puede configurar mediante programa. La aplicación más básica de Watchdog es proporcionar una capacidad de autorrecuperación para que la MCU falle debido a fallas inesperadas.
Programación de microcontroladores
Existe una gran diferencia entre la programación de programas MCU y la programación de programas de PC. Aunque las herramientas de desarrollo de MCU basadas en C se están volviendo cada vez más populares, para un código de programa eficiente y un diseñador al que le gusta usar ensamblador, el lenguaje ensamblador sigue siendo el lenguaje de programación más conciso y eficiente.
Para la programación de MCU, se puede decir que su marco básico es aproximadamente el mismo, generalmente dividido en tres partes: parte de inicialización (esta es la mayor diferencia entre la programación de MCU y la programación de PC), el cuerpo del bucle del programa principal y el programa de procesamiento de interrupciones, que son respectivamente explicado de la siguiente manera:
1. Inicialización: para el diseño de todos los programas de MCU, la inicialización es el paso más básico e importante y, por lo general, incluye lo siguiente:
Enmascare todas las interrupciones e inicialice el puntero de la pila: la parte de inicialización generalmente no quiere que se produzca ninguna interrupción.
Limpiar el área RAM del sistema y mostrar Memoria: Aunque en ocasiones puede no ser del todo necesario, desde la perspectiva de la confiabilidad y consistencia, especialmente para evitar errores accidentales, se recomienda desarrollar buenos hábitos de programación.
Inicialización del puerto IO: de acuerdo con los requisitos de aplicación del proyecto, configure el modo de entrada y salida del puerto IO relevante. Para el puerto de entrada, debe configurar su resistencia pull-up o pull-down; Para el puerto de salida, debe configurar su nivel inicial de salida para evitar errores innecesarios.
Configuración de interrupción: para todas las fuentes de interrupción que deben usarse en el proyecto, deben habilitarse y establecerse las condiciones de activación para las interrupciones, mientras que para las interrupciones redundantes que no se usan, deben desactivarse.
Inicialización de otros módulos funcionales: para todos los módulos funcionales periféricos de la MCU que deben usarse, se deben realizar las configuraciones correspondientes de acuerdo con los requisitos de la aplicación del proyecto, como comunicación UART, velocidad en baudios, longitud de datos, método de verificación y parada. Es necesario configurar los bits, la longitud, etc., y para el temporizador del programador, debe configurar su fuente de reloj, división de frecuencia y datos de recarga, etc.
Inicialización de parámetros: después de completar la inicialización del hardware y los recursos de la MCU, el siguiente paso es inicializar algunas variables y datos utilizados en el programa. La inicialización de esta parte debe diseñarse de acuerdo con el proyecto específico y la disposición general del programa. Para algunas aplicaciones que utilizan EEPROM para guardar datos prefabricados del proyecto, se recomienda copiar los datos relevantes a la RAM de la MCU durante la inicialización para mejorar la velocidad de acceso del programa a los datos y reducir el consumo de energía del sistema (en principio , el acceso a la EEPROM externa aumentará el consumo de energía de la fuente de alimentación).
2. El cuerpo del programa principal en bucle: la mayoría de las MCU se ejecutan continuamente durante mucho tiempo, por lo que el cuerpo del programa principal está diseñado básicamente de forma cíclica. Para aplicaciones con múltiples modos de trabajo, puede haber múltiples Un cuerpo de bucle se convierte entre sí a través de la bandera de estado. Para el cuerpo principal del programa, generalmente se organizan los siguientes módulos:
Programa de cálculo: el programa de cálculo generalmente requiere mucho tiempo, por lo que se opone firmemente a cualquier procesamiento de interrupción, especialmente las operaciones de multiplicación y división.
Procesar programas con bajos requisitos de tiempo real o sin requisitos de tiempo real;
Programa de transmisión de display: principalmente para aplicaciones con LED externo y Driver LCD.
3. Programa de procesamiento de interrupciones: el programa de interrupciones se utiliza principalmente para procesar tareas y eventos con altos requisitos en tiempo real, como detección de señales repentinas externas, detección y procesamiento de claves, conteo de tiempos, escaneo de pantallas LED, etc.
En general, el programa de interrupción debe mantener el código lo más conciso y breve posible. Para funciones que no necesitan procesarse en tiempo real, puede configurar el indicador de activación en la interrupción y luego el programa principal ejecutará la transacción específica; esto es muy importante. Especialmente para MCU de baja potencia y baja velocidad, es necesario garantizar una respuesta oportuna a todas las interrupciones.
4. Para la disposición de diferentes órganos de trabajo, diferentes MCU tienen diferentes métodos de procesamiento:
Por ejemplo, para aplicaciones MCU de baja velocidad y bajo consumo (Fosc = 32768 Hz), considerando que dichos proyectos son todos dispositivos portátiles y utilizan pantallas LCD normales, la respuesta a los botones y pantallas requiere un alto rendimiento en tiempo real, por lo que generalmente Interrupciones temporizadas se utilizan para procesar acciones de botones y visualización de datos; y para MCU de alta velocidad, como aplicaciones Fosc>1MHz, dado que la MCU tiene tiempo suficiente para ejecutar el cuerpo del bucle del programa principal en este momento, solo se puede interrumpir en el correspondiente Establezca varios indicadores de activación y coloque todas las tareas en el cuerpo principal del programa para ejecutar.
5. En el diseño de programación de MCU, un punto más que necesita especial atención es:
Para evitar el acceso simultáneo o la configuración de la misma variable o datos en la interrupción y el cuerpo principal del programa. Un método preventivo eficaz es organizar el procesamiento de dichos datos en un módulo y determinar si se ejecuta la operación relevante de los datos juzgando el indicador de activación; mientras que en otros cuerpos del programa (principalmente interrupciones), los datos que deben procesarse El lugar de procesamiento solo establece el indicador activado. - Esto asegura que la ejecución de los datos sea predecible y única.
Habilidades de desarrollo de microcontroladores
1. Cómo reducir errores en el programa.
Para saber cómo reducir los errores del programa, primero debe considerar los siguientes parámetros de administración de rango excesivo que deben considerarse durante la operación del sistema.
Parámetros físicos: estos parámetros son principalmente los parámetros de entrada del sistema, incluidos los parámetros de excitación, los parámetros operativos durante la adquisición y el procesamiento y los parámetros de resultado al final del procesamiento.
Parámetros de recursos: estos parámetros son principalmente los recursos de circuitos, dispositivos y unidades funcionales del sistema, como la capacidad de memoria, la longitud de la unidad de almacenamiento y la profundidad de apilamiento.
Parámetros de aplicación: estos parámetros de aplicación a menudo representan las condiciones de aplicación de algunas unidades funcionales y microcomputadoras de un solo chip. Parámetros del proceso: Se refiere a los parámetros que cambian de manera ordenada durante la operación del sistema.
2. Cómo mejorar la eficiencia del código de programación en lenguaje C
Es una tendencia inevitable en el desarrollo y aplicación de microcomputadoras de un solo chip utilizar el lenguaje C para diseñar el programa de microcomputadora de un solo chip. Si desea lograr la mayor eficiencia al programar en C, es mejor estar familiarizado con el compilador de C que está utilizando. Primero pruebe el número de líneas de declaración en lenguaje ensamblador correspondientes a cada lenguaje C compilado, para que pueda conocer claramente la eficiencia. Cuando programe en el futuro, utilice la declaración con la mayor eficiencia de compilación. Cada compilador de C tendrá ciertas diferencias, por lo que la eficiencia de la compilación también será diferente. La longitud del código y el tiempo de ejecución de un excelente compilador de sistema integrado C son sólo entre un 5% y un 20% más largos que el mismo nivel de función escrito en lenguaje ensamblador.
Para proyectos complejos con poco tiempo de desarrollo, se puede utilizar el lenguaje C, pero la premisa es que está muy familiarizado con el lenguaje C y el compilador C del sistema MCU, y presta especial atención a los tipos de datos y algoritmos que utiliza el sistema compilador C. puede apoyar. Aunque el lenguaje C es el lenguaje de alto nivel más común, los sistemas de compilación de lenguaje C de diferentes fabricantes de MCU son diferentes, especialmente en el funcionamiento de algunos módulos de funciones especiales. Entonces, si no comprende estas características, habrá muchos problemas durante la depuración, lo que conducirá a una menor eficiencia de ejecución que el lenguaje ensamblador.
3. Cómo resolver el problema antiinterferencias de las microcomputadoras de un solo chip. La forma más efectiva de prevenir interferencias es eliminar la fuente de interferencia y cortar la ruta de interferencia, pero a menudo es difícil hacerlo, por lo que solo depende de si la capacidad antiinterferencias del microordenador de un solo chip es lo suficientemente fuerte. Si bien mejora la capacidad antiinterferencias del sistema de hardware, el software antiinterferencias se caracteriza por su diseño flexible,