Atmega1280 настройка usart

Подключаем наши девайсы к компьютеру. Обсуждаются: порты, протоколы, драйвера, языки программирования и т.д.
Ответить
Открыл глаза
Сообщения: 77
Зарегистрирован: Сб янв 28, 2012 21:26:46

Сообщение Romu4 »

Доброго времени суток уважаемые. Возникла проблема с реализацией usart на atmega1280 (на других контроллерах с 1 usart получается) предположительно неправильно инициализирован. Задача получить кварц 16 MHz, 8 бит данных, 1 стоп бит, прием и передача разрешены. Даташит перечитал и по нему пытался настроить но в Proteus- се тишина.

Код: Выделить всё

#include <avr/io.h>//Библиотека ввода/вывода
#include <stdio.h>
#include <avr/interrupt.h>//Библиотека прерываний
 
//Прототипы подпрограмм
void USART_Transmit( unsigned char data );
void USART_Init( unsigned int ubrr);
 
//Подпрограмма обработки прерывания
ISR(USART_RXC_vect)
{
int b;
b = UDR0;
// Выполняем обработку принятого байта
if (b=='1')//Если приняли "1"
{
USART_Transmit('R');//Отправляем букву "R"
USART_Transmit(0x0d);//переход в начало строки
USART_Transmit(0x0a);//переход на новую строку
}
else//Если нет
if (b=='2')//Если приняли "2"
{
USART_Transmit('L');//Отправляем букву "L"
USART_Transmit(0x0d);//переход в начало строки
USART_Transmit(0x0a);//переход на новую строку


}
}
 
void USART_Init( unsigned int ubrr)//Инициализация модуля USART
{
/* Задаем скорость работы USART */	
UBRR0H = (unsigned char)(ubrr>>8);	
UBRR0L = (unsigned char)ubrr;       
/* Разрешаем прием и передачу по USART */
UCSR0B=(1<<RXEN0)|( 1<<TXEN0);
UCSR0B |= (1<<RXCIE0);

/* Устанавливаем формат данных 8 бит данных, 1 стоп бита */
//UCSR0C=0x86;// Инициализация именно для ATmega8
UCSR0C = (1<<USBS0)|(3<<UCSZ10);//USBSn 0-1 stop bit 1-2 stop bit;
}
 
void USART_Transmit( unsigned char data ) //Функция отправки данных
{
while ( !(UCSR0A & (1<<UDRE0)) ); //Ожидание опустошения буфера приема
UDR0 = data; //Начало передачи данных			        
}
 
int main(void)//главная программа
{
//Скорость USART 115200 при кварцевом генераторе 16MHz
USART_Init (8);

USART_Transmit('O');//Передаем при включении
USART_Transmit('k');//сообщение "Ok!", что свидетельствует
USART_Transmit('!');//о правильно работе программы
 
USART_Transmit(0x0d);//переход в начало строки
USART_Transmit(0x0a);//переход на новую строку

sei();//разрешаем глобально прерывания
 
while(1)//вечный цикл
{//тут пусто
}
}
Реклама
Открыл глаза
Сообщения: 77
Зарегистрирован: Сб янв 28, 2012 21:26:46

Сообщение Romu4 »

есть предположение что проблема в UCSR0C
Реклама
Мудрый кот
Аватара пользователя
Сообщения: 1810
Зарегистрирован: Чт июн 10, 2010 08:55:35
Откуда: Сибирские Афины

Сообщение Kavka »

Смотрите внимательно про количество стоп-битов :)

16МГц, 115200, 8бит, без паритета - рекомендую ещё U2X = 1 (пункт "22.10 Examples of Baud Rate Setting").
Когда уже ничего не помогает - прочтите, наконец, инструкцию.
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
Открыл глаза
Сообщения: 77
Зарегистрирован: Сб янв 28, 2012 21:26:46

Сообщение Romu4 »

курил я это но увы...
Реклама
Эиком - электронные компоненты и радиодетали
Открыл глаза
Сообщения: 77
Зарегистрирован: Сб янв 28, 2012 21:26:46

Сообщение Romu4 »

а может проблема с фьюзами?
фьюзы.JPG
(63.53 КБ) 552 скачивания
Реклама
Открыл глаза
Сообщения: 77
Зарегистрирован: Сб янв 28, 2012 21:26:46

Сообщение Romu4 »

какие-то символы выводит и все...
не могу понять :o :o :o :o :o :o
Реклама
Открыл глаза
Сообщения: 77
Зарегистрирован: Сб янв 28, 2012 21:26:46

Сообщение Romu4 »

proteus.rar
(14.97 КБ) 210 скачиваний
Мучитель микросхем
Аватара пользователя
Сообщения: 449
Зарегистрирован: Пт окт 15, 2010 16:08:06
Откуда: Украина, Славянск

Сообщение POS_troi »

Зайдите в настройки терминала и посмотрите какие скоростя он поддерживает.

11520 у меня в протеусе нет.
Открыл глаза
Сообщения: 77
Зарегистрирован: Сб янв 28, 2012 21:26:46

Сообщение Romu4 »

С фьюзами разобрался. В протеусе можно свою скорость задавать.
Открыл глаза
Сообщения: 77
Зарегистрирован: Сб янв 28, 2012 21:26:46

Сообщение Romu4 »

Самое интересное что подобный код на atmega8 работал, а на atmega8535 такая же проблема была. Думаю дело в UCSR0C=0x86;
Открыл глаза
Сообщения: 77
Зарегистрирован: Сб янв 28, 2012 21:26:46

Сообщение Romu4 »

вот скрин из протеуса
Вложения
терминал.JPG
(9.51 КБ) 616 скачиваний
Ответить

Вернуться в «Интеграция с ПК»