Nguyen Manh Hung gửi vào
- 33881 lượt xem
I. Giới thiệu
Xin chào các bạn! Chắc chắn các bạn đã từng có những dự án nhỏ (ví dụ: làm đèn led trái tim, máy đo nhiệt độ với DHT11, đồng hồ với module RTC ...) yêu cầu không quá lớn về phần cứng và tiết kiệm chi phí. Có một cách rất hiệu quả đó là sử dụng các chip dòng attiny để thay thế cho mạch arduino đắt tiền. Tuy nhiên, đôi lúc bạn sẽ gặp nhiều khó khăn do hạn chế về số chân, dung lượng bộ nhớ, và arduino IDE không hỗ trợ đầy đủ các loại giao tiếp (SPI, I2C, ...) cho các chip attiny. Trong hoàn cảnh đó, chúng ta có thể nghĩ tới con chip rẻ tiền nhất trong dòng atmega đó là chip atmega8.
Đã có bài viết của bạn quocbao chia sẻ về cách nạp bootloader cho các dòng chip atmega tại bài viết Nạp bootloader cho vi điều khiển trên Arduino. Tuy nhiên, trong bài viết này mình xin chia sẻ với các bạn cách sử dụng chip atmega8 với chi phí thấp nhất - đó là sử dụng Atmega8 với thạch anh nội.
Các bạn phài dùng bản Arduino Classic 1.0.6 nhé! Bạn có thể tải về tại đây.
II. Phần cứng
- Board arduino bất kì (đã có bootloader nhé). Mình dùng nano.
- Chip atmega8 chưa có bootloader.
- 1 đèn led
- Test board và dây nối.
- Module tạo nguồn 5V.
III. Tạo file bootloader cho chip atmega8 và cài đặt
Mình làm theo hướng dẫn ở link tiếng Nga này: http://homes-smart.ru/index.php/oborudovanie/arduino/avr-zagruzchik. Mình xin dịch một số bước quan trọng như thế này:
Bước 1: Tạo file bootloader cho chip atmega8
Bước 2: Sau khi ấn tạo file .HEX thì bạn sẽ được như hình này
Bạn nhấn vào chữ hex thì sẽ như thế này:
Bước 3: Bạn nhấn chuột phải chọn Download with IDM thì bạn sẽ tải về được file hex mà mình vừa tạo.
Bước 4: Cài đặt cho IDE
Bạn thêm đoạn code mà họ đã cho vào trong file boards.txt
a8_8MHz.name=atmega8 (8 MHz)
a8_8MHz.upload.protocol=arduino
a8_8MHz.upload.maximum_size=7680
a8_8MHz.upload.speed=115200
a8_8MHz.bootloader.low_fuses=0xa4
a8_8MHz.bootloader.high_fuses=0xdc
a8_8MHz.bootloader.path=optiboot
a8_8MHz.bootloader.file=a8_8MHz_a4_dc.hex
a8_8MHz.build.mcu=atmega8
a8_8MHz.build.f_cpu=8000000L
a8_8MHz.build.core=arduino
a8_8MHz.build.variant=standard
Bước 5: Copy file bootloader mà bạn vừa tải về vào thư mục \hardware\arduino\bootloaders\optiboot\
Copy file bootloader mà bạn vừa tải về vào thư mục \hardware\arduino\bootloaders\optiboot\
IV. Nạp bootloader cho chip
Mở IDE lên chạy sketch ArduinoISP (giống như trong hướng dẫn của bạn quocbao). (File > Examples > ArduinoISP).
Sau khi upload xong sketch ArduinoISP thì bạn chọn trong mục tools như hình:
Chọn cổng COM tương ứng.
Chọn programmer là Arduino as ISP
Mở tools chọn Burn bootloader chờ tới khi IDE báo upload xong là OK.
V. Nạp thử một chương trình để kiểm tra.
Mình không có USB-TTL hay UART, cũng không có Arduino chip cắm chân nên sau khi bootloader xong vẫn phải nạp qua các chân SPI của mạch NANO. Cách bạn có điều kiện thì kiểm tra lại.
Vì không thể kiểm tra theo cách trên nên mình sẽ kiểm tra theo cách của mình. Đầu tiên sẽ dùng 1 chip atmega8 chưa có bootloader để nạp code nháy 2 led (vẫn qua chân SPI của NANO). Sau đó nạp code này vào 1 chip atmega8 vừa bootloader xong (vẫn theo cổng SPI). So sánh kết quả chúng ta sẽ có sự khác biệt. Mình xin giải thích sự khác biệt như sau: trong trường hợp chưa có bootloader thì led nháy không đúng code bởi vì timer trong chip chưa hoạt động đúng. Ở trường hợp đã có bootloader thì led nháy đúng theo yêu cầu do đã timer đã được kích hoạt đúng.
VI. Kết luận
Vậy là chỉ với 1 con chip atmega8 (giá khoảng 25-30k) bạn đã có thể làm được nhiều dự án hay như khi dùng arduino rồi. Xin chúc các bạn nhiều thành công! Mình mong sẽ nhận được nhiều góp ý!