ATtiny2313 и USART

Тема в разделе "Микроконтроллеры AVR", создана пользователем NR55RU, 9 июл 2016.

  1. NR55RU

    NR55RU Гик

    Игрался я тут с ATtiny2313 изучая работу с USART на ассемблере и столкнулся с одной не совсем очевидной ситуацией, для начинающего разбираться. проблему решил, опишу, может поможет потом кому время сэкономить. :)

    Решил включить USART только на прием и сделать простую мигалку диодном по команде.
    Программа работает на прерываниях. Для связи с МК использовал готовый USB<->USART конвертор.
    МК тактировался от встроенного генератора на 1Mz. Скорость USART выставил 9600
    Все собрал, прошил ... работает ....но работает странно, иногда команда выполняется иногда нет, скажем так на глаз в 80% случаях она выполнялась, но один фиг.. не айс.

    Возможные причины определил несколько
    1. Конвертор. Подключил его к Арудине, там все идеально .. отмел
    2. Код. В симуляторе более или менее проверил, работает .. отмел
    3. Ошибки при передаче. Так как я пока не сильно разбираюсь в прямой настройке МК, не стал играться с прерываниями ошибок а пошел курить документацию на контроллер в которой ответа не нашел, примеры кода были идентичны моим. Но наткнулся в инете на таблицы расчета значения регистра для установки скорости, и там была самая любопытная колонка ОШИБКИ, и вуаля .. как оказалось при 1Mz и скорости 9600 порядка 8% шибок, поставил 1200 (хотя можно было и 4800), согласно таблице это всего 0.2% ошибок и вот оно все заработало отлично.

    И того, проблема была в том что тактовая частота моего МК была слишком маленькой что бы можно было его точно настроить на работу протокола на этой скорости :)

    Вот ссылка на таблицы, если кому будет нужно.
     
    Airbus, DIYMan и ostrov нравится это.
  2. Radius

    Radius Гик

    В таблице говорится не о 8% ошибок, а о том что частота UART отличается от номинала на 8%. Для стартстопной синхронизации, а все асинхронные порты работают по этому принципу, отклонение частоты передачи данных на 8% является уже пограничным состоянием. Главное чтобы за время передачи 10 бит (стартовый бит+8 бит данных+стоповый бит) частоты не разбежались более чем на время передачи половины бита.
     
    DIYMan нравится это.
  3. Airbus

    Airbus Радиохулиган Модератор

    А какая тактовая частота была?У меня 4 Мгц (просто полкило кварцев имеется)иногда 8 Мгц и бодрейт 9600 (самый любимый ГСМ телефонами и ГСМ Шилдами) и всё чётко работает. Вообще правило такое :"чем больше тактовая частота тем меньше ошибок". Да и на таблице видно чем выше тактовая тем меньше красных (косячных)секторов.