Игрался я тут с ATtiny2313 изучая работу с USART на ассемблере и столкнулся с одной не совсем очевидной ситуацией, для начинающего разбираться. проблему решил, опишу, может поможет потом кому время сэкономить. Решил включить USART только на прием и сделать простую мигалку диодном по команде. Программа работает на прерываниях. Для связи с МК использовал готовый USB<->USART конвертор. МК тактировался от встроенного генератора на 1Mz. Скорость USART выставил 9600 Все собрал, прошил ... работает ....но работает странно, иногда команда выполняется иногда нет, скажем так на глаз в 80% случаях она выполнялась, но один фиг.. не айс. Возможные причины определил несколько 1. Конвертор. Подключил его к Арудине, там все идеально .. отмел 2. Код. В симуляторе более или менее проверил, работает .. отмел 3. Ошибки при передаче. Так как я пока не сильно разбираюсь в прямой настройке МК, не стал играться с прерываниями ошибок а пошел курить документацию на контроллер в которой ответа не нашел, примеры кода были идентичны моим. Но наткнулся в инете на таблицы расчета значения регистра для установки скорости, и там была самая любопытная колонка ОШИБКИ, и вуаля .. как оказалось при 1Mz и скорости 9600 порядка 8% шибок, поставил 1200 (хотя можно было и 4800), согласно таблице это всего 0.2% ошибок и вот оно все заработало отлично. И того, проблема была в том что тактовая частота моего МК была слишком маленькой что бы можно было его точно настроить на работу протокола на этой скорости Вот ссылка на таблицы, если кому будет нужно.
В таблице говорится не о 8% ошибок, а о том что частота UART отличается от номинала на 8%. Для стартстопной синхронизации, а все асинхронные порты работают по этому принципу, отклонение частоты передачи данных на 8% является уже пограничным состоянием. Главное чтобы за время передачи 10 бит (стартовый бит+8 бит данных+стоповый бит) частоты не разбежались более чем на время передачи половины бита.
А какая тактовая частота была?У меня 4 Мгц (просто полкило кварцев имеется)иногда 8 Мгц и бодрейт 9600 (самый любимый ГСМ телефонами и ГСМ Шилдами) и всё чётко работает. Вообще правило такое :"чем больше тактовая частота тем меньше ошибок". Да и на таблице видно чем выше тактовая тем меньше красных (косячных)секторов.