Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
07.05.2007, 19:16
|
#1
|
Частый гость
Регистрация: 04.12.2006
Сообщений: 49
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Связь двух микроконтролеров
Ребята, необходима помощь!
Мне нужно реализовать двусторонний асинхронный интерфейс связи между двумя микроконтролерами AVR. USART не подходит, т. к. один из микроконтроллеров его использует... I2C сложно... не разобрался... какие-то ведущие-ведомые, адреса...
Решил сам написать програмно. Написал. побайтно передает отлично (см. примеры в архиве)
Решил организовать передачу строки. и тут глюк.
слово Dammit передает вначале обалденно. потом в программе задержка на секунду.
Передаю слово заново - уже 2 раза передает его! А вот этого мне уже и не надо, в том то и дело
Использую CodeVisionAVR 1.25.5 и протеус 7.1 для отладки...
Подскажите, как исправить этот глюк с двойным передаванием?
Исходники все в архиве. там папки Test и Test2.
в папке Test проект для протеуса!!!
Спасибо огромное!!!
Ребята, если можете поделиться подобными своими наработками, вышлите на мыло serafym@gmail.com
Прикрепленный файл: 2210545.rar
|
|
|
|
07.05.2007, 20:20
|
#2
|
Почётный гражданин KAZUS.RU
Регистрация: 06.02.2007
Сообщений: 1,340
Сказал спасибо: 3
Сказали Спасибо 106 раз(а) в 66 сообщении(ях)
|
Кто-то уже накалывался на похожей проблеме... Попробуй определить и сделать фиксированным размер буфера чар, откуда выводишь данные.
|
|
|
|
07.05.2007, 20:38
|
#3
|
Частый гость
Регистрация: 04.12.2006
Сообщений: 49
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
побайтно передает отлично! без глюков. а если передаю строку, беру каждый символ передаю по очереди. в конец ставлю (обычный 0). на приемном контролерере проверяю наличие 0. если ноль, выхожу с цикла.
глюк в другом
если смотрел в протеусе,сначала как нажал кнопку - передает строку идеально - Dammit
второй раз нажимаю - 2 раза DammitDammit выводит на индикаторе
третий раз на кнопку нажимаю - 3 раза выводит!!!
Я не могу понять, что это за глюк.
А по символам все отлично...
|
|
|
|
07.05.2007, 20:53
|
#4
|
Частый гость
Регистрация: 04.12.2006
Сообщений: 49
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Загляни в исходник, там есть ф-ция отправки и приема строки... может, просто я ее не так формирую?
|
|
|
|
07.05.2007, 21:46
|
#5
|
Почётный гражданин KAZUS.RU
Регистрация: 06.02.2007
Сообщений: 1,340
Сказал спасибо: 3
Сказали Спасибо 106 раз(а) в 66 сообщении(ях)
|
нашел - это в приемнике,при склеивании -
поставь
char* recive_string_data()
{
unsigned char recive_byte='\0';
char* result_string= '\0';
а не =""
|
|
|
|
07.05.2007, 22:31
|
#6
|
Частый гость
Регистрация: 04.12.2006
Сообщений: 49
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Так еще хуже стало.
Тогда оно за первым нажатием выводит на экран
DammDammDamm
за вторым
DammDammDammDammDammDamm
за третим
DammDammDammDammDammDammDammDammDamm
а было
за первым нажатием
Dammit
за вторым
DammitDammit
за третим
DammitDammitDammit
я не могу понять, что не опустошается...
Вот немного подправленые мною исходники
для протеуса индикатор 20Х4 поставил. для большей наглядности, посмотри. а то первые кривые отослал
Прикрепленный файл: 2347573.rar
|
|
|
|
07.05.2007, 23:03
|
#7
|
Частый гость
Регистрация: 04.12.2006
Сообщений: 49
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Если мы это починим, где-то выложим, чтобы народ скачивал... очень полезная штука!!!
Она асинхронная (это плюс), гребет только по 1 прерыванию на каждый контролер. использует 3 проводка. Никаких адресов в I2C... Ведущих-ведомых... тупых протоколов... передает по биту с подтверждением ...
Чтобы передать данные, просто порт переконфигурируется (если заметил), а потом после конфигурации возвращается обратно на прием.
|
|
|
|
08.05.2007, 09:44
|
#8
|
Почётный гражданин KAZUS.RU
Регистрация: 06.02.2007
Сообщений: 1,340
Сказал спасибо: 3
Сказали Спасибо 106 раз(а) в 66 сообщении(ях)
|
Продолжаем разговор... Если стало "еще хуже", то объяви где-то вверху фиксированный размер unsigned char result_string[10]
положение должно исправиться. После этого выводи массив не строкой, а побайтно, до 0 символа. и почему у тебя идет описание функции с указателем, а возвращается без. Ладно, не суть. Не используй склеивание, попробуй заполнение массива.
|
|
|
|
08.05.2007, 10:37
|
#9
|
Частый гость
Регистрация: 04.12.2006
Сообщений: 49
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Сообщение от urry
|
Продолжаем разговор... Если стало "еще хуже", то объяви где-то вверху фиксированный размер unsigned char result_string[10]
положение должно исправиться. После этого выводи массив не строкой, а побайтно, до 0 символа. и почему у тебя идет описание функции с указателем, а возвращается без. Ладно, не суть. Не используй склеивание, попробуй заполнение массива.
|
Сейчас попробую...
Хорошая идея.
Но хотелось бы чтобы размер строки не был виксирован...
|
|
|
|
08.05.2007, 10:54
|
#10
|
Почётный гражданин KAZUS.RU
Регистрация: 06.02.2007
Сообщений: 1,340
Сказал спасибо: 3
Сказали Спасибо 106 раз(а) в 66 сообщении(ях)
|
Хотелось бы, чтобы передавались двоичные данные, а не текст. ![Улыбка](images/smilies/icon_smile.gif) Т.е в самом пакете, скажем, первое число - количество принятых/переданных байт. Мало ли какими данными можно обмениваться - как раз строки в приоритете идут в последнюю очередь. А фиксированное значение буфера - скорее плюс, чем минус - ведь при сбое ты можешь убить стек большим количеством инфы.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 05:40.
|
|