Đèn LED nhấp nháy là bước đầu tiên bạn muốn làm để bắt đầu với điện tử. Trong hướng dẫn này, chúng ta sẽ kết nối đèn LED với ATmega32, là vi điều khiển dòng AVR. Chúng tôi sẽ nhấp nháy đèn LED với tốc độ nửa giây.
Thành phần bắt buộc
Phần cứng:
Vi điều khiển ATmega32A
Nguồn điện (5v)
Lập trình viên AVR-ISP
Tụ điện 100uF
Đèn LED
Điện trở 220Ω
Phần mềm
Atmel studio 6.1
Progisp hoặc phép thuật flash
Giải thích mạch và làm việc
Như được hiển thị trong sơ đồ mạch trên để giao tiếp LED với vi điều khiển AVR, không cần kết nối tinh thể bên ngoài ở đây. Bởi vì ATMEGA hoạt động trên bộ dao động điện trở-tụ điện 1MHz bên trong theo mặc định. Chỉ khi độ chính xác của đồng hồ là cần thiết, vì ứng dụng đếm độ chính xác cao, pha lê bên ngoài mới được đính kèm. Khi bộ điều khiển được mua lần đầu tiên, nó được hợp nhất để hoạt động trên tinh thể bên trong theo mặc định.
Điện trở được kết nối ở đây để hạn chế bản vẽ hiện tại từ đèn LED. Hãy nhớ rằng, bộ điều khiển không thể cung cấp nhiều hơn 30mA tại các thiết bị đầu cuối.
Giải thích lập trình
Chương trình để vi điều khiển ATmega32 nhấp nháy đèn LED được hiển thị bên dưới. Các chú thích trong mã giải thích mục đích của từng dòng mã.
#include // header để bật kiểm soát luồng dữ liệu qua các chân
#define F_CPU 1000000 // cho biết tần số tinh thể của bộ điều khiển
#include
int main (void)
{
DDRD = 0xFF; // (hoặc 0b1111 1111) Trong AVRSTUDIO để yêu cầu bộ điều khiển sử dụng một bit nhất định của cổng làm đầu vào, chúng tôi sử dụng “ZERO”, để yêu cầu nó sử dụng một bit nhất định làm đầu ra, chúng tôi sử dụng “ONE”. Vì chúng tôi đặt tám "MỘT", tất cả các chân của PORTD được kích hoạt dưới dạng đầu ra. Nếu chúng ta đặt một số 0 là “0b1111 0111”, bây giờ tất cả các chân 0,1,2,4,5,6,7 được bật làm đầu vào và PIN 3 được Bật làm đầu vào.
while (1) // lặp đi lặp lại mãi mãi và đèn LED sẽ nhấp nháy mãi mãi
{
PORTD = 0xFF; // tất cả các chân của PORTD được cho là cung cấp đầu ra 5v hoặc được yêu cầu kéo cao (LED ON)
_delay_ms (220); // độ trễ trong 200ms
_delay_ms (220);); // độ trễ trong 200ms
PORTD = 0x00; // tất cả các chân của PORTD được cho là cung cấp mặt đất ở đầu ra hoặc kéo xuống
_delay_ms (220);); // độ trễ trong 200ms
_delay_ms (220);); // độ trễ trong 200ms
}
}