Tôi gặp sự cố khi nhận bộ mã hóa vòng quay hoạt động bình thường với bộ điều khiển vi AVR. Bộ mã hóa là một máy cơ khí ALPS encoder và tôi đang sử dụng Atmega168.Sử dụng bộ mã hóa vòng quay với bộ điều khiển AVR Micro
Làm rõ
Tôi đã cố gắng sử dụng một Interrupt ngoài để lắng nghe các chân, nhưng nó có vẻ như nó là quá chậm. Khi Pin A cao, thủ tục ngắt sẽ bắt đầu và sau đó kiểm tra xem Pin B có cao không. Ý tưởng là nếu Pin B cao thì thời điểm Pin A cao, sau đó nó quay ngược chiều kim đồng hồ. Nếu Pin B thấp, thì nó xoay theo chiều kim đồng hồ. Nhưng có vẻ như AVR mất quá nhiều thời gian để kiểm tra Pin B, vì vậy nó luôn được đọc là cao.
Tôi cũng đã cố gắng tạo chương trình chỉ đơn giản là chặn cho đến khi thay đổi Pin B hoặc Pin A. Nhưng nó có thể là có quá nhiều tiếng ồn khi bộ mã hóa được xoay, bởi vì điều này không hoạt động. Nỗ lực cuối cùng của tôi là có bộ đếm thời gian lưu trữ 8 giá trị cuối cùng trong bộ đệm và kiểm tra xem nó có đang từ thấp đến cao hay không. Cái này cũng không làm việc.
Tôi đã thử dò tìm bộ mã hóa và dường như sử dụng từ 2 đến 4ms từ lần thay đổi Pin đầu tiên cho đến khi thay đổi Pin khác.
Nó là ok như là một "hobbyist" giải pháp. Tuy nhiên, phần cứng phụ (điện trở/tụ điện) không được đánh giá thấp. Đó là lý do tại sao phần mềm debouncing là một giải pháp "tốt hơn" (IMHO). –
Điều tuyệt vời về giải pháp phần cứng là nó cung cấp sự bảo vệ bổ sung từ ESD từ người dùng. Không được tối ưu hóa cho điều đó, tất nhiên, nhưng một chút tiền thưởng. –
Tôi nghĩ mạch của bạn không hiển thị bộ lọc LP thụ động từ bộ mã hóa đến µC. Bạn phải trao đổi vị trí của điện trở và tụ điện. –