roboforum.ru

Технический форум по робототехнике.
Текущее время: 14 авг 2025, 03:56

Часовой пояс: UTC + 4 часа




Начать новую тему Ответить на тему  [ Сообщений: 12 ] 
Автор Сообщение
 Заголовок сообщения: UDR0=0; -запрещенная комманда???
СообщениеДобавлено: 02 дек 2007, 21:42 
Не в сети

Зарегистрирован: 06 ноя 2007, 22:16
Сообщения: 43
Откуда: Кохтла-Ярве
Код:
UDR0=0; // передать 0 в USART0 если передача разрешена - avr123.nm.ru


По ходу процесса необходимо что бы пришедший в USART0 символ (команда) выполнил свое действие и канул в небытие, не мешая выполнению дальнейшего кода.
Попробовал следующее:
Код:
char rx_data=0;           //инициализация переменной
//... в самом теле цикла программы...
rx_data=UDR0;            //присвоение переменной пришедшего символа (если он пришел)
UDR0=0;                     //стирание регистра приема
//... в следующем цикле если нет символа в регистре приема, то в переменной 0.
rx_data=UDR0;
//Далее цикл крутится в ожидании команды.


При симуляции в VMLab выходит следующее сообщение:
Код:
[PC = $04FE, Time =    1.85 ms, {PER}]: UART write overrun: UDR not yet transmitted (status bit UDRE = 0)

Что это?
UDR0=0; --- запрещенная комманда??? :(


Последний раз редактировалось avr123.nm.ru 06 дек 2007, 12:51, всего редактировалось 3 раз(а).
не забываем оформлять тегами [code] текст программ


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: UDR0=0; -запрещенная комманда???
СообщениеДобавлено: 02 дек 2007, 22:15 
Не в сети
отсылающий читать курс
Аватара пользователя

Зарегистрирован: 06 ноя 2005, 04:18
Сообщения: 14195
Откуда: Москва
Нужно прочитать про устройство регистра UDR0 - его двойственность.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: UDR0=0; -запрещенная комманда???
СообщениеДобавлено: 03 дек 2007, 10:53 
Не в сети
скрытый хозяин вселенной :)
Аватара пользователя

Зарегистрирован: 18 сен 2006, 12:26
Сообщения: 18018
Откуда: Тверь по прозвищу Дверь
прог. языки: псевдокод =) сила в алгоритме!
ФИО: глубокоуважаемый Фёдор Анатольевич
avr123.nm.ru писал(а):
"nЭто до прочитать устройство регистра UDR0 - его двойственность.

мммм
я так понимаю ты посоветовал почитать про устройство регистра UDR0
в частности про его двойственность??
ато я не совсем уверен что правильно прочитал твою реплику =/
если АВР начнёт ещё и буквы пропускать...
наступит конец света


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: UDR0=0; -запрещенная комманда???
СообщениеДобавлено: 04 дек 2007, 12:02 
Не в сети

Зарегистрирован: 06 ноя 2007, 22:16
Сообщения: 43
Откуда: Кохтла-Ярве
avr123.nm.ru писал(а):
Нужно прочитать про устройство регистра UDR0 - его двойственность.

Читаю источник:
www.gaw.ru писал(а):
Если выполнять запись по адресу регистра UDRn, то записываемые данные помещаются в буферный регистр данных передатчика TXBn. При чтении регистра UDRn извлекается содержимое буферного регистра данных приемника RXBn.

Исходя из прочитанного непонятно, как очищается двойственный регистр UDR0? Или принятый символ висит в RXB0 до тех пор пока на его место не будет принят следующий?
Судя по Watch так и выходило :(
Дрянь дело :o
Дело в том, что по алгоритму МК должен выполнять опр. действие до тех пор, пока извне приходят управляющие символы, когда же они не поступают МК должен "молотить" по поставленной задаче и ожидать дальнейшей команды.
По аналогии: жму кнопку - "идет", отпустил - "стоит".
Не подскажите, как в этом случае можно организовать подобное управление


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: UDR0=0; -запрещенная комманда???
СообщениеДобавлено: 04 дек 2007, 12:27 
Не в сети
Аватара пользователя

Зарегистрирован: 21 дек 2006, 19:56
Сообщения: 4468
Откуда: Украина, г.Одесса
прог. языки: Delphi и С
А что не ясно.
Цикл While(1)
в нем постоянно опрашиваем USART на предмет поступления нового символа, если поступли обробатываем его.

Добавлено спустя 3 минуты 36 секунд:
Код:
while (1)
      {
       x=getchar();   
       itoa(x, stx);
       lcd_puts(stx);}
      };

Вот код ждем символ из usart, когда его получаем выводим на LCD код символа.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: UDR0=0; -запрещенная комманда???
СообщениеДобавлено: 04 дек 2007, 13:59 
Не в сети

Зарегистрирован: 06 ноя 2007, 22:16
Сообщения: 43
Откуда: Кохтла-Ярве
Master писал(а):
А что не ясно.
Цикл While(1) в нем постоянно опрашиваем USART на предмет поступления нового символа, если поступли обробатываем его

C While(1) все ясно...
Но! Программа не должна сидеть в While(1){опрос USART}, она должна выполнять и иные более полезные действия :oops: Обращение к USART у меня лишь одна из многих операций в довольно большом цикле While(1) поскольку внешние команды лишь изменяют режимы работы устройства на МК.
Я хочу добиться того, что бы УПРАВЛЕНИЕ устройства кнопками на панели, или поступающими извне командами, для оператора НЕ ОТЛИЧАЛОСЬ.
Внешняя команда все равно, как импульс опрокидывания триггера - пришла, переключила и ушла... Сейчас же поступившая команда висит в UDR0 до тех пор пока ее не сменит другая.
Вот поэтому я ее наивно хотел сбросить в конце While(1)...
проблема однако...:RTFM:


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: UDR0=0; -запрещенная комманда???
СообщениеДобавлено: 04 дек 2007, 14:28 
Не в сети
Аватара пользователя

Зарегистрирован: 21 дек 2006, 19:56
Сообщения: 4468
Откуда: Украина, г.Одесса
прог. языки: Delphi и С
Так сделай прерывание по получению USARTом символа или опришивай USART 10 раз в сек к примеру, на предмет нового символа.
Вот как-то так.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: UDR0=0; -запрещенная комманда???
СообщениеДобавлено: 04 дек 2007, 14:36 
Не в сети
отсылающий читать курс
Аватара пользователя

Зарегистрирован: 06 ноя 2005, 04:18
Сообщения: 14195
Откуда: Москва
Пример прерывания и буфера приема в http://www.avr123.nm.ru/z5.htm

конфигурирует мастер CVAVR


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: UDR0=0; -запрещенная комманда???
СообщениеДобавлено: 04 дек 2007, 16:04 
Не в сети

Зарегистрирован: 06 ноя 2007, 22:16
Сообщения: 43
Откуда: Кохтла-Ярве
Master писал(а):
Так сделай прерывание... или опрашивай 10 раз в сек...

Прерывание, это один из возможных вариантов, но в моем случае он годится только для части команд, того же перехода к другому режиму например.
В начале моей программе необходимо вывести устройство в начало координат. Кнопками оно выводится так - пока жму "Влево" движется влево, пока "Вправо" - вправо. Вывел и ... "Поехали" - система начала барабанить в авто-режиме пока я ее не опрокинул "Стоп"-ом.
Вот эти команды вправо-влево-вверх-вниз должны выполняться и командами удаленного управления, т.е. пока поступают символы - движение, перстали поступать - стоим, ждем-с...
Если сделать их через предложенную CVAR функцию с прерыванием, то будет выполнено столько шагов, сколько (в штуках))) было получено символов.... неудобно :(
Оттого-то и вся морока с зависшим в UDR0 символом который не дает системе перейти к следующему действию.

Добавлено спустя 8 минут 26 секунд:
avr123.nm.ru писал(а):
прерывания и буфера приема конфигурирует мастер CVAVR

Насколько я понял из того, что мне сконфигурировал мастер-CVAVR, до поступления символа в UDR0, прог-а будет "молотить" в закрытом цикле откликаясь только на прерывания. Это не есть хорошо. Удобнее если вместо While(пока нет символа) у меня будет стоять if(если пришел символ){делай то-то;}
Ведь команды приходят время от времени, а про-га молотит постоянно, зачем ей постоянно ждать в While(пока нет символа)?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: UDR0=0; -запрещенная комманда???
СообщениеДобавлено: 04 дек 2007, 16:14 
Не в сети
Аватара пользователя

Зарегистрирован: 21 дек 2006, 19:56
Сообщения: 4468
Откуда: Украина, г.Одесса
прог. языки: Delphi и С
Ну хорошо с порта пришла команда влево случилось прерывание и в переменную движение DVIJ записалось влево, в осоновном цикле while (1) просиходит обработка того что содержится в DVIJ, там содержится влево и он молотит влево, потом ты нажал пробел типа стоп и в DVIJ записалось стоп, обработка в основном цикле на стоп в переменной DVIJ дало команду стоять двигателям.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: UDR0=0; -запрещенная комманда???
СообщениеДобавлено: 09 дек 2007, 20:54 
Не в сети

Зарегистрирован: 06 ноя 2007, 22:16
Сообщения: 43
Откуда: Кохтла-Ярве
Спасибо Master. Не мытьем ее взял, так катаньем :Yahoo!: Так и сделал: символ "f" вперед, "s" соответственно стой!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: UDR0=0; -запрещенная комманда???
СообщениеДобавлено: 10 дек 2007, 00:43 
Не в сети
Аватара пользователя

Зарегистрирован: 21 дек 2006, 19:56
Сообщения: 4468
Откуда: Украина, г.Одесса
прог. языки: Delphi и С
:oops: да ладно, чего уж там.
:D


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 12 ] 

Часовой пояс: UTC + 4 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
phpBB SEO