Ek GPIO'ları dijital I / O olarak mı kullanıyorsunuz?


11

umarım bu soru oldukça basittir, ancak hızlı googling'im cevabı bulamadı.

RPi'nin kullanabileceğim birkaç GPIO'nun yanı sıra özel GPIO'lar (SPI, I2C, UART, vb.) Olduğunu biliyorum. Projemde aslında normal GPIO'ları tükeniyorum ve SPI, I2C ve diğer GPIO'ları da "normal" GPIO'lar olarak kullanmak istiyorum. Bunun yapılabileceğini biliyorum, ama sanırım onları nasıl SPI / I2C / etc modlarında çalışmayacak şekilde ayarlayabileceğimden emin değilim ve sadece normal GPIO'lar olarak çalışıyorum.

Bunları düzgün bir şekilde ayarlamak için herhangi bir şey yapmam gerekir mi?

Yanıtlar:


10

Kısa cevap

Hayır, sen (neredeyse) bilmiyorsun. Aslında tam tersi - onları GPIO olmayacak, ancak özel amaçlarına hizmet edecek şekilde ayarlamanız gerekiyor. Tek istisna UART pinleridir. Ayrıca ve I²C pimleri bir şekilde özel.

UART pimleri

Konsol için UART pinleri çekirdek tarafından kullanılır. Kullanıma hazır olmalarını istiyorsanız, sistemi kullanmamaları için yapılandırmanız gerekir:

  • düzenleme /boot/cmdline.txtve kaldırma console=ttyAMA0,115200ve kgdboc=ttyAMA0,115200parametreleri
  • satırı düzenleyin /etc/inittabve yorum yapın ( #karakteri önüne koyun ):

    T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100
    
  • RaspberryPi'nizi yeniden başlatın

Şimdi pimler sistem tarafından kullanılmamalıdır ve bunları kullanabilirsiniz

I²C pimleri

I²C pimlerinde yerleşik 1.8k çekme dirençleri bulunur. Engelli olamazlar. Bu, bazı durumlarda pimlerin kullanımını sınırlar (ancak diğerlerinde kullanışlı olabilir).

Ek çözümler

GPIO pinlerinde azalıyorsa, bazı ek (ancak basit) donanımları kullanarak bazen numarasını kolayca genişletebilirsiniz. Örneğin çıktı için hem satın almak hem de kullanmak için shift registersveya I²C I/O expanders(`` I²C veri yolu genişleticileri '' olarak da bilinir) kullanabilirsiniz. Kullanımının bir örneğini burada bulabilirsiniz .

PFC8574(veya bu ailenin benzeri) o kadar popüler ki sizin için tüm iletişimi işleyen kullanıma hazır bir çekirdek modülü var ( resmi RaspberryPi çekirdeğinde etkin değil, kullanmak için kendi çekirdeğinizi derlemeniz gerekecek ). Modül çağrılır gpio_pcf857x, modprobe(I²C sürücüleri ile birlikte) yüklemeniz ve çipi I²Cveri yoluna bağlamanız şartıyla , şu şekilde etkinleştirebilirsiniz:

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

nerede pcf8574gerçek çip adıdır (bu modül birkaç farklı cips gibi işleyebilir pca967xve max732x) ve 0x27onun adresi üzerinde I²C(o kablolama yaparken çip adresini yapılandırabilirsiniz).

Bu, /sys/class/gpio/dizinde, sysarabirimi (örneğin wiringPiSetupSys()wiringPi'de) kullanmanız koşuluyla , bunları RaspberryPi'deki diğer GPIO bağlantı noktaları ile aynı şekilde kullanmanıza olanak tanıyan girişler oluşturur . Ne yazık ki, Python'un RPi.GPIOmodülü bu modu desteklemediğinden, bu pinleri bu kütüphane ile kullanamaz. Pimler 248-255 veya benzeri yüksek sayılara sahip olacaktır.

Not: PCF8574 olduğu sinking current- 20mA olduğu kadar (düşük halde kabul) o sürücü lavabo verebilir ancak yüksek devlet geçmesi ancak kaynak 0.1 mA. Bu, genellikle ters mantıkta kullanacağınız anlamına gelir, yani +3.3V -> LED -> RESISTOR -> PCF8574_PIN.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.