Форум РадиоКот https://radiokot.ru/forum/ |
|
ШИМ + UART как быть с пк https://radiokot.ru/forum/viewtopic.php?f=20&t=14811 |
Страница 1 из 2 |
Автор: | demson [ Чт мар 26, 2009 19:11:53 ] |
Заголовок сообщения: | ШИМ + UART как быть с пк |
доброго времени суток. итак имеется МК соединенный с ПК по uart. необходимо вывести на МК 3 байта, первый байт разобрать на биты, если первый бит 1 вотрой бит 0 третий бит 1 то следующие 2 байта являются значениями которые необходимо вывести на 2 шима. непонятно как взаимодействовать с пк из приложения, ведь пересылаются символы. а надо еще и разбить на биты. помогите с куском кода. PS пишу на С |
Автор: | ikarab [ Чт мар 26, 2009 19:21:50 ] |
Заголовок сообщения: | |
Надо принять символы-байты в буфер и потом их разобрать - какие биты в них. Парсинг команд - называется. Пример приема команд по UART с ПК на Си есть в PROTEUS - это пример AN696. в папке Proteus\SAMPLES\VSM MPLAB Viewer\App Notes\AN696 Я очень советую вам скачать и использовать PROTEUS 7.4 sp3 с лекарством 1.6.5 PROTEUS позволяет ВИДЕТЬ что происходит ВНУТРИ микроконтроллера - это интересно и полезно при отладке. Разбор команды начинается со строк Код: if(PIR1bits.RCIF)
{ switch(udata = RCREG) Весь исходник прицеплен. Подробно работу с UART USART AVR на Си недавно обсуждали в "МЯУУУУ" - прием и передача данных. http://radiokot.ru/forum/viewtopic.php?p=194982#194982 Анализ битов проводят с помощью битовых операций с масками - с числами типа 0b00101110 |
Автор: | demson [ Пт мар 27, 2009 12:13:01 ] |
Заголовок сообщения: | |
putsf("OK_START"); while (1){ st_bit = getchar() ; st_bit = (3<<st_bit); //взять первые 3 бита из переменной if(st_bit == 5) //101 { znX=getchar(); znY=getchar(); OCR1AL = znX+read_adc(0); OCR1BL = znY+read_adc(2); putsf("OK"); } else { putsf("error"); }; }; не уверен что написал правильно, поправьте как должно быть. |
Автор: | demson [ Пт мар 27, 2009 23:25:00 ] |
Заголовок сообщения: | |
чтото никто не отвечает ![]()
while (1){ st_bytte = getchar() ; OCR1AL = znX+(read_adc(0)+read_adc(1)/4); OCR1BL = znY+(read_adc(2)+read_adc(3)/4); st_bit0 = st_bytte & 0b10000000; // стартбит st_bit1 = st_bytte & 0b01000000; // st_bit2 = st_bytte & 0b00100000; // st_bit3 = st_bytte & 0b00010000; // st_bit4 = st_bytte & 0b00001000; // st_bit5 = st_bytte & 0b00000100; // st_bit6 = st_bytte & 0b00000010; // резерв st_bit7 = st_bytte & 0b00000001; // резерв if(st_bit0>0 & st_bit1==0 & st_bit2>0) //101 { if(st_bit3>0) {blanking=1;} else {blanking=0;}; if(st_bit4>0) {PORTC.4 = 1;} else {PORTC.4 = 0;}; if(st_bit5>0) {PORTC.5 = 1;} else {PORTC.5 = 0;}; znX=getchar(); znY=getchar(); putsf("OK"); st_bytte=0; } else { putsf("error"); }; }; вобщем вот итак возник вопрос как и чем и что отправлять с компа (в планах на basic)чтобы МК принял 160 а не 1 потом 6 потом 0 ! |
Автор: | ikarab [ Сб мар 28, 2009 02:04:29 ] |
Заголовок сообщения: | |
demson писал(а): как и чем и что отправлять с компа (в планах на basic) Специальные проги есть для работы с приборами через COM порт. Посмотрите - вот 3 программы http://kazus.ru/forum/topics/f_76711.html#76711 demson писал(а): чтобы МК принял 160 а не 1 потом 6 потом 0 !
Дак отправьте 160 он и примет 160. |
Автор: | demson [ Пн мар 30, 2009 15:06:09 ] |
Заголовок сообщения: | |
программа виснет при попытке отправить что-либо на мк грешу на переходник usb - com причем если мк отцепить все отлично, если замкнуть rx tx эхо идет без ошибок. в чем может быть дело? |
Автор: | demson [ Пн мар 30, 2009 17:17:38 ] |
Заголовок сообщения: | |
заработало но косо: с мк передает сообщение "error" а комп принимает сплошные нули от чего это может быть? |
Автор: | МитяРа [ Пн мар 30, 2009 17:21:21 ] |
Заголовок сообщения: | |
Может быть при несовпадении скоростей... |
Автор: | demson [ Пн мар 30, 2009 17:28:18 ] | ||
Заголовок сообщения: | |||
нет скорости одни и те-же даже в симуляторе vmlab работает. а как всетаки передать с компа число 1101 1111 или BF чтобы мк его принял как единое целое а не b и f. вот еще исходник гляньте может в нем что косо.
|
Автор: | МитяРа [ Пн мар 30, 2009 18:39:14 ] |
Заголовок сообщения: | |
Может и форматы не совпадать.. Обычно для ПК это: 1бит - стартовый, 8бит - данные, 1бит - чётность, 1бит - стоповый... Проверь, как на МК запрограммировано.. У тя в программе например указано - нет чётности.. Сам те по твоему МК подсказать не смогу - сам работаю только с МК51 семейством... |
Автор: | ikarab [ Пн мар 30, 2009 18:40:37 ] |
Заголовок сообщения: | |
demson писал(а): а как всетаки передать с компа число 1101 1111 или BF чтобы мк его принял как единое целое а не b и f.
Из проги терминальной для COM порта передасть число 0хBF или BFh Удобные программы для COM порта есть в "Связь COM порта ПК и USART МК AVR" - http://radiokot.ru/forum/viewtopic.php?p=198337#198337 |
Автор: | demson [ Вт мар 31, 2009 20:11:48 ] |
Заголовок сообщения: | |
нашел проблему номер 1 - не встали фьюзы при первой прошивке, а больше я их и не смотрел ![]() ![]() |
Автор: | Negor [ Вт мар 31, 2009 22:13:22 ] |
Заголовок сообщения: | |
Чтобы проверить ком порт нужно замкнуть пины 2 и 3 на разьёме. Таким образом ПК будет принимать то, что отправит. И если в терминале(именно это вам и нужно попробуйте PuTTY - хороший терминал. В личке помогу настроить) Вы увидите то, что отправите. Например набрали "G" а в терминале будет "GG". Чтобы отправить байт 160(0xA0 или 0b10100000) нужно по таблице ASCII символов найти символ с таким кодом. Ещё хочу добавить что обычно для проверки правильности связи МК и ПК по UART'у обычно на Си пишут такой код Код: putchar(getchar());
Таким образом если скорости выставлены правильно и связь налажена верно то на терминале вы топять таки должны получить то что и отправляли.[/b] |
Автор: | demson [ Ср апр 01, 2009 13:50:53 ] |
Заголовок сообщения: | |
Цитата: тобы проверить ком порт нужно замкнуть пины 2 и 3 на разьёме.
это работает принимает нормально без косяков. |
Автор: | МитяРа [ Ср апр 01, 2009 17:15:02 ] |
Заголовок сообщения: | |
а) попробуй "зациклить" передачу одного байта с МК и посмотри длительность посылки.. б) потом "зациклить" передачу одного байта с компа и тоже посмотри длительность посылки.. Думаю всё-же у тя - несовпадение скоростей.. |
Автор: | demson [ Ср апр 01, 2009 19:46:10 ] |
Заголовок сообщения: | |
Цитата: putchar(getchar());
опа не принимает ничего! при попытке отослать на ПК строку putsf("OK"); на ПК полный бред. |
Автор: | demson [ Сб апр 04, 2009 22:20:55 ] |
Заголовок сообщения: | |
вобщем переходник usb-com не являлся таковым. Спаял avr 309 все работает замечательно. вечно все проблемы от подделок!!!! ![]() |
Автор: | Hitalik [ Ср апр 11, 2012 14:10:33 ] |
Заголовок сообщения: | Re: ШИМ + UART как быть с пк |
Люди помогите всё не допрёт, до меня вот реализован UART и шим; делаю так OCR1B = 300; так работает; ну или if(UDR=='1') OCR1B = 300; тоже работает но только я делаю типо такого OCR1B = UDR; ну к примеру. пробовал всякие преоброзования и всё такое... ШИМ таким оброзом не работает, что упустил, ну и сам вопррос то как получть число с UDR и отправить OCR1B ; |
Автор: | Engineer_Keen [ Ср апр 11, 2012 15:49:10 ] |
Заголовок сообщения: | Re: ШИМ + UART как быть с пк |
UART настроен? Скорости совпадают? Процедура обработки приема данных через UART есть? Учитывается что OCR1B - 16 разрядный, а UDR - 8 разрядный? |
Автор: | phanis [ Ср апр 11, 2012 18:50:38 ] |
Заголовок сообщения: | Re: ШИМ + UART как быть с пк |
Может лучше сделать работу с двойным буфером. И отправлять количество требуемых байт в комп(запрос), когда нужно заполнить один из буферов. В буфер складывать по прерыванию юсарта. Из буфера читать в шим по прерыванию таймера. С данными работать в виде структуры. Битовые поля. |
Страница 1 из 2 | Часовой пояс: UTC + 3 часа |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |