Em viết một chương trình đo tốc độ động cơ dùng encoder (mặc dù trong tay chưa có cái encoder nào hết!
). Cách làm của em như sau: dùng chức năng capture để bắt xung lên hay xuống khi động cơ quay làm che encoder. Đọc giá trị timer1 tại lúc đó. Xóa cờ và tiếp tục đợi đến khi nào có xung để đọc tiếp. Sau đó lấy 2 giá trị đó trờ nhau (16bit), rối ở chỗ này, Timer1 có 16bit, em nhét 2 nữa 8bit vào 1 biến 16bit. Sau đó trừ 2 cái biến 16bit đó với nhau. Nhưng kết quả thỉnh thoảng ra số âm! Dù không bị tràn timer1 nhưng cũng xảy ra số âm. Theo em thì do PIC hiểu nhầm số đó là số 16bit có dấu nên khi xuất ra lcd thì thành số âm. Dẫn đến kết quả em tính tốc độ quay cũng sai nốt!
Giải pháp tạm thời của em là chỉ dùng 8bit cao. Trừ 2 giá trị 8bit cao cho nhau rồi nhân thêm 2^8. Coi như bỏ luôn 8bit thấp.....kết quả vẫn không đúng!
P.S: mạch phần cứng, chỗ encoder em dùng ruột của con chuột bi được ko ? Có ai làm thành công mạch này chưa, chỉ em với ạ!
). Cách làm của em như sau: dùng chức năng capture để bắt xung lên hay xuống khi động cơ quay làm che encoder. Đọc giá trị timer1 tại lúc đó. Xóa cờ và tiếp tục đợi đến khi nào có xung để đọc tiếp. Sau đó lấy 2 giá trị đó trờ nhau (16bit), rối ở chỗ này, Timer1 có 16bit, em nhét 2 nữa 8bit vào 1 biến 16bit. Sau đó trừ 2 cái biến 16bit đó với nhau. Nhưng kết quả thỉnh thoảng ra số âm! Dù không bị tràn timer1 nhưng cũng xảy ra số âm. Theo em thì do PIC hiểu nhầm số đó là số 16bit có dấu nên khi xuất ra lcd thì thành số âm. Dẫn đến kết quả em tính tốc độ quay cũng sai nốt!Giải pháp tạm thời của em là chỉ dùng 8bit cao. Trừ 2 giá trị 8bit cao cho nhau rồi nhân thêm 2^8. Coi như bỏ luôn 8bit thấp.....kết quả vẫn không đúng!
P.S: mạch phần cứng, chỗ encoder em dùng ruột của con chuột bi được ko ? Có ai làm thành công mạch này chưa, chỉ em với ạ!

Comment