roboforum.ru

Технический форум по робототехнике.
Текущее время: 27 ноя 2024, 06:32

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




Начать новую тему Ответить на тему  [ Сообщений: 21 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Прием/передачи int переменных через USART???
СообщениеДобавлено: 06 ноя 2007, 23:19 
Не в сети

Зарегистрирован: 06 ноя 2007, 22:16
Сообщения: 43
Откуда: Кохтла-Ярве
Доброго дня/вечера.
У меня вот какой вопрос: Каким образом организовать обмен данными/командами между PC и ATMega128???
МК slave-устройство должен периодически отсылать на РС две int переменных (координаты) и ждать команд от РС (master-устройство). Просто замечательно, если возможно этот обмен данными можно будет вести из SCADA (Citect например) через OPC-сервер :roll:
В CodVisoinAVR Wizard создаваемый код изначально заточен на прием переменной байтовой (char) величины и помещении ее в FIFO буфер. А ежели потребуется принимать от PC данные велчины int? И самое главное - Какие будут функции для того что бы передать int переменные на PC, что б он еще разобрался где какая переменная? :?: :?:
Заранее благодарен за разумные ответы и тольковые намеки :D


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Прием/передачи int переменных через USART???
СообщениеДобавлено: 06 ноя 2007, 23:33 
Не в сети
Site Admin
Аватара пользователя

Зарегистрирован: 09 фев 2006, 15:36
Сообщения: 3339
Откуда: Москва
Skype: vooon341
прог. языки: Python, C, Bash, JavaScript, C++, PHP
ФИО: Владимир Ермаков
а что есть int?
для авр - это 2а байта,
что мешает передавать сначала первый а потом второй байты cvavr'овской функцией?

а вобще тут нужно поставить тз, посмотреть распространенные протоколы.

_________________
Linux user | Firefox user


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Прием/передачи int переменных через USART???
СообщениеДобавлено: 06 ноя 2007, 23:34 
Не в сети
Аватара пользователя

Зарегистрирован: 21 дек 2006, 19:56
Сообщения: 4468
Откуда: Украина, г.Одесса
прог. языки: Delphi и С
Если я правильно понял, то я выкручивался так.
Мне нада было мигать светиками на одном порту МК, так я слал не числа а коды символов. В Delphi это примерно так chr(25). Т. е. шлется символ с кодом ANSII 25, МК принимает его как 25 и выводит это число в порт (загоряются светики 00011001).


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Прием/передачи int переменных через USART???
СообщениеДобавлено: 06 ноя 2007, 23:59 
Не в сети

Зарегистрирован: 06 ноя 2007, 22:16
Сообщения: 43
Откуда: Кохтла-Ярве
Vooon писал(а):
что мешает передавать сначала первый а потом второй байты cvavr'овской функцией?


cvavr'овской функция заточена на Прием, а тут передача :idea: А поскольку регистр у USART, как я понял всего один, на прием и передачу. На передачу пойдут целых две int переменных, а стало быть уже 4 байта, то есть - уже собирается очередь. И эту очередь как то нужно рассосать, по-умному. В курсе для Чайников предложено закидывать данные на передачу, как putchar (символами и строками), т.е. без очереди. Просто брать в нужном месте процедуры, дождаться когда освободится регистр и :arrow: посылать. Тут несколько иное дело...
Как-же? :RTFM: Help! Help!

Vooon писал(а):
а вобще тут нужно поставить тз, посмотреть распространенные протоколы.


Что такое т3 ??? Извини, но именно тот самый Чайник :D


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Прием/передачи int переменных через USART???
СообщениеДобавлено: 07 ноя 2007, 00:09 
Не в сети

Зарегистрирован: 06 ноя 2007, 22:16
Сообщения: 43
Откуда: Кохтла-Ярве
Master писал(а):
Мне нада было мигать светиками на одном порту МК, так я слал не числа а коды символов. В Delphi это примерно так chr(25). Т. е. шлется символ с кодом ANSII 25, МК принимает его как 25 и выводит это число в порт (загоряются светики 00011001).


У меня с МК должны идти переменные положения ШД (1600шагов по горизонтали, +400 или -400 шагов по вертикали) - координаты. PC в идеале должен их обрабатывать в SCADA, как углы отклонения от начала координат.
Моя проблема не только с размерностью (тут все можно по-Шариковски, взять все и поделить), сколько с порядком передачи данных.
:?:


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Прием/передачи int переменных через USART???
СообщениеДобавлено: 07 ноя 2007, 00:39 
Не в сети
Аватара пользователя

Зарегистрирован: 21 дек 2006, 19:56
Сообщения: 4468
Откуда: Украина, г.Одесса
прог. языки: Delphi и С
Блин а нафига если у тебя ШД в том та и их основное достоинство, что шаги отсчитываются программно, т. е. без обратной связи. Иначе смысл использовать ШД.
И на чем будешь писать софт для организации связи с ПК? Софт для ПК в смысле.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Прием/передачи int переменных через USART???
СообщениеДобавлено: 07 ноя 2007, 01:05 
Не в сети
Site Admin
Аватара пользователя

Зарегистрирован: 09 фев 2006, 15:36
Сообщения: 3339
Откуда: Москва
Skype: vooon341
прог. языки: Python, C, Bash, JavaScript, C++, PHP
ФИО: Владимир Ермаков
wolly писал(а):
cvavr'овской функция заточена на Прием, а тут передача :idea: А поскольку регистр у USART, как я понял всего один, на прием и передачу. На передачу пойдут целых две int переменных, а стало быть уже 4 байта, то есть - уже собирается очередь. И эту очередь как то нужно рассосать, по-умному. В курсе для Чайников предложено закидывать данные на передачу, как putchar (символами и строками), т.е. без очереди. Просто брать в нужном месте процедуры, дождаться когда освободится регистр и :arrow: посылать. Тут несколько иное дело...
Как-же? :RTFM: Help! Help!


тз - Техническое Задание.

мастер кода cvavr прекрасно делает функции и для приема, и для передачи,
и может еще и с FIFO буфферами их сделать.

я не телепат.
зачем две 16и битных переменных для отправки одной не понимаю.
почему не использовать две 8и битных (char)?
(вариант не со сдвигами, а с указателями пока не берем)

примерчик, взял из головы.
Код:
int my_int = 0xF00F;
char my_int_h = (char) (my_int >> 8);
char my_int_l = (char) (my_int);

putchar(my_int_h); //-> F0h
putchar(my_int_l); //-> 0Fh


ессно можно проще написать, но проще для того кто хор. указатели понимает.
для начинающего это имхо сложно.

_________________
Linux user | Firefox user


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Прием/передачи int переменных через USART???
СообщениеДобавлено: 07 ноя 2007, 01:54 
Не в сети
Аватара пользователя

Зарегистрирован: 08 окт 2004, 16:43
Сообщения: 2114
Откуда: St. Petersburg
Skype: quark-bot
ФИО: Клебан Виталий
Код:
int my_int = 0xF00F;
char my_int_h = (char) (my_int >> 8);
char my_int_l = (char) (my_int);

putchar(my_int_h); //-> F0h
putchar(my_int_l); //-> 0Fh

//И после того ка приняли два байта подряд восстанавливаем int.
int input = my_int_l | (my_int_h << 8);


_________________
Все новости о моих проектах http://savethebest.ru


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Прием/передачи int переменных через USART???
СообщениеДобавлено: 07 ноя 2007, 20:29 
Не в сети
Аватара пользователя

Зарегистрирован: 03 авг 2007, 19:43
Сообщения: 1437
Откуда: Екатеринбург
прог. языки: Си, асм со словарем
с помощью указателей
Код:
передача. формируется массив чисел, затем отправляется по ЮСАРТ
unsigned char *adress_temp_1821;
int temp_1821;

adress_temp_1821   =&temp_1821;
data_tx[2]   =*adress_temp_1821;     
data_tx[3]   =*(adress_temp_1821+1);


прием
unsigned char *adress_temperatura ;    // указатель
int  temperatura;
adress_temperatura   =&temperatura;
*adress_temperatura++   =data_rx[2];
*adress_temperatura   =data_rx[3];


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Прием/передачи int переменных через USART???
СообщениеДобавлено: 07 ноя 2007, 20:51 
Не в сети

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

ШД это два привода (вертикальной и горизонтально разверток 180 и 360 град) устройства, которое сканирует пространство вокруг себя и засекя объект переключается на его сопровождение.
2-е INT - это координаты вектора направления на объект. В десятичных числах максимальные их величины 1600 (горизонт), 800 (вертикаль).

Master писал(а):
И на чем будешь писать софт для организации связи с ПК? Софт для ПК в смысле.

А вот это на сей момент наверное самый сложный вопрос. :?:
До сей поры я работал с Simatic S7-200 и Unitronics. Они связывались со Citect SCADA либо напрямую, как Сименс, либо через UniOPCsrver, как Юнитроникс.
Как вязать со SCADA ATmega вообще не представляю...
Чем и как еще можно организовать прием-передачу команд и данных от PC к MK устройству и обратно так что бы принимаемая информация и управление было по возможности удобна???


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Прием/передачи int переменных через USART???
СообщениеДобавлено: 07 ноя 2007, 21:09 
Не в сети

Зарегистрирован: 06 ноя 2007, 22:16
Сообщения: 43
Откуда: Кохтла-Ярве
За примеры кодов спасибо... буду осваивать полученное :idea:
Созрел еще вопрос:
В чем отличается передача данных printf() и putchar()?
В случае putchar() аргументы отправляются посредством USART. Это наглядно продемонстрировано функцией.
А printf(), как она распоряжается данными?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Прием/передачи int переменных через USART???
СообщениеДобавлено: 07 ноя 2007, 21:18 
Не в сети
Site Admin
Аватара пользователя

Зарегистрирован: 09 фев 2006, 15:36
Сообщения: 3339
Откуда: Москва
Skype: vooon341
прог. языки: Python, C, Bash, JavaScript, C++, PHP
ФИО: Владимир Ермаков
printf() - форматированный вывод.

Код:
unsigned char i;
for(i=0; i<10; i++)
{
    printf("Hello World #%02d\n", i)
}

выводет на терминал:
Код:
Hello World #00
Hello World #01
Hello World #02
Hello World #03
Hello World #04
Hello World #05
Hello World #06
Hello World #07
Hello World #08
Hello World #09

_________________
Linux user | Firefox user


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Прием/передачи int переменных через USART???
СообщениеДобавлено: 07 ноя 2007, 21:24 
Не в сети

Зарегистрирован: 29 дек 2004, 23:15
Сообщения: 3744
Откуда: Санкт-Петербург
прог. языки: C, C++, C#, Asm
ФИО: Кашликов Сергей
Если без гемороя - то почему просто не отправлять строку а в МК ее преобразовывать? Число не слишком длинное. Да и если как сказано - изредка посылаются эти числа


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Прием/передачи int переменных через USART???
СообщениеДобавлено: 08 ноя 2007, 02:07 
Не в сети
Site Admin
Аватара пользователя

Зарегистрирован: 09 фев 2006, 15:36
Сообщения: 3339
Откуда: Москва
Skype: vooon341
прог. языки: Python, C, Bash, JavaScript, C++, PHP
ФИО: Владимир Ермаков
Сергей писал(а):
Если без гемороя - то почему просто не отправлять строку а в МК ее преобразовывать? Число не слишком длинное. Да и если как сказано - изредка посылаются эти числа

можно и так :)

код:
Код:
/// отправляет 16и битное число текстом, HEX
void send_int16(int s)
{
   char data[5];
   data[4] = '0' + (s & 0x0F);
   if( data[4] > '9' )
      data[4] += 7;
   data[3] = '0' + ((s>>(4)) & 0x0F);
   if( data[3] > '9' )
      data[3] += 7;
   data[2] = '0' + ((s>>(8)) & 0x0F);
   if( data[2] > '9' )
      data[2] += 7;
   data[1] = '0' + (s>>(12));
   if( data[1] > '9' )
      data[1] += 7;
   puts(data);
}
/// другой вариант, требует больше памяти
printf("%04X", s);

/// принимает 16и битное число
int get_int16(void)
{
   int ret = 0x0000;
   char temp = 0, i;
   for( i = 12; i >= 0; i - 4 )
   {
      temp = getchar();
      if( temp > 'F')
         temp -= 'a' - '9';
      if( temp > '9' )
         temp -= 7;
      temp -= '0';
      ret |= (temp & 0x0F)<<i;
   }
   return ret;
}

_________________
Linux user | Firefox user


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Прием/передачи int переменных через USART???
СообщениеДобавлено: 10 ноя 2007, 20:11 
Не в сети

Зарегистрирован: 06 ноя 2007, 22:16
Сообщения: 43
Откуда: Кохтла-Ярве
Советы и намеки перевариваю...
:?: Какой прогой/телом можно управлять МК с РС и выводить принятые данные на визуализацию?
Первоначальные очень смелые планы по привязке к SCADA пока никак не вытанцовываются :(


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 21 ]  На страницу 1, 2  След.

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


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

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


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

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