Форум программистов, компьютерный форум, киберфорум
Наши страницы
Микроконтроллеры Atmega AVR
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.83/42: Рейтинг темы: голосов - 42, средняя оценка - 4.83
hotf_o_pomy
0 / 0 / 0
Регистрация: 24.09.2013
Сообщений: 4
1

ATMega8A-PU — не работает UART через MAX232

27.09.2013, 14:12. Просмотров 7565. Ответов 9
Метки нет (Все метки)

Пытаюсь сделать коммуникацию с атмегой по UART, никак не получается заставить работать. Вот код:

Код
#define BAUD 9600
#define F_CPU 16000000UL

#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/setbaud.h>
#include <util/delay.h>

void uart_init(void) {
UBRRH = UBRRH_VOTUE;
UBRRL = UBRRL_VOTUE;

UCSRC = _BV(UCSZ1) | _BV(UCSZ0);
UCSRB = _BV(RXEN) | _BV(TXEN);
}

void uart_putchar(char c) {
loop_until_bit_is_set(UCSRA, UDRE);
UDR = c;
}

int main (void) {
uart_init();
while(1) {
_delay_ms(500);
uart_putchar(C);
}
}
Компилируется gcc в linux. В результате в терминале на скорости 9600 каждые полсекунды появляется случайный символ, но не такой, какой отправляется. Уже кучу всего перепробовал — менял скорости, som-порты. Фьюзы стоят на использование внешнего кварца, кварц стоит на 16000.

Фрагмент схемы во вложении (используются именно те элементы, которые указаны в схеме, т. е. atmega8a-pu и max232cpe).

В чем может быть проблема?

Спасибо.

0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.09.2013, 14:12
Ответы с готовыми решениями:

Не могу прошить atmega8a через usb isp v2.0
Всем привет. Для прошивки использую usb isp в алюминиевом корпусе. Для прошивки...

UART через USB
Здравствуйте. У меня есть плата Arduino Uno и GPRS модуль на базе SIM900...

Unicode через uart
Кто нибудь отправлял кириллицу через rs232? Пытаюсь вот вывести на консоль...

Прошивка микроконтроллера через Uart
Добрый вечер, Имеется USB-to-Serial (UART) конвертер(cp210x) и atmega48PA-PU...

Управляем Pwm Через Uart
Уже голову сломал не получается воплотить идею, хочу в таймере изменять...

9
яверт
0 / 0 / 0
Регистрация: 15.06.2012
Сообщений: 3,097
27.09.2013, 14:29 2
Цитата Сообщение от hotf_o_pomy
В чем может быть проблема?
Задай UCSRC вот так:
UCSRC = _BV(URSEL ) | _BV(UCSZ1) | _BV(UCSZ0);

When the function writes to the UCSRC Register, the URSEL bit (MSB) must be set due to
the sharing of I/O location by UBRRH omd UCSRC.
0
hotf_o_pomy
0 / 0 / 0
Регистрация: 24.09.2013
Сообщений: 4
27.09.2013, 15:42 3
Изменил, не работает. Кроме того, если ранее светодиод, подключенный к tx, подавал признаки жизни (моргал при передаче), то теперь просто горит. И в терминале совсем пусто.
0
dimyurk1978
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 3,047
27.09.2013, 16:51 4
У вас частота кварца не совсем подходит для uart. Так как интерфейс асинхронный, в определенный момент происходит рассинхронизация устройств (МК - ПК, например). Поэтому у вас проскакивают ошибки. Для uart нужно использовать кварцы с определенными частотами. Если посмотрим в даташит, то там вы увидите частоты кварца, при которых ошибок приема-передачи нет. Например 7,3728 мгц.
Возможно фьюзы стоят на работу от внутреннего генератора.
0
OtixPM
0 / 0 / 0
Регистрация: 11.01.2013
Сообщений: 5,483
27.09.2013, 16:51 5
Цитата Сообщение от hotf_o_pomy
В результате в терминале на скорости 9600 каждые полсекунды появляется случайный символ, но не такой, какой отправляется.
Что-то не то с baudrate.
Попробуйте вот так, с заведомо верными значениями (просто для эксперимента):
Код
// Enable receiver omd transmitter.
UCSRB = 0x18;    //(1<<RXEN) | (1<<TXEN);
// Set frame format: 8data, 2stop bit.  URSEL=1 !!
UCSRC = 0x86;    //(1<<URSEL) | (1<<USBS) | (3<<UCSZ0);

// Set baud rate.  URSEL=0 !!
UCSRC = 0x06;    //(0<<URSEL) | (1<<USBS) | (3<<UCSZ0);
UBRRH = 0x00;    //для baudrate=9600
UBRRL = 0x67;    //для baudrate=9600
0
OtixPM
0 / 0 / 0
Регистрация: 11.01.2013
Сообщений: 5,483
27.09.2013, 16:53 6
Цитата Сообщение от dymyurk1978
У вас частота кварца не совсем подходит для uart.
... ...
Возможно фьюзы стоят на работу от внутреннего генератора.
В первом посте про фьюзы чётко написано: для внешнего кварца.
Ошибка при baudrate=9600 и кварце 16.000 МГц - ничтожно мала, 0.2%.
0
hotf_o_pomy
0 / 0 / 0
Регистрация: 24.09.2013
Сообщений: 4
28.09.2013, 00:04 7
С заведомо верными значениями уже делал. Фьюзы стоят на внешний кварц.

Кажется, у меня что-то не так с подключением max232. Осциллографа у меня нет, а импровизированный осциллограф из аудиокарты показал следующее:


<Изображение удалено>

Первый график — передача одного символа компьютерным ком-портом. Второй — передача того же символа атмегой (это с заданным битом URSEL, без него вообще полный бред). Как видно, во втором случае передается какая-то невнятная фигня, поэтому сейчас я соберу конвертер уровней на макетке и попробую еще раз.


<Изображение удалено>
0
YTYOUT
0 / 0 / 0
Регистрация: 02.10.2012
Сообщений: 1,946
28.09.2013, 00:26 8
Тупо сравните Вашу схему с этим , найдите ошибку , исправьте - потом только следующий вопрос задавайте

0
OtixPM
0 / 0 / 0
Регистрация: 11.01.2013
Сообщений: 5,483
28.09.2013, 00:32 9
Цитата Сообщение от YTYOUT
Тупо сравните Вашу схему с этим , найдите ошибку , исправьте - потом только следующий вопрос задавайте
:-)
ATmega оказалась ни при чём.
0
hotf_o_pomy
0 / 0 / 0
Регистрация: 24.09.2013
Сообщений: 4
28.09.2013, 00:33 10
Да, я действительно накосячил в схеме. Собрал на макетке — работает. Второй вывод max232 у меня через конденсатор к земле подключается, а надо к Vcc. Всем спасибо, особенно за URSEL.
0
28.09.2013, 00:33
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.09.2013, 00:33

FT232RL-UART Не работает как надо
Всем доброй ночи собрал сегодня USB-USORT конвертер на FT232RL вроде работает...

atmega16 Uart работает только на 9600
Контроллер принимает данные с терминала только на скорости 9600бод. Контроллер...

Определение конца передачи через UART
Добрый день. Докатился я до работы с GSM модулем. И возникла у меня проблема....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru