Come l'MCU gestisce lo schermo LCD e considerazioni sulla progettazione

2023-07-17

Classificazione e applicazione dei microcomputer a chip singolo
A seconda del tipo di memoria, l'MCU può essere diviso in due tipi: senza ROM su chip e con ROM su chip. Per i chip senza ROM on-chip, devono essere collegati con una EPROM esterna (tipicamente 8031); I chip con ROM su chip sono ulteriormente suddivisi in EPROM su chip (tipicamente 87C51), MASK ROM con maschera su chip (tipicamente 87C51) Il chip è 8051), tipo Flash su chip (tipicamente il chip è 89C51) e altri tipi.
A seconda dello scopo, può essere suddiviso in generale e speciale; in base alla larghezza del bus dati e alla lunghezza dei byte di dati che possono essere elaborati contemporaneamente, può essere suddiviso in MCU a 8, 16 e 32 bit.
Attualmente, il mercato domestico delle applicazioni MCU è quello più utilizzato nel campo dell'elettronica di consumo, seguito dal settore industriale e dal mercato dell'elettronica automobilistica. L'elettronica di consumo comprende, tra gli altri, elettrodomestici, televisori, console di gioco e sistemi audio e video. I settori industriali includono la casa intelligente, l’automazione, le applicazioni mediche e la generazione e distribuzione di nuova energia. Il settore automobilistico comprende gruppi propulsori automobilistici e sistemi di controllo di sicurezza, ecc.
Shenzhen Hongjia Technology Co., Ltd. è specializzata in ricerca e sviluppo, produzione e vendita di schermi LCD e touch screen da 1,14 pollici-10,1 pollici, che possono essere personalizzati e forniscono display MCU di supporto, tra cui interfaccia SPI, interfaccia MCU, interfaccia RGB, Interfaccia MIPI, ecc. Sono disponibili molte dimensioni e modelli. È possibile fornire anche touch screen resistivo e touch screen capacitivo abbinati.
La funzione di base del microcomputer a chip singolo

Per la maggior parte degli MCU, le seguenti funzioni sono le più comuni e basilari. Per MCU diversi, la descrizione può essere diversa, ma nella sostanza sono sostanzialmente gli stessi:

1. TImer (timer): Sebbene esistano molti tipi di TImer, questi possono essere classificati in due categorie: una è i TImer con intervallo di tempo fisso, ovvero la temporizzazione è impostata dal sistema e il programma utente non può essere controllato. Vengono forniti solo diversi intervalli di tempo fissi tra cui i programmi utente possono scegliere, come 32 Hz, 16 Hz, 8 Hz, ecc. Questo tipo di TIMER è più comune negli MCU a 4 bit, quindi può essere utilizzato per implementare funzioni correlate come orologio e temporizzazione .
L'altro tipo è il timer programmabile (timer programmabile). Come suggerisce il nome, il tempo di cronometraggio di questo tipo di timer può essere controllato dal programma dell'utente. I metodi di controllo includono: selezione della sorgente di clock, selezione della divisione di frequenza (prescala) e impostazione del numero prefabbricato, ecc. Alcuni MCU li hanno tutti e tre contemporaneamente, mentre altri possono averne uno o due. Questo tipo di applicazione timer è molto flessibile e anche l'uso effettivo è in continua evoluzione. Una delle applicazioni più comuni è utilizzarlo per realizzare l'uscita PWM.
Poiché la sorgente dell'orologio può essere selezionata liberamente, tali timer sono generalmente combinati con contatori di eventi.
2. Porte IO: qualsiasi MCU ha un certo numero di porte IO. Senza porte IO, l'MCU perderà il canale di comunicazione con il mondo esterno. In base alla configurazione della porta IO, questa può essere suddivisa nei seguenti tipi:
Porta di ingresso puro o di uscita pura: questo tipo di porta IO è determinato dalla progettazione hardware dell'MCU. Può essere solo input o output e non può essere impostato dal software in tempo reale.
Leggere e scrivere direttamente sulle porte IO: ad esempio, le porte IO dell'MCS-51 appartengono a questo tipo di porte IO. Quando si esegue l'istruzione di lettura della porta IO, si tratta di una porta di ingresso; quando si esegue un'istruzione di scrittura della porta IO, è automaticamente una porta di uscita.
Programmazione del programma per impostare la direzione di ingresso e uscita: l'ingresso o l'uscita di questo tipo di porta IO è impostato dal programma in base alle esigenze effettive, l'applicazione è relativamente flessibile e alcune applicazioni a livello di bus possono essere realizzate, come I2C bus, vari LCD, bus di controllo driver LED, ecc.
Per l'utilizzo della porta IO è necessario tenere presente un punto importante: per la porta di ingresso deve esserci un segnale di livello chiaro per garantire che non possa essere fluttuante (può essere ottenuto aggiungendo un pull-up o un pull- resistenza verso il basso); per la porta di uscita, la sua uscita. Il livello di stato deve considerare la sua connessione esterna e dovrebbe essere garantito che non ci siano sorgenti o assorbitori di corrente nello stato Standby o statico.
3. Interruzione esterna: anche l'interruzione esterna è una funzione di base della maggior parte degli MCU. Viene generalmente utilizzato per l'attivazione in tempo reale di segnali, campionamento dei dati e rilevamento dello stato. Esistono diversi tipi di interruzioni: trigger sul fronte di salita, trigger sul fronte di discesa e trigger sul livello. Gli interrupt esterni vengono generalmente implementati tramite porte di ingresso. Se si tratta di una porta IO, la funzione di interruzione sarà abilitata solo quando è impostata su input; se si tratta di una porta di uscita, la funzione di interruzione esterna verrà automaticamente disattivata (ci sono alcune eccezioni nella serie ATiny di ATMEL, la porta di uscita può anche attivare la funzione di interruzione). L'applicazione dell'interruzione esterna è la seguente:
Rilevamento di segnali di trigger esterni: uno si basa su requisiti in tempo reale, come il controllo di raddrizzatori controllati al silicio, il rilevamento di segnali di burst, ecc., e l'altro è la necessità di risparmio energetico.
Misurazione della frequenza del segnale: per garantire che il segnale non venga perso, un'interruzione esterna è la scelta ideale.
Decodifica dati: nel campo delle applicazioni di controllo remoto, per ridurre i costi di progettazione, è spesso necessario utilizzare software per decodificare vari dati codificati, come la decodifica Manchester e la codifica PWM.
Rilevamento tasti e riattivazione del sistema: per un MCU che entra nello stato di sospensione, generalmente deve essere riattivato tramite un'interruzione esterna. La forma più elementare è una chiave e il cambio di livello è generato dall'azione della chiave.
4. Interfaccia di comunicazione: l'interfaccia di comunicazione fornita dall'MCU include generalmente l'interfaccia SPI, UART, l'interfaccia I2C, ecc., descritte come segue:
Interfaccia SPI: questo tipo di interfaccia è il metodo di comunicazione più elementare fornito dalla maggior parte degli MCU. La sua trasmissione dei dati è controllata da un orologio sincrono. I segnali includono: SDI (ingresso dati seriale), SDO (uscita dati seriale), SCLK (orologio seriale) e segnale Ready; in alcuni casi potrebbe non esserci il segnale Pronto; questo tipo di interfaccia può funzionare in modalità Master o Slave, il detto popolare è vedere chi fornisce il segnale dell'orologio, la parte che fornisce l'orologio è il Master, e la parte opposta quindi è lo Slaver.
UART (Universal Asynchronous Receive Transmit): è l'interfaccia di trasmissione asincrona più elementare. Le sue linee di segnale sono solo Rx e Tx. Il formato dati di base è: Bit di inizio + Bit di dati (7 bit/8 bit) + Bit di parità (Pari, Dispari o Nessuno) + Bit di stop (1~2 bit). Il tempo impiegato da un bit di dati è chiamato Baud Rate (velocità di trasmissione).
Per la maggior parte degli MCU, la lunghezza dei bit di dati, il metodo di controllo dei dati (controllo dispari, controllo pari o nessun controllo), la lunghezza del bit di stop (bit di stop) e la velocità di trasmissione possono essere impostati in modo flessibile tramite la programmazione. Certamente. Il modo più comunemente utilizzato per questo tipo di interfaccia è comunicare con la porta seriale del PC.
Interfaccia I2C: I2C è un protocollo di trasmissione dati sviluppato da Philips, anch'esso implementato da due segnali: SDAT (ingresso e uscita dati seriali) e SCLK (orologio seriale). Il suo più grande vantaggio è che a questo bus possono essere collegati più dispositivi, che possono essere identificati e accessibili tramite indirizzi; uno dei maggiori vantaggi del bus I2C è che è molto comodo utilizzare il software per realizzarlo attraverso la porta IO e la velocità di trasmissione dei dati è completamente controllata da SCLK Per il controllo, può essere veloce o lento, a differenza dell'interfaccia UART , che ha severi requisiti di velocità.
5. Watchdog (timer watchdog): Watchdog è anche una configurazione di base della maggior parte degli MCU (alcuni MCU a 4 bit potrebbero non avere questa funzione) e la maggior parte dei watchdog MCU può solo consentire ai programmi di ripristinarli e non può ripristinarli. È chiuso (alcuni vengono impostati quando il programma viene masterizzato, come gli MCU della serie PIC Microchip) e alcuni MCU determinano se aprirlo in un modo specifico, come la serie KS57 di Samsung, purché il programma acceda al registro Watchdog , si accende automaticamente e non può essere spento nuovamente. In generale, il tempo di ripristino del watchdog può essere impostato dal programma. L'applicazione più elementare di Watchdog è fornire una capacità di ripristino automatico per l'arresto anomalo dell'MCU a causa di guasti imprevisti.

Programmazione del microcontrollore
Esiste una grande differenza tra la programmazione dei programmi MCU e la programmazione dei programmi PC. Sebbene gli strumenti di sviluppo MCU basati su C stiano diventando sempre più popolari, per un codice di programma efficiente e un progettista a cui piace utilizzare l'assembly, il linguaggio assembly è ancora il linguaggio di programmazione più conciso ed efficiente.

Per la programmazione MCU, si può dire che la sua struttura di base sia più o meno la stessa, generalmente divisa in tre parti: parte di inizializzazione (questa è la differenza più grande tra la programmazione MCU e la programmazione PC), corpo principale del loop del programma e programma di elaborazione degli interrupt, che sono rispettivamente spiegato come segue:
1. Inizializzazione: per la progettazione di tutti i programmi MCU, l'inizializzazione è il passaggio più fondamentale e importante, che generalmente include quanto segue:
Maschera tutti gli interrupt e inizializza il puntatore dello stack: la parte di inizializzazione generalmente non vuole che si verifichino interruzioni.
Clear the RAM area of the system and display Memory: Although sometimes it may not be completely necessary, from the perspective of reliability and consistency, especially to prevent accidental errors, it is recommended to develop good programming habits.
Inizializzazione della porta IO: in base ai requisiti applicativi del progetto, impostare la modalità di ingresso e uscita della relativa porta IO. Per la porta di ingresso è necessario impostare la resistenza pull-up o pull-down; per la porta di uscita, è necessario impostarne il livello iniziale, per evitare errori non necessari.
Impostazioni degli interrupt: per tutte le sorgenti di interrupt che devono essere utilizzate nel progetto, devono essere abilitate e le condizioni di attivazione per gli interrupt devono essere impostate, mentre per gli interrupt ridondanti che non vengono utilizzati, devono essere disattivate.
Inizializzazione di altri moduli funzionali: per tutti i moduli funzionali periferici dell'MCU che devono essere utilizzati, è necessario effettuare le impostazioni corrispondenti in base ai requisiti applicativi del progetto, come comunicazione UART, Baud Rate, lunghezza dei dati, metodo di verifica e Stop È necessario impostare il bit La lunghezza, ecc., e per il timer del programmatore è necessario impostare la sorgente dell'orologio, la divisione di frequenza e i dati di ricarica, ecc.
Inizializzazione dei parametri: dopo aver completato l'inizializzazione dell'hardware e delle risorse dell'MCU, il passaggio successivo consiste nell'inizializzare alcune variabili e dati utilizzati nel programma. L'inizializzazione di questa parte deve essere progettata in base al progetto specifico e alla disposizione generale del programma. Per alcune applicazioni che utilizzano EEPROM per salvare i dati prefabbricati del progetto, si consiglia di copiare i dati rilevanti nella RAM dell'MCU durante l'inizializzazione per migliorare la velocità di accesso del programma ai dati e ridurre il consumo energetico del sistema (in linea di principio , l'accesso alla EEPROM esterna aumenterà il consumo energetico dell'alimentatore).
2. Il corpo del ciclo del programma principale: la maggior parte degli MCU funziona ininterrottamente per un lungo periodo, quindi il corpo del programma principale è fondamentalmente progettato in modo ciclico. Per le applicazioni con più modalità di funzionamento, potrebbero esserci più Un corpo del loop convertito tra loro tramite il flag di stato. Per il corpo principale del programma sono generalmente predisposti i seguenti moduli:
Programma di calcolo: il programma di calcolo richiede generalmente molto tempo, quindi è fermamente contrario a qualsiasi elaborazione di interruzione, in particolare alle operazioni di moltiplicazione e divisione.
Elaborazione di programmi con requisiti di tempo reale bassi o senza requisiti di tempo reale;

Programma di trasmissione display: principalmente per applicazioni con driver LED e LCD esterni.
3. Programma di elaborazione degli interrupt: il programma di interrupt viene utilizzato principalmente per elaborare attività ed eventi con elevati requisiti di tempo reale, come il rilevamento di segnali improvvisi esterni, il rilevamento e l'elaborazione di tasti, il conteggio dei tempi, la scansione del display LED, ecc.
In generale, il programma di interrupt dovrebbe mantenere il codice il più conciso e breve possibile. Per le funzioni che non necessitano di essere elaborate in tempo reale, è possibile impostare il flag di attivazione nell'interrupt e quindi il programma principale eseguirà la transazione specifica: questo è molto importante. Soprattutto per gli MCU a basso consumo e bassa velocità, è necessario garantire una risposta tempestiva a tutti gli interrupt.
4. Per la disposizione dei diversi organi di lavoro, diversi MCU hanno metodi di elaborazione diversi:
Ad esempio, per applicazioni MCU a bassa velocità e basso consumo (Fosc=32768Hz), considerando che tali progetti sono tutti dispositivi portatili e utilizzano normali display LCD, la risposta a pulsanti e display richiede elevate prestazioni in tempo reale, quindi generalmente gli interrupt temporizzati sono utilizzati per elaborare le azioni dei pulsanti e la visualizzazione dei dati; e per gli MCU ad alta velocità, come le applicazioni Fosc>1MHz, poiché l'MCU ha abbastanza tempo per eseguire il corpo del loop del programma principale in questo momento, può essere interrotto solo nel corrispondente Imposta vari flag di trigger in e inserire tutte le attività nel corpo principale del programma da eseguire.
5. Nella progettazione della programmazione dell'MCU, un altro punto che richiede particolare attenzione è:

Per impedire l'accesso o l'impostazione simultanea della stessa variabile o dati nell'interrupt e nel corpo del programma principale. Un metodo preventivo efficace consiste nell'organizzare l'elaborazione di tali dati in un modulo e determinare se eseguire l'operazione rilevante sui dati giudicando il flag di attivazione; mentre in altri corpi di programma (principalmente interruzioni), i dati che devono essere elaborati Il luogo di elaborazione imposta solo il flag attivato. - Ciò garantisce che l'esecuzione dei dati sia prevedibile e unica.

Competenze di sviluppo del microcontrollore

1. Come ridurre i bug nel programma
Per ridurre i bug del programma, è necessario innanzitutto considerare i seguenti parametri di gestione del fuori range da tenere in considerazione durante il funzionamento del sistema.
Parametri fisici: questi parametri sono principalmente i parametri di input del sistema, inclusi i parametri di eccitazione, i parametri operativi durante l'acquisizione e l'elaborazione e i parametri dei risultati alla fine dell'elaborazione.

Parametri delle risorse: questi parametri sono principalmente le risorse di circuiti, dispositivi e unità funzionali nel sistema, come capacità di memoria, lunghezza dell'unità di archiviazione e profondità di stacking.
Parametri applicativi: questi parametri applicativi rappresentano spesso le condizioni applicative di alcuni microcomputer e unità funzionali a chip singolo. Parametri di processo: si riferisce ai parametri che cambiano in modo ordinato durante il funzionamento del sistema.


2. Come migliorare l'efficienza del codice di programmazione in linguaggio C
È una tendenza inevitabile nello sviluppo e nell'applicazione dei microcomputer a chip singolo utilizzare il linguaggio C per progettare il programma del microcomputer a chip singolo. Se vuoi ottenere la massima efficienza durante la programmazione in C, è meglio avere familiarità con il compilatore C che stai utilizzando. Per prima cosa prova il numero di righe di istruzioni in linguaggio assembly corrispondenti a ciascun linguaggio C compilato, in modo da poter conoscere chiaramente l'efficienza. Quando si programma in futuro, utilizzare l'istruzione con la massima efficienza di compilazione. Ogni compilatore C presenterà alcune differenze, quindi anche l'efficienza della compilazione sarà diversa. La lunghezza del codice e il tempo di esecuzione di un eccellente compilatore C di sistema embedded sono solo il 5-20% più lunghi rispetto allo stesso livello di funzione scritto in linguaggio assembly.

Per progetti complessi con tempi di sviluppo ristretti, è possibile utilizzare il linguaggio C, ma la premessa è che tu abbia molta familiarità con il linguaggio C e il compilatore C del sistema MCU e presti particolare attenzione ai tipi di dati e agli algoritmi che il sistema del compilatore C può supportare. Sebbene il linguaggio C sia il linguaggio di alto livello più comune, i sistemi di compilazione in linguaggio C dei diversi produttori di MCU sono diversi, soprattutto nel funzionamento di alcuni moduli funzionali speciali. Quindi, se non si comprendono queste funzionalità, ci saranno molti problemi nel debug, che porteranno a una minore efficienza di esecuzione rispetto al linguaggio assembly.

3. Come risolvere il problema anti-interferenza del microcomputer a chip singolo Il modo più efficace per prevenire le interferenze è rimuovere la fonte di interferenza e tagliare il percorso di interferenza, ma spesso è difficile farlo, quindi dipende solo da se la capacità anti-interferenza del microcomputer a chip singolo è abbastanza forte. Migliorando la capacità anti-jamming del sistema hardware, l'anti-jamming software è caratterizzato dal suo design flessibile,
X
We use cookies to offer you a better browsing experience, analyze site traffic and personalize content. By using this site, you agree to our use of cookies. Privacy Policy