ksp gửi vào
- 125085 lượt xem
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:
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
- Arduino Uno
- Breadboard
- Dây cắm breadboard
- 1 điện trở 560 Ohm (hoặc 220 Ohm hoặc 1kOhm)
- 1 đèn LED siêu sáng
- 1 ATTiny13
- 1 chai nước ngọt để uống nếu bí
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à Programmer là AVR 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