![]() |
|
|
#4 |
|
Đệ tử 4 túi
Tham gia ngày: May 2009
Bài gửi: 74
: |
đọc ecoder
mình thấy chưong trình của bạn có 1 số vấn đề sau:
- đọc xung ecoder bạn không nên dùng ngắt ngoài mà nên dùng timer ở chế độ counter (đếm xung ngoài) vì khi dùng ngắt ngoài thì với ecoder khoảng 300xung/vong thì chương trình luôn bị ngắt gọi và luôn thực hiên ngắt mà o làm dc gì cả - lỗi căn bản về cấu trúc chưong trình khi bạn khai báo sử dụng ngắt thì khi thỏa mẵn điều kiện có ngắt thì chương trình chính tạm dừng công việc và nhảy đến chương trình ngắt thực hiện ct ngắt ,thực hiện xong thì lại về ct chinh main chứ bạn o dc gọi nó như thế này???? #INT_TIMER1 void read_realspeed() {......} while(1) {read_realspeed(); xuat_lcd(real_speed); pid(); } -lỗi của bạn khi sử dụng timer đó lag timer1 là timer 16bit giá trị nạp vào từ 0->65535 cứ o phải set_timer1(65555); quá giá trị 16bit ->tràn ->(dạng hex 10013)thực chất bạn chỉ nạp vào timer1 là 13hexa -> đấy là 1 số vấn đè bạn gắp phải ,bạn sủa lại chương trình và đưa lênc ho mọi người xem -> mình làm cái này rồi .cách do tấn số xung ecoder là mình tạo ra 1 ngắt timer 1s và 1 timer hoạt động ở chế độ counter(đếm xung ecoder)-> cứ 1s xẩy ra ngắt thì đọc giá trị counter và thiết lập lai thông số cho các timer khi đó ta đựoc số xung/1s ->tần số bạn có thể tham khảo code của mình |
|
|
|
| Ðiều Chỉnh | |
| Xếp Bài | |
|
|