IceSandwich
Thành Viên PIF
Em đang viết chương trình dò line cho robot, đọc adc của 8 chân từ AN0 -> AN7 nhưng gặp vấn đề sau đây:
Ý tưởng của chương trình là đọc adc trả về của cảm biến để biết vị trí trên line, sau đó định thời gian cứ mỗi 1ms đọc cảm biến 1 lần. Ở đây em dùng quét 8 kênh adc sau đó định thì bằng timer0 để đọc.
Em xây dựng hàm
, chỉ cần gọi nó là sẽ thay đổi giá trị của biến
và đặt nó trong ngắt timer0.
Chương trình viết riêng cho đọc cảm biến thì chạy tốt, cả timer0 cũng chạy đúng luôn, nhưng khi ghép 2 module lại thì nó lại chạy sai (tức ko chạy)
Em nghĩ vấn đề ở đây là khi muốn đọc adc thì phải xử lí ngắt adc, cùng lúc đó định thì timer0 tràn 1ms thì vào ngắt, tức khi timer0 tràn thì vào ngắt xử lí adc, như vậy có nghĩa là đang ở trong ngắt của timer0 thì lại gọi ngắt của adc ra và em nghĩ lỗi xảy ra ở chỗ đó.
Cấu trúc trong ngắt của em là:
Em chưa tìm ra cách khắc phục vấn đề này, mong anh chị và các bạn giúp đỡ
Ý tưởng của chương trình là đọc adc trả về của cảm biến để biết vị trí trên line, sau đó định thời gian cứ mỗi 1ms đọc cảm biến 1 lần. Ở đây em dùng quét 8 kênh adc sau đó định thì bằng timer0 để đọc.
Em xây dựng hàm
Code:
sensor_read()
Code:
sensor
Chương trình viết riêng cho đọc cảm biến thì chạy tốt, cả timer0 cũng chạy đúng luôn, nhưng khi ghép 2 module lại thì nó lại chạy sai (tức ko chạy)
Em nghĩ vấn đề ở đây là khi muốn đọc adc thì phải xử lí ngắt adc, cùng lúc đó định thì timer0 tràn 1ms thì vào ngắt, tức khi timer0 tràn thì vào ngắt xử lí adc, như vậy có nghĩa là đang ở trong ngắt của timer0 thì lại gọi ngắt của adc ra và em nghĩ lỗi xảy ra ở chỗ đó.
Cấu trúc trong ngắt của em là:
Code:
void interrupt isr()
{
if(ADIF && ADIE)
{
// Code xử lí trong ngắt ADC
};
if(T0IF && T0IE)
{
// Code xử lí ngắt t0
}
}