Comprensione GPIO analogica e digitale


11

Sto cercando di capire GPIO e ho letto un sacco di post sul blog diversi e penso di essere vicino a ottenerlo, ma ancora lottando con alcune cose.

Ho visto alcuni riferimenti a GPIO in grado di funzionare solo con valori binari, ma altri post che dicono che il valore può essere compreso tra 0 e 255. Suppongo che questa sia la differenza tra GPIO analogico e digitale. È corretto? È possibile che un singolo pin GPIO possa agire sia come analogico che digitale?


Come seguito ad alcune delle risposte ... Il valore binario si riferisce a un input o output digitale. Può essere un 1 (che dovrebbe essere la tensione della sorgente, chiamata "hi" o "on") o 0 (che significa 0V, chiamato "lo" o "off"). Questa è una risoluzione a 1 bit. Un ingresso analogico può essere un intervallo, in genere da 0 V a VCC (la tensione della sorgente). Un chip digitale con risoluzione a 8 bit convertirà questo ingresso analogico in un segnale digitale a 8 bit nell'intervallo 0 - 255 (binario: 00000000 - 11111111), perché 2 ^ 8 - 1 = 255 (binario significa base 2, l'8 proviene dall'8 bit parte e "- 1" perché le cose digitali iniziano a contare da 0, non da 1).
Kurt E. Clothier,

Risposte:


14

Un pin GPIO è un pin 'input / output' generico. Questo è per impostazione predefinita solo alto o basso (livelli di tensione, alto come la tensione di alimentazione del microcontrollore, basso di solito a terra o 0 V). Ma i livelli di "alto" e "basso" sono generalmente indicati come tensioni in proporzione alla tensione di alimentazione. Pertanto, qualsiasi cosa al di sopra del 66% della tensione di alimentazione è considerata un livello logico "alto", il che significa che alcuni dispositivi a bassa tensione possono comunicare con dispositivi ad alta tensione purché i livelli rientrino in ciò che è considerato "alto". Un microcontrollore o ricevitore GPS a bassa potenza da 1,8–2,7 V, ad esempio, avrà difficoltà a comunicare direttamente con un microcontrollore a 5 V perché ciò che il dispositivo a bassa tensione vede come "alto" il dispositivo ad alta tensione non penserà che sia alto. Questo serve per usare GPIO come pin di input,

A volte è possibile utilizzare un pin SINGOLO per valori "analogici", configurando il pin GPIO per essere utilizzato da altri dispositivi di bordo come un convertitore "analogico a digitale" (ADC). Il pin è impostato su un canale sull'ADC e questo funge ora da input per l'ADC, non un normale pin GPIO. È quindi possibile impostare l'ADC per prelevare un campione e leggere il valore del registro dei risultati dell'ADC per numeri come 0-1024 se è una risoluzione di 10 bit.

Come qualcuno ha già detto, un pin GPIO potrebbe essere utilizzato nel software per dare l'effetto di un segnale PWM (Pulsed Width Modulation), di solito a bassa velocità per la commutazione GPIO. La maggior parte dei microcontrollori ha generatori PWM dedicati che possono essere configurati per utilizzare un pin GPIO come pin di uscita e questi sono molto veloci e molto più stabili rispetto all'utilizzo di software per controllare GPIO per generare un segnale PWM. Le PWM sono utilizzate per segnali in stile 'medio' o '%' e ti permettono di fare cose come luci fioche e controllare la velocità di un motore.

I pin GPIO sono generalmente disposti in gruppi, chiamati Ports. Nei controller di piccole dimensioni, potrebbero essere architetture a 8 bit, quindi le porte sono spesso raggruppate in molte 8 e i loro valori possono essere letti tutti contemporaneamente leggendo un 'registro dati' che rappresenta i valori logici alti / bassi di quelli perni. Allo stesso modo, è possibile impostare i pin come output e quindi scrivere 8 bit in un registro dati e il controller GPIO dei microcontrollori leggerà i valori modificati del registro e spingerà il pin in alto o tirerà il pin in basso a seconda del valore appena impostato.

Nei controller più recenti come ARM Cortex A8 e A9 come nel Raspberry Pi e BeagleBone, i loro controller GPIO e le diverse opzioni sono molto complicati. Usano un'architettura a 32 bit, quindi la maggior parte dei pin GPIO sono disposti in blocchi a 32 pin, anche se non tutti sono effettivamente utilizzabili (alcuni potrebbero essere dedicati o non abilitati). BeagleBone (su cui ho lavorato prima) ha alcune opzioni davvero fantastiche per la sua grande quantità di pin, e talvolta dovrai usare uno strumento 'pin mux', che ti consente di impostare le modalità speciali di alcuni pin per cose come PWM, acquisizione impulsi, uscite timer, ingressi canali analogici (ADC) e persino (sul BeagleBone) mappatura ai sotto-processori industriali disponibili sul core ARM, ma sono considerati processori indipendenti e necessitano di una propria mappatura dei pin per essere connesso al mondo esterno.


Potresti fare un esempio di come "SINGOLO pin può essere usato per valori" analogici "?
Pavel,

@ JimJim2000 solo un flusso di accensione / spegnimento o PWM corretto attraverso un filtro RC per produrre una tensione analogica uniforme "media" sull'uscita.
KyranF,

7

Molto probabilmente ti riferisci all'uscita analogica di Arduino, che spesso utilizza un pin GPIO con software PWM . GPIO in genere ha tre stati. Uscita alta, Uscita bassa e Ingresso / Alta-Z (alta impedenza, dove non influisce sull'uscita).

PWM commuta rapidamente un'uscita da Uscita alta a Uscita bassa (periodo), per creare una media (Duty Cycle), consentendo qualcosa che assomiglia a un valore analogico. Attivando un GPIO binario con un duty cycle del 50% (o 128), l'output è ancora binario, ma in media a metà tra High e Low.

Pensa a una lampadina. Lo vedi acceso o spento. Ma si accende e si spegne davvero 60 volte al secondo, così velocemente che non si nota che lampeggia molto velocemente. Ma accendi e spegni manualmente la lampadina molto lentamente e noti che lampeggia. Per 255, significa 100% acceso e meno di 255 è una frazione del 100% acceso.

Ecco come un GPIO binario può agire come un pin analogico a 255 stati.


Grazie @Passerby, è molto più chiaro. Non sto specificamente guardando arduino, ma lampone pi e beaglebone. Quello che stai dicendo significa che qualsiasi pin può avere un valore compreso tra 0 e 255? Mi sto confondendo tra la documentazione che dice che un valore può essere binario rispetto ad altri che dicono che un valore può essere 0-255.
pedalò

1
@pedalpete RPI e Arduino hanno molte sovrapposizioni tra folla e idee. Ma un PWM da 0 a 255 è arbitrario. Può essere compreso tra 0 e 65535 o tra 0 e 16. 0 tra 255 è 8 bit di precisione. Dove 255 o 65535 o qualunque sia il 100%. Un GPIO ha solo Binary On e Off, ma usi PWM per fingere che possa avere più di un semplice on o off. È un'illusione ottica utile e intenzionale.
Passante dal

2
Una lampadina non si accende e si spegne a 60 volte al secondo. Il filamento si riscalda e rimane riscaldato
Scott Seidman,

0

Un bit GPIO può essere 0 o 1. Una porta GPIO a 8 bit, composta da 8 bit consecutivi, può variare tra 00000000 e 11111111 o 255 decimale. Questo ha poco a che fare con il concetto di "analogico"


Grazie Scott, anche se penso di essere più confuso ora che prima. Che cos'è una porta GPIO? Se ho un pin GPIO (esempio su un Raspberry Pi), ogni pin è considerato una porta? In tal caso, ciascun pin è in grado di funzionare con detto intervallo 0-255 decimale?
pedalò

Ignora la mia ultima domanda, vedo cosa intendi ora per porta.
pedalò
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.