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

 
 
 
Reply to this topicStart new topic
> tiny2313 UART работает с перерывами.
Alexis25
сообщение Oct 6 2008, 11:30
Сообщение #1





Группа: Участник
Сообщений: 11
Регистрация: 6-10-08
Пользователь №: 40 719



Сделали такую конструкцию: соединили atmega128 и attiny2313 уартами через 485 драйвер.
Скорость 9600, на тини кварц - 4.000 МГц.
В качестве отладки написал такую программу: с меги постоянно валятся байты на скорости 9600 (осциллографом проверено). На тини создан проект (в codevision avr), в настройках включен усарт с прерыванием. В обработчике усарта вписал только одну строчку:
PORTB.6=!PINB.6
По идее на этой ноге должен получиться меандр с частотой приёма символов. На самом деле получается 10 изменений уровня, затем пауза примерно 25 мс.
В чём может быть проблема?
Go to the top of the page
 
+Quote Post
gormih
сообщение Oct 6 2008, 12:27
Сообщение #2


nofb
***

Группа: Свой
Сообщений: 430
Регистрация: 18-05-06
Из: Москва, Зеленоград
Пользователь №: 17 218



Цитата(Alexis25 @ Oct 6 2008, 15:30) *
Сделали такую конструкцию: соединили atmega128 и attiny2313 уартами через 485 драйвер.
Скорость 9600, на тини кварц - 4.000 МГц.
В качестве отладки написал такую программу: с меги постоянно валятся байты на скорости 9600 (осциллографом проверено). На тини создан проект (в codevision avr), в настройках включен усарт с прерыванием. В обработчике усарта вписал только одну строчку:
PORTB.6=!PINB.6
По идее на этой ноге должен получиться меандр с частотой приёма символов. На самом деле получается 10 изменений уровня, затем пауза примерно 25 мс.
В чём может быть проблема?

Протокол обмена какой? Что там передается - непрерывный поток?


--------------------
Это не то что вы подумали ...

Go to the top of the page
 
+Quote Post
Alexis25
сообщение Oct 6 2008, 12:33
Сообщение #3





Группа: Участник
Сообщений: 11
Регистрация: 6-10-08
Пользователь №: 40 719



Цитата(gormih @ Oct 6 2008, 16:27) *
Протокол обмена какой? Что там передается - непрерывный поток?

В смысле, протокол? Байт данных передаётся командой putchar, соответственно по прерыванию этот байт принимается тини. Или я чего-то ещё не сделал?

Цитата(Alexis25 @ Oct 6 2008, 15:30) *
Сделали такую конструкцию: соединили atmega128 и attiny2313 уартами через 485 драйвер.
Скорость 9600, на тини кварц - 4.000 МГц.
В качестве отладки написал такую программу: с меги постоянно валятся байты на скорости 9600 (осциллографом проверено). На тини создан проект (в codevision avr), в настройках включен усарт с прерыванием. В обработчике усарта вписал только одну строчку:
PORTB.6=!PINB.6
По идее на этой ноге должен получиться меандр с частотой приёма символов. На самом деле получается 10 изменений уровня, затем пауза примерно 25 мс.
В чём может быть проблема?

Поправка: меандр должен быть с частотой приёма БАЙТОВ.
Go to the top of the page
 
+Quote Post
hainiken
сообщение Oct 6 2008, 13:17
Сообщение #4


Участник
*

Группа: Новичок
Сообщений: 16
Регистрация: 4-10-08
Пользователь №: 40 693



Цитата(Alexis25 @ Oct 6 2008, 16:33) *
Поправка: меандр должен быть с частотой приёма БАЙТОВ.

Поменьше ! в 2 раза и еще меньше за счет стартов стопов. Подробное описание подключения и программирования UART - http://www.radiokot.ru/forum/viewtopic.php?t=11048

Вот так:

PORTB.6 ^= 1; или так: PORTB.6 ++;

Почетче будет пахать, так как не будет зависеть от того что конкретно на ноге есть.

Цитата(Alexis25 @ Oct 6 2008, 15:30) *
На тини создан проект (в codevision avr)

Вот и приложите его архивчиком. А 2 МК (и больше и разных ядер) вы можете в PROTEUS отлаживать виртуально.
Go to the top of the page
 
+Quote Post
Alexis25
сообщение Oct 6 2008, 13:18
Сообщение #5





Группа: Участник
Сообщений: 11
Регистрация: 6-10-08
Пользователь №: 40 719



Цитата(hainiken @ Oct 6 2008, 17:14) *
Поменьше ! в 2 раза и еще меньше за счет стартов стопов. Подробное описание подключения и программирования UART - http://www.radiokot.ru/forum/viewtopic.php?t=11048


Ну не суть, меандр-то должен быть равномерным. А наблюдаются периодические паузы.

Сообщение отредактировал Alexis25 - Oct 6 2008, 13:21
Прикрепленные файлы
Прикрепленный файл  2f.zip ( 31.83 килобайт ) Кол-во скачиваний: 45
 
Go to the top of the page
 
+Quote Post
hainiken
сообщение Oct 6 2008, 13:24
Сообщение #6


Участник
*

Группа: Новичок
Сообщений: 16
Регистрация: 4-10-08
Пользователь №: 40 693



Цитата(Alexis25 @ Oct 6 2008, 17:18) *
Ну не суть

Ну просто вы отдельный пост поправке посвятили - хотя символ это и есть байт при 8N1 - т.е. обычно.

Цитата(Alexis25 @ Oct 6 2008, 17:18) *
меандр-то должен быть равномерным. А наблюдаются периодические паузы.

Исходник нужно зырить. UDR не нужно считывать чтоб он освобождался ?

=====
Попробуйте драйвер 485 убрать и соединить напрямую UART через резиторы 1 кОм если МК рядом.
Go to the top of the page
 
+Quote Post
Alexis25
сообщение Oct 6 2008, 13:47
Сообщение #7





Группа: Участник
Сообщений: 11
Регистрация: 6-10-08
Пользователь №: 40 719



Цитата(hainiken @ Oct 6 2008, 17:24) *
Ну просто вы отдельный пост поправке посвятили - хотя символ это и есть байт при 8N1 - т.е. обычно.
Исходник нужно зырить. UDR не нужно считывать чтоб он освобождался ?

=====
Попробуйте драйвер 485 убрать и соединить напрямую UART через резиторы 1 кОм если МК рядом.


Странно, без драйвера работает. По крайней мере сейчас. Спасибо, буду копать дальше.
Go to the top of the page
 
+Quote Post
smac
сообщение Oct 6 2008, 15:17
Сообщение #8


Частый гость
**

Группа: Участник
Сообщений: 149
Регистрация: 2-06-08
Из: Москва
Пользователь №: 38 003



Цитата(Alexis25 @ Oct 6 2008, 17:47) *
Странно, без драйвера работает. По крайней мере сейчас. ...

Скорее всего, как уже было подмечено, нужно читать регистр UDR иначе у вас прерывание будет возникать несколько раз после приема одного байта.
Вот цитата из даташита
Цитата
When the Receive Complete Interrupt Enable (RXCIE) in UCSRB is set, the USART
Receive Complete interrupt will be executed as long as the RXC flag is set (provided
that global interrupts are enabled). When interrupt-driven data reception is used, the
receive complete routine must read the received data from UDR in order to clear the
RXC flag, otherwise a new interrupt will occur once the interrupt routine terminates
Go to the top of the page
 
+Quote Post
SysRq
сообщение Oct 6 2008, 15:33
Сообщение #9


Чайник, 1 литр
****

Группа: Свой
Сообщений: 655
Регистрация: 17-05-06
Из: Moscow
Пользователь №: 17 168



Читаем:
Цитата(Alexis25 @ Oct 6 2008, 15:30) *
На тини создан проект (в codevision avr), в настройках включен усарт с прерыванием. В обработчике усарта вписал только одну строчку:
PORTB.6=!PINB.6

А в выложенном исходнике:
Цитата
interrupt [USART_RXC] void usart_rx_isr(void)
{
char status,data;
status=UCSRA;
data=UDR;
if ((status & (FRAMING_ERROR | PARITY_ERROR | DATA_OVERRUN))==0)
{
rx_buffer[rx_wr_index]=data;
if (++rx_wr_index == RX_BUFFER_SIZE) rx_wr_index=0;
if (++rx_counter == RX_BUFFER_SIZE)
{
rx_counter=0;
rx_buffer_overflow=1;
};
};
PORTB.6++;
}


Нефиговая такая строчечка, да.... с равномерным таким временем выполнения, ага twak.gif

У вас линия RS485 к 2.5 вольтам подтянута? Без этого будет приниматься мусор, и такой обработчик ("PORTB.6++;") прерывания его зафиксирует. Мусорные "байты" могут "приходить" в любой момент.
Go to the top of the page
 
+Quote Post
Alexis25
сообщение Oct 7 2008, 06:37
Сообщение #10





Группа: Участник
Сообщений: 11
Регистрация: 6-10-08
Пользователь №: 40 719



Цитата(SysRq @ Oct 6 2008, 19:33) *
Читаем:

А в выложенном исходнике:
Нефиговая такая строчечка, да.... с равномерным таким временем выполнения, ага twak.gif

У вас линия RS485 к 2.5 вольтам подтянута? Без этого будет приниматься мусор, и такой обработчик ("PORTB.6++;") прерывания его зафиксирует. Мусорные "байты" могут "приходить" в любой момент.


Я вписал только одну строчку, остальное сгенерировано автоматически. Правда я её уже поправил на PORTB.6++, как мне тут посоветовали.

А по поводу 2.5 вольт можно подробнее? или лучше ссылку. Это не "защитное" ли смещение? Действительно, те самые паузы на витухе тоже наблюдаются.

Сообщение отредактировал Alexis25 - Oct 7 2008, 07:09
Go to the top of the page
 
+Quote Post
SysRq
сообщение Oct 8 2008, 18:00
Сообщение #11


Чайник, 1 литр
****

Группа: Свой
Сообщений: 655
Регистрация: 17-05-06
Из: Moscow
Пользователь №: 17 168



Цитата(Alexis25 @ Oct 7 2008, 10:37) *
Это не "защитное" ли смещение?
ТЫЦ, с пункта "Отказоустойчивость". Из опыта выяснилоь, что сие есть весьма важно.

Цитата(Alexis25 @ Oct 7 2008, 10:37) *
Действительно, те самые паузы на витухе тоже наблюдаются.
Дык может паузы создает тот кто данные отправляет?

Сообщение отредактировал SysRq - Oct 8 2008, 18:01
Go to the top of the page
 
+Quote Post
Alexis25
сообщение Oct 9 2008, 06:04
Сообщение #12





Группа: Участник
Сообщений: 11
Регистрация: 6-10-08
Пользователь №: 40 719



Цитата(SysRq @ Oct 8 2008, 22:00) *
ТЫЦ, с пункта "Отказоустойчивость". Из опыта выяснилоь, что сие есть весьма важно.

Дык может паузы создает тот кто данные отправляет?

Нет, он пауз не создаёт. Появляются именно после интерфейса. Подозреваю, что это 50 Гц.
Go to the top of the page
 
+Quote Post
zombi
сообщение Oct 13 2008, 22:14
Сообщение #13


Гуру
******

Группа: Свой
Сообщений: 2 076
Регистрация: 10-09-08
Пользователь №: 40 106



Цитата(Alexis25 @ Oct 6 2008, 16:47) *
Странно, без драйвера работает. По крайней мере сейчас. Спасибо, буду копать дальше.

Цитата
Нет, он пауз не создаёт. Появляются именно после интерфейса. Подозреваю, что это 50 Гц.

Значит нужно искать в самом 485 передатчике.
В передатчике сигнал "разрешение передачи" всегда активен? или активируется непосредственно перед передачей очередного байта? Если активируется, то учтена ли задержка переключения режима работы ?
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 24th June 2025 - 22:29
Рейтинг@Mail.ru


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