критика не АВРок, а стиля программирования. Я посмотрем Вашу страничку.Вы толковое дело делаете и делаете его аккуратно и педантично.
И так - Замечание по программированию -Не пишите так программы.
1. структура программы -
МК- реагирует на внешние события- разбивайте программу по типам событий.
а)основа - отсчет времени таймером(одно главное прерывание- сердечный ритм программы)+ бесконечный цикл
б)события периодические во времени- таймер пункта а
в)события "быстрые" и не периодические или очень быстрые периодические - время реакции от 20-30 тактов и до нескольких тысяч- используем прерывания компаратора, по фронту и т.п.- но избегайте лишних прерываний
г) события "медленные"- время реакции больше чем в пункте в - используем таймер пункта а и флаги
д) вычисления и очень медленные события.- используем бесконечный цикл.
2) пишите внятные комментарии.
3) смотрите что и как компилирует CVAVR - файлы .map .lst -управляйте размещением переменных, стеками и всякими прелестями, все описано в хелпе к CVAVRру
4) собственно вытекающий из п.3. так писать не надо-
не if ((PINB.0==0) & (PINB.3==0)), а if( (PINВ&0b00001001)==0)
не PORTD.0=(!PORTD.0), а PORTD.0=~PORTD.0 или PORTD.0++(больше тактов, но красивее)
не //делаем 5 измерений
//и усредняем (для большей точности), а используем скользящие среднее - примитивная фильтрация ну, а если уж сильно хочется усреднять так хоть делим на степень двойки- операция сдвига "››"
и т.д. кстати
// Delay needed for the stabilization of the ADC input voltage
delay_us(10);- это есть ересь т.к. если выбран канал без усилителя то задержка не нужна, а если с усилителем, то задержка должна быть больше.
ЗЫ Могу продолжить пункт 4 или объяснить подробнее то, что написал.
ЗЫЫ я не буду переписывать код или писать свои "уроки" и доказывать лично что так лучше(чтобы это избежать я спросил разрешения.
![Улыбка](images/smilies/icon_smile.gif)
) т.к. я разгильдяй и лентяй.Но если поймете и учтете мои замечания- будет абсолютно другой уровень.- будет краасиво.