Trong dự án này, chúng tôi sẽ thiết kế một đồng hồ Báo thức đơn giản bằng cách sử dụng bộ hẹn giờ ATMEGA32. Bộ vi điều khiển ATmega32A có bộ định thời 16 bit và chúng tôi sẽ sử dụng bộ định thời đó để đếm giây và phát triển đồng hồ kỹ thuật số.
Tất cả các đồng hồ kỹ thuật số đều có một viên pha lê bên trong là trái tim của đồng hồ. Tinh thể này không chỉ hiện diện trong đồng hồ mà còn hiện diện trong tất cả các hệ thống thời gian thực điện toán. Tinh thể này tạo ra các xung đồng hồ, cần thiết để tính toán thời gian. Mặc dù có một số cách khác để lấy xung đồng hồ nhưng để có độ chính xác và tần số cao hơn, hầu hết đều thích đồng hồ dựa trên tinh thể. Chúng tôi sẽ kết nối một tinh thể với ATMEGA32 để có được đồng hồ chính xác.
Thành phần bắt buộc
Phần cứng: Vi điều khiển ATmega32, tinh thể 11.0592MHz, Tụ điện 22pF (2 miếng), Nguồn điện (5v), AVR-ISP PROGRAMMER, JHD_162ALCD (LCD 16x2), tụ điện 100uF (kết nối qua nguồn điện), nút (bốn miếng), điện trở 10KΩ (sáu miếng), công suất 100nF r (bốn miếng), Công tắc ba chân (2 miếng), bóng bán dẫn 2N2222, Buzzer, điện trở 200Ω.
Phần mềm: Atmel studio 6.1, progisp hoặc flash magic.
Sơ đồ mạch và giải thích hoạt động
Để có thời gian chính xác, chúng tôi đã kết nối tinh thể 11,0592MHz cho đồng hồ. Bây giờ để vô hiệu hóa đồng hồ bên trong của ATMEGA, chúng ta phải thay đổi các BITS LOW FUSE của nó. Hãy nhớ rằng chúng tôi không chạm vào các bit cầu chì cao để giao tiếp JTAG sẽ vẫn được kích hoạt.
Để yêu cầu ATMEGA tắt đồng hồ bên trong và hoạt động ở bên ngoài, chúng ta cần đặt:
SỬ DỤNG THẤP BYTE = 0xFF hoặc 0b11111111.
Trong mạch PORTB của ATMEGA32 được kết nối với LCD cổng dữ liệu. Ở đây người ta nên nhớ vô hiệu hóa giao tiếp JTAG trong PORTC của ATMEGA bằng cách thay đổi các byte cầu chì cao, nếu người ta muốn sử dụng PORTC như một cổng giao tiếp thông thường. Trong LCD 16x2 có 16 chân trên tất cả nếu có đèn đen, nếu không có đèn nền sẽ có 14 chân. Người ta có thể cấp nguồn hoặc để lại các chân đèn sau. Bây giờ trong 14 chân có 8 dữ liệu ghim (7-14 hoặc D0-D7), 2 chân cung cấp điện (1 & 2 hoặc VSS & VDD hoặc GND & + 5V), 3 thứ pin cho điều khiển độ tương phản (VEE-điều khiển như thế nào dày các nhân vật nên được hiển thị), và 3 chân điều khiển (RS & RW & E)
Trong mạch, bạn có thể quan sát thấy tôi chỉ lấy hai chân điều khiển. Điều này mang lại sự linh hoạt trong việc hiểu rõ hơn, bit tương phản và READ / WRITE không thường xuyên được sử dụng để chúng có thể được nối tắt xuống đất. Điều này đặt LCD ở chế độ đọc và độ tương phản cao nhất. Chúng ta chỉ cần điều khiển các chân ENABLE và RS để gửi các ký tự và dữ liệu cho phù hợp.
Các kết nối được thực hiện cho LCD được đưa ra dưới đây:
PIN1 hoặc VSS để nối đất
PIN2 hoặc VDD hoặc VCC đến nguồn + 5v
PIN3 hoặc VEE nối đất (mang lại độ tương phản tối đa tốt nhất cho người mới bắt đầu)
PIN4 hoặc RS (Lựa chọn đăng ký) đến PD6 của uC
PIN5 hoặc RW (Đọc / Ghi) nối đất (đặt màn hình LCD ở chế độ đọc giúp giảm bớt giao tiếp cho người dùng)
PIN6 hoặc E (Bật) đến PD5 của uC
PIN7 hoặc D0 đến PB0 của uC
PIN8 hoặc D1 đến PB1 của uC
PIN9 hoặc D2 đến PB2 của uC
PIN10 hoặc D3 đến PB3 của uC
PIN11 hoặc D4 đến PB4 của uC
PIN12 hoặc D5 đến PB5 của uC
PIN13 hoặc D6 đến PB6 của uC
PIN14 hoặc D7 đến PB7 của uC
Trong mạch các bạn có thể thấy chúng ta đã sử dụng giao tiếp 8bit (D0-D7) tuy nhiên đây không phải là điều bắt buộc, chúng ta có thể sử dụng giao tiếp 4bit (D4-D7) nhưng với 4 bit chương trình giao tiếp trở nên hơi phức tạp. Vì vậy, như trong bảng trên chúng ta đang kết nối 10 chân của LCD với bộ điều khiển trong đó 8 chân là chân dữ liệu và 2 chân để điều khiển.
Chuyển một là để bật tính năng điều chỉnh giữa báo thức và thời gian. Nếu pin ở mức thấp, chúng ta có thể điều chỉnh thời gian báo thức bằng cách nhấn các nút. Nếu các nút cao của nó chỉ để điều chỉnh TIME. Có BỐN nút hiện diện ở đây, đầu tiên là để tăng MINUTES trong báo thức hoặc thời gian. Thứ hai là giảm MINUTES trong báo thức hoặc thời gian. Thứ ba là cho GIỜ gia tăng trong báo thức hoặc thời gian. FOURTH là GIỜ giảm dần trong báo thức hoặc thời gian.
Các tụ điện hiện diện ở đây là để vô hiệu hóa hiệu ứng nảy của các nút. Nếu chúng bị loại bỏ, bộ điều khiển có thể đếm nhiều hơn một mỗi lần nhấn nút. Các điện trở được kết nối cho các chân là để hạn chế dòng điện, khi nhấn nút để kéo chân cắm xuống đất.
Bất cứ khi nào một nút được nhấn, chân tương ứng của bộ điều khiển sẽ được kéo xuống đất và do đó bộ điều khiển nhận ra rằng một số nút nhất định được nhấn và hành động tương ứng được thực hiện.
Trước hết, đồng hồ chúng ta chọn ở đây là 11059200 Hz, chia nó cho 1024 ta được 10800. Vì vậy, cứ mỗi giây ta nhận được 10800 xung. Vì vậy, chúng ta sẽ bắt đầu một bộ đếm với 1024 bộ đếm trước để có được đồng hồ bộ đếm là 10800 Hz. Thứ hai, chúng ta sẽ sử dụng chế độ CTC (Clear Timer Counter) của ATMEGA. Sẽ có một thanh ghi 16 bit nơi chúng ta có thể lưu trữ một giá trị (giá trị so sánh), khi bộ đếm đếm đến giá trị so sánh, một ngắt được thiết lập để tạo ra.
Chúng tôi sẽ đặt giá trị so sánh thành 10800, vì vậy về cơ bản chúng tôi sẽ có ISR (Quy trình dịch vụ ngắt trên mỗi lần so sánh) cho mỗi giây. Vì vậy, chúng tôi sẽ sử dụng thói quen kịp thời này để có được chiếc đồng hồ mà chúng tôi cần.
BROWN (WGM10-WGM13): Các bit này dùng để chọn chế độ hoạt động cho bộ định thời.
Bây giờ vì chúng ta muốn chế độ CTC có giá trị so sánh trong byte OCR1A, chúng ta chỉ cần đặt WGM12 thành một, còn lại được để nguyên vì chúng bằng 0 theo mặc định.
ĐỎ (CS10, CS11, CS12): Ba bit này dùng để chọn thạch cao và để có được đồng hồ đếm thích hợp.
Vì chúng ta muốn 1024 là cài đặt trước, chúng ta phải đặt cả CS12 và CS10.
Bây giờ có một sổ đăng ký khác mà chúng ta nên xem xét:
GREEN (OCIE1A): Bit này phải được đặt để nhận ngắt khi so sánh khớp giữa giá trị bộ đếm và giá trị OCR1A (10800) mà chúng tôi đặt.
Giá trị OCR1A (giá trị so sánh bộ đếm), được ghi trong thanh ghi trên.
Giải thích lập trình
Hoạt động của Đồng hồ báo thức được giải thích từng bước trong đoạn mã dưới đây:
#include // tiêu đề để bật điều khiển luồng dữ liệu qua các chân #define F_CPU 1000000 // cho biết tần số tinh thể bộ điều khiển được đính kèm #include