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ả

Kết nối mạng cho Raspberry Pi từ máy tính laptop

Yeah, mình thấy bạn raspi rất tích cực phát triển nhánh Raspberry Pi trên Cộng đồng Arduino Việt Nam nên hôm nay xin đóng góp một phần công sức nhỏ để giúp nhánh này ngày càng hoàn thiện hơn. Các bạn sẽ biết được cách kết nối Internet (để cài đặt các gói, để debug, để code, để vào Internet...) từ máy tính laptop của bạn. Thật là chuyên nghiệp phải không nào. Mỗi lần muốn code thì không cần có router, không cần usb tll. Cứ dây LAN gắn vô máy tính là ok ngay!

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

Ứng dụng thư viện bất đồng bộ để điều khiển bất đồng bộ nhiều (hàng chục) servo - Hư cấu chăng?

Cũng đã khá lâu kể từ lúc mình xuất bản thư viện xử lý bất đồng bộ với Arduino. Tuy nhiên, mình vẫn chưa có nhiều ví dụ để thực sự kêu gọi các bạn sử dụng thư viện này trong dự án, hôm nay, sau khi được trao đổi với nhiều bạn, mình thấy vấn đề điều khiển nhiều servo có thể ứng dụng thư viện của mình vào một cách dễ dàng. Nên mình sẽ viết một bài ví dụ để hướng dẫn các bạn điều khiển rất nhiều Servo với thư viện của mình.

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