Sử dụng tất cả các chân Như I / O kỹ thuật số


10

Tăng số lượng chân kỹ thuật số

Có nhiều bài viết giải thích cách sử dụng nhiều hơn chỉ các chân tiêu chuẩn trên các arduinos khác nhau nhưng không ai trong số họ giải thích các giới hạn và các sản phẩm đúng.

nhập mô tả hình ảnh ở đây

Arduino Uno:

1. Bạn có thể sử dụng các chân tương tự

Pin 14 = Analog in 0
Pin 15 = Analog in 1
Pin 16 = Analog in 2
Pin 17 = Analog in 3
Pin 18 = Analog in 4
Pin 19 = Analog in 5

digitalWrite(14,HIGH);
or
digitalWrite(A0,HIGH);

2.Bạn không thể sử dụng cả SDA, SCL & A4, A5 vì về cơ bản chúng giống nhau (18,19).

3. Bạn cũng có thể sử dụng TX / RX.

"Đừng làm điều đó, bạn phá vỡ giao tiếp nối tiếp ..."

"Không bao giờ sử dụng chân 0 và 1"

"bạn không thể sử dụng Ghim TX / Rx"

Bạn có thể ... nhưng bạn cần phải đề phòng. Những cái nào?

Nó nên có phần mềm nối tiếp qua USB, phải không?

Hay tôi phá vỡ nối tiếp USB?

Có vấn đề về Chip bên trong nếu tôi sử dụng TX / RX không?

Khi tôi sử dụng các chân TX / RX trong mã, có lẽ tôi không nên sử dụng Serial.print()?

Điều gì xảy ra nếu tôi quên xóa Serial.print()sau khi tải lên mã sử dụng chân 0,1?

Làm thế nào để thiết lập lại phần cứng arduino / bootloader nếu có sự cố?

Vì có nhiều Arduino khác sử dụng các chip khác nhau, điều trên có hợp lệ với tất cả các chip Atmel không?

Vì vậy, những gì tôi biết trước khi sử dụng TX / RX hoặc có thể các chân analog khác?

Có bộ chuyển đổi giá rẻ, trình điều khiển pwm, trình điều khiển led, spi, i2c và nhiều ic khác để mở rộng I / O của bạn


Nhưng nếu không có vấn đề gì lớn thì điều đó có nghĩa là arduino có 20 chân I / O ...

Về mặt lý thuyết bạn có thể kiểm soát:

17x3 = 51 = 17 RGB leds (multiplexing, pwm sourcing&sinking);
14x6 = 84 leds (multiplexing, pwm on 6 rows/colums );
10x10 = 100 leds (multiplexing, high low);
20x(20-1) = 380 leds (charlieplexing, high low);
// yes it would flicker

Sửa lỗi cho tôi nếu tôi sai. Điều đó có nghĩa là bạn có thể điều khiển 380 "Dù" bằng cách sử dụng điốt và một arduino.

Câu trả lời:


8

Vấn đề chính là với các chân 0 và 1.

Nhiều chân có nhiều chức năng được gán cho chúng, chẳng hạn như A4 và A5 cũng là chân I2C, chân 10/11/12/13 cũng là chân SPI, v.v. Nhưng chân 0 và 1 là chân đa chức năng duy nhất thực sự có một cái gì đó gắn liền với họ trên bảng.

Tất cả các chân khác, trong khi là đa chức năng, có chức năng của chúng được xác định cơ bản bởi những gì bạn gắn vào chúng. Vì các chân 0 và 1 đã được gắn trên bo mạch với chip giao diện USB, nên khả năng sử dụng của chúng có phần hạn chế hơn.

  • Ngay khi bạn bật Nối tiếp trong bản phác thảo ( Serial.begin()) hai chân đó không còn có thể được sử dụng đáng tin cậy cho IO kỹ thuật số.

Điều đó có nghĩa là bạn có thể sử dụng cổng nối tiếp phần cứng hoặc bạn có thể sử dụng các chân cho IO kỹ thuật số, nhưng không phải cả hai.

  • Các thiết bị được kết nối với chân 0 và 1 có thể can thiệp vào kết nối nối tiếp

Điều đó bao gồm tải lên các bản phác thảo. Bạn có dữ liệu nối tiếp đến từ PC trong khi các chân tương tự đang bị ảnh hưởng bởi những thứ khác được kết nối với chúng. Phổ biến nhất là những thứ như các mô-đun GPS kết nối với các chân đó và liên tục gửi dữ liệu nối tiếp. Dữ liệu nối tiếp đó sẽ xung đột với dữ liệu nối tiếp của PC và cả hai sẽ không đến đúng.

  • Làm thế nào để bạn tải lên bản phác thảo nếu serial đang bị can thiệp bởi bản phác thảo của bạn? Làm thế nào để bạn "thiết lập lại" bảng?

Bạn không. Đây không phải là bản phác thảo của bạn can thiệp vào sê-ri, đó là những gì được kết nối vật lý với hai chân IO đang gây nhiễu. Chỉ cần ngắt kết nối hai chân đó khỏi bất cứ thứ gì được kết nối và bạn sẽ có thể tải lên bản phác thảo một lần nữa. Nhiều tấm khiên hiện đang bắt đầu thêm một công tắc nhỏ trên chúng để ngắt kết nối các chân đó để bạn có thể tải lên bản phác thảo mà không cần rút phích cắm. Bạn cũng có thể sử dụng cùng một mẹo với các thiết bị khác mà bạn nối với các chân đó - thêm một cú ném hai cực hoặc ném hai cực (và không sử dụng một vị trí) để dễ dàng cách ly cả hai chân với phần còn lại của phần cứng của bạn khi bạn cần.

  • Điều này có ảnh hưởng đến tất cả các bảng Arduino?

Không, chỉ những người sử dụng chip cầu nối USB sang nối tiếp - đó là những thứ như Uno, Because, Mega, v.v. Các bảng có kết nối USB trực tiếp không sử dụng chân TX và RX để tải lên bản phác thảo - họ sử dụng USB chuyên dụng Chân D + và D-. Đó là những bảng như Leonardo, một số bảng nhỏ hơn (mini? Micro? Tôi quên cái nào), v.v.


"Nhiều tấm khiên hiện đang bắt đầu thêm một công tắc nhỏ". Micro có "chip cầu nối USB"? Điều đó có nghĩa là tôi có thể sử dụng chân 0,1 trên uno nhưng không phải trên micro?
cocco

Bạn có thể sử dụng chúng trên bất kỳ cầu nối nào không có cầu nối USB sang nối tiếp. Uno có một, Mega có một, Mini không có, tuy nhiên bạn cần kết nối bên ngoài với các chân TX / RX để lập trình. Tất cả những người đã ra ngoài. Micro và Leonardo không có, vì vậy bạn có thể sử dụng chúng.
Majenko

Đó là những gì @Nick Gammon đang nói về? Uno và những người khác mà bạn đã viết có điện trở pullup không cho phép bạn sử dụng đúng pin 0 và 1 nhưng Micro không có điện trở pullup và vì vậy chân 0 và 1 hoạt động chính xác và cả usb để tải lên bản phác thảo mới?
cocco

Lần đầu tiên Nick bị nhầm lẫn về điểm đó. Không có bất kỳ điện trở pullup. Có gì có một cặp điện trở nội tuyến nhỏ để ngăn chặn sự cố nếu cả MCU chính và chip USB đều cố gắng lái cùng một dòng đến các cấp độ đối diện cùng một lúc. Bạn có thể thấy chúng trên sơ đồ Uno là RN4A và RN4B.
Majenko

Nếu chip USB tình cờ thử lái pin RX (bạn đã cắm cổng USB và bạn mở kết nối nối tiếp [hoặc có thể nó chỉ cắm vào, không chắc chắn]) thì nó có thể ảnh hưởng đến điện áp trên chân RX không phụ thuộc vào bất cứ điều gì bạn đang thực hiện trong bản phác thảo của mình, vì vậy có thể không an toàn khi sử dụng mã pin đó cho những thứ như charlieplexing.
Majenko

1

Tôi không thể nhận xét do danh tiếng không đủ nhưng tôi muốn chỉ ra rằng pin OP có ít nhất một pin sai!

PB6 phải là PB5

Tôi đã dành khá nhiều thời gian để cố gắng tìm ra lý do tại sao tôi không thể thấy SCK trên phạm vi (SPI bus). Tôi đã làm việc ở cấp độ thấp, không phải với IDE.

Vì đây là bức ảnh đầu tiên xuất hiện khi tôi muốn tránh những rắc rối tương tự với người khác ...


0

20x (20-1) = 380 led (charlieplexing, cao thấp); Sửa lỗi cho tôi nếu tôi sai. Điều đó có nghĩa là bạn có thể điều khiển 380 "Dù" bằng cách sử dụng điốt và một Arduino.

Đầu tiên, con số 380 là chính xác cho 20 chân (20 2 - 20) tuy nhiên chân 0 và 1 được kết nối với điện trở kéo lên trên Atmega16U2, vì vậy chúng không bao giờ thực sự ở 0V. Nếu bạn tải một bản phác thảo trống, bạn sẽ đo 5 V trên các chân 0 và 1.

Thứ hai, bạn không thể lái 380 "whatevers", bạn có thể lái 380 đèn LED qua Charlieplexing. Thuộc tính của đèn LED, dòng điện đó chỉ chảy một chiều qua nó, rất quan trọng đối với cách thức hoạt động của nó.

Câu hỏi liên quan Có cách nào để có nhiều hơn 14 chân đầu ra trên arduino không?


Đầu tiên: điều gì xảy ra nếu tôi đặt 2 đèn led đảo ngược (có điện trở) trên chân 0 và 1, đặt chân 0 pin cao 1 độ trễ thấp 1 giây và đặt chân 0 thấp và pin 1 độ trễ cao 1 giây?
cocco

Thứ hai: Theo "whatevers", ý tôi là ... công tắc nhấp, công tắc sậy, cảm biến hoặc mọi loại kết hợp đầu ra đầu vào hỗ trợ mức cao thấp. Electronicdesign.com/site-files/electronicdesign.com/files/ giết được thực hiện với điốt.
cocco

Vâng, không thực sự. Charlieplexing là một hình thức ghép kênh, vì vậy trừ khi bạn muốn các công tắc của mình nhấp như điên, nó sẽ không thực sự hiệu quả với chúng. Và đó là một tình huống đầu ra, vì vậy bạn sẽ không làm đầu vào, như bạn nghĩ. Tôi đề nghị bạn đọc các liên kết khác. Các thanh ghi thay đổi, hoặc các bộ mở rộng cổng, thực tế hơn Charlieplexing ở đây.
Nick Gammon
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.