Usi GPIO aggiuntivi come I / O digitali?


11

speriamo che questa domanda sia piuttosto semplice ma il mio rapido googling non ha trovato la risposta.

So che l'RPi ha diversi GPIO che posso usare e GPIO specializzati (SPI, I2C, UART, ecc.). Nel mio progetto sto effettivamente esaurendo i GPIO regolari e vorrei usare SPI, I2C e altri GPIO anche come GPIO "regolari". So che questo può essere fatto, ma credo di non essere sicuro di come configurarli per non funzionare in modalità SPI / I2C / etc e semplicemente come GPIO regolari.

Devo fare qualcosa per configurarli correttamente per questo?

Risposte:


10

La breve risposta

No, tu (quasi) non lo fai. In realtà è il contrario: devi impostarli non per essere GPIO ma per servire al loro scopo speciale. L'unica eccezione sono i pin UART. Anche i pin I²C sono in qualche modo speciali.

Pin UART

I pin UART sono usati dal kernel per la console. Dovrai configurare il sistema in modo che non li usi se vuoi che siano disponibili per il tuo utilizzo:

  • modifica /boot/cmdline.txte rimuovi console=ttyAMA0,115200e kgdboc=ttyAMA0,115200parametri
  • modifica /etc/inittabe commenta (metti il #carattere davanti) la riga:

    T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100
    
  • riavvia il tuo RaspberryPi

Ora i pin non dovrebbero essere usati dal sistema e puoi usarli

Pin I²C

I pin I²C dispongono di resistori pull-up 1.8k integrati. Non possono essere disabilitati. Ciò limita l'utilizzo di tali pin in alcune situazioni (ma può essere utile in altre).

Soluzioni aggiuntive

Se i pin GPIO sono in esaurimento, a volte puoi facilmente estenderne il numero utilizzando hardware aggiuntivo (ma semplice). Ad esempio, per l'output, è possibile utilizzare shift registerso I²C I/O expanders(chiamato anche `espansori bus I²C), sia facilmente acquistabili che utilizzabili. Puoi trovare un esempio del suo utilizzo qui .

PFC8574(o simili di questa famiglia) sono così popolari che esiste un modulo kernel pronto all'uso che gestisce tutte le comunicazioni per te ( non è abilitato nel kernel ufficiale RaspberryPi, dovrai utilizzarlo per compilarlo ). Il modulo viene chiamato gpio_pcf857x, a condizione che sia stato caricato con modprobe(insieme ai driver I²C) e che il chip sia collegato al I²Cbus, è possibile attivarlo in questo modo:

echo pcf8574 0x27 > /sys/class/i2c-adapter/i2c-0/new_device

dove si pcf8574trova il nome del tuo chip (questo modulo può gestire alcuni chip diversi come pca967xe max732x) ed 0x27è il suo indirizzo I²C(puoi configurare l'indirizzo del chip quando lo colleghi).

Ciò creerà voci nella /sys/class/gpio/directory che ti consentiranno di usarle allo stesso modo delle altre porte GPIO in RaspberryPi, a condizione che tu stia utilizzando l' sysinterfaccia (ad esempio wiringPiSetupSys()in cablaggioPi). Sfortunatamente, il RPi.GPIOmodulo di Python non supporta questa modalità, quindi non sarà in grado di usare questi pin con questa libreria. I pin avranno numeri alti come 248-255 o simili.

Nota: PCF8574 è sinking current- può fornire un sink di unità (accetta in stato basso) fino a 20 mA, ma può generare solo 0,1 mA in stato alto. Ciò significa che di solito lo userai in logica inversa, cioè +3.3V -> LED -> RESISTOR -> PCF8574_PIN.

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.