Скорость UART (Mega162)

Программирование микроконтроллеров AVR, PIC, ARM.
Разработка и изготовление печатных плат для модулей.

Скорость UART (Mega162)

Сообщение Strijar » 14 ноя 2007, 17:12

Может кто сталкивался - работает только до 38000бод. 9600, 19200 - замечательно. 57600 уже с ошибками, 115200 не один байт не попадает. Кварца нет, на внутреннем 8мгц. Не критично пока - просто не приятно ;)

Код: Выделить всё
#include <avr/interrupt.h>
#include <avr/io.h>

#define BAUD    9600

void UartSend(char *str) {
    char *data = str;

    while (*data) {
        while (! (UCSR0A & (1 << UDRE0)) ) {
            __asm__ __volatile__ ("nop");
        }
        UDR0 = *data;
        data++;
    }
}

void UartChar(char data) {
    while (! (UCSR0A & (1 << UDRE0)) ) {
        __asm__ __volatile__ ("nop");
    }
    UDR0 = data;
}

void UartInit() {
    unsigned int baud;

    baud = F_CPU/(16L*BAUD)-1;

    UBRR0H = (unsigned char)(baud >> 8);
    UBRR0L = (unsigned char)(baud);

    UCSR0B = (1 << RXEN0) | (1 << TXEN0);
    UCSR0C = (1 << URSEL0) | (1 << UCSZ01) | (1 << UCSZ00);
}
Аватара пользователя
Strijar
 
Сообщения: 664
Зарегистрирован: 28 авг 2006, 17:09
Откуда: Всеволожск (СПб)
прог. языки: С, C++, Python, Lua, VHDL, Verilog, Forth
ФИО: Олег Белоусов

Re: Скорость UART (Mega162)

Сообщение Vooon » 14 ноя 2007, 18:14

Strijar писал(а):Кварца нет, на внутреннем 8мгц.

без кварца у меня 38400 фигово шло.
Linux user | Firefox user
Аватара пользователя
Vooon
Site Admin
 
Сообщения: 3339
Зарегистрирован: 09 фев 2006, 15:36
Откуда: Москва
Skype: vooon341
прог. языки: Python, C, Bash, JavaScript, C++, PHP
ФИО: Владимир Ермаков

Re: Скорость UART (Mega162)

Сообщение Myp » 14 ноя 2007, 18:40

тык там вовсе и не 8 мГц а лишь примерно...
на внутреннем кварце уарт делать гиблое дело (собсно это гуру рассказали)

57600 уже с ошибками

так вы табличку ошибок посмотрите
там ужо 3.7% ошибок будет(это если с номаным кварцем точным)
а у вас исчо хуже

рекомендую купить кварц с дробным значением чтобы на всех частотах иметь ошибку 0.0%
Аватара пользователя
Myp
скрытый хозяин вселенной :)
 
Сообщения: 18018
Зарегистрирован: 18 сен 2006, 12:26
Откуда: Тверь по прозвищу Дверь
прог. языки: псевдокод =) сила в алгоритме!
ФИО: глубокоуважаемый Фёдор Анатольевич

Re: Скорость UART (Mega162)

Сообщение Digit » 14 ноя 2007, 18:41

На внутреннем частота плавает (ее можно с помощью каких-то там регистров подправить, чтоб поточнее было, но на сильный эффект можно не рассчитывать). Внешний кварц хороший повесишь - все запашет как часы :)
хо, вот так мы хором =)
злой полицейский
Аватара пользователя
Digit
 
Сообщения: 3339
Зарегистрирован: 27 ноя 2004, 00:42
Откуда: совсем Москва
ФИО: Григорий

Re: Скорость UART (Mega162)

Сообщение Strijar » 14 ноя 2007, 19:30

Ага, ясно, спасибо. Приготовлены кварцы на 16 и 20, но пока не хочу - питание 3,3в, опасаюсь, что не стабильно начнет работать.
Аватара пользователя
Strijar
 
Сообщения: 664
Зарегистрирован: 28 авг 2006, 17:09
Откуда: Всеволожск (СПб)
прог. языки: С, C++, Python, Lua, VHDL, Verilog, Forth
ФИО: Олег Белоусов

Re: Скорость UART (Mega162)

Сообщение Master » 14 ноя 2007, 22:32

Digit правильно говорит в ДШ есть таблица с процентами ошибок для разных частот и скоростей. А на внутреннем генераторе фигово делать он не точный.
Аватара пользователя
Master
 
Сообщения: 4468
Зарегистрирован: 21 дек 2006, 19:56
Откуда: Украина, г.Одесса
прог. языки: Delphi и С

Re: Скорость UART (Mega162)

Сообщение Strijar » 15 ноя 2007, 10:06

ДШ читал, таблицу видел. Что мне до тех процентов? - я-ж не знаю сколько "норма" ;) В идеале поставить бы кварц на 18.434, но уже куплены на 16 и 20.. да и фиг с ним - пока не критично, мне для отладки и 9600 хватает ;)
Аватара пользователя
Strijar
 
Сообщения: 664
Зарегистрирован: 28 авг 2006, 17:09
Откуда: Всеволожск (СПб)
прог. языки: С, C++, Python, Lua, VHDL, Verilog, Forth
ФИО: Олег Белоусов

Re: Скорость UART (Mega162)

Сообщение avr123.nm.ru » 15 ноя 2007, 10:35

Strijar писал(а): я-ж не знаю сколько "норма" ;) ;)


Мастер CVAVR подскажет ! :D
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14195
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва

Re: Скорость UART (Mega162)

Сообщение rig » 15 ноя 2007, 11:22

вопрос как говорится в тему, если я поставлю два кварца одинаковых на двух мк и налажу обмен межу ними по UART ошибок по идее не должно быть , кто нибудь пробовал ?
Аватара пользователя
rig
 
Сообщения: 1437
Зарегистрирован: 03 авг 2007, 19:43
Откуда: Екатеринбург
прог. языки: Си, асм со словарем

Re: Скорость UART (Mega162)

Сообщение Strijar » 15 ноя 2007, 11:25

Да. Не важна какая скорость - хоть 58001 бод ;) главное что-бы второй ту же использовал
Аватара пользователя
Strijar
 
Сообщения: 664
Зарегистрирован: 28 авг 2006, 17:09
Откуда: Всеволожск (СПб)
прог. языки: С, C++, Python, Lua, VHDL, Verilog, Forth
ФИО: Олег Белоусов

Re: Скорость UART (Mega162)

Сообщение SSG » 15 ноя 2007, 13:54

А в 162 разве UART, а не USART?
Можно мультипроцессорную конфигурацию забаловать.
I live My life!
Аватара пользователя
SSG
 
Сообщения: 1058
Зарегистрирован: 15 янв 2007, 19:23
Откуда: Беларусь, Барановичи
прог. языки: С для МК, Delphi для ПК

Re: Скорость UART (Mega162)

Сообщение Strijar » 16 ноя 2007, 00:27

SSG писал(а):А в 162 разве UART, а не USART?


Если чесно - не вижу разницы ;) А мультипроцессорную конфигурацию ИМХО проще делать на SPI
Аватара пользователя
Strijar
 
Сообщения: 664
Зарегистрирован: 28 авг 2006, 17:09
Откуда: Всеволожск (СПб)
прог. языки: С, C++, Python, Lua, VHDL, Verilog, Forth
ФИО: Олег Белоусов

Re: Скорость UART (Mega162)

Сообщение Digit » 16 ноя 2007, 01:02

Strijar писал(а):А мультипроцессорную конфигурацию ИМХО проще делать на SPI


Это почему еще? :) Это к каждому процику тянуть отдельный CS? ...проводов не напасешься! И портов! :) I2C рулит! :)
злой полицейский
Аватара пользователя
Digit
 
Сообщения: 3339
Зарегистрирован: 27 ноя 2004, 00:42
Откуда: совсем Москва
ФИО: Григорий

Re: Скорость UART (Mega162)

Сообщение Strijar » 16 ноя 2007, 01:32

Digit писал(а):Это почему еще? :) Это к каждому процику тянуть отдельный CS? ...проводов не напасешься! И портов! :) I2C рулит! :)


Ну тогда уж RS-485! ;) Не везде есть I2C.. а ноги можно сэкономить с помощью дешифратора - на 4 ноги можно повесить 16 CS, на 5 ног уже - 32 ;) Творчески надо мыслить!
Аватара пользователя
Strijar
 
Сообщения: 664
Зарегистрирован: 28 авг 2006, 17:09
Откуда: Всеволожск (СПб)
прог. языки: С, C++, Python, Lua, VHDL, Verilog, Forth
ФИО: Олег Белоусов

Re: Скорость UART (Mega162)

Сообщение Digit » 16 ноя 2007, 01:40

Та ну брось! :) Практически во всех атмеловских чипах (что поновее) есть I2C (он же TWI). На худой конец, есть USI, который конфигурируется на работу в режиме TWI.
А дешифратор - это лишний корпус на плате...
Что же касается RS-485, так я бился - хотел сделать переходничок I2C на две витые пары (RS-485), но что-то не вышло и я забросил. Так бы было кашерно :D Нравится мне, что в I2C мультимастер поддерживается и есть арбитраж на шине. И не нравится, что к помехам не стойкая шина. А вот скрестить если с RS-485, то будет гуд - и помехоустойчиво, и реализация I2C на "железном" уровне, и расстояния передачи данных за счет RS-485 огромные... :crazy:
злой полицейский
Аватара пользователя
Digit
 
Сообщения: 3339
Зарегистрирован: 27 ноя 2004, 00:42
Откуда: совсем Москва
ФИО: Григорий

След.

Вернуться в Микроконтроллеры

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex [Bot] и гости: 15