Lập trình, nạp bootloader cho chip atmega8

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 boarddâ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 ý!

Những hình ảnh về dự án: 
Youtube: 
lên
18 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ả

Sử dụng Module NRF24L01 - Thu phát sóng vô tuyến 2.4GHz với Arduino

Chắc hẳn trong các bạn ai cũng đã từng có một dự án nào đó liên quan tới truyền tín hiệu không dây và chắc các bạn đã từng làm việc với các module radio frequence 433Mhz. Nếu như đã làm việc với các module này thì không ít trong các bạn có thể đã gặp nhiều vấn đề khó giải quyết liên quan tới xung đột thư viện (như tôi sad). Ngoài ra các module này có khoảng cách thu phát sóng khá ngắn, lại không thể thu phát hai chiều. Vì những lý do trên, tôi đã tìm kiếm một loại module không dây khác để thay thế cho các module 433Mhz nhằm khắc phục các điểm yếu trên.

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

Làm volt kế, amper kế đơn giản với Attiny85

Xin chào các bạn! Mình xin chia sẻ với các bạn về cách làm một volt kế, amper kế đơn giản với vi điều khiển attiny85, hiển thị ra màn hình lcd1602 qua i2c module. Các máy đo này mình làm trong quá trình tự tạo một bộ nguồn điều khiển 0-24V 2A. heart

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