kd_Rash
Участник-
Постов
58 -
Зарегистрирован
-
Посещение
Репутация
0 ОбычныйИнформация о kd_Rash
-
Звание
Участник
-
точно-точно, без BOD-а ЕЕПРОМ слетал постоянно, пока я не узнал, что есть такая ВЕЩЬ, как BOD
-
попробуй подать сигнал с внеш. генератора - примерно 1 МГц если котел рабочий - должен откликнуться
-
:) потому что знал, что так можно, но как - не знал ... до этого момента
-
Всё таки добил - работает теперь луше чем было раньше! for (;;) { //---------------- if (timer_count_a > 11) { if (ADCSRA & Bit(ADIF) != 0) { x1=x2; x2=x3; x3=x4; x4=x5; x5=x6; x6=x7; x7=x8; x8=x9; x9=x10; x10=x11; x11=x12; x12=x13; x13=x14; x14=x15; x15=x16; x16=ADCrez; ADCSRA |= Bit(ADSC); } timer_count_a=0; } ... ... ... if (timer_count > 180) // 0.5 сек. { switch (g_Uset) { case 1: ADCSRA |= Bit(ADSC); // вывод напряжения ADCcp = (x1+x2+x3+x4+x5+x6+x7+x8+x9+x10+x11+x12+x13+x14+x15+x16) >> 4; Uadc = (0.1929 * (float)ADCcp) + 13; SetDataDisp (1,(unsigned short)Uadc); break; ... ... ... } timer_count=0; } timer_count++; timer_count_a++; ... Удачи, Дмитрий.
-
ну да ладно всем спасибо зато вопрос знаю теперь чуть лучше, любой опыт не лишний Удачи, Дмитрий.
-
попробовал результат стал стоять мертво, но если опять же Uadc ставить перед выводом на дисплей - опять перескакивает 12,9-13,2 ... спасибо результат стал стоять мертво (поторопился, извините - не лучше чем 11) вот
-
точно-точно, со стеками в ИАР-е надо дружить
-
мне кажется, что сформулировал более, чем достаточно если бы все здесь были такие как вы, то естественно, что я даже не стал регистрироваться на этом форуме а вопрос был в самом начале - стояла мега8. напряжение показывалось великолепно. выпаял и поставил мегу168 (кстати поменял их 2 греша на брак) - и начались перескакивания в напряжении укажите плз хотя бы одну причину Uadc у меня стояло сначала только перед выводом на дисплей. но когда я это поставил там где стоит - перескакивания исчезли полностью в купе с подсчетом среднего из 10-ти. пробовал брать 16, как Вы посоветовали - чуть стало похуже. беря последовательно среднее из от 2 до 20, лучшими стали из 10 и 11 спасибо
-
естественно так и надо но переделывать лень для первого варианта, а подумать и программно исправить - интерес спасибо исправлюсь :)
-
сделал все таки - и не скачет, и почти мгновенно ... #pragma vector = ADC_vect __interrupt void MY_ADC (void) { ADCrez = ADCL; ADCrez = ADCrez + (ADCH << 8); } ... ADMUX = Bit(REFS0) | Bit(REFS1); ADCSRA = Bit(ADEN) | Bit(ADIE) | Bit(ADPS2) | Bit(ADPS1) | Bit(ADPS0); ADCSRA |= Bit(ADSC); DIDR0 |= Bit(ADC0D); ... (main) ... for (;;) { if (ADCSRA & Bit(ADIF) != 0) { x1=x2; x2=x3; x3=x4; x4=x5; x5=x6; x6=x7; x7=x8; x8=x9; x9=x10; x10=ADCrez; ADCrez = (x1+x2+x3+x4+x5+x6+x7+x8+x9+x10)/10; Uadc = (0.1947 * (float)ADCrez) + 9.5684; ADCSRA |= Bit(ADSC); j++; } ... case 1: // вывод напряжения ADCSRA |= Bit(ADSC); j=0; SetDataDisp (1,(unsigned short)Uadc); break; ... правда, чтобы не загружать сильно процессор надо правильней наверно так: ... if (j<10) { if (ADCSRA & Bit(ADIF) != 0) { x1=x2; x2=x3; x3=x4; x4=x5; x5=x6; x6=x7; x7=x8; x8=x9; x9=x10; x10=ADCrez; ADCrez = (x1+x2+x3+x4+x5+x6+x7+x8+x9+x10)/10; Uadc = (0.1947 * (float)ADCrez) + 9.5684; ADCSRA |= Bit(ADSC); j++; } } ... но тогда показания меняются совсем медленно, и не могу понять почему :(
-
сделал так - уже лучше (да... креатифчик был :)) #pragma vector = ADC_vect __interrupt void MY_ADC (void) { static char t=0; static unsigned short x1=0,x2=0,x3=0; ADCrez = ADCL; ADCrez = ADCrez + (ADCH << 8); if (t <= 2) { x1=x2; x2=x3; x3=ADCrez; t++; } else { t=0; } ADCrez = (x1+x2+x3)/3; k=1; } ADMUX = Bit(REFS0) | Bit(REFS1); ADCSRA = Bit(ADEN) | Bit(ADIE) | Bit(ADPS2) | Bit(ADPS1) | Bit(ADPS0); ADCSRA |= Bit(ADSC);DIDR0 |= Bit(ADC0D); case 1: ADCSRA |= Bit(ADSC); while (k==0) {;} Uadc = (0.1947 * (float)ADCrez) + 9.5684; SetDataDisp (1,(unsigned short)Uadc); k=0; break;
-
да, но почему с мегой8-ой такого не было :crying: хотелось бы понять(найти) причину
-
спасибо всем! на ADC0 и на AREF поставил по кондеру по 2 мкф - не помогло ADCrez и k - глобальные t++ перенес, ошибся короче разводка не очень удачная - надо как-то программным путем. а мое усреднение не очень устраивает, т.к. изменения напряжения показываются с задежкой да, забыл сказать, до этого у меня стояла мега8 - было все ок и на схеме только показал работу АЦП, остальную переферию убрал для простоты. т. ч. все ноги у меги заняты повторюсь - стояла мега8 и без всякого усреднения напряжение не перескакивало. выпаял ее и поставил 168-ю, изменив делитель под опорное 1,1В- 7,5 и 0.5 кОм (у 8меги - 2,56 было и в делители стояли 7,5 и 1 кОм)+ 2мкф.
-
ADC.rar вкратце, конечно