Bài 2: Attiny13 - Trợ thủ đắc lực của Arduino - Lập trình nó?

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

Attiny13 là một vi điều khiển cực kỳ nhỏ (chỉ có 8 chân) và 1 KB Flash. Tuy vậy, chúng ta vẫn có thể làm được rất nhiều thứ trên nó. Hôm nay, chúng ta tìm hiểu về con ATTiny13 này, sau đó là tìm hiêu cách lập trình để làm 1 đèn LED nhấp nháy!

Bài viết này cũng không quá khó, bạn chỉ cần tập trung vào các định nghĩa, bookmark bài viết này (để xem cách mắc mạch),...

Giới thiệu về Attiny13

Nếu bạn đọc được datasheet, bạn có thể xem tại đây.

ATTiny13 là một vi điều khiển (sau này mình gọi tắt là chip) thuộc họ AVR, hoạt động ổn định ở mức điện áp từ 2,7 --> 5.5 Vol và có 1 KB bộ nhớ flash với 8 chân như hình sau:

Các thông số khác có thể xem trong datasheet ở trên

Trong nội dung bài viết hôm nay, chúng ta sẽ chỉ quan tâm đến vấn đề lập trình cho ATTiny13 qua Arduino như thế nào. Vì vậy, một số thông số khác của Attiny13 sẽ không được giới thiệu trong bài này để phòng việc rối rém, khó hiểu cho bạn! Những thông số khác về ATTiny13 sẽ được nói đến qua những bài sau.

Câu hỏi và câu trả lời

Câu hỏi: Chỉ với 1 kB bộ nhớ flash thì Attiny13 có thể làm được gì?

Trả lời: bạn có thể làm được rất nhiều thứ, kể thể kể ra như sau

  • điều khiển led
  • shiftOut
  • shiftIn
  • gửi / nhận vô tuyến 315 Mhz
  • điều khiển nhiều servo
  • điều khiển động cơ
  • .... và những mạch tiết kiệm năng lượng khác

Những ứng dụng trên yêu cầu bạn là một người chuyên về lập trình AVR. Vì sao? Bởi vì nếu sử dụng các hàm có sẵn của Arduino thì sẽ rất hao bộ nhớ flash => bạn sử dụng các biến hệ thống của chip để tiết kiệm bộ nhớ. Chẳng hạn như PORTB, DDRB, PB1,...

Nhưng nếu chỉ cần lập trình LED, và shiftOut thì lại rất đơn giản, bạn có thể sử dụng ngay các hàm của Arduino!

Một số thông số về ATTiny13

  • Có 6 chân digital (PB0 - PB5). Nhưng bạn chỉ sử dụng được 4 chân, đó là PB0 - PB4 (khi khai báo trong Arduino thì chỉ cần ghi là 0 - tượng trưng cho PB0, 1 - tượng trưng PB1,...). Chân PB5 được dùng để reset nên rất khó để sử dụng (yêu cầu nhiều kiến thức hơn)
  • Có 4 chân analog (ADC0 - AD3). Nhưng chỉ sử dụng được 3 chân (AD1 - AD3), chân AD0 cũng chính là chân PB5 (xem hình trên).
  • Các chân digital mà tại đó trùng với chân analog đều hỗ trợ PWM. (Xem về xung PWM)
  • Để lập trình cho ATTiny13 bằng Arduino bạn sử dụng giao thức SPI (dùng các chân MISO, MOSI, SCK, SS (hoặc là RESET, tùy loại chip thì có kí hiệu khác nhau) và hiển nhiên bạn phải nối chung cực âm rồi).

Một số lưu ý trước khi bắt tay vào thực hiện

Về giao tiếp SPI sẽ có một bài riêng nói về vấn đề này, bạn có thể sử dụng chức năng tìm kiếm của Cộng đồng Arduino Việt Nam và tìm từ khóa "giao thức SPI". Tại đây, chúng ta chỉ cần hiểu một cách cực kỳ đơn giản và dễ hiểu đó là. Giao tiếp SPI tương tự như giao tiếp Serial, cũng có chân gửi (MOSI) và chân nhận (MISO), ngoài ra giao tiếp SPI còn dùng thêm một chân gọi là SCK (Serial Clock), cái này bạn có thể xem nó giống như baudrate trong Serial. Còn chân SS là chân bật / tắt việc gửi / nhận tín hiệu từ một thiết bị khác. Bạn cũng có thể bỏ qua những dòng tôi vừa viết vì thực chất nó mang tính hàm lâm quá. Tốt nhất bạn nên tìm kiếm bài "giao thức SPI" để rõ hơn!

Chuẩn bị phần cứng

Lắp mạch

ATTiny13 Arduino Uno
VCC 5V
GND GND
RESET Digital 10
MOSI Digital 11
MISO Digital 12
SCK Digital 13

Lập trình

Để lập trình cho ATTiny13, đầu tiên ta cần biến Arduino Uno thành một mạch AVRISP (mạch lập trình AVR qua SPI, nghĩa là từ này bạn có thể sử dụng các kiến thức của AVR để lập trình cho các con vi điều khiển khác họ AVR). Để làm điều này, vô cùng đơn giản, bạn chỉ cần vào File > Examples > ArduinoISP rồi upload chương trình đó lên. Bạn chỉ cần làm 1 lần duy nhất để khởi tạo AVRISP!

Để lập trình cho một vi điều khiển khác bất kỳ, bạn cần phải chọn nó trong mục Tools > Board > Tên vi điều khiển hoặc tên mạch. Tuy nhiên, ATTiny13 mặc định thì lại không có trong hệ thống mặc định Arduino IDE, vì vậy bạn cần cập nhập hệ thống! Để cập nhập, đầu tiên bạn download file này sau đó giải nén vào thư mục <đường dẫn thư mục cài đặt Arduino>/hardware. Và sau đó, bạn reset lại Arduino IDE và chọn Tools > Board > ATTiny13 ... như trong hình sau đây.

Sau đó, bạn cần chỉnh một chút xíu xíu nữa như vầy.

Bây giờ, bạn upload đoạn code như sau:

byte ledPin = 0; // PB0 á 

void setup() {
  pinMode(ledPin,OUTPUT);
}

void loop() {
  digitalWrite(ledPin,HIGH);
  delay(1000);
  digitalWrite(ledPin,LOW);
  delay(1000);
}

Nếu nhận một đoạn code thông báo như thế này, thì bạn đã upload code thành công!

Binary sketch size: 426 bytes (of a 1,024 byte maximum)
avrdude: please define PAGEL and BS2 signals in the configuration file for part ATtiny13
avrdude: please define PAGEL and BS2 signals in the configuration file for part ATtiny13

Bây giờ bạn mắc một đèn LED vào chân PB0 (nhớ có điện trở 560ohm hoặc tương tự nhé) và thưởng thức thôi!

À quên, nếu bạn muốn sử dụng Arduino Uno để lập trình bình thường thì bạn cần thao tác lại việc chọn mạch. Chọn mạch Arduino Uno, và ProgrammerAVR ISP như thế này!

Kết luận

Thật dễ dàng phải không nào, từ bây giờ, nếu làm những ứng dụng nhỏ nhẹ thì bạn không cần đến một mạch Arduino "to đùng" nữa rồi. Chỉ cần upload code một phát rồi tháo hết chân ra (trừ chân led) rồi gắn vào một nguồn 5V là mọi thứ đã hoạt động rồi, hehe

lên
33 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ả

Đọc cảm biến nhiệt độ, độ ẩm từ DHT11 up lên server làm webapp

Hôm nay, mình sẽ dùng cảm biến DHT11 để đọc nhiệt độ, độ ẩm, từ đó đẩy lên Internet thông qua iNut Cảm biến. Đồng thời sẽ quay màn hình quá trình làm webapp devil.

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

Hằng số thực

Tương tự như hằng số nguyên, hằng số thực (floating point constants) cũng có cách làm việc và sử dụng tương tự. Khi bạn viết một biểu thức tính toán, giá trị của biểu thức này sẽ được tính ra và trình biên dịch sẽ thay thế biểu thức này bằng một hằng số thực đã tính ra được. Điều đó gợi ý rằng trong những chương trình lớn, để giảm thời gian biên dịch, bạn nên tính trước giá trị của những biểu thức thay vì bắt trình biên dịch tính toán.

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