Chương 2: KIẾN TRÚC VI ĐIỀU KHIỂN
2.6. Chế độ tiết kiệm năng lƣợng
Đây là chế độ hoạt động của vi điều khiển khi lệnh SLEEP đƣợc thực thi. Khi đó nếu đƣợc cho phép hoạt động, bộ đếm của WDT sẽ bị xóa nhƣng WDT vẫn tiếp tục hoạt động, bit PD (STATUS<3>) đƣợc reset về 0, bit TO đƣợc set, oscillator ngƣng tác động và các PORT giữ nguyên trạng thái như trước khi lệnh SLEEP được thực thi.
Do khi ở chế độ SLEEP, dòng cung cấp cho vi điều khiển là rất nhỏ nên ta cần thực hiện các bước sau trước khi vi điều khiển thực thi lệnh SLEEP:
- Đƣa tất cả các pin về trạng thái VDD hoặc VSS
- Cần bảo đảm rằng không có mạch ngoại vi nào đƣợc điều khiển bởi dòng điện của vi điều khiển vì dòng điện nhỏ không đủ khả năng cung cấp cho các mạch ngoại vi hoạt động.
- Tạm ngƣng hoạt động của khối A/D và không cho phép các xung clock từ bên ngoài tác động vào vi điều khiển.
- Để ý đến chức năng kéo lên điện trở ở PORTB.
- Pin MCLR phải ở mức logic cao.
“ĐÁNH THỨC” VI ĐIỀU KHIỂN
Vi điều khiển có thể được “đánh thức” dưới tác động của một trong số các hiện
ĐƯỜNG KHÁNH SƠN Trang 30 tƣợng sau:
- Tác động của reset ngoại vi thông qua pin - Tác động của WDT khi bị tràn.
- Tác động từ các ngắt ngoại vi từ PORTB (PORTB Interrupt on change hoặc pin INT).
Các bit PD và TO đƣợc dùng để thể hiện trạng thái của vi điều khiển và để phát hiện nguồn tác động làm reset vi điều khiển. Bit đƣợc set khi vi điều khiển đƣợc cấp nguồn và đƣợc reset về 0 khi vi điều khiển ở chế độ sleep. Bit đƣợc reset về 0 khi WDT tác động do bộ đếm bị tràn.
Ngoài ra còn có một số nguồn tác động khác từ các chức năng ngoại vi bao gồm:
1) Đọc hay ghi dữ liệu thông qua PSP (Parallel Slave Port).
2) Ngắt Timer 1 khi hoạt động ở chế độ đếm bất đồng bộ.
3) Ngắt CCP khi hoạt động ở chế độ Capture.
4) Các hiện tƣợng đặc biệt làm reset Timer 1 khi hoạt động ở chế độ đếm bất đồng 5) bộ dùng nguồn xung clock ở bên ngoài).
6) Ngắt SSP khi bit Start/Stop đƣợc phát hiện.
7) SSP hoạt động ở chế độ Slave mode khi truyền hoặc nhận dữ liệu.
8) Tác động của USART từ các pin RX hay TX khi hoạt động ở chế độ Slavemode đồng bộ.
9) Khối chuyển đổi A/D khi nguồn xung clock hoạt động ở dạng RC.
10) Hoàn tất quá trình ghi vào EEPROM.
11) Ngõ ra bộ so sánh thay đổi trạng thái.
Các tác động ngoại vi khác không có tác dụng đánh thức vi điều khiển vì khi ở chế độ sleep các xung clock cung cấp cho vi điều khiển ngƣng hoạt động. Bên cạnh đó cần cho phép các ngắt hoạt động trước khi lệnh SLEEP được thực thi để bảo đảm tác động của các ngắt.
Việc đánh thức vi điều khiển từ các ngắt vẫn đƣợc thực thi bất chấp trạng thái của bit GIE. Nếu bit GIE mang giá trị 0, vi điều khiển sẽ thực thi lệnh tiếp theo sau lệnh SLEEP của chương trình (vì chương trình ngắt không được cho phép thực thi). Nếu bit GIE được set trước khi lệnh SLEEP được thực thi, vi điều khiển sẽ thực thi lệnh tiếp theo của chương trình và sau đó nhảy tới địa chỉ chứa chương trình ngắt (0004h).
ĐƯỜNG KHÁNH SƠN Trang 31 Trong trường hợp lệnh tiếp theo không đóng vai trò quan trọng trong chương trình, ta cần đặt thêm lệnh NOP sau lệnh SLEEP để bỏ qua tác động của lệnh này, đồng thời giúp ta dễ dàng hơn trong việc kiểm soát hoạt động của chương trình ngắt. Tuy nhiên cũng có một số điểm cần lưu ý như sau:
- Nếu ngắt xảy ra trước khi lệnh SLEEP được thực thi, lệnh SLEEP sẽ không được thực thi và thay vào đó là lệnh NOP, đồng thời các tác động của lệnh SLEEP cũng sẽ đƣợc bỏ qua.
- Nếu ngắt xảy ra trong khi hay sau khi lệnh SLEEP đƣợc thực thi, vi điều khiển lập tức đƣợc đánh thức từ chế độ sleep, và lệnh SLEEP sẽ đƣợc thực thi ngay sau khi vi điều khiển đƣợc đánh thức.
Để kiểm tra xem lệnh SLEEP đã đƣợc thực thi hay chƣa, ta kiểm tra bit PD. Nếu bit PD vẫn mang giá trị 1 tức là lệnh SLEEP đã không đƣợc thực thi và thay vào đó là lệnh NOP.
Bên cạnh đó ta cần xóa WDT để chắc chắn rằng WDT đã được xóa trước khi thực thi lệnh SLEEP, qua đó cho phép ta xác định đƣợc thời điểm vi điều khiển đƣợc đánh thức do tác động của WDT.
BỘ DAO ĐỘNG (OSCILLATOR)
PIC16F877A có khả năng sử dụng một trong 4 loại oscillator, đó là:
- LP: (Low Power Crystal).
- XT: Thạch anh bình thường.
- HS: (High-Speed Crystal).
- RC: (Resistor/Capacitor) dao động do mạch RC tạo ra.
Đối với các loại oscillator LP, HS, XT, oscillator đƣợc gắn vào vi điều khiển thông qua các pin OSC1/CLKI và OSC2/CLKO.
Đối với các ứng dụng không cần các loại oscillator tốc độ cao, ta có thể sử dụng mạch dao động RC làm nguồn cung cấp xung hoạt động cho vi vi điều khiển. Tần số tạo ra phụ thuộc vào các giá trị điện áp, giá trị điện trở và tụ điện, bên cạnh đó là sự ảnh hưởng của các yếu tố như nhiệt độ, chất lượng của các linh kiện qua các pin OSC1/CLKI vào OSC2/CLKO.
Các linh kiện sử dụng cho mạch RC oscillator phải bảo đảm các giá trị sau:
3 K < REXT< 100 K CEXT >20 pF
ĐƯỜNG KHÁNH SƠN Trang 32
Hình 2.8: RC oscillator