Форум программистов, компьютерный форум, киберфорум
Наши страницы
Микроконтроллеры Atmega AVR
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.94/33: Рейтинг темы: голосов - 33, средняя оценка - 4.94
Calligraff
3 / 3 / 1
Регистрация: 26.07.2013
Сообщений: 46
1

Обмен данными между МК через RS-485 (MAX487)

28.10.2015, 09:01. Просмотров 6172. Ответов 86
Метки нет (Все метки)

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

Сразу к делу:
В сообщении прикреплено фото и файл исходного кода (AtmelStudio 6) и проект в Proteus 8 Prof.

Проблема в следующем:
из МК U2 поднимаем ножку PD3, передаем данные TXD (рис.п.1) MAX487 передает другой стороне (рис.п.2), а U3 принимает RXD (рис.п.3).

Далее U3 обрабатывает данные и выдает ответ TXD (рис.п.4), MAX487 передает другой стороне (рис.п.5), но вот U2 через RXD (рис.п.6) ничего не принимает.

Помогите пожалуйста разобраться.
0
Миниатюры
Обмен данными между МК через RS-485 (MAX487)  
Вложения
Тип файла: zip project.zip (105.9 Кб, 49 просмотров)
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.10.2015, 09:01
Ответы с готовыми решениями:

Обмен данными по RS-485 в CodeVisionAVR (на базе кода Wizard
Задача: дополнить (видоизменить) код на С (в CodeVisionAvr) , чтобы получить работу функций...

RS-485: PIC18f4620 и MAX487
Доброй ночи. Подскажите, пожалуйста, такую штуку. Разбираюсь с передачей данных посредством...

Обмен данными по UART между несколькими устройствами
Планирую собрать систему из 2 - 33 устройств обменивающимися данными между собой по UART. В систему...

Обмен данными по SPI между двумя Atemga
Пытаюсь реализовать обмен 5 байт данными между двумя Atmeg(1-Atmega165 ведущий, 2-Atmega16...

Обмен данными через COM- порт
Добрый день, пытаюсь освоить передачу данных. Отсылаю на мк скажем "1", приходит "1" и "-38"...

86
Витальич
1274 / 1184 / 174
Регистрация: 02.12.2013
Сообщений: 4,886
11.05.2016, 23:11 81
Не хотите проблемы, пишите свою функцию с циклами и блекджеком.
Я лично так делаю.
1
Calligraff
3 / 3 / 1
Регистрация: 26.07.2013
Сообщений: 46
11.05.2016, 23:14  [ТС] 82
Циклом долго по времени копироваться будет.
memmove - быстрее
настораживает вот это:
void *memmove(void *to, const void *from, size_t count);
Функция memmove() копирует count символов из массива, адресуемого параметром from, в массив, адресуемый параметром to. Если заданные массивы перекрываются, процесс копирования проходит корректно, т.е. соответствующее содержимое будет помещено в массив to, но содержимое массива from при этом изменится.
0
Витальич
1274 / 1184 / 174
Регистрация: 02.12.2013
Сообщений: 4,886
11.05.2016, 23:21 83
Цитата Сообщение от Calligraff Посмотреть сообщение
Циклом долго по времени копироваться будет
с чего Вы взяли? memmove также циклом делает.
0
ValeryS
Модератор
7483 / 5666 / 725
Регистрация: 14.02.2011
Сообщений: 19,372
Завершенные тесты: 1
12.05.2016, 06:49 84
Цитата Сообщение от Calligraff Посмотреть сообщение
как бы с массивом char проблем нет - strcat(des, src) и готово, но с uint8_t не покатит.
вообще то char это и есть uint8_t или int8_t
но видать речь идет о строке (strcat) а это массив char с нулем в конце( терминальный ноль)
Цитата Сообщение от Calligraff Посмотреть сообщение
не используя циклы и переборы.
никак не получится
и strcat и memmove есть циклы
Цитата Сообщение от Calligraff Посмотреть сообщение
Функция memmove() копирует count символов из массива, адресуемого параметром from, в массив, адресуемый параметром to. Если заданные массивы перекрываются, процесс копирования проходит корректно, т.е. с
ну и что еще надо шустрее функция memcpy
https://ru.wikipedia.org/wiki/Memcpy
но она некорректно копирует при пересечении массивов
вообще то эти вопросы(насчет языка) лучше обсуждать в http://www.cyberforum.ru/c-beginners/
2
Voland_
1694 / 1038 / 98
Регистрация: 04.01.2010
Сообщений: 3,524
12.05.2016, 09:51 85
какое-то странное обсуждение. Нужно сделать формирование массива путем объединения двух других, но без циклов. Без циклов получится только индексированием исходных массивов, либо изначальной подгонки этих массивов в памяти. Все остальное связано с копированием/переносом ячеек памяти из одного места в другое, что естественно связано с циклической обработкой данных. Но циклы могут быть реализованы на:
-- уровне команд процессора (пример - LDIR, LDDR в Z80)
-- уровне блоков МК, то есть через DMA.
-- уровне ассемблера, то есть команд memcpy/memmove, которые внутри имеют свои оптимизированные (иногда не очень) циклы.
-- уровне языка высокого уровня.

То есть говороя строго, если вы озвучили требование "без циклов", то озвучьте на каком из четырех возможных уровней вы хотите от них уйти.

Добавлено через 1 минуту
Цитата Сообщение от Витальич Посмотреть сообщение
свою функцию с циклами и блекджеком.
немножко не понял, кто такая "блекджек" в данном контексте? )
0
Витальич
1274 / 1184 / 174
Регистрация: 02.12.2013
Сообщений: 4,886
12.05.2016, 10:14 86
Цитата Сообщение от Voland_ Посмотреть сообщение
немножко не понял, кто такая "блекджек" в данном контексте? )
с дополнительными фишками которых нет в стандартной библиотеке.
1
Voland_
1694 / 1038 / 98
Регистрация: 04.01.2010
Сообщений: 3,524
12.05.2016, 11:16 87
ах да! Вспомнил! Вы можете объединять массивы в один, используя структуру "список", когда каждая ячейка хранит в себе область данных и указатели на следующий и предыдущий элементы. При такой структуре вы свободно можете объединить массивы, записав в их ячейки перекрестные указатели из соседних "веток". Вот примерно так:
C
1
2
3
4
5
6
7
8
первый массив:
<nul -A1- a2>, <a1 -A2- a3>, <a2 -A3- nul>
второй массив:
<nul -B1- b2>, <b1 -B2- b3>, <b2 -B3- nul>
 
Теперь слепляем, например, так:
 
<nul -A1- a2>, <a1 -A2- b2>, <a2 -B2- b3>, <b2 -B3- nul>
В этой операции не надо много копировать - достаточно просто "перекинуть" указатели.

ЗЫ: но этот вопрос ближе к алгоритмам, конечно.
0
12.05.2016, 11:16
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.05.2016, 11:16

Обмен данными между 2 клиентами через интернет
Пожалуйста, подробно опишите, как сделать обмен данных через интернет между клиентами. На с++, или...

Обмен данными между БП и УТ на 1С 8.2 через OLE, ADO
Посоветуйте какие-нибудь статьи, книги, видео уроки по обмену данными между БП и УТ на 1С 8.2 через...

Обмен данными через указатель между потоками
Скажите, валидный ли такой код : #include &lt;iostream&gt; #include &lt;thread&gt; using namespace std;...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
87
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru