Большой Воронежский Форум
»Радиолюбитель>AVR-контроллер связь с ПК через COM-порт
sracozawr 17:33 23.02.2007
Делаю диплом, пытаюсь написать проги для стыковки ATMega8535 с ПК. Сейчас есть есть программа в МК принимающая данные котрые отображаются на индикаторе(7 сегментов), с ПК из проги на Delphi7 данные выталкиваются, индикатор зажигается(за основу взяты проги из книжек), но высвечивает непонятно что. У кого есть информация по программированию МК - поделитесь.
Пишу на ассемблере. [Ответ]
dr.ON 18:25 23.02.2007

Сообщение от sracozawr:
... У кого есть информация по программированию МК - поделитесь....

У многих, но БОЛЬШЕ всего в инете!
Спрашивай точнее чего именно надо.

P.S. 2ALL: А тут мы какую нибудь дисскусию устроим, по аналогии с темой "Пишем прошивки"? [Ответ]
Gnd 00:32 24.02.2007
sracozawr,

Думаю, что может принести пользу форум разработчиков электроники. http://electronix.ru/forum/. [Ответ]
sracozawr 08:54 24.02.2007

Сообщение от dr.ON:
У многих, но БОЛЬШЕ всего в инете!
Спрашивай точнее чего именно надо.
P.S. 2ALL: А тут мы какую нибудь дисскусию устроим, по аналогии с темой "Пишем прошивки"?

Точнее попробую.
А кто писал программу стыковки 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 байт цифрами вроде понял, но итересует как вместо цифр забить конкретные данные. Да и вообще как изменить длину слова данных.
Может с кем можно голосом пообщаться? Пиво будет!!!
[Ответ]
dr.ON 10:04 24.02.2007

Сообщение от sracozawr:
не понимаю, вот этот стартовый байт всегда должен быть 5А или нет, может это конкретный пример (для конкретной проги)?

Стартовый байт и формат пакета описывается в протоколе обмена который используеш. Выбери готовый протокол или сочини свой.

Примерно выглядит так:
A B C DDDDDDDD E
A - стартовый байт( в разныж протоколах разные)
B - служебная информация( адрес получателя, тип пакета, длинна, флаги, ...)
C - комманда
D - данные
Е - контрольная сумма( для проверки целостности пакета)
Иногда В и С меняются местами!

Сообщение от sracozawr:
Непонятно зачем добавляются вот это '00 00'.

Это скорее всего и есть служебная информация, которая, в данной реализации, не используется.

Сообщение от sracozawr:
но итересует как вместо цифр забить конкретные данные.

sum:= sum+D1;
sCMD:= sCMD+Format('%.2x',D1);

sum:= sum+D2;
sCMD:= sCMD+Format('%.2x',D2);
.........................................
и т.д
где D1, D2 - однобайтовые данные

Но это колхозный метод. Лучше вначале сформировать пакет данных в байтовый массив( удобно использовать структуры), а потом перегнать в строку с подсчетом контрольной суммы.

Только, помоему, вот эта штука должна писаться без пробела '%.2x'

Сообщение от sracozawr:
Да и вообще как изменить длину слова данных.

"длину слова данных" - это что такое( поподробнее пожалуйста)? [Ответ]
sracozawr 20:07 24.02.2007
"длину слова данных" - это что такое( поподробнее пожалуйста)?[/QUOTE]

Это в том смысле что в МК задаётся длина байта данных(5,7,8 или 9 бит).
В проге для компа это играет какую-либо роль или нет. [Ответ]
shuher 20:24 24.02.2007

Сообщение от sracozawr:
длина байта данных

1 байт = 8 бит
Иначе не бывает. Может ты имел в виду длину пакета при передаче? [Ответ]
John_ 21:55 24.02.2007
Да, действительно 1 байт - 8 бит Но COM-порт может работать не только с 8-ю битами. Например 9 битные посылки могут использоваться для адресации устройства на шине. [Ответ]
shuher 21:59 24.02.2007

Сообщение от John_:
Например 9 битные посылки могут использоваться для адресации устройства на шине

длина ПАКЕТА [Ответ]
dr.ON 00:38 25.02.2007

Сообщение от sracozawr:
Это в том смысле что в МК задаётся длина байта данных(5,7,8 или 9 бит).
В проге для компа это играет какую-либо роль или нет.

Да, менять можно через WinAPI.

Сообщение от :
DCB sDCB = { sizeof( DCB),};
HANDLE hCom;
hCom = CreateFile( "COM1", GENERIC_WRITE | GENERIC_READ,
0, NULL, OPEN_EXISTING, 0, NULL);
BuildCommDCB( "baud=115200 parity=N data=8 stop=2", &sDCB);
SetCommState( hCom, &sDCB);

В выделенной строчке меняеш конфиг( "data=Х") и все. Пример хоть и не на дельфи, но я думаю все и так понятно.
P.S. А че здесь тэг [CODE] не функционирует??? [Ответ]
Pavel_lb 17:39 26.02.2007

Сообщение от sracozawr:
Может с кем можно голосом пообщаться? Пиво будет!!![/COLOR]

А как всё таки, на счёт по телефону с кем можно на эту тему поговорить? [Ответ]
xlr8 10:11 27.10.2007
А может написать такую прогу на контроллер, которая бы читала все, что выдал порт и запоминала, а потом, по нажатию кнопки последовательно выводила эти данные на индикатор. Остается путем подачи различных команд на порт, выяснить что для чего используется. [Ответ]
Amrel 14:03 27.10.2007
Я делал это!!! Подключил ATmega16 к RS232, написал програмулину на Delphi7. Сейчас делаю радио удлиннитель.... По вопросам обращаться amrel[сабака]mail.ru [Ответ]
Вверх