Chẳng hạn, nếu bạn có một Arduino với 4 chân IO kỹ thuật số, làm thế nào bạn có thể thắp sáng độc lập> 4 đèn LED, hoặc đọc trạng thái của> 4 nút?
Chẳng hạn, nếu bạn có một Arduino với 4 chân IO kỹ thuật số, làm thế nào bạn có thể thắp sáng độc lập> 4 đèn LED, hoặc đọc trạng thái của> 4 nút?
Câu trả lời:
Một thanh ghi thay đổi, chẳng hạn như 74595 sẽ cho phép bạn có nhiều đầu ra chỉ với 2 kết nối: pin dữ liệu và pin đồng hồ. Bạn đặt chân dữ liệu thành giá trị tiếp theo bạn muốn di chuyển vào thanh ghi, sau đó xung pin đồng hồ.
Bruno đã trả lời tốt, nhưng tôi muốn ghi lại một vài điều.
Khét tiếng 70 mA
Các 74HC595 thường được sử dụng như I / O mở rộng, và như thường được sử dụng để kiểm soát một loạt các đèn LED. Những gì thường bị bỏ qua là bạn có thể vận hành nó ra khỏi spec theo cách này. Bảng dữ liệu nói rằng tổng nguồn cung hiện tại không được lớn hơn 70 mA, Xếp hạng tối đa tuyệt đối (AMR), vì vậy bạn nên tránh xa điều đó bằng một số lợi nhuận. Do đó, 8 đèn LED ở 10 mA là quá nhiều và ở 20 mA, bạn sẽ vượt quá AMR không dưới 130%! Giới hạn có thể là do công suất hiện tại của các dây liên kết, và khi đó dòng điện quá cao có thể không chỉ làm giảm hiệu suất của bộ phận, mà còn khiến nó bị hỏng vĩnh viễn nếu dây đó bị đứt.
Nhưng đêm qua tôi thức dậy vì tôi có An Idea . Giới hạn 70 mA dành cho cả Icc và dòng điện mặt đất, vậy tại sao không chia tổng số của chúng tôi hoặc 80 mA và để Icc có một nửa của nó và dòng điện mặt đất nửa còn lại? Tất cả những gì bạn phải làm là tham chiếu 4 đèn LED xuống đất (hoạt động ở mức cao) và 4 đến Vcc khác (hoạt động ở mức thấp). Sau đó, hiện tại của trước đây đến từ Icc, hiện tại của những người khác đi xuống đất. Bạn sẽ có thể sử dụng đèn LED 15 mA theo cách này. (Thật đơn giản đến nỗi tôi cảm thấy mình như một thằng ngốc không nghĩ đến điều đó sớm hơn.)
Đồng hồ kết hợp
tôi nghĩ Bruno đã lưu một pin I / O bổ sung bằng cách kết hợp đồng hồ của người đăng ký thay đổi với chốt. Có vẻ như tôi đã giải thích sai câu trả lời của anh ấy. Tôi vẫn muốn mở rộng về tùy chọn này.
Điều gì xảy ra sau đó? Bảng trên trang 5 của biểu dữ liệu cho biết:
nội dung của thanh ghi ca chuyển qua; nội dung trước đó của thanh ghi thay đổi được chuyển sang thanh ghi lưu trữ và các giai đoạn đầu ra song song
(đánh dấu bằng tôi)
Vì vậy, đó không phải là dữ liệu mới mà là dữ liệu trước đó đang được chốt. Không phải là một vấn đề thực sự, chỉ cần đảm bảo thay đổi một bit giả để thêm dữ liệu cuối cùng, hoặc mọi thứ sẽ sai một pin.
Kết hợp đồng hồ cũng có nghĩa là các đầu ra sẽ chuyển đổi mọi lúc trong khi bạn chuyển dữ liệu mới vào. Chức năng của chốt thực sự là để tránh điều đó. Trong nhiều trường hợp, điều này sẽ không thành vấn đề, nếu bạn có thể làm nhanh, nhưng trong trường hợp xấu nhất bạn có thể nhận được các hiệu ứng không mong muốn. Trường hợp xấu nhất có thể là sử dụng 74HC595 để ghép một màn hình ở tần số quét rất cao + có chuỗi thanh ghi dịch chuyển rất dài + có tất cả 1 ngoại trừ một 0, đèn LED tắt + phòng tối. Vì đèn LED nhìn thấy tất cả 1 người đi qua thường xuyên trong một căn phòng tối, nó có thể phát sáng rất yếu.
Hoặc nếu bạn kết hợp ghép kênh tần số cao đó với đầu ra điều khiển rơle. Tất cả các số 0 và sau đó là 1 cho rơle có thể có nghĩa là đầu ra của rơle không đủ dài để kéo vào.
Cấp, đó là những trường hợp cực đoan, nhưng tôi sẽ giữ đồng hồ nối tiếp và chốt tách biệt bất cứ khi nào có thể nếu bạn muốn ghép kênh, hoặc nếu không có tốc độ cập nhật cao.
Tôi đồng ý với Ignacio về việc sử dụng 74XX595, đăng ký song song ra ngoài để mở rộng đầu ra, nhưng thực sự bạn sẽ cần 3 kết nối, một cho dữ liệu , một cho đồng hồ và một chốt cho phép sẽ chuyển dữ liệu từ thanh ghi dịch chuyển nội bộ đến các chốt đầu ra.
Để mở rộng các đầu vào, bạn có thể sử dụng 74XX165, song song trong thanh ghi dịch chuyển ra nối tiếp, điều này sẽ cho phép có tối đa 8 nút trên mỗi 74XX165.
Điểm hay của phương pháp này là bạn có thể tạo chuỗi nhiều thanh ghi thay đổi cho phép tăng số lượng đầu vào hoặc đầu ra, và tốt hơn, bạn có thể kết hợp 74XX595 và 74XX165 cho phép và bạn có bất kỳ số lượng đầu vào hoặc đầu ra nào.
Bên cạnh đó, bạn có thể chia sẻ tín hiệu đồng hồ và chốt giảm số lượng kết nối cần thiết và đơn giản hóa rất nhiều phần mềm. Bằng cách này, bạn sẽ chỉ cần 4 kết nối cho bất kỳ số lượng nào của bất kỳ thanh ghi thay đổi này:
Khi tôi đang tìm kiếm một sơ đồ, tôi tìm thấy trên trang web này một cách rất thông minh để giảm xuống còn 3 số lượng kết nối cần thiết. Nó bao gồm việc sử dụng cùng một pin cho đầu vào và đầu ra dữ liệu.
Phần mềm sẽ làm một cái gì đó như thế này cho mỗi xung đồng hồ:
Nick đề cập đến các bộ mở rộng I / O và chúng chắc chắn đáng để xem xét. Digikey liệt kê hơn một nghìn trong số họ, tôi sẽ chọn một cái có giao diện I2C làm ví dụ, vì điều đó đòi hỏi ít chân I / O nhất; tối thiểu hai.
NXP PCA9505 có 40 chân I / O có thể cấu hình, tương đương với năm 74HC595. Đó là một giải pháp đắt hơn một chút nhưng bạn có nhiều chức năng hơn cho điều đó:
Đọc thêm các bộ
mở rộng GPIO , tập tài liệu NXP tập dữ liệu
PCA9505
Đối với giải pháp không có thêm IC, bạn có thể sử dụng các kỹ thuật như Ghép kênh và Charliplexing :
Ghép kênh (không có điện trở giới hạn hiện tại được hiển thị):
Cách thức ghép kênh hoạt động khá đơn giản - trong ví dụ trên, nếu chúng ta muốn bật đèn LED1, chúng ta đặt chân C1 thành đầu ra cao và PIN R1 thành đầu ra thấp, tất cả các chân khác có thể cao hoặc Hi-Z (đặt thành đầu vào, cao trở kháng làm cho chúng trông "bị ngắt kết nối")
Nếu chúng ta muốn bật đèn LED5, chúng ta đặt chân C2 ở mức cao và R2 ở mức thấp.
Số lượng chân cần thiết để lái x đèn LED có thể được xử lý bằng 2n chân cho n² đèn LED, vì vậy, ví dụ với 16 đèn LED chúng ta cần (√16) * 2 = 8 chân.
Charlieplexing:
Bố cục sơ đồ thay thế (gọn gàng hơn) (được đề xuất bởi Supercat):
Điều này phức tạp hơn một chút, nhưng sử dụng ít chân hơn để điều khiển số lượng đèn LED cao hơn. Ví dụ, chúng ta chỉ có thể sử dụng 5 chân để lái 20 đèn LED như trong ví dụ trên (so với ít nhất 10 chân với ghép kênh ma trận "bình thường" (không bị nhầm lẫn với việc sử dụng IC trong trường hợp số lượng chân cần là log2 (ĐÊM).
Đối với một giải pháp bên ngoài, bạn có thể sử dụng những thứ như Thanh ghi Shift hoặc Bộ ghép kênh như 74HC595 và 74HC151.
Một thanh ghi thay đổi có một luồng dữ liệu đầu vào nối tiếp có đồng hồ và đầu ra song song (Nối tiếp song song SIPO) hoặc ngược lại (PISO)
Chúng thường có 8 đầu ra (hoặc đầu vào) nhưng bạn có thể xâu chuỗi bao nhiêu tùy thích để kéo dài nhiều thứ. Mặt trái là tốc độ bạn có thể cập nhật được chia cho số lượng đầu ra trên mỗi đầu vào (ví dụ: cho một thanh ghi 8 đầu ra, nếu bạn có đồng hồ đầu vào 8 MHz, bạn có thể cập nhật ở mức 1 MHz, cho 16 đầu ra 500kHz, v.v.)
Những kỹ thuật này có thể làm việc ngược lại cho đầu vào quá.