Sử dụng GPIO bổ sung làm I / O kỹ thuật số?


11

hy vọng câu hỏi này khá đơn giản nhưng sự nhanh chóng của tôi không tìm thấy câu trả lời.

Tôi biết rằng RPi có một số GPIO mà tôi có thể sử dụng cũng như các GPIO chuyên dụng (SPI, I2C, UART, v.v.). Trong dự án của tôi, tôi thực sự đang hết GPIO thông thường và muốn sử dụng SPI, I2C và các GPIO khác làm GPIO "thông thường". Tôi biết rằng điều này có thể được thực hiện, nhưng tôi đoán tôi không chắc làm thế nào tôi có thể thiết lập chúng để không chạy trong chế độ SPI / I2C / etc và chỉ chạy như các GPIO thông thường.

Tôi có cần phải làm bất cứ điều gì để thiết lập chúng đúng cách cho việc này không?

Câu trả lời:


10

Câu trả lời ngắn

Không, bạn (gần như) không. Đó thực sự là một cách khác - bạn phải thiết lập chúng không phải là GPIO mà là để phục vụ mục đích đặc biệt của chúng. Ngoại lệ duy nhất là chân UART. Ngoài ra và chân I²C bằng cách nào đó đặc biệt.

Chân UART

Các chân UART được sử dụng bởi kernel cho console. Bạn sẽ phải cấu hình hệ thống không sử dụng chúng nếu bạn muốn chúng có sẵn cho việc sử dụng của bạn:

  • chỉnh sửa /boot/cmdline.txtvà loại bỏ console=ttyAMA0,115200kgdboc=ttyAMA0,115200các tham số
  • chỉnh sửa /etc/inittabvà nhận xét (đặt #ký tự trước nó) dòng:

    T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100
    
  • khởi động lại RaspberryPi của bạn

Bây giờ các chân không nên được sử dụng bởi hệ thống và bạn có thể sử dụng chúng

Chân I²C

Chân I²C có lắp đặt điện trở kéo lên 1,8k. Họ không thể bị vô hiệu hóa. Điều này giới hạn việc sử dụng ghim trong một số trường hợp (nhưng có thể có ích trong những trường hợp khác).

Giải pháp bổ sung

Nếu sắp hết chân GPIO, đôi khi bạn có thể dễ dàng mở rộng số của nó bằng cách sử dụng một số phần cứng bổ sung (nhưng đơn giản). Ví dụ, đối với đầu ra, bạn có thể sử dụng shift registershoặc I²C I/O expanders(còn gọi là bộ mở rộng bus I²C), cả hai đều dễ dàng mua và sử dụng. Bạn có thể tìm thấy ví dụ về việc sử dụng nó ở đây .

PFC8574(hoặc tương tự từ gia đình này) rất phổ biến đến nỗi có một mô-đun hạt nhân sẵn sàng xử lý tất cả các giao tiếp cho bạn ( nó không được kích hoạt trong kernel RaspberryPi chính thức, bạn sẽ cần phải biên dịch kernel của chính mình để sử dụng nó ). Mô-đun được gọi gpio_pcf857x, với điều kiện bạn đã tải nó modprobe(cùng với trình điều khiển I²C) và bạn có chip được kết nối với I²Cxe buýt, bạn có thể kích hoạt nó như thế này:

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

nơi pcf8574là tên con chip thực tế của bạn (mô-đun này có thể xử lý vài chip khác nhau như pca967xmax732x) và 0x27là địa chỉ của nó trên I²C(bạn có thể cấu hình địa chỉ của chip khi dây nó).

Điều này sẽ tạo các mục trong /sys/class/gpio/thư mục cho phép bạn sử dụng chúng giống như các cổng GPIO khác trong RaspberryPi, với điều kiện bạn đang sử dụng sysgiao diện (ví dụ như wiringPiSetupSys()trong WiredPi). Thật không may, RPi.GPIOmô-đun của Python không hỗ trợ chế độ này nên nó sẽ không thể sử dụng các chân này với thư viện này. Các chân sẽ có một số số cao như 248-255 hoặc tương tự.

Lưu ý: PCF8574sinking current- nó có thể cung cấp cho ổ đĩa (chấp nhận ở trạng thái thấp) nhiều như 20mA nhưng nó chỉ có thể nguồn 0,1mA ở trạng thái cao. Điều này có nghĩa là bạn thường sẽ sử dụng nó trong logic đảo ngược, tức là +3.3V -> LED -> RESISTOR -> PCF8574_PIN.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.