Написал я наконец программу для своего устройства, все работало четко, пока не понадобилось внести еще дополнение в программу.
Собственно скидываю часть программы, где обнаружил, что происходит глюк:
- Код: Выделить всё • Развернуть
void ADC_dathika_gazz(void)
{
unsigned char p;
unsigned long int Vsr = 0;// Vsr может быть максимум
unsigned int a;
for (p=0;p<sredn_tochka;p++) // не более 63 выборок!!!
{
if (stabilizator_GAZ == 1) ADC_bort = 600;
else {
//Инициализация входа АЦП для изм борт напряжения
ADMUX=0b00000101; // bit 7,6=1 - внутр. ИОН= 5 в, bit 3,2,1,0 канал АЦП-adc5
ADCSRA=0b10001111; // бит 7 - разрешить, бит 0..2 частота преобразования, 3 бит - разрешить прерывание
Voltmetr (); //измеряем бортовое напряжение
ADC_bort = Srednee_znahenie_ADC ; //присваеваем значение АЦП борт сети
}
//Инициализация входа АЦП для изм датчика газа
ADMUX=0b00000111; // bit 7,6=1 - внутр. ИОН= 5 в, bit 3,2,1,0 канал АЦП-adc7
ADCSRA=0b10001111; // бит 7 - разрешить, бит 0..2 частота преобразования, 3 бит - разрешить прерывание
Voltmetr ();
ADC_dathika_gazzz = (Srednee_znahenie_ADC*1000 )/ADC_bort ;
if (stabilizator_GAZ == 1) ADC_bort = 600;
else {
//Инициализация входа АЦП для изм борт напряжения
ADMUX=0b00000101; // bit 7,6=1 - внутр. ИОН= 5 в, bit 3,2,1,0 канал АЦП-adc5
ADCSRA=0b10001111; // бит 7 - разрешить, бит 0..2 частота преобразования, 3 бит - разрешить прерывание
Voltmetr (); //измеряем бортовое напряжение
ADC_bort = Srednee_znahenie_ADC ; //присваеваем значение АЦП борт сети
}
//Инициализация входа АЦП для изм датчика газа
ADMUX=0b00000111; // bit 7,6=1 - внутр. ИОН=2,56в, bit 3,2,1,0 канал АЦП-adc7
ADCSRA=0b10001111; // бит 7 - разрешить, бит 0..2 частота преобразования, 3 бит - разрешить прерывание
Voltmetr ();
a = ADC_dathika_gazzz - ((Srednee_znahenie_ADC *1000)/ADC_bort);
if (a == 0) Vsr=Vsr+ADC_dathika_gazzz ;
else p--;
}
ADC_dathika_gazzz = Vsr/sredn_tochka;
if (ADC_dathika_gazzz > 1 ) IGN_gaz = 1;
else IGN_gaz = 0 ;
}
Вопщем раскажу поподробнее: если эту строчку if (stabilizator_BENZ_bit == 1) ADC_bort = 600;
изменить на if ( 1) ADC_bort = 600; то глюка нет (но мне эта строчка не нужна)
Но если я это пишу, то у меня глюк вылазиет (перестает измерятся температура, такое ощущение что инициализация термодатчиков не произошла, постоянно НОЛЬ пишет)
Я не понимаю, что за касяк. Переменная stabilizator_BENZ_bit нигде не используется, в том плане, что бы задать ей новое значение, то мне надо зайти в дополнительное меню и выставить. То есть эта переменная ни каким образом не пересекается с температурой.