Linea diretta di assistenza
6
Programmazione del microcontrollore
Esiste una grande differenza tra la programmazione per microcontrollori (MCU) e quella per PC. Sebbene gli strumenti di sviluppo per MCU basati sul linguaggio C stiano diventando sempre più popolari, per i progettisti che desiderano un codice efficiente e preferiscono utilizzare l'assembly, quest'ultimo rimane il linguaggio di programmazione più conciso ed efficace.
Per la programmazione di microcontrollori, si può affermare che la struttura di base sia sostanzialmente la stessa, e che sia generalmente suddivisa in tre parti: la parte di inizializzazione (questa è la principale differenza tra la programmazione di microcontrollori e quella per PC), il corpo principale del ciclo di programma e il gestore degli interrupt, che vengono spiegati di seguito:
1. Inizializzazione:Nella progettazione di tutti i programmi per microcontrollori, l'inizializzazione è il passaggio più basilare e importante, che generalmente include quanto segue:
Maschera tutti gli interrupt e inizializza il puntatore dello stack:La fase di inizializzazione in genere non desidera che si verifichino interruzioni.
Cancella l'area RAM del sistema e visualizza Memoria:Sebbene a volte non sia strettamente necessario, dal punto di vista dell'affidabilità e della coerenza, soprattutto per prevenire errori imprevisti, si raccomanda di sviluppare buone abitudini di programmazione.
Inizializzazione della porta I/O:In base ai requisiti applicativi del progetto, impostare la modalità di ingresso e di uscita della porta I/O corrispondente. Per la porta di ingresso, è necessario impostare la resistenza di pull-up o pull-down; per la porta di uscita, è necessario impostare il livello di uscita iniziale per evitare errori indesiderati.
Impostazioni di interruzione:Tutte le sorgenti di interrupt necessarie per il progetto devono essere attivate e le relative condizioni di attivazione impostate, mentre gli interrupt ridondanti non utilizzati devono essere disattivati.
Inizializzazione di altri moduli funzionali:Per tutti i moduli periferici della MCU che devono essere utilizzati, è necessario effettuare le impostazioni corrispondenti in base ai requisiti dell'applicazione del progetto. Ad esempio, per la comunicazione UART, è necessario impostare la velocità di trasmissione (Baud Rate), la lunghezza dei dati, il metodo di verifica e la lunghezza del bit di stop. Per il timer del programmatore, è necessario impostare la sorgente di clock, il numero di divisione di frequenza e i dati di ricarica.
Inizializzazione dei parametri:Dopo aver completato l'inizializzazione dell'hardware e delle risorse del microcontrollore, il passo successivo consiste nell'inizializzare alcune variabili e dati utilizzati nel programma. L'inizializzazione di questa fase deve essere progettata in base al progetto specifico e alla struttura generale del programma. Per alcune applicazioni che utilizzano la EEPROM per salvare dati predefiniti del progetto, si consiglia di copiare i dati rilevanti nella RAM del microcontrollore durante l'inizializzazione, al fine di migliorare la velocità di accesso ai dati da parte del programma e ridurre il consumo energetico del sistema (in linea di principio, l'accesso alla EEPROM esterna aumenterà il consumo energetico dell'alimentatore).
2. Corpo del ciclo principale del programma:La maggior parte dei microcontrollori (MCU) funziona ininterrottamente per lunghi periodi, pertanto i loro programmi principali sono generalmente strutturati in cicli. Per le applicazioni con diverse modalità operative, possono essere presenti più cicli, che vengono convertiti tramite flag di stato. Il corpo principale del programma è generalmente organizzato nei seguenti moduli:
Procedura di calcolo:I programmi di calcolo sono generalmente dispendiosi in termini di tempo, pertanto ci opponiamo fermamente a elaborarli tramite interruzioni, soprattutto per quanto riguarda le operazioni di moltiplicazione e divisione.
Elaborazione di programmi con requisiti di tempo reale minimi o nulli;
Mostra la procedura di trasferimento:Pensato principalmente per applicazioni con driver LED e LCD esterni.
3. Gestore degli interrupt:I programmi di interruzione vengono utilizzati principalmente per gestire attività ed eventi con elevati requisiti in tempo reale, come il rilevamento di segnali esterni improvvisi, il rilevamento e l'elaborazione di pulsanti, il conteggio del tempo, la scansione di display a LED, ecc.
In circostanze normali, il programma di gestione degli interrupt dovrebbe essere il più conciso e breve possibile. Per le funzioni che non necessitano di essere elaborate in tempo reale, è possibile impostare un flag di trigger nell'interrupt, consentendo al programma principale di eseguire le transazioni specifiche. Questo è particolarmente importante per i microcontrollori a basso consumo e bassa velocità, che devono garantire una risposta tempestiva a tutti gli interrupt.
4. Per la disposizione dei diversi corpi di lavoro, i diversi MCU utilizzano metodi di elaborazione differenti:
Ad esempio, per applicazioni con MCU a bassa velocità e basso consumo (Fosc=32768Hz), considerando che tali progetti sono dispositivi portatili e utilizzano normali display LCD, la risposta alla pressione dei tasti e la risposta del display richiedono elevate prestazioni in tempo reale, quindi si utilizzano generalmente interrupt temporizzati per elaborare le azioni di pressione dei tasti e la visualizzazione dei dati; per MCU ad alta velocità, come le applicazioni Fosc>1MHz, poiché la MCU ha tempo sufficiente per eseguire il corpo del ciclo principale del programma, può solo impostare vari flag di trigger negli interrupt corrispondenti e inserire tutte le attività nel corpo del programma principale per l'esecuzione.
5. Nella programmazione dei microcontrollori, un aspetto che richiede particolare attenzione è:
È necessario impedire che la stessa variabile o gli stessi dati vengano acceduti o impostati contemporaneamente nel corpo del programma di interrupt e nel programma principale. Un metodo di prevenzione efficace consiste nell'organizzare l'elaborazione di tali dati in un modulo e nel determinare se eseguire le relative operazioni sui dati valutando il flag di trigger; negli altri corpi del programma (principalmente negli interrupt), impostare i flag di trigger solo dove i dati devono essere elaborati. Ciò garantisce che l'esecuzione dei dati sia prevedibile e univoca.
7
Riepilogo tecnico sulla programmazione dei microcontrollori
1,Sviluppa una buona abitudine a riassumere. Riassumere non significa solo sintetizzare ciò che hai appreso, ma anche ripassare e approfondire il processo di apprendimento. Inoltre, può aiutarti a evitare di commettere gli stessi errori in futuro.
2,Prima di scrivere un programma, è fondamentale avere una conoscenza approfondita del progetto, esserne consapevoli e delinearne la struttura generale. È molto importante valutare attentamente come strutturarlo e quale sia la disposizione più razionale. Bisogna analizzare quale modulo realizzare per primo, i passaggi specifici di ciascun modulo, come denominare ogni funzione, il collegamento con gli altri moduli, ecc. È consigliabile prendere un foglio di carta e annotare i processi più importanti.
3,Nella programmazione modulare in linguaggio C, è necessario innanzitutto suddividere ogni modulo, programmare un modulo alla volta, stabilire una sequenza, seguirla e quindi scrivere il modulo successivo solo dopo che il modulo precedente è stato completato con successo. Per quanto riguarda i file di intestazione, è necessario scrivere il file di intestazione del modulo dopo che quest'ultimo è stato scritto.
4,Non ignorate gli avvisi quando compaiono. Significano che c'è qualcosa di anomalo nel programma. È necessario comprenderne la causa e trovare una soluzione. Siate precisi nella ricerca delle cause. Potete cercare informazioni su Internet o chiedere consiglio ad altri. Ad esempio, la funzione principale di un altro progetto potrebbe essere stata aggiunta a questo. Potrebbero esserci nomi di funzioni duplicati. È inoltre opportuno analizzare i fenomeni sperimentali e procedere passo dopo passo. Potrebbe anche essere stata selezionata l'interfaccia sbagliata durante la definizione della porta. A volte, se proprio non riuscite a risolvere il problema, è bene fare una pausa e riflettere. Non importa quanto semplice sia, prestate attenzione, perché potrebbero esserci degli errori.
Nello sviluppo di applicazioni per microcontrollori, permangono problematiche quali l'efficienza nell'utilizzo del codice, le prestazioni anti-interferenza e l'affidabilità dei microcontrollori stessi. Di seguito, riassumiamo alcune competenze fondamentali che è necessario padroneggiare nello sviluppo di microcontrollori.
8
Competenze nello sviluppo di microcontrollori
1.Come ridurre i bug nei programmi
Per quanto riguarda la riduzione dei bug del programma, è opportuno considerare innanzitutto i seguenti parametri di gestione fuori intervallo che devono essere presi in considerazione durante il funzionamento del sistema.
-
Parametri fisici: Questi parametri sono principalmente parametri di input del sistema, che includono parametri di eccitazione, parametri operativi durante l'elaborazione di acquisizione e parametri di risultato al termine dell'elaborazione.
-
Parametri delle risorse: questi parametri riguardano principalmente le risorse di circuiti, dispositivi e unità funzionali del sistema, come la capacità di memoria, la lunghezza dell'unità di memorizzazione e la profondità di impilamento.
-
Parametri applicativi: questi parametri applicativi compaiono spesso come condizioni di utilizzo di alcuni microcontrollori e unità funzionali. Parametri di processo: si riferiscono ai parametri che cambiano in modo ordinato durante il funzionamento del sistema.
2.Come migliorare l'efficienza del codice di programmazione in linguaggio C
L'utilizzo del linguaggio C per la programmazione di microcontrollori è una tendenza inevitabile nello sviluppo e nell'applicazione di questi dispositivi. Per ottenere la massima efficienza nella programmazione in C, è fondamentale familiarizzare con il compilatore C utilizzato. Innanzitutto, è consigliabile testare il numero di righe di codice assembly corrispondenti a ciascuna compilazione in C, in modo da poter valutare con precisione l'efficienza. In futuro, si potrà utilizzare l'istruzione con la maggiore efficienza di compilazione. Ogni compilatore C presenta delle differenze, pertanto anche l'efficienza di compilazione varierà. La lunghezza del codice e il tempo di esecuzione di un ottimo compilatore C per sistemi embedded sono superiori solo del 5-20% rispetto alla stessa funzione scritta in linguaggio assembly.
Per progetti complessi con tempi di sviluppo ristretti, è possibile utilizzare il linguaggio C, ma è fondamentale avere un'ottima conoscenza del linguaggio C e del compilatore C del sistema MCU. È necessario prestare particolare attenzione ai tipi di dati e agli algoritmi supportati dal sistema di compilazione C. Sebbene il linguaggio C sia il linguaggio di alto livello più diffuso, i diversi produttori di MCU utilizzano sistemi di compilazione C differenti, soprattutto per quanto riguarda alcuni moduli funzionali specifici. Pertanto, la mancata comprensione di queste caratteristiche può causare problemi durante il debug, con conseguente riduzione dell'efficienza di esecuzione rispetto al linguaggio assembly.
3.Come risolvere il problema anti-interferenza del microcontrolloreIl modo più efficace per prevenire le interferenze è rimuovere la fonte di interferenza e bloccare il percorso di propagazione, ma spesso è difficile farlo, quindi possiamo solo verificare se la capacità anti-interferenza del microcontrollore è sufficientemente elevata. Mentre si migliora la capacità anti-interferenza dei sistemi hardware, l'anti-interferenza software sta ricevendo sempre più attenzione grazie alla sua flessibilità di progettazione, al risparmio di risorse hardware e all'elevata affidabilità.
Il fenomeno più comune di interferenza nei microcontrollori è il reset. Nel caso in cui il programma vada fuori controllo, è possibile utilizzare trap software e watchdog per riportarlo allo stato di reset. Pertanto, la cosa più importante per il software del microcontrollore, al fine di resistere alle interferenze, è gestire lo stato di reset.
In genere, i microcontrollori dispongono di registri di flag che possono essere utilizzati per determinare la causa del reset; inoltre, è possibile memorizzare manualmente dei flag nella RAM. Ogni volta che un programma viene resettato, è possibile determinare diverse cause di reset analizzando questi flag; è anche possibile saltare direttamente al programma corrispondente in base ai diversi flag. Ciò consente al programma di essere eseguito ininterrottamente, senza che l'utente si accorga del reset durante l'utilizzo.
4.Come testare l'affidabilità di un sistema a microcontrolloreUna volta completata la progettazione di un sistema a microcontrollore, saranno necessari diversi elementi e metodi di test per i vari prodotti del sistema a microcontrollore, ma alcuni devono essere testati:
- Verificare la completezza delle funzioni software del microcontrollore.
- Test di accensione e spegnimento
- Test di invecchiamento
- Test come ESD ed EFT
Talvolta, possiamo anche simulare i danni che potrebbero verificarsi durante l'utilizzo da parte dell'uomo. Ad esempio, strofinando deliberatamente la porta di contatto del sistema a microcontrollore con il corpo umano o con un tessuto di abbigliamento, si può testare la capacità antistatica. Oppure, utilizzando un trapano elettrico ad alta potenza in prossimità del sistema a microcontrollore, si può testare la sua resistenza alle interferenze elettromagnetiche.
In sintesi, i microcomputer a chip singolo sono diventati un aspetto importante dello sviluppo e delle applicazioni informatiche. L'importanza fondamentale delle applicazioni dei microcomputer a chip singolo risiede nel fatto che modificano radicalmente le idee e i metodi di progettazione tradizionali dei sistemi di controllo.
La maggior parte delle funzioni che in precedenza dovevano essere implementate tramite circuiti analogici o digitali possono ora essere implementate attraverso metodi software utilizzando microcontrollori. Questo tipo di tecnologia di controllo, in cui il software sostituisce l'hardware, è anche chiamata tecnologia di microcontrollo e rappresenta una rivoluzione nella tecnologia di controllo tradizionale.
Inoltre, durante il processo di sviluppo e applicazione, dobbiamo acquisire competenze e migliorare l'efficienza affinché la tecnologia possa essere utilizzata per una gamma più ampia di scopi.
9
Riepilogo del funzionamento del chip
Le operazioni sul chip sono principalmente operazioni sui registri presenti nel chip stesso. I registri del chip hanno indirizzi univoci mappati sulla memoria, e l'operazione corrispondente corrisponde a tale indirizzo. Quando si analizza un chip, è necessario innanzitutto esaminare il diagramma temporale, quindi comprendere i registri corrispondenti, il loro funzionamento, definire le porte necessarie (che possono essere identificate dal programma) e scrivere le procedure per le operazioni di scrittura e di lettura.
Come scrivere i dati nel chip, come leggerli e quale porta utilizzare per l'ingresso o la lettura (la cosa più importante).
Quando si collegano i chip tramite un bus, è fondamentale comprenderne il protocollo. Il chip collegato al bus I2C controlla principalmente le altre unità tramite questo bus.
1,Un 74hc595 nel reticolo viene utilizzato per la selezione della colonna e gli altri due vengono utilizzati per la selezione del colore. Il reticolo è equivalente a una collezione di diodi,
Il diodo si accende solo quando a un'estremità viene applicato un livello alto e all'altra un livello basso. Semplicemente, selezionando un'estremità in modo diverso, si accenderanno colori diversi.
Selezione della modalità di funzionamento del timer: i quattro bit più significativi impostano il timer T1, mentre i quattro bit meno significativi impostano T0. Le ultime due cifre di ciascuna modalità impostano quindi la modalità di funzionamento. Quando si impostano due timer, prestare attenzione all'uso dell'operatore OR (|). Quando si utilizzano gli interrupt, prestare attenzione a cancellare quelli che devono essere cancellati dopo l'attivazione dell'interrupt.
2,Transceiver per porta seriale: la velocità di trasmissione (baud rate) è generalmente impostata in modalità 2 (ripristino automatico al valore iniziale). Poiché dispositivi diversi hanno diverse capacità di elaborazione dati, l'impostazione della velocità di trasmissione serve principalmente a gestire dispositivi a bassa velocità e a facilitare la comunicazione tra di loro. Il bit del flag di interrupt deve essere azzerato via software. Quando si imposta l'interrupt della porta seriale, indipendentemente dal fatto che venga generato in fase di invio o ricezione, può attivare la funzione di interrupt, quindi è necessario prestare attenzione all'impostazione della funzione di interrupt. (In genere, la configurazione della funzione è a discrezione del sistema, ad esempio un computer host o un computer slave).
Se si utilizza un interrupt per inviare dati, è necessario capire come attivare l'interrupt la prima volta, quindi bisogna prima inviare i dati una volta e poi attivare l'interrupt. È possibile inviare un solo byte alla volta e il bit successivo può essere inviato solo dopo che TI è stato impostato.
3,Il convertitore PCF8591AD ha quattro canali di ingresso. Durante la lettura, il PCF8591 legge il valore di tensione in ingresso corrispondente al canale selezionato. I dati convertiti vengono memorizzati nel chip e successivamente letti. In fase di lettura, viene prima scritto l'indirizzo del chip, poi il sottoindirizzo del dispositivo (0x40|numero del canale) e infine i dati letti.
4,La conversione DA consiste nello scrivere prima l'indirizzo del dispositivo nel chip, poi il sottoindirizzo (0x40) e infine la quantità digitale da convertire. Vengono presentate le informazioni sull'indirizzo del dispositivo nel chip.
5,Sul display LCD, una volta che i dati sono stati scritti e visualizzati, rimarranno sempre visibili senza aggiornamento continuo. Se si desidera modificarli, è necessario reinserirli manualmente.
6,Per il chip di clock ds1302, durante la lettura dei dati, il primo dato viene letto sul fronte di discesa dell'ottavo ciclo di clock; durante la scrittura dei dati, il circuito si prepara per l'uscita successiva. Prestare attenzione al metodo di scrittura del programma e alla posizione del valore di ritorno.
7,Nel DS1302, prima si specifica il registro e poi si scrivono i dati al suo interno. Il registro presente sul chip indica l'indirizzo. (Non ho ancora ben capito il programma di protezione dalla scrittura. Non dovrebbe esserci sempre una scrittura attiva? Perché la protezione dalla scrittura è sempre attiva?)
(Secondo quanto detto dall'utente precedente, è possibile impostare un flag dopo il tempo di inizializzazione. Se questo flag è presente, non è necessario inizializzare il tempo. Tuttavia, se l'alimentazione viene interrotta, la RAM del microcontrollore non può salvare questo flag, quindi è possibile utilizzare la RAM del DS1302 per salvare il flag e leggerlo dopo l'accensione. Anch'io sono un principiante e intendo utilizzare il DS1302 a breve. Non so se questo sia corretto e non l'ho ancora implementato. Vi prego di condividere ulteriori informazioni.)
8,È consigliabile annotare la procedura di inizializzazione, nel caso in cui la si dimentichi in seguito. A volte è utile prestare attenzione a quale bit, quello meno significativo o quello più significativo, viene elaborato per primo durante la lettura o la scrittura, cosa che si può dedurre dal diagramma temporale.
9,Per un ricetrasmettitore a infrarossi, durante la ricezione, il livello del segnale (alto o basso) viene determinato in base all'intervallo di tempo tra due fronti di discesa. Quando si scrive un programma, si utilizza innanzitutto un timer per misurare il tempo, lo si memorizza e poi lo si converte in binario (per saperne di più su come scrivere questo programma, consultate la documentazione, è molto utile).
10,Motore passo-passo: utilizzato principalmente per la commutazione. La coppia del motore passo-passo diminuisce all'aumentare della velocità di rotazione. Viene utilizzato principalmente per l'alimentazione automatica di pezzi lavorati su macchine utensili. Può essere utilizzato anche in posizioni di controllo che richiedono una precisione maggiore.
Il motore passo-passo è un dispositivo a controllo ad anello aperto che converte i segnali elettrici a impulsi in spostamenti angolari o lineari. In condizioni di assenza di sovraccarico, la velocità e la posizione di arresto del motore dipendono unicamente dalla frequenza e dal numero di impulsi del segnale, e non sono influenzate dalle variazioni di carico. Quando il driver del motore passo-passo riceve un segnale a impulsi, aziona il motore passo-passo facendolo ruotare nella direzione impostata con un angolo fisso, chiamato "angolo di passo". La rotazione avviene passo dopo passo con un angolo fisso. Lo spostamento angolare può essere controllato regolando il numero di impulsi per ottenere un posizionamento preciso; allo stesso tempo, la velocità e l'accelerazione di rotazione del motore possono essere controllate regolando la frequenza degli impulsi per ottenere la regolazione della velocità.
11,Servomotore: (servomotore) si riferisce al motore che controlla il funzionamento dei componenti meccanici nel sistema servo. È un dispositivo di trasmissione indiretta che assiste il motore. I servomotori possono controllare la velocità e la precisione di posizione con grande precisione e possono convertire i segnali di tensione in coppia e velocità di rotazione per azionare gli oggetti controllati. La velocità del rotore del servomotore è controllata dal segnale di ingresso e può rispondere rapidamente. Nei sistemi di controllo automatico, viene utilizzato come attuatore e presenta caratteristiche quali una piccola costante di tempo elettromeccanica, elevata linearità, tensione di avviamento, ecc. Può convertire il segnale elettrico ricevuto in uno spostamento angolare o una velocità angolare in uscita sull'albero motore. Si dividono in due categorie: servomotori CC e CA. La loro caratteristica principale è che non c'è rotazione quando la tensione del segnale è zero e la velocità di rotazione diminuisce a velocità costante all'aumentare della coppia. Motore CC: ampia gamma, tutto su auto di piccole dimensioni.
Disclaimer: Questo articolo è riprodotto da "International Electronic Business Information". L'articolo rappresenta esclusivamente il punto di vista personale dell'autore e non quello di Sacco Micro o del settore. È consentito solo per la ristampa e la condivisione, nel rispetto dei diritti di proprietà intellettuale. Si prega di indicare la fonte originale e l'autore in caso di ristampa. Qualora si riscontrasse una violazione del copyright, si prega di contattarci per richiederne la rimozione.
Numero di telefono dell'azienda: +86-0755-83044319
Fax: +86-0755-83975897
E-mail: 1615456225@qq.com
QQ: 3518641314 Responsabile Li
QQ: 332496225 Responsabile Qiu
Indirizzo: Stanza 809, Edificio C, Edificio Tecnologico Zhantao, Viale Minzhi n. 1079, Nuovo Distretto di Longhua, Shenzhen




粤公网安备44030002007346号