Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Скорость UART в Atmega8А
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
-=MISHA=-
Тактирование Atmega8A от внутреннего RC осциллятора = 1МГц.
Скорость UART = 9600 бит/с.
При питании контроллера от 3.3В и менее в UARTе искажаются данные,
а при питании 3.5В и более UART работает правильно.
Как такое может быть?
rezident
Частота RC-генератора зависит как от температуры (меняются величины R и C), так и от величины напряжения питания. Чтобы UART работал всегда и надежно его нужно тактировать от кварцевого генератора.
-=MISHA=-
Цитата(rezident @ Jan 10 2011, 16:44) *
Частота RC-генератора зависит как от температуры (меняются величины R и C), так и от величины напряжения питания. Чтобы UART работал всегда и надежно его нужно тактировать от кварцевого генератора.

Это понятно, но ведь у меня комнатная температура и напряжение ровно 3.3В. Причём такое происходит на двух разных платах.
mempfis_
Цитата(-=MISHA=- @ Jan 10 2011, 17:56) *
Это понятно, но ведь у меня комнатная температура и напряжение ровно 3.3В. Причём такое происходит на двух разных платах.


А RC-генератор калибруете при старте МК? В OSCALL заносится калибровочная константа?
-=MISHA=-
Цитата(mempfis_ @ Jan 10 2011, 16:59) *
А RC-генератор калибруете при старте МК? В OSCALL заносится калибровочная константа?

Нет. Только при прошивке устанавливаю fuse для режима Internal RC Oscillator.
CKSEL0 = 1
CKSEL1 = 0
CKSEL2 = 0
CKSEL3 = 0
SUT0 = 0
SUT1 = 0
CKOPT = 1
rx3apf
Цитата(-=MISHA=- @ Jan 10 2011, 16:56) *
Это понятно, но ведь у меня комнатная температура и напряжение ровно 3.3В. Причём такое происходит на двух разных платах.

А заводская калибровка (с допуском до 3%) выполнена для пятивольтового питания. Ничего удивительного. Обеспечьте свою калибровку...

Цитата(mempfis_ @ Jan 10 2011, 16:59) *
А RC-генератор калибруете при старте МК? В OSCALL заносится калибровочная константа?

Это не PIC16, здесь оно само.
-=MISHA=-
Цитата(rx3apf @ Jan 10 2011, 17:08) *
А заводская калибровка (с допуском до 3%) выполнена для пятивольтового питания. Ничего удивительного. Обеспечьте свою калибровку...

Понял. Спасибо за помощь!
777777
Цитата(-=MISHA=- @ Jan 10 2011, 16:56) *
Это понятно, но ведь у меня комнатная температура и напряжение ровно 3.3В. Причём такое происходит на двух разных платах.

Это у тебя комнатная, а кристалл греется сразу со включением.

Я вообще поражаюсь - ну неужели не понятно, что при наличии критичной к времени периферии нельзя пользоваться RC-генератором?
xelax
Цитата(777777 @ Jan 11 2011, 13:07) *
Это у тебя комнатная, а кристалл греется сразу со включением.

Я вообще поражаюсь - ну неужели не понятно, что при наличии критичной к времени периферии нельзя пользоваться RC-генератором?



Можно пользоваться RC осциллятором, но надо его подкалибровывать, желательно периодически.
нечитатель
... для процесса которого эталоном будет <...>.
777777
Цитата(нечитатель @ Jan 13 2011, 06:25) *
... для процесса которого эталоном будет <...>.

...кварцевый генератор? sm.gif
rx3apf
Цитата(777777 @ Jan 11 2011, 13:07) *
Это у тебя комнатная, а кристалл греется сразу со включением.

Зависимость от температуры существенно меньше, чем от потребления.
Цитата
Я вообще поражаюсь - ну неужели не понятно, что при наличии критичной к времени периферии нельзя пользоваться RC-генератором?

Можно, но надо принимать соответствующие меры.
777777
Цитата(rx3apf @ Jan 13 2011, 12:45) *
Зависимость от температуры существенно меньше, чем от потребления.

Ты наверное хотел сказать от напряжения питания?
Цитата(rx3apf @ Jan 13 2011, 12:45) *
Можно, но надо принимать соответствующие меры.

Какие? Постоянную калибровку? А где брать эталон для калибровки? Ставить кварцевый генератор? Но если он будет, то почему бы не работать UART-у от него?
Это все здесь ужет написанно, ты прочитал?
GDI
Если есть часовой кварц для часов, то можно и от него калиброваться.
rx3apf
Цитата(777777 @ Jan 13 2011, 14:08) *
Ты наверное хотел сказать от напряжения питания?

Да, оговорился.
Цитата
Какие? Постоянную калибровку? А где брать эталон для калибровки? Ставить кварцевый генератор? Но если он будет, то почему бы не работать UART-у от него?

Мне было бы очень интересно посмотреть на UART 9600, тактируемый от часового опорника 32768 Hz. А тактироваться от кварцевого генератора не всегда удобно. Кроме самокалибровки, вполне возможна и калибровка по внешним посылкам, типа автоопределения скорорости в модемах по "AT".
Цитата
Это все здесь ужет написанно, ты прочитал?

Я даже и написал, если посмотрите внимательно...
нечитатель
Продолжая тему безвоздушной лошади:

а). Опорный генератор 32768 для часов, под который приподстраивать уарт, тренируя творческость подхода к задаче;
б). Опорный генератор Х МГц для уарта, по которому же и часы считать.
stas00n
Цитата(rx3apf @ Jan 13 2011, 14:02) *
Мне было бы очень интересно посмотреть на UART 9600, тактируемый от часового опорника 32768 Hz.

Вот на 19200, правда, конечно он тактируется внутренним RC генератором 4 МГц/4 = 1МГц sm.gif и на пике, просто делитель настраивается по часовому кварцу (настраивается именно делитель, т.к. в моем пике нет калибровки внутр. генератора):
CODE
#define BAUDRATE 19200U
//...
unsigned int oscMeasuredValue = 31250;
//...
oscMeasuredValue = Get_Osc_Freq();
SPBRG = ((oscMeasuredValue + (BAUDRATE/16)) / (BAUDRATE/8) - 1);

В меге так же можно сделать, вместо SPBRG подставляем UBRR; если применить Double Speed Mode, даже точнее получится (ошибка вдвое меньше будет даже от мегагерцового RC)
-=MISHA=-
Всё решил установкой кварца на 4МГц с конденсаторами. Проблем с уартом больше не было при любом напряжении питания.
Скорость поставил 250000 бит/с
Всем спасибо за помощь!
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.