Jump to content

Recommended Posts

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

Начнем! Есть ПК , есть 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;
  }
  }
}

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

Edited by IMXO

Share this post


Link to post
Share on other sites
Guest /

UART, это далеко не СОМ.

Вот если добавить преобразователь на МАХ 232, то почти .

Share this post


Link to post
Share on other sites

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

Думаю, так:

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

Share this post


Link to post
Share on other sites

Литиевые батарейки Fanso для систем телеметрии и дистанционного контроля

Системы телеметрии находят все более широкое применение во многих отраслях на промышленных и коммунальных объектах. Требования, предъявляемые к условиям эксплуатации приборов телеметрии и, как следствие, источников питания для них, могут быть довольно жесткими. Fanso предоставляет широкую линейку продукции, рассчитанной на различные условия эксплуатации, что позволяет подобрать батарейку для каждого конкретного применения, в том числе и для устройств телеметрии.

Подробнее

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

Share this post


Link to post
Share on other sites

проблема толи в настройках толи в проводах в протеусе виртуально все работает

Share this post


Link to post
Share on other sites
                     

Приглашаем на вебинар Решения для построения ультразвуковых счетчиков жидкостей и газов на базе MSP430

Компэл совместно с Texas Instruments 23 октября 2019 приглашают на вебинар, посвященный системам-на-кристалле для построения ультразвуковых расходомеров жидкостей и газов на базе ядра MSP430. Вебинар проводит Йоханн Ципперер – эксперт по ультразвуковым технологиям, непосредственно участвовавший в создании данного решения. На вебинаре компания Texas Instruments представит однокристальное решение, позволяющее создавать точные недорогие счетчики жидкостей и газов.

Подробнее...

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

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

Share this post


Link to post
Share on other sites

я переписал на стандартные функции четчар путчар вроде лучше но потери идут где не пойму

Share this post


Link to post
Share on other sites
Написана программа дла работы с ком портом , которая отлично работает.

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

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

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

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

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

Share this post


Link to post
Share on other sites

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

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

if (rx_counter>0)

{

x=getchar();

if (x=='1')

{

migalka(5);

}

putchar(x);

x=0x00;

}

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

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

Share this post


Link to post
Share on other sites

у вас в пост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' , дабы не выполнять лишних проверок,

Share this post


Link to post
Share on other sites

попробуйте этот код в железе...

1234┘ - включить пин

0000┘ - выключить пин

fgk.rar

Share this post


Link to post
Share on other sites

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

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

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

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

Share this post


Link to post
Share on other sites

Join the conversation

You are posting as a guest. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
Sign in to follow this  

  • Similar Content

    • By IgnatiusF
      Не удается проинициализировать работу UART2 на скорость 19200 бод.
      Не вызывается прервание совсем, отсылаются постоянно нули на всех скоростях, если ставить System clock switch в 01 (HSE). При работе от RC генератора выдает уже просто не то, что нужно. 
      Кварц рабочий, и вообще все работает, при использовании библиотек HAL.
      SysTick выключил потому, что были подозрения на конлфикт приоритетов.
      Внизу представлена именно та часть кода программы, которая не работает, то есть сам UART.
      Проект скоро сдавать, а использовать готовую библиотеку HAL не хочется совсем, уже несколько дней парюсь и не могу найти проблему. Попробовал разобраться что пишет в регистры HAL, однако не смог т.к. не хватает знаний, значения регистров все такие же, кроме PLL (не используется) и RCC_CR1 (в HAL почему-то полностью равен 0). Проверял передачей данных по UART. Регистр BRR не удалось считать т.к. он только для записи. У меня записано так:
      USART1->BRR = 0x412;  //20MHz/16/19200 = 65,104.
      Где искать следует ошибку?
    • By IgnatiusF
      На схеме программатора USBasp заметил подключенные порты RXD и TXD к разъему, и появился вопрос, а для чего они там? Знаю, что при помощи них можно передавать и принимать данные через UART/USART между устройствами, а можно ли используюя USBasp передавать информацию по UART от МК к компьютеру и наоборот? И если можно, то как?
    • Guest Василий
      By Guest Василий
      Кто  может  помочь с примером  программирования в  программе  LDmicro  ?  Интересует  как  программировать   PWM выход  ? Хотелось  бы   увидеть  наглядный  пример  может  кто  знает ! Буду  рад  любой  информации !!!
    • Guest Александр
      By Guest Александр
      Добрый день
      Проблема с оценочной платой STM32F4-DISCOVERY в части работы USART
      суть вопроса
      по USART шлется и принимается блоки данных по 3 байта (в принципе сколько угодно) при этом если подключен USB разъем ST-LINKа то все работает должным образом (данные снуют туда сюда без проблем), но при отключении USB ST-LINKа данные из платы STM32F4-DISCOVERY идут а вот принимать данные плата отказывается (естественно подаю внешнее питание +5 вольт на одноименный контакт). Если кто сталкивался с подобной проблемой прошу хотя бы направить в сторону железа или софта.
      На плате STM32F4-DISCOVERY убраны перемычки SB11(T_NRST) и SB12(T_SWO) а так же отпаян резистор R68 (MCO). Плата при этом прошивается без проблем, и стартует при внешнем питании(не от USB ST-LINKа) тоже без каких то заморочек.
      код прикладывать на данный момент не вижу смысла там все просто, при чем при подключении USB ST-LINKа программа работает.
      Проект пишется на IARe, конфигурация формируется в STM32Cube.
      Заранее спасибо за ответ
    • By LoKeR
      Доброго времени суток, нашел хорошую статью Usart прием и отправка строки. Настроил на порт Usart3 перестал работать, попробовал на Usart2 перекинуть тоже не работает, как правильно переделать подскажите...
      stm32-uart-spl.rar
×
×
  • Create New...