Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

Закрытая тема
Опции темы
Непрочитано 07.05.2007, 19:16   #1
Dammit
Частый гость
 
Регистрация: 04.12.2006
Сообщений: 49
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Dammit на пути к лучшему
По умолчанию Связь двух микроконтролеров

Ребята, необходима помощь!
Мне нужно реализовать двусторонний асинхронный интерфейс связи между двумя микроконтролерами AVR. USART не подходит, т. к. один из микроконтроллеров его использует... I2C сложно... не разобрался... какие-то ведущие-ведомые, адреса...
Решил сам написать програмно. Написал. побайтно передает отлично (см. примеры в архиве)
Решил организовать передачу строки. и тут глюк.
слово Dammit передает вначале обалденно. потом в программе задержка на секунду.
Передаю слово заново - уже 2 раза передает его! А вот этого мне уже и не надо, в том то и дело
Использую CodeVisionAVR 1.25.5 и протеус 7.1 для отладки...
Подскажите, как исправить этот глюк с двойным передаванием?
Исходники все в архиве. там папки Test и Test2.
в папке Test проект для протеуса!!!
Спасибо огромное!!!
Ребята, если можете поделиться подобными своими наработками, вышлите на мыло serafym@gmail.com

Прикрепленный файл: 2210545.rar
Реклама:
Dammit вне форума  
Непрочитано 07.05.2007, 20:20   #2
urry
Почётный гражданин KAZUS.RU
 
Аватар для urry
 
Регистрация: 06.02.2007
Сообщений: 1,340
Сказал спасибо: 3
Сказали Спасибо 106 раз(а) в 66 сообщении(ях)
urry на пути к лучшему
По умолчанию

Кто-то уже накалывался на похожей проблеме... Попробуй определить и сделать фиксированным размер буфера чар, откуда выводишь данные.
urry вне форума  
Непрочитано 07.05.2007, 20:38   #3
Dammit
Частый гость
 
Регистрация: 04.12.2006
Сообщений: 49
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Dammit на пути к лучшему
По умолчанию

побайтно передает отлично! без глюков. а если передаю строку, беру каждый символ передаю по очереди. в конец ставлю (обычный 0). на приемном контролерере проверяю наличие 0. если ноль, выхожу с цикла.
глюк в другом
если смотрел в протеусе,сначала как нажал кнопку - передает строку идеально - Dammit
второй раз нажимаю - 2 раза DammitDammit выводит на индикаторе
третий раз на кнопку нажимаю - 3 раза выводит!!!
Я не могу понять, что это за глюк.

А по символам все отлично...
Dammit вне форума  
Непрочитано 07.05.2007, 20:53   #4
Dammit
Частый гость
 
Регистрация: 04.12.2006
Сообщений: 49
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Dammit на пути к лучшему
По умолчанию

Загляни в исходник, там есть ф-ция отправки и приема строки... может, просто я ее не так формирую?
Dammit вне форума  
Непрочитано 07.05.2007, 21:46   #5
urry
Почётный гражданин KAZUS.RU
 
Аватар для urry
 
Регистрация: 06.02.2007
Сообщений: 1,340
Сказал спасибо: 3
Сказали Спасибо 106 раз(а) в 66 сообщении(ях)
urry на пути к лучшему
По умолчанию

нашел - это в приемнике,при склеивании -
поставь
char* recive_string_data()
{
unsigned char recive_byte='\0';
char* result_string= '\0';
а не =""
urry вне форума  
Непрочитано 07.05.2007, 22:31   #6
Dammit
Частый гость
 
Регистрация: 04.12.2006
Сообщений: 49
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Dammit на пути к лучшему
По умолчанию

Так еще хуже стало.
Тогда оно за первым нажатием выводит на экран
DammDammDamm
за вторым
DammDammDammDammDammDamm
за третим
DammDammDammDammDammDammDammDammDamm

а было
за первым нажатием
Dammit
за вторым
DammitDammit
за третим
DammitDammitDammit

я не могу понять, что не опустошается...

Вот немного подправленые мною исходники
для протеуса индикатор 20Х4 поставил. для большей наглядности, посмотри. а то первые кривые отослал

Прикрепленный файл: 2347573.rar
Dammit вне форума  
Непрочитано 07.05.2007, 23:03   #7
Dammit
Частый гость
 
Регистрация: 04.12.2006
Сообщений: 49
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Dammit на пути к лучшему
По умолчанию

Если мы это починим, где-то выложим, чтобы народ скачивал... очень полезная штука!!!
Она асинхронная (это плюс), гребет только по 1 прерыванию на каждый контролер. использует 3 проводка. Никаких адресов в I2C... Ведущих-ведомых... тупых протоколов... передает по биту с подтверждением ...
Чтобы передать данные, просто порт переконфигурируется (если заметил), а потом после конфигурации возвращается обратно на прием.
Dammit вне форума  
Непрочитано 08.05.2007, 09:44   #8
urry
Почётный гражданин KAZUS.RU
 
Аватар для urry
 
Регистрация: 06.02.2007
Сообщений: 1,340
Сказал спасибо: 3
Сказали Спасибо 106 раз(а) в 66 сообщении(ях)
urry на пути к лучшему
По умолчанию

Продолжаем разговор... Если стало "еще хуже", то объяви где-то вверху фиксированный размер unsigned char result_string[10]
положение должно исправиться. После этого выводи массив не строкой, а побайтно, до 0 символа. и почему у тебя идет описание функции с указателем, а возвращается без. Ладно, не суть. Не используй склеивание, попробуй заполнение массива.
urry вне форума  
Непрочитано 08.05.2007, 10:37   #9
Dammit
Частый гость
 
Регистрация: 04.12.2006
Сообщений: 49
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Dammit на пути к лучшему
По умолчанию

Сообщение от urry
Продолжаем разговор... Если стало "еще хуже", то объяви где-то вверху фиксированный размер unsigned char result_string[10]
положение должно исправиться. После этого выводи массив не строкой, а побайтно, до 0 символа. и почему у тебя идет описание функции с указателем, а возвращается без. Ладно, не суть. Не используй склеивание, попробуй заполнение массива.
Сейчас попробую...
Хорошая идея.
Но хотелось бы чтобы размер строки не был виксирован...
Dammit вне форума  
Непрочитано 08.05.2007, 10:54   #10
urry
Почётный гражданин KAZUS.RU
 
Аватар для urry
 
Регистрация: 06.02.2007
Сообщений: 1,340
Сказал спасибо: 3
Сказали Спасибо 106 раз(а) в 66 сообщении(ях)
urry на пути к лучшему
По умолчанию

Хотелось бы, чтобы передавались двоичные данные, а не текст. Т.е в самом пакете, скажем, первое число - количество принятых/переданных байт. Мало ли какими данными можно обмениваться - как раз строки в приоритете идут в последнюю очередь. А фиксированное значение буфера - скорее плюс, чем минус - ведь при сбое ты можешь убить стек большим количеством инфы.
urry вне форума  
Закрытая тема

Закладки

Опции темы

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Связь двух модемов GPRS novice56 Автоматика и аппаратура связи 18 15.11.2008 20:07
Связь двух МК через SPI или .... malyshevsergey Электроника - это просто 9 06.08.2008 22:09
Связь 2 двух МК по RS485,ошибки при передаче данных. Zemlyanov Микроконтроллеры, АЦП, память и т.д 8 12.10.2007 12:58
Связь двух компьютеров по радио nexio Автоматика и аппаратура связи 1 27.12.2005 08:35
связь двух контроллеров по проводам питания xerox2 Микроконтроллеры, АЦП, память и т.д 3 15.10.2005 03:34


Часовой пояс GMT +4, время: 07:14.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot