Делаю диплом, пытаюсь написать проги для стыковки ATMega8535 с ПК. Сейчас есть есть программа в МК принимающая данные котрые отображаются на индикаторе(7 сегментов), с ПК из проги на Delphi7 данные выталкиваются, индикатор зажигается(за основу взяты проги из книжек), но высвечивает непонятно что. У кого есть информация по программированию МК - поделитесь.
Пишу на ассемблере.
[Ответ]
dr.ON 18:25 23.02.2007
Сообщение от sracozawr:
... У кого есть информация по программированию МК - поделитесь....
У многих, но БОЛЬШЕ всего в инете!
Спрашивай точнее чего именно надо.
P.S. 2ALL: А тут мы какую нибудь дисскусию устроим, по аналогии с темой "Пишем прошивки"? [Ответ]
Сообщение от 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 битные посылки могут использоваться для адресации устройства на шине
В выделенной строчке меняеш конфиг( "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
[Ответ]