Gửi bởi
CKD
Delay sau vòng lặp for mà. Nội dung của cái đoạn code đó nôm na thế này.
Khởi tạo.
Phát 5000 xung đồng thời báo cáo số xung qua RS232
Chờ 2000ms
Lăp lại quá trình.
Có nhiều nguyên nhân gây chậm trong chương trình này.
- Arduino không phải không thể chạy nhanh hơn (vì nó vẫn dùng atmega32 16MHz như nhiều ứng dụng đơn giản khác). Nhưng các lệnh của nó đều chạy qua thư viện, nên in/out của nó đều phải tra qua pin map. Do đó nó mất nhiều thời gian mới thay đổi trạng thái của 1 in/out được.
- Mỗi khi thay đổi trạng thái, đều phải báo cáo qua RS232, làm mất thêm một khoảng thời gian chờ thực hiện xong việc này.
- Ngay cả delayMicroseconds(1) nó cũng ngốn mất khá thời gian, thực hiện riêng lệnh đã mất đâu hơn 10us.
Để cải thiện.
- Tăng tốc tối đa cho giao tiếp RS232, hoặc bỏ luôn, chỉ báo cáo khi hoàn tất 5000 xung.
- Thay vì dùng các lệnh như digitalWrite thì dùng bitwise (như bitRead, bitWrite v.v...) để truy cập trực tiếp lên pin/port của vxl sẽ cải thiện nhiều về tốc độ. Tất nhiên khi truy cập trực tiếp lên pin/port thì ta phải nắm rỏ pinout của vxl, vì lúc đó output nó không theo pin number của arduino nữa.