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

 
 
> Проблема с приемом данных USART в ATtiny2313
Прораб счастья
сообщение Oct 29 2008, 09:28
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 20
Регистрация: 28-10-08
Из: Москва
Пользователь №: 41 264



Помогите, плиз, разобраться с проблемой!

Спаял схему, в которой данные в МК должны поступать по протоколу Модбас через ADM1485.
В CodeVisionAVR создаю проект, в котором настраиваю все параметры МК. Снизу часть сгенерированного текста, относящаяся к обработке прерывания:

// USART Receiver interrupt service routine
interrupt [USART_RXC] void usart_rx_isr(void)
{
char status,data;
status= UCSRA;
data=UDR;
if ((status & (FRAMING_ERROR | PARITY_ERROR | DATA_OVERRUN))==0)
...


Все вроде бы собрано правильно, но МК не хочет воспринимать данные. Для проверки срабатывания прерывания я включил в текст строку:

// USART Receiver interrupt service routine
interrupt [USART_RXC] void usart_rx_isr(void)
{
char status,data;
status= UCSRA;
data=UDR;
PORTB.7=1;
if ((status & (FRAMING_ERROR | PARITY_ERROR | DATA_OVERRUN))==0)
...


После прихода на МК посылки, PORTB.7 меняет свое состояние, что говорит об срабатывании прерывания. Но если я включаю строчку после проверки if:

// USART Receiver interrupt service routine
interrupt [USART_RXC] void usart_rx_isr(void)
{
char status,data;
status= UCSRA;
data=UDR;
if ((status & (FRAMING_ERROR | PARITY_ERROR | DATA_OVERRUN))==0)
PORTB.7=1;
...


, то МК перестает реагировать на пакеты.
Скорость передатчика и приемника выставлены одинаковыми. Я пробывал с разными скоростями. Пробывал и от внешнего кварца и от внутреннего генератора.
Где-то я прочел, что в этом условии проверяется наличие аппаратной ошибки. Получается, что МК плохой? Или еще какая-то другая причина может быть?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Прораб счастья
сообщение Oct 29 2008, 12:19
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 20
Регистрация: 28-10-08
Из: Москва
Пользователь №: 41 264



Цитата(Polaris @ Oct 29 2008, 14:48) *
Прерывание в документе обозначается USART0, Rx Complete и вызывается, соответственно, после окончания приема всего байта. Насколько я понмю, в CodeVision запрещаются прерывания после вызова прерывания (хотя и в самой архитектуре AVR при входе в прерывание дальнейший вызов прерывания по умолчанию также блокируеся), так что задержки такой величины в прерываниях - это очень плохой тон, скорее всего, Вы пропускаете данные, на что потом и указывает DATA_OVERRUN. Чем вызвана первая ошибка - видимо, ошибкой формата пакета.


По этой логике получается: после приема одного байта идет первая проверка на корректность приема именно одного первого байта (if ((status &.......). Значит задержка в 100 мс еще не была задействована и условие (при правильном приеме) должно быть истина!


Цитата(SysRq @ Oct 29 2008, 14:52) *
Управляете ADM1485 правильно? Для приёма на RE и DE надо выставить низкий уровень (в коде этого момента не видать без схемы).
Кварц 8 МГц?


На входах RE и DE у меня выставлен 0 постоянно. ADM принимает данные - проверенно логическим анализатором.
Я пробывал с 10МГц-овым кварцем и с внутренним генератором 8МГц. Фьюз деления частоты на 8 отключен. Конечно настройки в передатчике соответствовали настройкам приемника.

Цитата(=GM= @ Oct 29 2008, 15:09) *
Вполне возможно, что эта строчка в инициализации приводит к ошибке. Для записи в UCSRC надо старший бит установить в 1, т.е. UCSRC=0x8E. В прерывании вы зачем-то проверяете паритет, а этой строчкой вы паритет запрещаете. Тогда получается, что МК получает байты с паритетом, но интерпретирует бит паритета, как стоп-бит, отсюда могут возникать ошибки FE - Frame Error.


Это сгенерированный CodeVisionAVR текст. Ничего, кроме строчек выделенных красным цветом я не добавлял и не менял.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Прораб счастья   Проблема с приемом данных USART в ATtiny2313   Oct 29 2008, 09:28
- - Vladimir_J   Доброе время суток !!! 1. После услови...   Oct 29 2008, 09:39
- - Прораб счастья   Скобка - { есть, просто здесь я ее забыл поставить...   Oct 29 2008, 09:51
- - GDI   Вы бы привели код полностью, чтоб никто не гадал, ...   Oct 29 2008, 09:56
- - Прораб счастья   Текст программы я не приводил, так как она мало от...   Oct 29 2008, 10:11
|- - =GM=   Цитата(Прораб счастья @ Oct 29 2008, 10:1...   Oct 29 2008, 12:09
|- - SysRq   Цитата(=GM= @ Oct 29 2008, 15:09) Для зап...   Oct 29 2008, 12:52
||- - =GM=   Цитата(SysRq @ Oct 29 2008, 12:52) Цитиру...   Oct 29 2008, 15:22
||- - SysRq   Цитата(=GM= @ Oct 29 2008, 18:22) Бит чёт...   Oct 29 2008, 15:40
|- - =GM=   Цитата(Прораб счастья @ Oct 29 2008, 12:1...   Oct 29 2008, 13:16
- - IVANS   1. Если данные передаются непрерывно, то задержка ...   Oct 29 2008, 10:49
- - Прораб счастья   Подключение А и В я неоднократно проверял. Насчет ...   Oct 29 2008, 11:19
|- - Polaris   Цитата(Прораб счастья @ Oct 29 2008, 13:1...   Oct 29 2008, 11:48
|- - SysRq   Цитата(Прораб счастья @ Oct 29 2008, 14:1...   Oct 29 2008, 11:52
- - defunct   Цитата(Прораб счастья @ Oct 29 2008, 12:2...   Oct 29 2008, 11:47
- - Прораб счастья   defunct: Спасибо! Сегодня посмотрю   Oct 29 2008, 11:51
- - Прораб счастья   Сегодня вечером заменю кварц на 7.3728МГц, проверю...   Oct 29 2008, 13:30
- - Прораб счастья   Я, в общем-то, знаю что я передаю Посылка у меня ...   Oct 30 2008, 07:30
|- - =GM=   Цитата(Прораб счастья @ Oct 30 2008, 07:3...   Oct 30 2008, 10:01
- - SysRq   Попробуйте отправить неразрывно два байта: [0xFF][...   Oct 30 2008, 08:46
- - IVANS   GM может так? PORTB.7=~PINB.7 Попробуй включить п...   Oct 30 2008, 10:13
- - SysRq   Цитата(IVANS @ Oct 30 2008, 13:13) GM мож...   Nov 1 2008, 18:28
- - =GM=   Цитата(SysRq @ Nov 1 2008, 18:28) Восстан...   Nov 1 2008, 20:50


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

 


RSS Текстовая версия Сейчас: 21st August 2025 - 01:02
Рейтинг@Mail.ru


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