реклама на сайте
подробности

 
 
> USART baud rate
HoboTech
сообщение Dec 27 2010, 09:43
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 17
Регистрация: 27-09-10
Из: Харьков
Пользователь №: 59 762



Здравствуйте, нужна помощь вот в каком вопросе:
пишу инициализацию усарта для Mega48PA

Код
.equ    SYSCLK = 20000000;System Clock [Hz]
.equ    BaudSpeed0=1200    ;speed of UART  
.equ     bauddivider = (SYSCLK/(16*BaudSpeed0))-1

;************************************************************************
; USART0_Init
;
        lds    R16,PRR
        andi    R16,255-(1<<PRUSART0);USART0 wake up
        sts    PRR,R16

        ldi    R16,0b00000000    ;RXCn, TXCn, UDREn, FEn, DORn, UPEn, U2Xn, MPCMn
        sts    UCSR0A,R16

        ldi    R16,0b00011000    ;RXCIE,TXCIE,UDRIE,RXEN,TXEN,UCSZn2,RXB8,TXB8
        sts    UCSR0B,R16

        ldi    R16,0b00000110    ;-, UMSELn, UPMn1, UPMn0, USBSn, UCSZn1, UCSZn0, UCPOLn
        sts    UCSR0C,R16

        ldi    R16,High(bauddivider)
        sts    UBRR0H,R16
        ldi    R16,Low(bauddivider)
        sts    UBRR0L,R16    ;BaudRate Gen.


при симуляции в протеусе получаю:

Код
(AVR USART 0)Baud rate = 54212 b/s


частота 20МГц выставлена и для контроллера и для кварца.
Решил написать инициализацию усарта для 128 меги на С под ИАРом. Скорость установилась как и ожидалось - 1200

Ткните где я не прав
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Метценгерштейн
сообщение Jan 10 2011, 18:53
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 357
Регистрация: 12-04-05
Из: Петербург
Пользователь №: 4 079



Дабы не плодить темы, задам здесь свой вопрос.

Хочу на ATmega8 при кварце 4 Мгц, запустить USART на 115200.

В регистр
UBRRL записываю число 1, согласно таблице 61 на стр. 160 в даташите на мегу8.

Там указана погрешность 8,5 % при этом. Подключившись TeraTern, на этой скорости, я не вижу отчетливо передачу- прет абракадабра. Как только скорость ставлю 9600, принимается текст без искажений.

Из-за чего проблема? Что 8,5% искажения? Надо подбирать кварц для 0% искажений?
Go to the top of the page
 
+Quote Post
Xenia
сообщение Jan 10 2011, 20:04
Сообщение #3


Гуру
******

Группа: Модератор FTP
Сообщений: 4 479
Регистрация: 20-02-08
Из: Москва
Пользователь №: 35 237



Цитата(Метценгерштейн @ Jan 11 2011, 00:53) *
Из-за чего проблема? Что 8,5% искажения? Надо подбирать кварц для 0% искажений?

Чтобы было 0% искажений, то надо подбирать кварц с такой частотой, чтобы она НАЦЕЛО (т.е. без остатка) делилась на нужную вам частоту в бодах 115200. Если это условие будет соблюдено, то МК сможет выбрать целочисленный делитель (а дробного у него не может быть), чтобы из кварцованной частоты получить рабочую. А если нацело не разделится, то частное придется округлить до целого делителя, и тогда рабочая частота будет получаться не точно, а с искажением.

Например, кварцевые частоты 3.6864 МГц и 7.3728 МГц отлично делятся без остатка не только на 115200, но и на все более низкие бодовые частоты:
3686400 / 115200 = 32
7372800 / 115200 = 64
А раз так, то частоту 115200 можно получить из частоты кварца после деления ее на 32 или 64. При этом результат 115200 получится точно.

Но вот мы берем кварц на 4 МГц и обнаруживаем, что:
4000000 / 115200 = 34.72
тогда как делитель может быть только целочисленный. Придется тогда нам округлить 34.72 до ближайшего целого, т.е. до 35. Однако с таким делителем вместо нужной вам частоты 115200, получится частота:
4000000 / 35 = 114285
которая на те 8% меньше нормы. А если бы округлили в меньшую сторону - до 34, то тогда искажение стало бы еще больше, только в сторону увеличения:
4000000 / 34 = 117647
Т.е. куда не кинь, всюду клин.

Я когда-то тоже не знала про эту кухню и сильно удивлялась, отчего кварцы делают на такие "кривые" частоты sm.gif. А как стала с USART работать, так сразу поняла причину. Впрочем, с ошибкой до 2% обычно всё устойчиво работает, хотя в даташите требуют не более пол процента. Ну а 8% - это, конечно, перебор.
Go to the top of the page
 
+Quote Post
xemul
сообщение Jan 11 2011, 10:09
Сообщение #4



*****

Группа: Свой
Сообщений: 1 928
Регистрация: 11-07-06
Пользователь №: 18 731



Цитата(Xenia @ Jan 11 2011, 02:04) *
Но вот мы берем кварц на 4 МГц и обнаруживаем, что:
4000000 / 115200 = 34.72
тогда как делитель может быть только целочисленный

и, в данном случае, кратный степени 2
Цитата
Придется тогда нам округлить 34.72 до

32
Цитата
Однако с таким делителем вместо нужной вам частоты 115200, получится частота:

4000000 / 32 = 125000
Цитата
которая на те 8%

больше нормы.
ну и т.д. ...

2rezident: относительная ошибка останется одинаковой и на битовом, и на символьном интервале.

2Метценгерштейн: как вариант, убрать кварц и калибровать внутренний генератор по COM-порту. Где-то в аппнотах был пример по auto-baud.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- HoboTech   USART baud rate   Dec 27 2010, 09:43
- - rezident   Цитата(HoboTech @ Dec 27 2010, 17:43) Ткн...   Dec 27 2010, 09:58
|- - HoboTech   Цитата(rezident @ Dec 27 2010, 15:58) В и...   Dec 27 2010, 10:07
|- - rezident   Цитата(HoboTech @ Dec 27 2010, 18:07) а к...   Dec 27 2010, 10:12
- - нечитатель   Если, несмотря на внимательность, прочитание и дов...   Dec 27 2010, 10:21
- - DpInRock   В даташите черным по белому приведена таблица дели...   Dec 27 2010, 10:21
|- - HoboTech   Цитата(DpInRock @ Dec 27 2010, 15:21) В д...   Dec 27 2010, 11:31
- - V_G   Не скажу за мегу48 (не работал), но у меги128 есть...   Dec 27 2010, 11:12
|- - Палыч   Цитата(V_G @ Dec 27 2010, 17:12) Не скажу...   Dec 27 2010, 12:45
|- - 777777   Цитата(V_G @ Dec 27 2010, 17:12) Не скажу...   Dec 28 2010, 05:11
- - DpInRock   В любом случае - использовать протеус в роли отлад...   Dec 27 2010, 14:06
- - HoboTech   Зашил в мегу8: Код#include <ioavr.h> #de...   Dec 28 2010, 06:14
|- - demiurg_spb   Это некрасиво: Цитата(HoboTech @ Dec 28 2010,...   Dec 28 2010, 06:44
||- - HoboTech   Цитата(demiurg_spb @ Dec 28 2010, 11:44) ...   Dec 28 2010, 07:00
||- - demiurg_spb   Цитата(HoboTech @ Dec 28 2010, 13:00) Я ж...   Dec 28 2010, 07:10
|- - MrYuran   Цитата(HoboTech @ Dec 28 2010, 12:14) Как...   Dec 28 2010, 07:08
|- - rx3apf   Цитата(Метценгерштейн @ Jan 11 2011, 00:5...   Jan 10 2011, 18:57
- - Marchello   При скорости 114285 ошибка будет 0,8%, при 117647...   Jan 11 2011, 04:22
|- - rezident   Цитата(Marchello @ Jan 11 2011, 12:22) Пр...   Jan 11 2011, 08:45
|- - ViKo   Цитата(rezident @ Jan 11 2011, 13:45) Это...   Jan 11 2011, 12:42
- - Метценгерштейн   Да, спасибо всем за подробные объяснения. Буду ква...   Jan 11 2011, 09:32
- - DpInRock   Вообще кварц не ставьте и будет вам щастья.   Jan 11 2011, 09:41
- - Метценгерштейн   Замена кварца на 3.6864 помогла. Похоже, 8% погреш...   Jan 11 2011, 12:15
- - rezident   Цитата(xemul @ Jan 11 2011, 18:09) 2rezid...   Jan 11 2011, 17:52
- - ViKo   Цитата(rezident @ Jan 11 2011, 22:52) А э...   Jan 12 2011, 06:45
- - rezident   Цитата(ViKo @ Jan 12 2011, 14:45) Я поним...   Jan 12 2011, 10:42
- - ViKo   Цитата(rezident @ Jan 12 2011, 15:42) Это...   Jan 12 2011, 11:26


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 13th August 2025 - 04:59
Рейтинг@Mail.ru


Страница сгенерированна за 0.01423 секунд с 7
ELECTRONIX ©2004-2016