![]() |
|
Модераторы: PILOT, ManiaK, Mazzi |
![]()
|
|
| Deliverance |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 52 Регистрация: 2.12.2007 Где: Украина,Донецк Репутация: нет Всего: нет |
мне надо связать два контроллера посредством 2-х RS 232 ,как это сделать я понимаю,а как оформить в языке С++ нет((
Кто знает как подскажите. Ну или хотя бы в общих чертах с чего вообще начать программу. Собственно сложность в том ,что я ни как не въеду как мне обрабатывать сигнал с кнопки и отправить второму контроллеру,а от него получить ответ. (Именно программно) Заране благадарен Это сообщение отредактировал(а) Deliverance - 29.7.2008, 11:34 |
|||
|
||||
| xvr |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 8 Всего: 223 |
Программу рекомендуется начать с ее проектирования, в частности, рекомендуется определится что и как должна делать программа и в зависимости от этого выбрать КАК и ГДЕ будет обрабатываться RS232:
|
||||
|
|||||
| Deliverance |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 52 Регистрация: 2.12.2007 Где: Украина,Донецк Репутация: нет Всего: нет |
Собственно,задача проста,один микроконтроллер(Мк1) будет только считывать нажатие кнопки ,потом отправлять другому(Мк2) .Мк2 обрабатывает полученый сигнал,делает выбор в зависимомти какая кнопка была нажата(Кнопок 9-ть) проверяет готовность эл. муфт и если всё ок ,то включает муфту и отправляет сигнал Мк1,тот в свою очередь принимает сигнал и включет соответствующий диод(То же 9-ть) .Вот сопсно упрощённый алгоритм.
так вот.конструктивно это я себе представляю,а как написать программу,не пойму . В каком виде пердаются данные через RS232 ?Что писать в программе? Думаю использовать функции getchar(); и putchar(); Типа : if (Kn_1==0) {Out_Data=0x01}; if (Kn_2==0) {Out_Data=0x02}; и обрабатывать In_Data=getchar(); //Считывание сигнала контроллером Out_Data=In_Data; // запоминание сигнала контроллером putchar(Out_Data); // отправка сигнала контроллером |
|||
|
||||
| UniBomb |
|
|||
|
Новичок ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 1754 Регистрация: 24.10.2006 Где: Санкт-Петербург Репутация: 9 Всего: 97 |
Никогда не использовал этих функций... А почему нельзя сделать так:
??? |
|||
|
||||
| xvr |
|
||||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 8 Всего: 223 |
Слишком сильно упрощенный, есть масса вопросов:
|
||||||
|
|||||||
| Deliverance |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 52 Регистрация: 2.12.2007 Где: Украина,Донецк Репутация: нет Всего: нет |
Хм .алгоритм такой . Нажатие кнопки>>обработка>>Отправка>>Ожидание ответа>>Если ответ положительный>>Зажечь и держать зажженным свето диод,пока не будет нажата другая кнопка. (Это для МК1)
МК2 получение от МК1 >>Обработка>>(Блок операций и проверок>>отправка данных МК1>>Ожидание данных от МК1 Вот наброски программы для МК1
Добавлено через 5 минут и 40 секунд UniBomb, Беда в том .что я вообще не вкурсе как передовать)) Ну никогда не передавал данные от одного к другому МК. |
|||
|
||||
| UniBomb |
|
||||
|
Новичок ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 1754 Регистрация: 24.10.2006 Где: Санкт-Петербург Репутация: 9 Всего: 97 |
xvr, ну зачем же так всё усложнять - автор же спросил только о том, как ему осуществить обмен))
Deliverance, ты про прерывания чего-нибудь слышал? Вот они тебе очень сильно понадобятся. Пускай у тебя переменная Out_Data всегда равна нулю, тогда после опроса если эта переменная не равна нулю, то тогда имеет смысл передавать данные. А так как у тебя сделано - нерациональное использование сети (если придётся наращивать систему то это может выйти боком), поэтому сделай проверку типа:
Затем в коде принимающего устройства:
Где SIGNAL(SIG_UART_RECV) - функция обработки прерывания по приёму данных в avr-gcc. Если ты ипользуеш другой компилятор, то эта функция будет отличаться от приведённой - смотри доки к компилятору. Это сообщение отредактировал(а) UniBomb - 31.7.2008, 14:41 |
||||
|
|||||
| xvr |
|
||||||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 8 Всего: 223 |
Во первых - нет подавления дребезга кнопок, равно как и ожидания их отпускания Во вторых - если по каким либо причинам МК пропустит ответ от 2го МК, то вся система наглухо зависнет, так как нет никакого timeout'а ожидания ответа
Ну почти все - надо удостоверится что USART готов к передаче данных (не помню, как называется соотвествующий бит) Это сообщение отредактировал(а) xvr - 1.8.2008, 11:33 |
||||||||
|
|||||||||
| cardinal |
|
|||
![]() Инженер ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6003 Регистрация: 26.3.2002 Где: Германия Репутация: 8 Всего: 99 |
Может антидребезг на стороне железа есть... Deliverance, делай отступы в коде. Разбей его на функции и не пихай все в main. Посмотри тут пример с USART http://www.pcports.ru/articles/avr6.php -------------------- Немецкая оппозиция потребовала упростить натурализацию иммигрантов В моем блоге: Разные истории из жизни в Германии "Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино". А. и Б. Стругацкие |
|||
|
||||
![]()
|
| Правила форума "Микроконтроллеры (MCU) и микропроцессоры (MPU)" | |
|
|
На данный раздел помимо Правил форума распространяются текже следующие правила:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, PILOT, ManiaK, UniBomb, Mazzi. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Микроконтроллеры (MCU) и микропроцессоры (MPU) | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |