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

Bộ điều khiển PID - ứng dụng phần 2 - xe dò line dùng thuật toán PID

Tiép nối bài viết về xe dò line cảm ơn Đỗ Hữu Toàn đã viết hộ mình phần 4. hôm nay mình sẽ làm cho chiếc xe dò line đi mượt và có hồn hơn 

lên
34 thành viên đã đánh giá bài viết này hữu ích.
Các bài viết cùng tác giả

Hướng dẫn truyền thông Internet cho PLC bằng iNut Platform - Lập trình kéo thả Internet cho PLC

Điện tử công nghiệp thường chỉ tin tưởng và sử dụng các loại mạch PLC truyền thống vì khả năng đọc được ngược code, độ bền, tính ổn định (Đã được kiểm chứng theo thời gian). PLC đó là chuyên môn của các kỹ sư điện công nghiệp và gần như là kỹ năng bắt buộc phải có của mỗi người. Tuy nhiên, PLC có một điểm dỡ đó là: khó để lập trình kết nối Internet để quản lý (quan sát) từ xa. Phải biết thêm về WinCC (chi phí bản quyền cao) hoặc C# để làm phần mềm điều khiển trên máy tính. Điều đó không phải là dễ dàng đối với một kỹ sư điện tử công nghiệp. Vậy đâu là giải pháp? Đó chính là iNut Platform với dòng sản phẩm iNut - PLC Modbus RTU RS-485. iNut PLC sẽ giúp bạn đồng bộ các thanh ghi D trong PLC qua Internet một cách dễ dàng, an toàn và bảo mật. Cùng khám phá nhé!

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

Hướng dẫn đưa ứng dụng iNut node-red (webHMI) của iNut Platform lên server miễn phí Heroku

Sau khi đã có được demo chạy được cảm thấy ổn ở local (máy tính của bạn), bạn muốn đưa webapp của mình lên một server Internet để cho khách hàng xem hoặc chuyển giao cho khách hàng với giá rẻ nhất (gần như bằng 0) mà không cần phải NAT PORT thì tại máy tính của mình? Thì đây là cuốn sổ tay hướng dẫn chi tiết dành cho bạn. Đặc biệt, tất cả bài viết hướng dẫn, dự án mẫu liên quan đến node-red của iNut Platform đều có thể làm theo hướng dẫn sau này nhé!

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