Если это ваш первый визит, рекомендуем почитать справку по форуму. Для размещения своих сообщений необходимо зарегистрироваться. Для просмотра сообщений выберите раздел. |
AVR-контроллер связь с ПК через COM-порт |
Программирование микроконтролеров,ремонт аудио/видео/бытовой техники,полезные устройства для дома,телефония, обсуждение статей журнала Радио |
|
Опции темы |
23.02.2007, 17:33 | #1 |
Форумец
Сообщений: 6
Регистрация: 15.02.2007
Не в сети |
AVR-контроллер связь с ПК через COM-порт
Делаю диплом, пытаюсь написать проги для стыковки ATMega8535 с ПК. Сейчас есть есть программа в МК принимающая данные котрые отображаются на индикаторе(7 сегментов), с ПК из проги на Delphi7 данные выталкиваются, индикатор зажигается(за основу взяты проги из книжек), но высвечивает непонятно что. У кого есть информация по программированию МК - поделитесь.
Пишу на ассемблере. |
23.02.2007, 18:25 | #2 | |
Форумец
Сообщений: 552
Регистрация: 17.06.2005
Возраст: 40
Не в сети |
Цитата:
Спрашивай точнее чего именно надо. P.S. 2ALL: А тут мы какую нибудь дисскусию устроим, по аналогии с темой "Пишем прошивки"? |
|
24.02.2007, 00:32 | #3 |
Форумец
Сообщений: 77
Регистрация: 18.01.2007
Не в сети |
sracozawr,
Думаю, что может принести пользу форум разработчиков электроники. http://electronix.ru/forum/. |
24.02.2007, 08:54 | #4 | |
Форумец
Сообщений: 6
Регистрация: 15.02.2007
Не в сети |
Цитата:
А кто писал программу стыковки AVR с ПК, причём для AVR на асм-ре, а для ПК на Делфи? В книжке читаю в примере "отправляем в порт строку 5А 21 00 00 00 00 7А дальше коментируется 5А - стартовый байт" не понимаю, вот этот стартовый байт всегда должен быть 5А или нет, может это конкретный пример (для конкретной проги)? Вот часть кода для проги на Delphi: begin if not VaComm1.Active then VaComm1.Open; sCMD:='5A'+Format(' %2.x',[cmRS]); sum:=$5A+$21; sCMD:=sCMD+' 00 00'; for J:=1 to 128 do begin sum:= sum+I; sCMD:= sCMD+Format(' %.2x',[J]); end; sCMD:= sCMD+A+Format(' %.2x',[12]); sum:= sum+$12; sCMD:=sCMD+Format(' %.2x',[Hi(sum)])+Format(' %.2x',[Lo(sum)]); Edit1.Text :=sCMD; VaComm1.WriteText(sCMD); end; end. Строковая переменная sCMD и есть то что мы передаём на контророллер. Она формируется из стартового байта(5А) и байта команды(cmRS=$21). Непонятно зачем добавляются вот это '00 00'. То что цикл забивает 128 байт цифрами вроде понял, но итересует как вместо цифр забить конкретные данные. Да и вообще как изменить длину слова данных. Может с кем можно голосом пообщаться? Пиво будет!!! |
|
24.02.2007, 10:04 | #5 | ||||
Форумец
Сообщений: 552
Регистрация: 17.06.2005
Возраст: 40
Не в сети |
Цитата:
Примерно выглядит так: A B C DDDDDDDD E A - стартовый байт( в разныж протоколах разные) B - служебная информация( адрес получателя, тип пакета, длинна, флаги, ...) C - комманда D - данные Е - контрольная сумма( для проверки целостности пакета) Иногда В и С меняются местами! Цитата:
Цитата:
sCMD:= sCMD+Format('%.2x',D1); sum:= sum+D2; sCMD:= sCMD+Format('%.2x',D2); ......................................... и т.д где D1, D2 - однобайтовые данные Но это колхозный метод. Лучше вначале сформировать пакет данных в байтовый массив( удобно использовать структуры), а потом перегнать в строку с подсчетом контрольной суммы. Только, помоему, вот эта штука должна писаться без пробела '%.2x' Цитата:
|
||||
25.02.2007, 00:38 | #10 | ||
Форумец
Сообщений: 552
Регистрация: 17.06.2005
Возраст: 40
Не в сети |
Цитата:
Цитата:
P.S. А че здесь тэг [CODE] не функционирует??? |
||
27.10.2007, 10:11 | #12 |
Форумец
Сообщений: 115
Регистрация: 26.07.2007
Возраст: 37
Не в сети |
А может написать такую прогу на контроллер, которая бы читала все, что выдал порт и запоминала, а потом, по нажатию кнопки последовательно выводила эти данные на индикатор. Остается путем подачи различных команд на порт, выяснить что для чего используется.
|