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

 
 
> Atmega128 проблемы с USART
Nekromant
сообщение Nov 18 2008, 15:04
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 47
Регистрация: 21-03-07
Пользователь №: 26 369



Доброго времени суток!
help.gif Суть проблемы в том, что впервые пытаюсь запустить USART (ранее опыта работы не было). провел инициализацию и просто пытаюсь по прерыванию вывести на дисплей бессмысленную строчку. Дело в том, что на дисплее я эту строку ни разу так и не увидел(попытка помигать светодиодами приводи к тому же самому результату). help.gif
вот код инициализации и прерываний:
oid TDebugUSART::InitUSART(uint32_t baudrate)
{
/* Enable receiver, transmitter and interrupts */
UCSR1B = (1 << RXEN1) | (1 << TXEN1) | (1 << RXCIE1);

/* 8 bit data */


UCSR1C = (1 << UCSZ11) | (1 << UCSZ10);

/* high byte of UART speed */
UBRR1H = (F_CPU /(baudrate * 8L) - 1) >> 8;
/* low byte of UART speed */
UBRR1L = (uint8_t)(F_CPU / (baudrate * 8L)-1);

}
//-----------------------------
ISR(USART1_RX_vect)
{

Lcd.WriteInt(987654321);


}

ISR(USART1_UDRE_vect)
{
Lcd.WriteInt(123456789);


}
Сами функции Lcd.WriteInt точно рабочие, они взяты из библиотеки моих же предыдущих проектов и еще не подводили.
Заранее благодарен...
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Сергей Борщ
сообщение Nov 19 2008, 09:11
Сообщение #2


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(Nekromant @ Nov 18 2008, 17:04) *
вот код инициализации и прерываний:
А сами прерывания глобально разрешены? Программа в main() живет?


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
Nekromant
сообщение Nov 19 2008, 10:12
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 47
Регистрация: 21-03-07
Пользователь №: 26 369



Цитата(Сергей Борщ @ Nov 19 2008, 12:11) *
А сами прерывания глобально разрешены? Программа в main() живет?

Да,сами прерывания разрешены. чтоб проверить работоспосбность инициализации порта попытался с контроллера отправить букву в бесконечном цикле-вполне посылается, зато если пытаюсь в цикле послать массив:
for(i = 0; i < sizeof(InitLcd); i++)
{
while(!(UCSR1A & (1 << UDRE1)));
UDR1 = maker1[i];
}
то получаю совершенную несуразицу.
зато если просто вернуть размер массива и просто опять же посылать букву:
for(i = 0; i < sizeof(InitLcd); i++)
{
while(!(UCSR1A & (1 << UDRE1)));
UDR1 = 'X';
}
то опять все получаю вполне нормально. 05.gif
Go to the top of the page
 
+Quote Post
aesok
сообщение Nov 19 2008, 10:50
Сообщение #4


Знающий
****

Группа: Участник
Сообщений: 596
Регистрация: 26-05-06
Из: Москва
Пользователь №: 17 484



Пожалуйста замените идеоматические выражения "вполне посылается", "совершенную несуразицу" и "вполне нормально" четкими описанием того что вы наблюдаете. Это технический форум а не литературный, или эфирная среда общества экстрасенсов.

Анатолий.

Как определено InitLcd?

Сообщение отредактировал aesok - Nov 19 2008, 11:00
Go to the top of the page
 
+Quote Post
Nekromant
сообщение Nov 19 2008, 14:28
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 47
Регистрация: 21-03-07
Пользователь №: 26 369



Цитата(aesok @ Nov 19 2008, 13:50) *
Пожалуйста замените идеоматические выражения "вполне посылается", "совершенную несуразицу" и "вполне нормально" четкими описанием того что вы наблюдаете. Это технический форум а не литературный, или эфирная среда общества экстрасенсов.

Анатолий.

Как определено InitLcd?

Извиняюсь если непонятно выразился
1) посылается означало: что отправили с контроллера то и получили на компьютере
2) несуразица выглядела различными символами ни коим образом не похожих на те символы, которые должны были быть отправлены МК на ПК.

3)prog_char InitLcd[]="initialization...";//инициализация


Цитата(Qwertty @ Nov 19 2008, 16:34) *
Вот еще вопрос - откуда 8L взялась? Вы в каком формате baudrate передаете функции инициализации?
И зачем в функции ВЫЧИСЛЯТЬ значение регистров UBRR1x?
Я использую в хидере -
#define BAUD9600 (uint16_t)((F_CPU/(16*9600UL))-1)
Потом просто передаю это значение в функцию. Обратите внимание на расчет. Вы используете константу 8UL, которая нужна для Double Speed. А судя по неустанавливаемому биту U2X в UCSR1A используете обычный режим.

Извиняюсь, когда правил чтоб выложить случайно удалил эту строчку
void TDebugUSART::InitUSART(uint32_t baudrate)
{

/* Enable double speed */
UCSR1A = (1 << U2X1);

/* Enable receiver, transmitter and interrupts */
UCSR1B = (1 << RXEN1) | (1 << TXEN1) | (1 << RXCIE1);

/* 8 bit data */



UCSR1C = (1 << UCSZ11) | (1 << UCSZ10);

/* high byte of UART speed */
UBRR1H = (F_CPU /(baudrate * 8L) - 1) >> 8;
/* low byte of UART speed */
UBRR1L = (uint8_t)(F_CPU / (baudrate * 8L)-1);

}
Go to the top of the page
 
+Quote Post
aesok
сообщение Nov 19 2008, 14:56
Сообщение #6


Знающий
****

Группа: Участник
Сообщений: 596
Регистрация: 26-05-06
Из: Москва
Пользователь №: 17 484



Цитата(Nekromant @ Nov 19 2008, 17:28) *
3)prog_char InitLcd[]="initialization...";//инициализация


Как вы корпируете строку из InitLcd в maker1?

Анатолий.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Nekromant   Atmega128 проблемы с USART   Nov 18 2008, 15:04
- - Qwertty   А у Вас фьюз "М103С" случайно не установ...   Nov 18 2008, 16:51
- - Laptop   А putchar у Вас где? Фунции низкого уровня надо са...   Nov 18 2008, 17:03
- - Nekromant   1)фьюз м103 не установлен-я сним много шишек набил...   Nov 18 2008, 17:09
|- - Laptop   Цитата(Nekromant @ Nov 18 2008, 20:09) 1)...   Nov 18 2008, 17:45
- - AHTOXA   А Lcd.WriteInt(123456789); - там случайно не испол...   Nov 18 2008, 17:57
|- - Nekromant   Цитата(AHTOXA @ Nov 18 2008, 20:57) А Lcd...   Nov 19 2008, 02:15
- - smac   Цитата(Nekromant @ Nov 18 2008, 18:04) .....   Nov 18 2008, 18:21
|- - Сергей Борщ   Цитата(Nekromant @ Nov 19 2008, 16:28) 3)...   Nov 19 2008, 14:48
- - Qwertty   Цитата(Nekromant @ Nov 18 2008, 18:04) /*...   Nov 19 2008, 13:34
- - Nekromant   добрый день, извиняюсь за долгий ответ. 1) строка ...   Nov 21 2008, 01:31
- - aesok   Цитата(Nekromant @ Nov 21 2008, 04:31) до...   Nov 21 2008, 08:03
- - Nekromant   Добрый день, проблема решена, теперь контроллер вы...   Nov 25 2008, 13:48


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

 


RSS Текстовая версия Сейчас: 20th July 2025 - 01:34
Рейтинг@Mail.ru


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