Chattering, hay còn gọi hiện tượng "bị dội" là một điều rất cần chú ý khi làm thực nghiệm. Khi mình học về interrupt thông qua bit thứ 0 của portB. Mình làm một bài tập cụ thể như sau: cứ mỗi lần bật-tắt switch (được nối với RB_0) thì 5 cái LED (được nối với portA) sẽ thay đổi kiểu chiếu sáng theo một quy luật nhất định nào đấy.
-Về "quy luật nhất định nào đấy" thì mình sử dụng kỹ thuật tham chiếu bảng để thay đổi giá trị của portA.
-Để mỗi lần bật-tắt switch thì thay đổi giá trị portA mình sử dụng interrupt bằng RB0.
Mục đích của thực nghiệm này là học về interrupt qua RB0 và kỹ thuật tham chiếu bảng.
Mình đã viết chương trình và debug thử trên máy tính. Kết quả rất tốt. Sau đó mình lắp mạch cụ thể và cho chạy thì khi mỗi lần bật-tắt switch thì portA cũng thay đổi giá trị nhưng không theo quy luật mình đã định trước. Mình đã tham khảo kỹ PIC_tutorial bằng tiếng Việt (down được trên diễn đàn này, cái tutorial này hình như của bác nào dịch từ tutorial tiếng Anh, ở phần cuối tutorial này vẫn còn nguyên tiếng Anh) về phần interupt bằng RB0. Thậm chí còn copy y chang code, làm một cái mạch giống y chang như trong tutorial nhưng kết quả chạy trên mạch vẫn loạn xạ ngầu.
Hic,hic, mệt quá, đi ăn cơm. Trong lúc ngồi gặm gạo luộc, nghĩ ngợi lung tung... Rõ ràng là debug trên máy tính đúng như mong đợi. Nhưng chạy trên mạch sai, chứng tỏ mạch có vấn đề. Vậy tại sao mình làm một mạch y chang như trong hướng dẫn vẫn bị sai???........... Ơ-rê-ca, chỉ có thể là nó - chattering. Chính vì chattering mà khi bất-tắt switch, giá trị của RB0 biến đổi loạn xạ làm số lần interupt tăng loạn xạ luôn.
Vậy xử lí chattering như thế nào? Mình sử dụng SR-flip-flop để trị thằng này.
switch_by_SR_flip_flop.JPG
Và tất nhiên, trị xong chattering xong chẳng còn vấn đề gì.
Mình có nghe nói có thể
xử lí chattering bằng phần mềm nhưng không rõ cụ thể như thế nào. Mong bác nào biết chỉ bảo cho
Ngoài ra, một kinh nghiệm xương máu nữa là liên quan đến RA4. Thằng RA4 khác với mấy thằng RAx hay RBx khác. Đó là do trong cấu tạo PIC, ở mấy pin của các port đã có sẵn một FET đóng vai trò như một điện trở kéo lên. Riêng ở pin RÃ thì không có cái FET này nên khi nối RÃ với LED thông qua một điện trở thích hợp và set cho RA4 bằng 1, LED sẽ không sáng. Do vậy, cần mắc thêm một điện trở kéo lên ngay tại pin của RA4 để giải quyết vấn đề này.
Nhưng có một điều mình vẫn chưa biết là
chức năng TOCKI của RA4 là gì và được sử dụng như thế nào. Mong các bác chỉ bảo