Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы
Непрочитано 08.04.2010, 15:04  
neiver
Временная регистрация
 
Регистрация: 30.07.2007
Сообщений: 51
Сказал спасибо: 1
Сказали Спасибо 12 раз(а) в 7 сообщении(ях)
neiver на пути к лучшему
По умолчанию Re: AVR USART+прерывания=потеря данных

if (tx_head!=tx_tale) - как я уже говорил, значит буффер не пуст и не полон.
Реклама:
neiver вне форума  
Непрочитано 08.04.2010, 15:05  
neiver
Временная регистрация
 
Регистрация: 30.07.2007
Сообщений: 51
Сказал спасибо: 1
Сказали Спасибо 12 раз(а) в 7 сообщении(ях)
neiver на пути к лучшему
По умолчанию Re: AVR USART+прерывания=потеря данных

В void send(char* s) нет проверки на переполнение - будет перезаписывать данные циклически - что не успело передаться - теряется.
neiver вне форума  
Непрочитано 08.04.2010, 15:27  
umgah
Частый гость
 
Регистрация: 15.01.2007
Сообщений: 20
Сказал спасибо: 3
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
umgah на пути к лучшему
По умолчанию Re: AVR USART+прерывания=потеря данных

Сообщение от neiver Посмотреть сообщение
В void send(char* s) нет проверки на переполнение - будет перезаписывать данные циклически - что не успело передаться - теряется.
три-четыре посылки уже иногда формируют ошибку передачи.
длина каждой телеграммы - 19 символов, включая zero term 0x00
итого - не более 100 символов в буфере, это менее половины.
Я конечно верну на родину предохранители, и перепроверю с ними, не жалко, путь будут.
Но они были, просто убрал потом за ненадобностью.
НЕ В UART дело блин, повторяю. Я сюда написал впервые за пару лет, а эмбещик я со стажем и по тривиальным вопросам кривости кода не стал бы народ напрягать.
umgah вне форума  
Непрочитано 08.04.2010, 15:30  
ish0
Прописка
 
Регистрация: 09.08.2006
Сообщений: 198
Сказал спасибо: 14
Сказали Спасибо 27 раз(а) в 20 сообщении(ях)
ish0 на пути к лучшему
По умолчанию Re: AVR USART+прерывания=потеря данных

Можно узнать для чего используется TMR2? Судя по комменту -
Сообщение от umgah Посмотреть сообщение
TIMER2 10uSec
#pragma interrupt_handler timer2_ovf_isr:iv_TIM2_OVF
код должен работать каждые 10 микросекунд, но время работы других обработчиков может быть больше этого интервала. Так, что либо увеличивайте тактовую частоту, либо в "длинных" обработчиках предусматривайте разрешение прерываний.
ish0 вне форума  
Непрочитано 08.04.2010, 15:40  
umgah
Частый гость
 
Регистрация: 15.01.2007
Сообщений: 20
Сказал спасибо: 3
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
umgah на пути к лучшему
По умолчанию Re: AVR USART+прерывания=потеря данных

Не длиннее. Проверял. Немного впритык, но не длиннее. UART - 80 байт, 0,1мкС, второй таймер вообще крошечный, INT0=266байт 0,3325мкС.
в общем либо я очень неверно утилизацию считаю, или все-таки резерв есть (
Но спасибо за мысли, это стоящая идея, к сожалению "рвать" длинноватый int0 я не могу. там ровно столько, сколько надо (
Работа таимера 0 - частота CLK для отправки сигналов "клавиатуры". В принципе я могу его увеличить немного, просто не думал, что в этом может оказаться мое спасение.
Может ?

Последний раз редактировалось umgah; 08.04.2010 в 15:43.
umgah вне форума  
Непрочитано 08.04.2010, 15:50  
igor-k
Временная регистрация
 
Регистрация: 03.02.2005
Сообщений: 52
Сказал спасибо: 8
Сказали Спасибо 8 раз(а) в 6 сообщении(ях)
igor-k на пути к лучшему
По умолчанию Re: AVR USART+прерывания=потеря данных

А проверить взводится ли FE-бит на приеме?
Т.к. не совпадение скорости 0.2%, то на символ идет 2%. Как там с детектированием стоп бита?
igor-k вне форума  
Непрочитано 08.04.2010, 15:56  
neiver
Временная регистрация
 
Регистрация: 30.07.2007
Сообщений: 51
Сказал спасибо: 1
Сказали Спасибо 12 раз(а) в 7 сообщении(ях)
neiver на пути к лучшему
По умолчанию Re: AVR USART+прерывания=потеря данных

Что я всё-таки рекомендую сделать:
Раз - добавить-таки корректные проверки и обработку для опустошения/передолнения обеих буфферов. Для переполнения и для чтения из пустых буфферов очень хорошие условия созданы.
Два - этот перенести код в прерывение USART_UDRE_vect:
Код:
// UART section
// UART transmission if something is in queue
if (tx_head!=tx_tale)
{
if ((UCSRA & DATA_REGISTER_EMPTY)!=0)
{
UDR=tx_buffer[tx_head];
tx_head++;
} 
}
neiver вне форума  
Непрочитано 08.04.2010, 15:57  
umgah
Частый гость
 
Регистрация: 15.01.2007
Сообщений: 20
Сказал спасибо: 3
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
umgah на пути к лучшему
По умолчанию Re: AVR USART+прерывания=потеря данных

Ммм.. кстати, я было столкнулся на одном проекте с любопытной особнностью порта, на котором фунциклирует UART. Если я соединяю ноги входа с pull-up c ногой выхода того же порта и приземляю ей pullup, то перестает работать UART на том же порту. На всякий поясню, зачем так вообще делать: чтобы постоянно видеть, что на ноге, но при этом иметь возможность приземлить ее со своей стороны и знать, я ее приземлил или устройство на другом конце. Может что-то тут такое есть ?
umgah вне форума  
Непрочитано 08.04.2010, 15:58  
kison
Почётный гражданин KAZUS.RU
 
Регистрация: 13.12.2004
Сообщений: 3,172
Сказал спасибо: 11
Сказали Спасибо 692 раз(а) в 504 сообщении(ях)
kison на пути к лучшему
По умолчанию Re: AVR USART+прерывания=потеря данных

Расскажите про:
Код:
TIMER2 10uSec
#pragma interrupt_handler timer2_ovf_isr:iv_TIM2_OVF
void timer2_ovf_isr(void)
{
TCNT2 = 0xFF; //reload counter value
if (timer›0) timer--;
if (key_timeout›0) key_timeout--;
}
Что означает "TIMER2 10uSec"?
Это период вызова прерывания? Тогда как Вы его получили из 8МГц-ового такта?
Или - что?
Вообще по Вашему исходнику трудно чего понять - это про первый, который в 6-м собщении. Какие то непонятные переменные - iscmd,timer,key_timeout... Что в них хранится и где они изменяются непонятно. Также как и то - зачем они вообще нужны.
Вообще мне подход не нравится. При жестком реалтайме, а при периодичности прерываний 10uS на INT0 - всего 80 тактов процессора при 8МГЦ тактировании и обработчики явно перегружены. ВСЕ! Требуется оптимизировать как алгоритм, так и код.
И буфер UART тут не при чем - вся программа сплошной тормоз.
kison вне форума  
Сказали "Спасибо" kison
umgah (08.04.2010)
Непрочитано 08.04.2010, 15:59  
umgah
Частый гость
 
Регистрация: 15.01.2007
Сообщений: 20
Сказал спасибо: 3
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
umgah на пути к лучшему
По умолчанию Re: AVR USART+прерывания=потеря данных

Сообщение от neiver Посмотреть сообщение
// UART section
// UART transmission if something is in queue
if (tx_head!=tx_tale)
{
if ((UCSRA & DATA_REGISTER_EMPTY)!=0)
{
UDR=tx_buffer[tx_head];
tx_head++;
}
}
Было.. в процессе охоты на ведьм изменил, так же как и tmps[] появилась. Изначально разумеется такого расточительства не было, конечно же. Но спасибо за советы, попробую..
umgah вне форума  
 

Закладки

Метки
avr, uart
Опции темы

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Передача данных с ATmega8 на COM порт ПК sergx1300 Микроконтроллеры, АЦП, память и т.д 32 20.04.2010 14:19
прерывания usart в avr studio 4.13 zubr_ Микроконтроллеры, АЦП, память и т.д 6 14.10.2009 18:33


Часовой пояс GMT +4, время: 08:43.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot