Перейти к содержанию

Рекомендуемые сообщения

Доброго времени суток.

Начнем! Есть ПК , есть atmega16 , есть переходник USB UART из аппаратуры это все.

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

ДАННЫЕ------->ПК------->переходник------->atmega16

в идеале загорается светодиод если данные пришли без потерь

Но в том то и дело что данные приходят иногда не приходят иногда приходят с пятого, седьмого, пятнадцатого раза

настройки соединения USART в atmega16
// USART initialization
// Communication Parameters: 8 Data, 1 Stop, No Parity
// USART Receiver: On
// USART Transmitter: On
// USART Mode: Asynchronous
// USART Baud Rate: 9600
UCSRA=0x00;
UCSRB=0xD8;
UCSRC=0x86;
UBRRH=0x00;
UBRRL=0x33;

Настройки в программе такиеже 8 дата 1 стоп NO PARity режим асинхронный

есть предположение что нужно соединить общий провод на переходнике и atmega16

код приема данных


// USART Receiver interrupt service routine
interrupt [uSART_RXC] void usart_rx_isr(void)
{
char status,data;
status=UCSRA;
data=UDR;

nomer_bita++;
x[nomer_bita]=data;
if(nomer_bita==5)
{
 nomer_bita=0;
}
if((x[1]=='1') && (x[2]=='2') && (x[3]=='3') && (x[4]=='4') && (x[5]=='5'))
{
 PORTA.7=1;
}
else
{
 PORTA.7=0;
}

if ((status & (FRAMING_ERROR | PARITY_ERROR | DATA_OVERRUN))==0)
  {
  rx_buffer[rx_wr_index++]=data;
#if RX_BUFFER_SIZE == 256
  // special case for receiver buffer size=256
  if (++rx_counter == 0)
  {
#else
  if (rx_wr_index == RX_BUFFER_SIZE) rx_wr_index=0;
  if (++rx_counter == RX_BUFFER_SIZE)
  {
  rx_counter=0;
#endif
  rx_buffer_overflow=1;
  }
  }
}

внимание вопрос как избежать данного бага потери данных?

Изменено пользователем IMXO
Ссылка на комментарий
Поделиться на другие сайты

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

внимание вопрос как избежать данного бага потери данных?

Думаю, так:

есть предположение... нужно соединить общий провод на переходнике и atmega16

Ссылка на комментарий
Поделиться на другие сайты

Выбираем схему BMS для заряда литий-железофосфатных (LiFePO4) аккумуляторов

Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

массив использовать как стек , проверку стека делать по приходу контрольного символа "возврат коретки" или редко используемых символов типа "ё" или нет?

Ссылка на комментарий
Поделиться на другие сайты

в протеусе виртуально все работает

сомневаюсь... достаточно отправить посылку 112345 , и усе... алес капут... дальше можете сколько угодно отправлять правильную посылку ответом будет тишина....
Ссылка на комментарий
Поделиться на другие сайты

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

прога не работает....

1. нормальный прием данных с юарта возможен или через прерывания или программными методами в режиме постоянного ожидания...

о программном методе(это ваши стандартные функции четчар путчар) можете забыть сразу...вам еще кучу переферии обслуживать...

2. стандартные библиотеки общения с терм.датчиками отключают вызов прерываний на время формирования временных интервалов для общения с датчиками... это надо учитывать при работе с юартом...

3. ну и при приеме с юарта пользуем стек размером кодовой посылки... а также сообщаем на ПК о готовности приема и/или ошибок при приеме посылки

Ссылка на комментарий
Поделиться на другие сайты

короче нужен протокол передачи нанных. Это решает часть проблем.

переписать функцию получения данных например так:

if (rx_counter>0)

{

x=getchar();

if (x=='1')

{

migalka(5);

}

putchar(x);

x=0x00;

}

это не подвесит прогу и я уже проверил в протеусе через раз работает))))

какиенибуть примеры к советам будут где чего почитать и так далее

Ссылка на комментарий
Поделиться на другие сайты

у вас в пост1 был вполне нормальный код нужно просто

nomer_bita++;
x[nomer_bita]=data;
if(nomer_bita==5)
{
nomer_bita=0;
}

заменить на

x[1]=x[2];
x[2]=x[3];
x[3]=x[4];
x[4]=x[5];
x[5]=data;

тем самым вы получите сдвигаемый стек... при проверке условия совпадения посылки первым проверяется x[5]=='5' , дабы не выполнять лишних проверок,

Ссылка на комментарий
Поделиться на другие сайты

походу работает. Я детально вчиталсяв стандартные ф-и они делают тоже самое почти. Спасибо огромное тем кто откликнулся.

В железе всеравно потери идут и ничего не работает а в протесе вроде работает

всем спасибо за мысли будем дальше работать

С вами не прощаюсь спишемся

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы публикуете как гость. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...