Dùng ATTiny13 để shiftOut ra IC 595 điều khiển nhiều LED

Nội dung chính, cần nắm

Qua bài viết Bài 2: Attiny13 - Trợ thủ đắc lực của Arduino - Lập trình nó?, chúng ta đã biết được cách lập trình một bé ATTiny13 để làm nhấp nháy một chú đèn LED. Hôm nay, chúng ta sẽ nâng cao một tí nữa, chúng ta sẽ lập trình chú ATTiny13 này để shiftOut ra 8 LED và hơn thế nữa!

Nếu bạn chưa biết về shiftOut, bạn có thể xem bài viết này và thực hiện nó trước!

Phần cứng

Lắp mạch

Đầu tiên, bạn cần lắp mạch như bài Bài 2: Attiny13 - Trợ thủ đắc lực của Arduino - Lập trình nó? !

Tiếp theo, bạn lắp thêm IC 595 như mạch sau, kích vào hình để xem kích thước thật.

Lập trình

Bạn nhớ chỉnh lại loại mạch là Attiny13 và chỉnh lại Programmer Program as ISP.

Trước tiên, bạn cần phải nắm một khái niệm về vi điều khiển, đó là xung nhiệp (hoặc tần số của vi điều khiển). Bạn có bao giờ để ý đến "Tần số hoạt động" của mạch Arduino Uno R3 hay là chưa? (Nếu chưa, bạn có thể tham khảo tại đây). Tần số hoạt động có thể hiểu một cách "thoát nghĩa" là một cái đồng hồ của vi điều khiển. Bạn cần nó với một nhiệm vụ cực kỳ đơn giản là tính giờ! Tính giờ đểm làm gì? Để delay đợi đèn sáng đấy :P.

Trong ATTiny13, chúng ta không sử dụng được hàm delay() vì nó chiếm dụng khá nhiều bộ nhớ flash, vì vậy ta sẽ dùng hàm delayMicroseconds(). Mạch Arduino Uno có tần số là 16Mhz, và ATTiny13 chỉ có 9.6 Mhz thôi. Khi xem hướng dẫn delayMicroseconds(), ta thấy mỗi giá trị của hàm này tương đương 1 micro gây (us) bên ngoài đời thực. Vì vậy cứ mỗi giá trị của hàm này trên ATTiny13 sẽ tương ứng với 9.6 / 16  = 0.6 us (nghĩa là cứ 150us thì bằng 1 ms (ngoài đời thực) 150 = 9.6/16 * 1000 / 4 - số này mình thực nghiệm rút kinh nghiệm thôi, các bạn hỗ trợ mình phần này nhé).

Có một điều mà bạn cần biết là: ATTiny13 mặc định lại không bật cái timer (tần số hoạt động) của nó (tuy nó có sẵn một bộ timer bên trong). () bằng cách sử dụng hàm này TCCR0B |=  _BV(CS02) ; trong hàm setup(). Để xem kĩ hơn về cách sử dụng của biến TCCR0B, bạn nên vào xem datasheet của ATTiny13 tại trang 73.

Sau đây, bạn hãy upload đoạn code sau để hiểu rõ hơn.

byte latchPin = 1; 
byte clockPin = 0;
byte dataPin = 2;
void setup() {     
  
  pinMode(latchPin,OUTPUT);
  pinMode(clockPin,OUTPUT);
  pinMode(dataPin,OUTPUT);
  
  // cài đặt timer
  TCCR0B |=  _BV(CS02)  ; 
}

int timer = 150;

void _delay(word time = 1) { // Xây dựng lại hàm delay
  for (word i = 1; i<=time;i++) {
    delayMicroseconds(timer);
  }
}

void _shiftOut(byte dataPin, byte clockPin, byte ledStatus) {
  digitalWrite(latchPin, LOW);
  shiftOut(dataPin, clockPin, MSBFIRST, ledStatus);  
  digitalWrite(latchPin, HIGH); 
}
void loop() {
  byte ledStatus = 0; //trạng thái Led
  _shiftOut(dataPin, clockPin, 0);
  _delay(100);
  for (byte i = 0; i < 8; i++) {
    ledStatus = ledStatus << 1 | 1;
    _shiftOut(dataPin, clockPin, ledStatus);
    _delay(100);
  }
}

Lời kết

Nước ngọt là thứ không thể thiếu trong quá trình "hack" não! Bạn hãy thoải mái đọc và hiểu một cách từ từ, tớ lúc đầu cũng hơi khó hiểu. Nhưng ngẫm đi ngẫm lại thì có mỗi cái timer là mới thôi. Còn mấy cái kia thì cũng khá ok rồi hehe!

lên
10 thành viên đã đánh giá bài viết này hữu ích.
Các dự án được truyền cảm hứng

Select any filter and click on Apply to see results

Các bài viết cùng tác giả

Kết nối điều khiển từ xa sử dụng ESP8266 và Arduino với hệ thống firmware iNut Cảm biến CloudMQTT - 1000 firmware miễn phí

Chuyện kể rằng, có 02 sinh viên Việt Nam, trong lúc làm đồ án đại học kết nối điều khiển từ xa qua Internet. Một người thì chọn phương án truyền thống sử dụng máy tính làm máy chủ và demo các tính năng theo yêu cầu đồ án. Người còn lại biết đến iNut Sensor và tìm cách tối ưu hóa phần mềm và phần cứng nhằm chau chuốt cho đồ án của mình trở nên "xịn" và "nhiều tính năng bá đạo". Đến lúc bảo vệ đồ án, cậu sinh viên 01 cảm thấy choáng ván với muôn vàn vấn đề từ việc nơi trình bày đồ án không có wifi, mạng chập chờn, máy tính mở không lên, đứt cáp biển,... Cuối cùng cũng bảo vệ được với điểm số không ưng ý lắm dù tốn rất nhiều thời gian và công sức. Cậu còn lại nhờ vào việc chau chuốt phần mềm, tối ưu hóa và comment kĩ từng lệnh trong dòng code, viết báo cáo bài bản chuẩn bị slide như ý, dùng điện thoại cài wifi, quét mã QRcode để chia sẻ quyền truy cập đến phần mềm rất chuyên nghiệp, mọi thứ cậu chủ động hoàn toàn mà không bị các vấn đề "học tài thi phận" bủa vây mà kết quả hết sức mĩ mãn, điểm số mĩ miều, kiến thức IoT được chuẩn hóa. Thực vậy, các dự án, đồ án sử dụng nền tảng iNut Platform bên dưới cho phép các bạn sinh viên làm các dự án hết sức hoàn hảo: từ xe điều khiển, bãi giữ xe thông minh, hệ thống máy lạnh, máy bơm, điều hòa thông minh,... do chinh các bạn tự làm nên đã đạt được những điểm số tốt và tuyệt đối. Cũng chính vì thế, iNut JSC (công ty chủ quản của iNut Platform) đã kết hợp với Khu Công nghệ phần mềm - ĐHQGHCM để tổ chức những khóa đào tạo ngắn hạn cho sinh viên Việt Nam sử dụng nền tảng IoT do iNut JSC phát triển. Và để mở con đường tri thức tiếp cận IoT trong nháy mắt, iNut JSC đã tạo ra một phiên bản firmware trị giá 50.000 đồng sử dụng clouding của CloudMQTT và tài trợ 1000 firmware cho tất cả các bạn học sinh, sinh viên Việt Nam có thể tiếp cận IoT một cách dễ dàng và nhanh chóng nhất!

lên
14 thành viên đã đánh giá bài viết này hữu ích.

Tài liệu kỹ thuật bỏ túi để lập trình Internet of Things - Vận hành, điều khiển và quản lý thiết bị qua Internet trong 1 nốt nhạc

Kính chào quý vị và các bạn!

Lập trình Internet of Things được biết đến là một thứ vô cùng khó khăn và phức tạp. Nơi này, trước đây không phải dành cho tất cả mọi người. Nhưng, để đưa Việt Nam trở thành một cường quốc về công nghệ cao và đi tắt đón đầu nhờ cuộc cách mạng công nghệ 4.0 thì bài toán Internet of Things phải được giải quyết bằng chính trí tuệ của tất cả mọi người. Cuối cùng, để giải quyết được đồ thị Đa dụng và Dễ sử dụng, iNut Node-red IDE đã ra đời, giải pháp cung cấp một phương pháp sáng tạo, cho phép người dùng lập trình ứng dụng IoT bằng những khối lệnh kéo thả với những ví dụ ngay trong app. Ngay cả một học sinh tiểu học học STEM cũng có thể làm được. Hãy cùng khám phá nhé!

lên
16 thành viên đã đánh giá bài viết này hữu ích.