Mục lục:

ATtiny84 / 85 SPI Pin giao diện Tái sử dụng: 6 bước
ATtiny84 / 85 SPI Pin giao diện Tái sử dụng: 6 bước

Video: ATtiny84 / 85 SPI Pin giao diện Tái sử dụng: 6 bước

Video: ATtiny84 / 85 SPI Pin giao diện Tái sử dụng: 6 bước
Video: Expand your GPIO! PCF8574 & MCP23008 2024, Tháng bảy
Anonim
ATtiny84 / 85 SPI Pin Giao diện Tái sử dụng
ATtiny84 / 85 SPI Pin Giao diện Tái sử dụng

Hướng dẫn này là phần tiếp theo của hướng dẫn "Gỡ lỗi trong mạch ATtiny84 / 85 với đầu ra nối tiếp" và mở rộng cấu hình phần cứng và phần mềm đó để giải quyết vấn đề sử dụng lại các chân tải lập trình của chương trình ứng dụng. Nhìn chung, giữa phần này và phần 1 có thể hướng dẫn, các chủ đề sau được thảo luận / chứng minh:

Đề tài ATtiny84 ATtiny85
Giao tiếp nối tiếp bằng cách sử dụng lớp SoftwareSerial NS NS
Chia sẻ chân thiết bị giữa ứng dụng và tải xuống NS NS
Pin Thay đổi ngắt NS
Ngắt bên ngoài NS
Ngủ ở chế độ POWER_DOWN; thức dậy gián đoạn NS
Giải quyết lỗi liên kết vectơ ngắt "nhân được xác định" liên quan đến SoftwareSerial NS
Chu trình phát triển trong mạch sửa đổi, tải xuống, gỡ lỗi,… cho các thiết bị ATtiny NS NS

Việc thêm thành phần I / O phần cứng vào một trong các chân dành riêng cho giao diện lập trình SPI đôi khi là OK, đôi khi không. Ví dụ: thêm đèn LED vào MISO chỉ làm cho đèn LED nhấp nháy trong quá trình tải xuống và sau đó nó có sẵn cho ứng dụng. Tuy nhiên, việc thêm bộ rung piezo vào MISO sẽ dẫn đến âm thanh rít khủng khiếp sau đó là lỗi tải xuống.

Tài liệu hướng dẫn này giải thích cách sử dụng bộ ghép kênh 4x2: 1 để "khôi phục" việc sử dụng các chân được gán cho các tín hiệu MISO, MOSI và SCK của giao diện SPI bằng cách bảo vệ chúng trong quá trình tải xuống. Việc sử dụng lại chân RESET yêu cầu thay đổi cầu chì và cách tiếp cận này không được đề cập đến. Việc gán kép các chân được thực hiện bằng cách sử dụng bộ ghép kênh để chuyển đổi giữa các đầu vào ứng dụng và lập trình tùy thuộc vào việc tải xuống có đang diễn ra hay không. Mã và sơ đồ được bao gồm cho cả ATtiny84 và ATtiny85. Cấu hình ATiny84 được giải quyết đầu tiên vì nó có hai cổng I / O và có thể được sử dụng để minh họa một số vấn đề / giải pháp bổ sung. Sau cuộc thảo luận tiny84, các kịch bản tương tự được thảo luận cho ATtiny85.

Bước 1: Phần cứng cần thiết

Hình ảnh
Hình ảnh

Hầu hết các phần cứng cần thiết đã được liệt kê trong phần 1 hướng dẫn nên chỉ phần cứng mới được liệt kê bên dưới.

Tên Nguồn có thể Cách sử dụng
Bộ ghép kênh 4x2: 1 Bà xã Chứa bốn công tắc 2 đầu vào; 1 đầu ra là cơ chế chia sẻ tín hiệu Giao diện SPI và I / O của ứng dụng.
Công tắc SPST Bất kỳ loại công tắc nào (tạm thời hoặc được chốt) sẽ hoạt động. Công tắc được sử dụng để minh họa chia sẻ pin cho đầu vào ứng dụng.
Điện trở 10K Điện trở kéo xuống cho công tắc SPST để tránh đầu vào nổi
Hình ảnh
Hình ảnh
Hình ảnh
Hình ảnh

Bộ ghép kênh là chìa khóa để tách biệt việc sử dụng tải xuống pin với việc sử dụng ứng dụng. Chức năng tổng thể của bộ ghép kênh 4x2: 1 khá đơn giản bao gồm 2 tín hiệu điều khiển và 4 công tắc hoạt động giống hệt nhau. Hành vi của mỗi chân bộ ghép kênh được thảo luận dưới đây:

Ghim Tên Hàm số
15 NS Như đã chỉ ra trong bảng chân lý, bộ ghép kênh chỉ hoạt động khi chân bật G ở mức thấp. Vì chúng tôi không bao giờ muốn vô hiệu hóa hoàn toàn bộ ghép kênh, chân 15 sẽ được kết nối trực tiếp với mặt đất.
2-4; 5-7; 9-11;12-14 A (đầu vào), B (đầu vào), Y (đầu ra) Có bốn đầu vào 2; Công tắc 1 đầu ra với mỗi nhóm 3 chân được đánh số liên tiếp theo thứ tự A (đầu vào), B (đầu vào), Y (đầu ra), ví dụ: cho công tắc 1; chốt 2 = 1A; chốt 3 = 1B; chân 4 = 1Y.
1 Lựa chọn Khi Chọn ở mức thấp, đầu vào của công tắc A được kết nối với chân đầu ra của công tắc được liên kết, Y. Khi mức chọn ở mức cao, đầu vào của công tắc B được kết nối với đầu ra thay thế. Các công tắc được điều khiển đồng thời bằng tín hiệu Chọn và hoạt động giống hệt nhau.
8 GND bộ ghép kênh IC nối đất
16 VCC nguồn IC ghép kênh

Bước 2: Tổng quan về các trường hợp kiểm thử

Hình ảnh
Hình ảnh
Hình ảnh
Hình ảnh

Hai trường hợp để tái sử dụng pin dựa trên việc liệu pin có phải là đầu vào hay đầu ra của ứng dụng hay không. Quy trình xử lý bất kỳ đầu vào nào luôn giống nhau; cũng như thủ tục cho các đầu ra ứng dụng là giống hệt nhau bất kể thành phần phần cứng. Mặc dù vậy, lời giải thích vẫn dễ dàng hơn và hy vọng sẽ rõ ràng hơn nếu đưa ra các ví dụ cụ thể. Bố cục tối giản cho hai trường hợp được hiển thị ở trên. Đối với các thiết lập chi tiết sau này, các kết nối trở thành một tổ nhỏ của sóc vì vậy có thể hữu ích khi tham khảo lại các sơ đồ rõ ràng hơn này.

ĐẶT LẠI là lựa chọn hoàn hảo cho tín hiệu Chọn bộ ghép kênh vì tín hiệu này ở mức thấp trong quá trình tải xuống nhưng tăng trở lại mức cao khi quá trình tải xuống hoàn tất. Lưu ý rằng bất kỳ bộ chuyển mạch ghép kênh nào cũng có thể được sử dụng cho cả hai trường hợp vì tất cả các bộ chuyển mạch đều hoạt động giống nhau. Ngoài ra, không có ví dụ nào là "thực tế"; thay vào đó chúng được chọn như là cách đơn giản nhất để minh họa các kỹ thuật cô lập

  1. Trường hợp đầu ra: Đầu ra LED từ chân ATtiny84 4 (SCK) được cách ly bằng cách sử dụng công tắc ghép kênh 2

    • kết nối chân ghép kênh 2A với mặt đất
    • kết nối chân ghép kênh 2B với chân 4 ATtiny85
    • kết nối đầu ra 2Y với cực dương LED

      • Kết quả mong đợi:

        • Đèn LED tắt trong quá trình tải xuống kể từ khi kết nối với 2A, nối đất
        • Đèn LED được gắn vào chân đầu ra ứng dụng 4 sau khi tải xuống qua 2B và bắt đầu nhấp nháy
  2. Trường hợp đầu vào: Đầu vào chuyển đổi SPST sang chân ATtiny84 6 (MOSI) được cách ly bằng cách sử dụng công tắc ghép kênh 3

    • Dây dẫn MOSI từ tiêu đề Bộ lập trình AVR được chuyển đến 3A
    • đầu vào chuyển đổi 3B được kết nối với đầu ra SPST
    • đầu ra 3Y được kết nối với ATtiny84 chân 6

      • 3A, MOSI, được kết nối với chân 6 trong quá trình tải xuống
      • Đầu ra 3B, SPST, được kết nối với chân 6 sau khi tải xuống

Trường hợp 1 thành công nếu đèn LED không nhấp nháy trong quá trình tải xuống chương trình và sau đó nhấp nháy hai giây một lần sau khi tải xuống như mong đợi dưới sự kiểm soát của chương trình. Nếu không có sự cách ly, đèn LED sẽ nhấp nháy trong quá trình tải xuống vì nó được kết nối trực tiếp với tín hiệu SCK, tín hiệu này sẽ thay đổi trạng thái thành nhận / truyền dữ liệu đồng hồ.

Trường hợp 2 thành công nếu tín hiệu MOSI được chuyển tiếp đến ATtiny84 trong quá trình tải xuống, tức là quá trình tải xuống không thất bại và đèn LED phản hồi với công tắc SPST bật / tắt sau khi tải xuống. Trường hợp 2 không ngăn được một lỗi tải xuống không chắc chắn. Nếu không có cách ly, công tắc SPST sẽ gây ra lỗi nếu 1) công tắc có chốt được sử dụng và 2) công tắc được để ở vị trí bật trong quá trình tải xuống. Khi bị cô lập bởi bộ ghép kênh, công tắc không thể gây ra lỗi tải xuống trong bất kỳ trường hợp nào. Một chút căng thẳng nhưng an ủi cho những người già chúng tôi.

Một hậu quả của việc sử dụng bộ ghép kênh là thành phần phần cứng không còn có thể được kết nối trực tiếp với chân I / O của vi điều khiển. Điều này hơi bất tiện nhưng cho phép thành phần vẫn còn trên breadboard trong quá trình kiểm tra cùng với phần cứng ứng dụng khác và có thể được di chuyển trở lại đúng vị trí của nó khi quá trình kiểm tra hoàn tất.

Bước 3: ATtiny84 Trường hợp 1 - Đầu ra ứng dụng cô lập

Hình ảnh
Hình ảnh

Bước này mô tả thiết lập để chia sẻ chân đầu ra ứng dụng với tín hiệu tải xuống. Ví dụ được sử dụng là đèn LED được gắn vào chân 4 (SCK). Sử dụng đèn LED hiện có làm ví dụ cho phép nhấn mạnh vào việc bổ sung bộ ghép kênh vào môi trường phần cứng và phần mềm của phần 1.

  • Phần cứng

    • Thêm bộ ghép kênh vào breadboard ở vị trí tương đối được hiển thị trong sơ đồ fritzing ở trên. Bộ ghép kênh được đặt về phía trung tâm để có chỗ cho bộ chuyển mạch SPST cần thiết trong Trường hợp 2.
    • Mở rộng tín hiệu ĐẶT LẠI cho bộ ghép kênh bằng cách thêm dây dẫn (đề xuất màu vàng) từ chân 11 của ATtiny84 đến chân 1 của bộ ghép kênh.
    • Thiết lập phần cứng còn lại như được đưa ra trong Bước 2

      • kết nối trực tiếp chân cắm 2A của bộ ghép kênh với mặt đất
      • kết nối chân 2B với chân 4 ATtiny84
      • kết nối đầu ra 2Y với cực dương LED

        • Kết quả mong đợi:

          • trong quá trình tải xuống, 2Y được kết nối với mặt đất (2A) nên đèn LED vẫn tắt
          • Sau khi tải xuống 2Y được kết nối với ATtiny84 pin 4 - điều khiển đèn LED ứng dụng
  • Phần mềm

    • Mã phần 1 được sử dụng lại; có sẵn từ phần 1 có thể hướng dẫn thay vì sao chép ở đây
    • Tải và biên dịch chương trình phần 1 trong Arduino IDE
    • Cắm bộ lập trình AVR Tiny vào cổng USB PC
    • Cắm cáp Adafruit USB to Serial vào cổng USB thứ hai

      • Một cổng COM được tạo và tự động có sẵn trong danh sách cổng IDE
      • Khởi chạy cửa sổ COM
    • Tải mã đã biên dịch xuống ATtiny84

Kết quả của chương trình ứng dụng giống như đối với phần 1 vì thay đổi duy nhất là di chuyển đèn LED đến vị trí "được bảo vệ": Đèn LED nhấp nháy cách quãng 2 giây; đầu ra nối tiếp giống nhau. Một sự khác biệt sẽ xảy ra là đèn LED không còn nhấp nháy trong quá trình tải xuống vì trong thời gian đó, nó được kết nối với đất thông qua chân ghép kênh 2A.

Hình ảnh
Hình ảnh

Bước 4: ATtiny84 Case 2 - Đầu vào ứng dụng cô lập

Hình ảnh
Hình ảnh

Bước này dựa trên thiết lập cho trường hợp cách ly đầu ra trước đó. Thay đổi phần cứng bao gồm việc gắn một công tắc SPST vào chân ATtiny84 6 (MOSI) thông qua bộ ghép kênh. Vì vậy, các thay đổi phần cứng là tối thiểu nhưng có một số thay đổi phần mềm để cho phép công tắc SPST điều khiển đèn LED bằng cách sử dụng ngắt thay đổi chân. Mã cập nhật được bao gồm ở cuối phần này. Mã phải được sao chép vào Arduino IDE; đề nghị lưu nó dưới tên Multiplexer_Input. (Tôi xin lỗi vì độ dài của phần này nhưng đó là trọng tâm của mục đích của người hướng dẫn và nghĩ rằng nó đọc tốt hơn như một khối nguyên khối hơn là chèn các dấu ngắt giả tạo.)

Cập nhật Vị trí Mục đích
bao gồm lớp SoftwareSerial "bị tấn công" bao gồm phần Đèn LED hiện được điều khiển bởi công tắc SPST thông qua một ngắt thay đổi chân. Lớp SoftwareSerial phải được sửa đổi vì nếu không, nó phân bổ TẤT CẢ các vectơ ngắt thay đổi chân. Điều này gây ra lỗi liên kết "nhiều định nghĩa" cho vectơ (cổng 0) được gán cho công tắc SPST. Phiên bản SoftwareSerial bị tấn công nên được đặt trong cùng thư mục với chương trình để nó chỉ ảnh hưởng đến ứng dụng này.
Định nghĩa chân đầu vào SPST bao gồm / phần định nghĩa gán đầu vào SPST cho một chân thiết bị. Ghim dành riêng cho thiết bị nên nó được thêm vào (các) phần #ifdef ATtiny8x.
Chế độ chân đầu vào SPST chức năng thiết lập Chân SPST được định cấu hình là ĐẦU VÀO
Định cấu hình ngắt chân SPST chức năng thiết lập Vectơ ngắt được gán cho chân đầu vào SPST để sự thay đổi trạng thái chuyển mạch gây ra ngắt. Thanh ghi cấu hình và kiểu ngắt là thiết bị cụ thể. Để làm cho mã đơn giản nhất có thể, sự khác biệt được xử lý trong phần được xác định bởi #if
Thiết lập thông báo nối tiếp hoàn chỉnh chức năng thiết lập Thông báo đầu ra nối tiếp hoàn tất thiết lập được thay đổi để phản ánh ứng dụng Đầu vào Bộ ghép kênh
Thêm chức năng ISR của công tắc SPST phần mã ISR cho ngắt thay đổi chân SPST được thêm vào. Mã phổ biến nhưng vectơ được sử dụng là thiết bị cụ thể và được xác định trong các phần phụ thuộc thiết bị ở đầu chương trình. Để xác minh ISR được kích hoạt, trạng thái đèn LED được thay đổi. Mặc dù không có trong một ứng dụng thực tế, một thông báo đầu ra nối tiếp được tạo ra phản ánh trạng thái đèn LED mới.
Sửa đổi xử lý vòng lặp chức năng vòng lặp ISR hiện kiểm soát việc bật và tắt đèn LED để loại bỏ chức năng khỏi quy trình vòng lặp. Một lệnh gọi đến thói quen ngủ được thêm vào ATtiny84 như một loại "bổ sung". Đối với ứng dụng này, ATtiny85 sleep không hoạt động; có thể do sự can thiệp của lớp Software Serial vì nó hoạt động với phần mềm SoftwareSerial bị xóa.
Thêm thói quen ngủ phần mã Chức năng ngủ không cần thiết để chứng minh việc sử dụng bộ ghép kênh. Chỉ được thêm vào vì thông thường muốn đợi một đầu vào ở chế độ POWER_DOWN để tiết kiệm năng lượng hơn là tiếp tục chạy qua vòng lặp chương trình mà không làm gì cho đến khi một đầu vào xảy ra.

Sửa đổi mã lớp SoftwareSerial

Lớp SoftwareSerial cần được thay đổi để nó không chứa tất cả các cổng ngắt thay đổi chân. Mã lớp SoftwareSerial được đặt tại

C: / Program Files (x86) Arduino / phần cứng / arduino / avr / thư viện / SoftwareSerial / src

Thực hiện tìm kiếm trên PCINT0_vect trong SoftwareSerial.cpp để tìm vị trí bắt đầu cho các thay đổi mã. Thêm mã sau ngay trước câu lệnh #if được xác định (PCINT0_vect) hiện có.

#if được xác định (_ AVR_ATtiny84_)

#define MYPORT PCINT1_vect #elif define (_ AVR_ATtiny85_) #define MYPORT PCINT0_vect #endif ISR (MYPORT) {SoftwareSerial:: handle_interrupt (); }

Bây giờ nhận xét khối mã hiện có phân bổ các vectơ ngắt cổng như được chỉ ra bên dưới (chỉ cần thêm các ký hiệu nhận xét khối bắt đầu và kết thúc / * và * /):

/*

#if đã định nghĩa (PCINT0_vect) ISR (PCINT0_vect) {SoftwareSerial:: handle_interrupt (); } #endif #if đã định nghĩa (PCINT1_vect) ISR (PCINT1_vect) {// SoftwareSerial:: handle_interrupt (); ISR (PCINT1_vect, ISR_ALIASOF (PCINT0_vect)); } #endif #if được định nghĩa (PCINT2_vect) ISR (PCINT2_vect, ISR_ALIASOF (PCINT0_vect)); #endif #if được xác định (PCINT3_vect) ISR (PCINT3_vect, ISR_ALIASOF (PCINT0_vect)); #endif * /

Định cấu hình phần cứng

Công tắc SPST được gắn vào chân ATtiny84 6 (MOSI) như đã nêu trong Bước 2. Quy trình được lặp lại ở đây để thuận tiện.

  • kết nối đầu vào công tắc 3A với đầu cắm MOSI của tiêu đề Lập trình viên Tiny AVR
  • kết nối 3B với chân đầu ra của công tắc SPST BẬT
  • kết nối 3Y với ATtiny84 chân 6

    • KẾT QUẢ:

      • 3A, MOSI, sẽ được chuyển đến ATtiny84 pin 6 trong quá trình tải xuống
      • Đầu ra 3B, SPST, sẽ được gắn vào chân 6 sau khi tải xuống

Chạy chương trình

Trước khi chạy, hãy đặt công tắc SPST ở vị trí tắt. Nếu không, đèn LED sẽ bật khi tắt công tắc và ngược lại. Làm theo quy trình ở bước 3 để tải, biên dịch và tải xuống chương trình đầu vào ứng dụng bằng Arduino IDE. Như trước đây, đèn LED sẽ không nhấp nháy trong quá trình tải xuống, do đó, dấu hiệu duy nhất cho thấy chương trình đang hoạt động sẽ là thông báo nối tiếp ở cuối quy trình thiết lập: SETUP Complete - Input Ví dụ

Tại thời điểm này, chương trình đang đợi một đầu vào từ công tắc SPST. Đặt công tắc ở vị trí ON sẽ làm cho đèn LED bật sáng; thay đổi trở lại vị trí tắt sẽ tắt đèn LED. Thông báo đầu ra xác minh rằng ISR đã được gọi (ISR: Led HIGH, ISR: Led LOW). Lưu ý thứ tự của các thông điệp nối tiếp là ĐI NGỦ trước khi chờ thay đổi trạng thái chuyển đổi; khi nhận được đầu vào công tắc, ISR sẽ được gọi, bật tắt đèn LED và ghi lại sự thay đổi; thì quá trình xử lý sẽ bắt đầu sau cuộc gọi ngủ kể từ khi ngắt đánh thức bộ xử lý.

Hình ảnh
Hình ảnh

CHƯƠNG TRÌNH HƯỚNG DẪN NÀY:

//************************************************************************

// PHẦN 2: Ứng dụng / tải về chia sẻ pin thiết bị //. Sửa đổi mã Phần 1 để hỗ trợ ứng dụng tái sử dụng các chân // được gán cho giao diện lập trình SPI //. Mã "Comon" cho ATtiny85 và ATtiny84 // **************************************** ******************************** #include "SoftwareSerial.h" // Phần mềm Arduino đã sửa đổi Lớp trên không #include // Trong khi mã xử lý phổ biến, các chân được sử dụng là thiết bị cụ thể #if được định nghĩa (_ AVR_ATtiny84_) || được định nghĩa (_ AVR_ATtiny84A_) #define ledPin 4 // Bật / tắt Led được kết nối #define rxPin 9 // Pin dùng để nhận Serial #define txPin 10 // Pin dùng để truyền nối tiếp #define SpstPin 6 // Đầu vào từ công tắc SPST (MOSI) #define ISR_VECT PCINT0_vect // Công tắc SPST Vectơ ngắt thay đổi pin #elif đã định nghĩa (_ AVR_ATtiny85_) #define ledPin 1 #define rxPin 4 #define txPin 3 #define SpstPin 2 // Đầu vào từ công tắc SPST (INT0) #define INT0 ISRvectVECT // Công tắc SPST Vectơ ngắt thay đổi chân pin #else #error Chỉ ATiny84 và ATtiny85 được Dự án này hỗ trợ #endif // Tạo phiên bản của lớp Software Serial chỉ định thiết bị // chân nào sẽ được sử dụng để nhận và truyền SoftwareSerial mySerial (rxPin, txPin); // ------------------------------------------------ ------------------------ // Khởi tạo tài nguyên xử lý // ------------------- -------------------------------------------------- --- void setup () {mySerial.begin (9600); // Bắt đầu trì hoãn xử lý nối tiếp (2000); // Cho cổng Serial Com thời gian để hoàn tất quá trình khởi động. // nếu không, đầu ra thứ nhất có thể bị thiếu hoặc bị cắt pinMode (ledPin, OUTPUT); // Cấu hình chân led cho OUTPUT pinMode (SpstPin, INPUT); // Định cấu hình chân công tắc SPST làm INPUT #if được định nghĩa (_ AVR_ATtiny84_) || (_AVR_ATtiny84A_) // thiết lập ngắt thay đổi chân để xử lý đầu vào công tắc trên chân 6 (MOSI) GIMSK | = (1 <

Bước 5: ATtiny85 Case 1 - Đầu ra ứng dụng cô lập

Hình ảnh
Hình ảnh

Thay vì xây dựng một thiết lập phần cứng trùng lặp cho ATtiny85, có lẽ dễ dàng hơn để bắt đầu với cấu hình hoàn chỉnh cho ATtiny84 từ Bước 4 và thay thế chip tiny84 bằng tiny85. Tất cả phần cứng được yêu cầu sau đó đã có sẵn. Nếu sử dụng phương pháp này, hãy xác định vị trí tiny85 sao cho chân 3 và 4 thẳng hàng với cáp nối tiếp tx và dây nhận. Sau đó, vấn đề chỉ là di chuyển các dây dẫn giao diện SPI để phù hợp với vị trí cần thiết của chúng cho ATtiny85.

Nếu bắt đầu từ đầu, chỉ cần làm theo các bước chung từ Bước 3 và sơ đồ phân loại ở trên. Mã này giống như được sử dụng cho ATtiny84 ở Bước 3 với kết quả tương tự như mong đợi - không nhấp nháy trong quá trình tải xuống; khi chạy đèn LED nhấp nháy cách nhau 2 giây và các thông báo đầu ra nối tiếp theo trạng thái đèn LED.

Hình ảnh
Hình ảnh

Bước 6: ATtiny85 Case 2 - Đầu vào ứng dụng cô lập

Hình ảnh
Hình ảnh

Để thiết lập phần cứng, hãy bắt đầu với cấu hình từ Bước 5 và thêm công tắc SPST như được chỉ ra trong sơ đồ fritzing ở trên. Tôi thực sự đã sử dụng một công tắc tạm thời cho phiên bản tiny85 và nó giúp việc xác minh dễ dàng hơn một chút. Lưu ý rằng đầu ra công tắc được xoay 180 độ so với cấu hình ATtiny84. Thay đổi này giúp việc định tuyến các dây nối dễ dàng hơn vì cả 3 tín hiệu SPI đều nằm trên cùng một phía đối với ATtiny85.

Sử dụng chương trình tương tự như đối với ATtiny84 Bước 4. Kết quả chung giống nhau được mong đợi - đèn LED thay đổi trạng thái khi bật / tắt công tắc SPST và các thông báo đầu ra nối tiếp ghi lại các thay đổi. Thông báo ĐI ĐẾN NGỦ bị thiếu vì chức năng ngủ không được gọi cho ATtiny85. Mặc dù cùng một chương trình được sử dụng, vẫn có những khác biệt đáng kể trong việc triển khai vì thực tế là ATtiny85 chỉ có một thanh ghi cổng (Cổng 0):

  1. SoftwareSerial hiện phân bổ ngắt thay đổi chân cổng 0 cho giao tiếp nối tiếp (Nhớ lại rằng chúng tôi đã có thể sử dụng cổng 1 cho ATtiny84.)
  2. Ngắt chuyển mạch SPST phải được thực hiện với ngắt bên ngoài 0 (INT0) vì ngắt thay đổi chân một và duy nhất được phân bổ bởi SoftwareSerial. Điều này minh họa điểm mà ngắt thay đổi chân và ngắt bên ngoài là độc lập về mặt logic và có thể được sử dụng trong cùng một thanh ghi cổng.
  3. Không thu được gì bằng cách sử dụng phiên bản SoftwareSerial đã sửa đổi - chỉ có một cổng và lớp SoftwareSerial SẼ lấy nó. Tuy nhiên, lớp đã sửa đổi vẫn được sử dụng chỉ để tránh một thay đổi không liên quan trực tiếp đến mục tiêu của bước này.

Đề xuất: