Перейти к содержанию
    

kd_Rash

Участник
  • Постов

    58
  • Зарегистрирован

  • Посещение

Репутация

0 Обычный

Информация о kd_Rash

  • Звание
    Участник
    Участник
  1. Зависания АВР

    точно-точно, без BOD-а ЕЕПРОМ слетал постоянно, пока я не узнал, что есть такая ВЕЩЬ, как BOD
  2. попробуй подать сигнал с внеш. генератора - примерно 1 МГц если котел рабочий - должен откликнуться
  3. :) потому что знал, что так можно, но как - не знал ... до этого момента
  4. Всё таки добил - работает теперь луше чем было раньше! 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++; ... Удачи, Дмитрий.
  5. ну да ладно всем спасибо зато вопрос знаю теперь чуть лучше, любой опыт не лишний Удачи, Дмитрий.
  6. попробовал результат стал стоять мертво, но если опять же Uadc ставить перед выводом на дисплей - опять перескакивает 12,9-13,2 ... спасибо результат стал стоять мертво (поторопился, извините - не лучше чем 11) вот
  7. точно-точно, со стеками в ИАР-е надо дружить
  8. мне кажется, что сформулировал более, чем достаточно если бы все здесь были такие как вы, то естественно, что я даже не стал регистрироваться на этом форуме а вопрос был в самом начале - стояла мега8. напряжение показывалось великолепно. выпаял и поставил мегу168 (кстати поменял их 2 греша на брак) - и начались перескакивания в напряжении укажите плз хотя бы одну причину Uadc у меня стояло сначала только перед выводом на дисплей. но когда я это поставил там где стоит - перескакивания исчезли полностью в купе с подсчетом среднего из 10-ти. пробовал брать 16, как Вы посоветовали - чуть стало похуже. беря последовательно среднее из от 2 до 20, лучшими стали из 10 и 11 спасибо
  9. естественно так и надо но переделывать лень для первого варианта, а подумать и программно исправить - интерес спасибо исправлюсь :)
  10. сделал все таки - и не скачет, и почти мгновенно ... #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++; } } ... но тогда показания меняются совсем медленно, и не могу понять почему :(
  11. сделал так - уже лучше (да... креатифчик был :)) #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;
  12. да, но почему с мегой8-ой такого не было :crying: хотелось бы понять(найти) причину
  13. спасибо всем! на ADC0 и на AREF поставил по кондеру по 2 мкф - не помогло ADCrez и k - глобальные t++ перенес, ошибся короче разводка не очень удачная - надо как-то программным путем. а мое усреднение не очень устраивает, т.к. изменения напряжения показываются с задежкой да, забыл сказать, до этого у меня стояла мега8 - было все ок и на схеме только показал работу АЦП, остальную переферию убрал для простоты. т. ч. все ноги у меги заняты повторюсь - стояла мега8 и без всякого усреднения напряжение не перескакивало. выпаял ее и поставил 168-ю, изменив делитель под опорное 1,1В- 7,5 и 0.5 кОм (у 8меги - 2,56 было и в делители стояли 7,5 и 1 кОм)+ 2мкф.
×
×
  • Создать...