Giao tiếp LED với vi điều khiển AVR
Dưới đây là 3 ví dụ đơn giản giúp chúng ta hiểu được cơ chế giao tiếp giữa Led và vi điều khiển AVR.
ATmega328 là một vi điều khiển dựa trên 8 bit (Advanced Virtual RISC). Nó là một vi điều khiển mạnh mẽ với bộ nhớ trong tích hợp khoảng 32Kb. Hầu hết các bo mạch Arduino bao gồm một vi điều khiển AVR 8 bit Atmel với số lượng bộ nhớ flash, chân và tính năng khác nhau. Arduino Uno là một bảng vi điều khiển dựa trên ATmega328.
Vi điều khiển AVR rất dễ sử dụng. Tất cả các bộ vi điều khiển AVR đều lập trình trên Môi trường phát triển tích hợp (IDE) như Atmel Studio. Sử dụng IDE này, chúng ta có thể tạo, biên dịch và gỡ lỗi chương trình trên tất cả các bộ vi điều khiển AVR.
1. Nháy hai đèn LED bằng ATmega328
Đầu tiên, kết nối 2 đèn LED với PB2 và PB3 của PORTB của vi điều khiển ATmega328. Sau đó làm cho 2 đèn LED nhấp nháy với khoảng thời gian 1 giây. Có nghĩa là, ban đầu đèn LED thứ 1 sẽ phát sáng và giây tiếp theo, nó sẽ tắt và đèn thứ 2 sẽ phát sáng. Quá trình này tiếp diễn mãi mãi và theo cách này đèn LED nhấp nháy liên tục.
Dowload chương trình: Tại đây
Giải thích chương trình:
Khi bắt đầu chương trình, bộ xử lý có tên là “F_CPU” được khai báo nhằm mục đích cung cấp cho một số mã thư viện có bao nhiêu chu kỳ CPU mỗi giây mà bộ xử lý đang thực thi. Ở đây, chu kì CPU là 1 MHz. Thư viện “#include
DDRx – Thanh ghi hướng dữ liệu định cấu hình hướng dữ liệu của cổng (Đầu vào / đầu ra). Lệnh “ DDRB |= (1<
PORTx - Thanh ghi cổng là để gán các giá trị phù hợp cho các chân.
Ghi vào PORTx.n sẽ ngay lập tức thay đổi trạng thái của các chân cổng theo giá trị đã cho “PORTB|=(1<
2. Điều khiển hai đèn LED bằng nút nhấn
Tương tự như mạch trước, đầu tiên chúng ta sẽ kết nối 2 đèn LED với PB2 và PB3 của PORTB của vi điều khiển. Sau đó, một công tắc nút ấn được gắn vào pin PB0 và kéo lên bằng điện trở 10K. Chân còn lại của công tắc được nối đất. Chức năng của điện trở kéo lên là để đảm bảo rằng trong khi không bật công tắc, trạng thái của chân PB0 vẫn ở mức cao. Có thể sử dụng điện trở kéo lên bên trong của vi điều khiển. Nhưng ở đây mạch này đang sử dụng một mạch kéo lên bên ngoài. Khi nhấn công tắc, hai đèn LED sẽ phát sáng và sẽ tắt trong khi chúng tôi nhả công tắc.
Dowload chương trình: Tại đây
Giải thích:
Ở chương trình chúng ta sẽ chỉ tập trung giải thích điều mới duy nhất là gán chân PB0 làm Port đầu vào và sử dụng vòng lặp if.
“DDRB &= ~(1 << DDB0)” sử dụng để gán PB0 làm cổng đầu vào, vòng lặp IF để kiểm tra sự thay đổi trạng thái của nút nhấn hay chính là chân PB0.
(PINB&(1<
3. Chuyển đổi trạng thái hai đèn LED bằng nút nhấn
Dowload chương trình: Tại đây
Tương tự như các phần trên, chương trình này cũng bao gồm các bộ xử lý trước và thư viện. Và các chân cần thiết được cấu hình làm đầu vào và đầu ra bằng DDRx (Thanh ghi hướng dữ liệu). Sau đó, if được đưa vào chương trình chính với một điều kiện (PINB & (1 << PINB0)), sẽ liên tục kiểm tra trạng thái của pin PB0.
“PORT PORTB ^ = (1 << PINB2) ^ (1 << PINB3)” có chức năng thay đổi trạng thái hiện tại của các chân PB2 và PB3. Thời gian delay 300 ms ở cuối chương trình để chống dội cho nút nhấn.
Hotline: 0979 466 469