Туториал фича для uarta

Тема в разделе "AVR", создана пользователем koteika, 20 дек 2015.

  1. koteika

    koteika В доску свой

    Сообщения:
    768
    Симпатии:
    118
    Род занятий:
    программирование
    В общем стало лень считать значения регистров для вычисления скорости обмен по юарту для двух устройств, а решил доверить это компьютеру..
    Вот такое вот решение.

    Код:
    /*частота работы микроконтроллера*/
    #define F_CPU 8000000UL
    
    /*нужная нам скорость*/
    #define BAUD 9600L
    /*формула для расчета значения*/
    #define UBRRL_value (F_CPU/(BAUD*16))-1 //
    Далее пихаем полученное значение в регистры UBRRH и UBRRL:

    Код:
    void uart_init( void )
    {
        /*младший байт*/
        UBRRL = UBRRL_value;   
        /*старший байт*/ 
        UBRRH = UBRRL_value >> 8;
         
        /*другие настройки*/  
    }
    Закидываем данные строчки в наши исходники;

    Так как данный регистр одинаков для мк серии atmega и attiny, то будет работать)
    Проверил на atmega8 и attiny2313.
    Передача и прием идут отлично.
    .ctor нравится это.
     
    : uart, atmega, attiny, baud
  2. timsoon

    timsoon В доску свой

    Сообщения:
    380
    Симпатии:
    46
    Род занятий:
    КИПиА, it, и прочее
    Адрес:
    г.Капчагай
    согласен, очень удобно.
    но если значение этого регистра вычислится не близко к целому. например 17,5 мы этого не увидим
    , и как поведет себя уарт(глюки будут)?
  3. nomugop

    nomugop Живет здесь

    Сообщения:
    102
    Симпатии:
    17
    Адрес:
    Алматы
    он нигде не использовал float или double соответственно значение с плавающей точкой получится вроде как не может
  4. UL7AAjr

    UL7AAjr В доску свой

    Сообщения:
    1.915
    Симпатии:
    318
    Род занятий:
    инженер-программист
    Адрес:
    Алма-Ата
    Там +/- 5% ничего страшного.
  5. koteika

    koteika В доску свой

    Сообщения:
    768
    Симпатии:
    118
    Род занятий:
    программирование
    одинаково округлится, так как значение целое.
    если два мк работают на одной частоте, одной скорости, и формула одна и та же , то и результат будет одинаков.

    ну и плюс погрешность допускается.
    Последнее редактирование: 22 дек 2015
    timsoon нравится это.
  6. timsoon

    timsoon В доску свой

    Сообщения:
    380
    Симпатии:
    46
    Род занятий:
    КИПиА, it, и прочее
    Адрес:
    г.Капчагай
    Извеняюсь , вопрос не конкретизировал.
    Просто когда связывал мк и пк . На пк скорость жестко задается. А на мк по этой формуле этот регистр вычислился и округлился так, что связь не пошла(получил кваказябры). Почитав про уарт..: там советуют при выборе частоты и скорости передачи стараться результата близкого к целому часлу.
    Может мне показалось, но после подгонки частоты связь пошла.
    А данный фитч для связи мк и мк идеален.
    Еще хочу спросить : вы связывали несколько мк в систему по уарт. Если можете ткните носом в источник не могу найти нормальных описаний.
  7. UL7AAjr

    UL7AAjr В доску свой

    Сообщения:
    1.915
    Симпатии:
    318
    Род занятий:
    инженер-программист
    Адрес:
    Алма-Ата
    Если несколько МК, то к UART лучше добавить драйвер RS485. Простой RS232 плохо подходит для организации сети.
    [​IMG]
  8. timsoon

    timsoon В доску свой

    Сообщения:
    380
    Симпатии:
    46
    Род занятий:
    КИПиА, it, и прочее
    Адрес:
    г.Капчагай
    и все, не надо переходить на усарт, а то не хотелось бы мучиться?
    И еще интересно: в данной реализации можно сделать просто отправку 8бит. если в программе написана реакция на это число устройство реагирует , а если этого числа нет в программе, тогда реагирует другое устройство где описано оно.?
    тоесть без всяких адресов?
  9. UL7AAjr

    UL7AAjr В доску свой

    Сообщения:
    1.915
    Симпатии:
    318
    Род занятий:
    инженер-программист
    Адрес:
    Алма-Ата
    Я эту технологию использую давно. Большим преимуществом является высокая помехозащищенность. Там "1" и "0" определяются разницей потенциалов между линией А и В. Обычная помеха одинаково влияет на обе линии и никак не влияет на сигнал. Подключение линий производится через одну микросхеме драйвера 485 прямо к порту UART. Без проблем сопрягаются устройства с питанием 5В и 3.3В.

    Можно. Это по сути и будет адрес.
    timsoon нравится это.
  10. radioengineer

    radioengineer Администратор Команда форума

    Сообщения:
    3.592
    Симпатии:
    357
    Адрес:
    Алматы
    Для AVR рекомендуется ставить специальные кварцевые резонаторы с уартовскими частотами, например 11.592 МГц и т.д. Тогда остатка не будет или он будет минимальным.
    timsoon нравится это.
  11. timsoon

    timsoon В доску свой

    Сообщения:
    380
    Симпатии:
    46
    Род занятий:
    КИПиА, it, и прочее
    Адрес:
    г.Капчагай
    блин не туда написал

Поделиться этой страницей