Microcontrollori: gli stati di uscita sono costanti o multiplexati?


14

La PWM ovviamente richiede risorse di elaborazione (e quindi non può essere eseguita contemporaneamente con altri processi), ma se dovessi impostare un pin come uscita 5 V o 0 V, questi stati rimangono costanti o vengono ripetutamente "aggiornati" mentre il microcontrollore funziona su altri processi ?

Questo è difficile da spiegare nel testo, quindi ho pensato ad un'analogia con la mia domanda. Immagina di avere un bicchiere in mano e mi viene chiesto di metterlo sul tavolo. Quindi mi viene chiesto di sedermi su una sedia.

Il bicchiere sul tavolo è uno stato. Lascio il bicchiere sul tavolo o lo raccolgo e mi siedo e lo ripeto molto rapidamente in modo da non rendervi conto che il bicchiere è mai stato rimosso dal tavolo?


O forse più semplicemente, il microcontrollore "dimentica", se vuoi, gli stati dei suoi pin a meno che tu non programmi esplicitamente un cambio di stato?

Spero di averlo reso il più confuso possibile.


4
+1 Domanda interessante anche se la tua prima affermazione non è corretta e l'idea dell'hardware PWM è tale che il processore non deve essere coinvolto per tutto il tempo. Ma lascialo così e sono sicuro che qualcuno avrà una buona spiegazione di come funziona.
PeterJ,

Ho pensato che PWM è tale che il processore sta cambiando il tempo di ciclo HIGH / LOW. In tal modo, sembra che il processore sia direttamente coinvolto, almeno nel momento in cui lo stato viene modificato.
Sherrellbc,

1
Per cambiare il duty cycle dal 10% al 20%, la CPU deve essere coinvolta, ma solo per alcuni cicli per cambiare un registro. Per l'hardware PWM dire una volta che è cambiato al 20% anche se la frequenza PWM hardware è 1MHz non influisce più sul processore.
PeterJ,

Hai buoni collegamenti alla documentazione su come funziona il microcontrollore a un livello inferiore? Non capisco i tuoi riferimenti al registro, quindi non posso apprezzare appieno queste risposte.
Sherrellbc,

1
Non molto confuso. Prova di più!
Radagast,

Risposte:


16

Il modo in cui interpreto la domanda non ha nulla a che fare con PWM, mi dispiace se sono fuori strada, ma sembra che tu l'abbia usato solo come esempio.

Praticamente ogni tipo di microcontrollore e dispositivi con I / O usano un latch / FF per pilotare i loro circuiti di uscita. Ciò significa che, quando si imposta uno stato, rimane in quello stato. Non è come la DRAM in cui le statistiche di output devono essere costantemente "aggiornate" per rimanere al loro stato.

Con il tuo esempio di vetro, non ho mai visto alcun hardware che potesse raccogliere e posare ripetutamente il bicchiere sul tavolo. Metterebbe sempre il bicchiere sul tavolo e lo lascerebbe lì fino a quando non viene richiesto un cambio di stato.

Tornando a PWM (nel caso in cui stavi davvero chiedendo di PWM). Indipendentemente dal fatto che tu l'abbia bitbang o che il tuo microcontrollore abbia hardware dedicato come altri post delineati, il blocco I / O è accessibile e modificato solo se viene richiesto un cambio di stato eseguendo il codice o la periferica PWM.


Questa è precisamente la mia domanda, anche se sembra che ai microcontrollori ci sia molto che non capisco di non capire.
Sherrellbc,

3
Tieni il naso nei fogli dati, sperimenta e fai domande. Ne avrai la certezza.
Kris Bahnsen,

11

Il microcontrollore non deve aggiornare le uscite. Una volta impostati mantengono il loro stato indefinitamente (fino a quando il potere non viene rimosso). Mentre nei vecchi processori era necessario il clock per mantenere lo stato del processore, i processori di oggi sono ciò che viene chiamato completamente statico. Ciò significa che l'orologio può effettivamente essere fermato e tutto rimarrà nel suo stato attuale. Questo perché tutti i registri (compresi gli I / O) sono realizzati usando le infradito.


E stiamo facendo progressi! Grazie ha più senso ora. Grazie!
Sherrellbc,

10

La maggior parte dei microcontrollori moderni ha una periferica PWM hardware dedicata che si occupa del PWM, un'analogia molto approssimativa potrebbe essere:

Il core del processore dice alla periferica di: "attiva questo pin a 10kHz e il duty cycle del 50% fino a quando non ti dirò diversamente". Quindi il core è libero di fare altre cose. Può impostare un interruzione, cioè chiedere alla periferica di dirlo quando accade qualcosa di interessante.
Puoi forse pensare al nucleo come al "capo" e alle periferiche come ai lavoratori specializzati. Il core gestisce l'intero programma (legge ogni istruzione e agisce su di esso) e "chiede" alle periferiche di fare vari compiti e avvisare quando li hanno completati.

Nella tua analogia, sarebbe come se un'altra persona tenesse il bicchiere, gli ordini di metterlo sul tavolo mentre sei libero di sederti sulla sedia.

Se il micro non avesse una periferica dedicata, avrebbe dovuto farlo "manualmente" (cioè se stesso) e tenere traccia dello stato dei pin e dei tempi tra i toggle. Ciò significherebbe molti cicli dedicati a cose piuttosto umili che possono essere facilmente gestite da una semplice periferica.

Ecco un diagramma del layout di un popolare microcontrollore a 8 bit, il PIC16F690 . Notare le periferiche disposte in basso:

inserisci qui la descrizione dell'immagine


Non mi rendevo conto che esistessero tali componenti periferici. Quindi questi componenti sono processori piuttosto piccoli? Ha molto senso che esistano cose del genere.
Sherrellbc,

No ai processori, no: le periferiche sono più simili a blocchi hardware dedicati progettati specificamente per eseguire un determinato compito. Ad esempio, un tipico micro avrà periferiche integrate come ADC, PWM, Timer, UART, SPI, ecc.
Oli Glaser

Approfondirò sicuramente più a fondo questo argomento, anche se la mia comprensione di questi sistemi è sicuramente parziale. Avevo l'impressione che l'UC avrebbe fatto tutto il processo. Le "istruzioni" fornite alle periferiche devono essere interpretate. Suppongo che questo non sia il punto in cui non comprendo pienamente.
Sherrellbc,

2
Ho aggiunto un diagramma di un tipico micro - un buon punto di partenza per leggere è il foglio dati, che ho anche collegato.
Oli Glaser,

@sherrellbc, è qui che un processore e un microprocessore sono diversi. In un µC, si può vedere che ad esempio RAM, ROM, ALU, porta seriale ecc. Sono tutti integrati nello stesso chip. In un PC, sai che il processore è collegato esternamente a tali circuiti.
chwi,

5

Stai facendo alcune ipotesi che non sono esattamente valide. Inoltre, sì, hai reso la domanda il più confusa possibile. Sul serio.

PWM può essere fatto contemporaneamente con altri processi. Se eseguito nel software, si utilizzano gli interrupt del timer per generare il segnale PWM su un pin GPIO. Possono essere eseguiti altri interrupt e il processo principale sta facendo cose non correlate. Inoltre, molti MCU possono eseguire il PWM direttamente nella periferica timer, liberando l'MCU per fare altre cose.

Per quanto riguarda i pin I / O, sono multiplexati. Ma hai il controllo di come sono multiplexati, quindi non è davvero un problema.


Capisco il tuo commento riguardo agli interrupt del timer PWM - ha senso. In questo modo il processore è coinvolto solo nel momento in cui cambia lo stato di uscita. Anche se, dici che i pin I / O sono multiplexati, quindi se programmo il controller per emettere un pin HIGH e quindi eseguo qualche altro calcolo non correlato, il pin viene momentaneamente impostato su LOW mentre vengono eseguiti tali processi?
Sherrellbc,

@sherrellbc Hai il controllo del multiplexing dei pin. Normalmente li configuri all'avvio e non li cambi dopo. Quindi non sarebbe "momentaneamente basso", a meno che tu non gli dica espressamente di farlo.

Mi scuso se aggiungendo l'esempio PWM ho confuso i lettori. Lo scopo di questa domanda era determinare se un controller I / O impostato su HIGH è multiplexato dal controller (ovvero perché deve costantemente "aggiornare" gli stati dei pin e fare solo una cosa alla volta). Tuttavia, ora mi rendo conto che nei microcontrollori c'è molto che non capisco (periferiche). Quindi mi sembra che la risposta sia no, i pin di uscita sono impostati su uno stato e rimangono in quello stato perennemente fino a quando non vengono modificati.
Sherrellbc,

1

La maggior parte dei pin I / O sui microcontrollori sono multifunzione, ma non li definirei multiplexati.

Ad esempio, diversi pin su un AVR possono essere utilizzati come input digitali, output digitali o input analogici. Normalmente selezioneresti la funzione desiderata come parte dell'inizializzazione del programma, e non la cambierei in seguito (anche se potrei vedere qualche motivo per cambiare un ingresso analogico in un ingresso digitale per visualizzare lo stesso segnale.)

Per le uscite digitali, una volta che i pin sono impostati come uscite, manterranno l'ultimo valore che il processore ha scritto loro - non è necessario "aggiornarli" periodicamente.


Sarebbero multiplexati se il processore impostasse il valore, rimuovesse quel valore, eseguisse altre istruzioni e quindi eseguisse il loop e reimpostasse il valore originale. Questa è l'essenza della mia domanda. Tuttavia, dalle risposte di cui sopra ci sono vari periperali che formano queste funzioni e il processore non ha nulla a che fare con esso fino a quando non viene indicato di fare diversamente; Non ne avevo idea. Molto da imparare. Grazie per la risposta.
Sherrellbc,

1

In un semplice esempio di periferica PWM hardware a microcontrollore, un contatore a 8 bit potrebbe essere collegato a un comparatore digitale a 8 bit. Il microcontrollore carica un numero nel comparatore e incrementa il contatore con l'orologio di sistema o una versione divisa in pre-vendita. il contatore verrebbe quindi eseguito liberamente, contando da 0 a 255 e tornando a zero ripetutamente. Il comparatore avrebbe un'uscita che indica se il valore del contatore è maggiore o minore del valore del comparatore. Questo diventerebbe l'uscita PWM. Il periodo del PWM sarebbe il tempo impiegato dal contatore per completare un ciclo di conteggio e il ciclo di lavoro sarebbe quale frazione del conteggio totale è rappresentata dal valore del comparatore. Il codice del microcontrollore non avrebbe altro da fare se non impostare inizialmente l'hardware e modificare i dati del comparatore quando si desidera una modifica pwm. Il PWM emetterebbe un flusso continuo di impulsi PWM senza l'attenzione del processore.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.