Các pác cho đệ hỏi một vấn đề dễ nhưng vẫn đang hết sức đau đầu, đệ có 1 rotary encoder 2 channel sóng vuông lệch pha 90 độ, đệ cho channel 1 nối vào INT0 với thiết lập "rising edge", còn trong hàm interrupt thì poll channel còn lại:
interrupt [EXT_INT0] void ext_int0_isr(void)
{
// Place your code here
if(PIND.2==1) count++;
else count--;
}
Điều quái gở là count lúc nào cũng nhận giá trị âm, bất chấp quay ngược quay xuôi. Chỉ đến khi đệ quay trục động cơ thật chậm bằng tay thì nó mới tăng lên nhưng cũng không đều, các pác cho hỏi vì sao vậy, encoder xem trên Oscilloscope thì bình thường, ko có vấn đề gì. Đệ cảm ơn trước.
interrupt [EXT_INT0] void ext_int0_isr(void)
{
// Place your code here
if(PIND.2==1) count++;
else count--;
}
Điều quái gở là count lúc nào cũng nhận giá trị âm, bất chấp quay ngược quay xuôi. Chỉ đến khi đệ quay trục động cơ thật chậm bằng tay thì nó mới tăng lên nhưng cũng không đều, các pác cho hỏi vì sao vậy, encoder xem trên Oscilloscope thì bình thường, ko có vấn đề gì. Đệ cảm ơn trước.
Comment