ШИМ + UART как быть с пк

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Аватара пользователя
demson
IT KT
Сообщения: 1309
Зарегистрирован: Пн авг 25, 2008 08:49:33
Контактная информация:

ШИМ + UART как быть с пк

Сообщение demson »

доброго времени суток.
итак имеется МК соединенный с ПК по uart. необходимо вывести на МК 3 байта, первый байт разобрать на биты, если первый бит 1 вотрой бит 0 третий бит 1 то следующие 2 байта являются значениями которые необходимо вывести на 2 шима.
непонятно как взаимодействовать с пк из приложения, ведь пересылаются символы. а надо еще и разбить на биты.
помогите с куском кода.
PS пишу на С
в спорах рождается ИСТИНА [AND] flud.
Реклама
Аватара пользователя
ikarab
Опытный кот
Сообщения: 828
Зарегистрирован: Пн мар 16, 2009 21:40:57
Контактная информация:

Сообщение ikarab »

Надо принять символы-байты в буфер и потом их разобрать - какие биты в них. Парсинг команд - называется.

Пример приема команд по 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
IT KT
Сообщения: 1309
Зарегистрирован: Пн авг 25, 2008 08:49:33
Контактная информация:

Сообщение demson »

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"); };
};
не уверен что написал правильно, поправьте как должно быть.
в спорах рождается ИСТИНА [AND] flud.
Аватара пользователя
demson
IT KT
Сообщения: 1309
Зарегистрирован: Пн авг 25, 2008 08:49:33
Контактная информация:

Сообщение demson »

чтото никто не отвечает :cry: приходится самому ответ искать:
  • putsf("OK_START");

    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 !
в спорах рождается ИСТИНА [AND] flud.
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
ikarab
Опытный кот
Сообщения: 828
Зарегистрирован: Пн мар 16, 2009 21:40:57
Контактная информация:

Сообщение ikarab »

demson писал(а): как и чем и что отправлять с компа (в планах на basic)
Специальные проги есть для работы с приборами через COM порт.
Посмотрите - вот 3 программы
http://kazus.ru/forum/topics/f_76711.html#76711
demson писал(а): чтобы МК принял 160 а не 1 потом 6 потом 0 !
Дак отправьте 160 он и примет 160.
Реклама
Аватара пользователя
demson
IT KT
Сообщения: 1309
Зарегистрирован: Пн авг 25, 2008 08:49:33
Контактная информация:

Сообщение demson »

программа виснет при попытке отправить что-либо на мк грешу на переходник usb - com причем если мк отцепить все отлично, если замкнуть rx tx эхо идет без ошибок. в чем может быть дело?
в спорах рождается ИСТИНА [AND] flud.
Реклама
Аватара пользователя
demson
IT KT
Сообщения: 1309
Зарегистрирован: Пн авг 25, 2008 08:49:33
Контактная информация:

Сообщение demson »

заработало но косо: с мк передает сообщение "error" а комп принимает сплошные нули от чего это может быть?
в спорах рождается ИСТИНА [AND] flud.
Аватара пользователя
МитяРа
Модератор
Сообщения: 11492
Зарегистрирован: Чт дек 11, 2008 14:52:26
Откуда: град Нижний

Сообщение МитяРа »

Может быть при несовпадении скоростей...
Аватара пользователя
demson
IT KT
Сообщения: 1309
Зарегистрирован: Пн авг 25, 2008 08:49:33
Контактная информация:

Сообщение demson »

нет скорости одни и те-же даже в симуляторе vmlab работает. а как всетаки передать с компа число 1101 1111 или BF
чтобы мк его принял как единое целое а не b и f.

вот еще исходник гляньте может в нем что косо.
Вложения
1.c
(4.91 КБ) 412 скачиваний
в спорах рождается ИСТИНА [AND] flud.
Аватара пользователя
МитяРа
Модератор
Сообщения: 11492
Зарегистрирован: Чт дек 11, 2008 14:52:26
Откуда: град Нижний

Сообщение МитяРа »

Может и форматы не совпадать..
Обычно для ПК это:
1бит - стартовый,
8бит - данные,
1бит - чётность,
1бит - стоповый...
Проверь, как на МК запрограммировано..
У тя в программе например указано - нет чётности..
Сам те по твоему МК подсказать не смогу - сам работаю только с МК51 семейством...
Аватара пользователя
ikarab
Опытный кот
Сообщения: 828
Зарегистрирован: Пн мар 16, 2009 21:40:57
Контактная информация:

Сообщение ikarab »

demson писал(а): а как всетаки передать с компа число 1101 1111 или BF чтобы мк его принял как единое целое а не b и f.
Из проги терминальной для COM порта передасть число 0хBF или BFh

Удобные программы для COM порта есть в "Связь COM порта ПК и USART МК AVR" - http://radiokot.ru/forum/viewtopic.php?p=198337#198337
Аватара пользователя
demson
IT KT
Сообщения: 1309
Зарегистрирован: Пн авг 25, 2008 08:49:33
Контактная информация:

Сообщение demson »

нашел проблему номер 1 - не встали фьюзы при первой прошивке, а больше я их и не смотрел :cry: вобщем так и тактовался мк от своего 1 мГц генератора, исправил теперь тактутся от кварца 16 мГц но проблема с usart не решилась. теперь думаю что не исправен переходник usb-com. вот так вот. скоро за мах232 поеду. :))
в спорах рождается ИСТИНА [AND] flud.
Аватара пользователя
Negor
Вымогатель припоя
Сообщения: 586
Зарегистрирован: Ср мар 07, 2007 22:58:02
Откуда: Черкассы, Украина
Контактная информация:

Сообщение Negor »

Чтобы проверить ком порт нужно замкнуть пины 2 и 3 на разьёме. Таким образом ПК будет принимать то, что отправит. И если в терминале(именно это вам и нужно попробуйте PuTTY - хороший терминал. В личке помогу настроить) Вы увидите то, что отправите. Например набрали "G" а в терминале будет "GG". Чтобы отправить байт 160(0xA0 или 0b10100000) нужно по таблице ASCII символов найти символ с таким кодом. Ещё хочу добавить что обычно для проверки правильности связи МК и ПК по UART'у обычно на Си пишут такой код

Код: Выделить всё

putchar(getchar());
Таким образом если скорости выставлены правильно и связь налажена верно то на терминале вы топять таки должны получить то что и отправляли.[/b]
There is only 10 kind of people: those who understands binary code and those who dont!!!
Аватара пользователя
demson
IT KT
Сообщения: 1309
Зарегистрирован: Пн авг 25, 2008 08:49:33
Контактная информация:

Сообщение demson »

тобы проверить ком порт нужно замкнуть пины 2 и 3 на разьёме.
это работает принимает нормально без косяков.
в спорах рождается ИСТИНА [AND] flud.
Аватара пользователя
МитяРа
Модератор
Сообщения: 11492
Зарегистрирован: Чт дек 11, 2008 14:52:26
Откуда: град Нижний

Сообщение МитяРа »

а) попробуй "зациклить" передачу одного байта с МК и посмотри длительность посылки..
б) потом "зациклить" передачу одного байта с компа и тоже посмотри длительность посылки..
Думаю всё-же у тя - несовпадение скоростей..
Аватара пользователя
demson
IT KT
Сообщения: 1309
Зарегистрирован: Пн авг 25, 2008 08:49:33
Контактная информация:

Сообщение demson »

putchar(getchar());
опа не принимает ничего!

при попытке отослать на ПК строку putsf("OK"); на ПК полный бред.
в спорах рождается ИСТИНА [AND] flud.
Аватара пользователя
demson
IT KT
Сообщения: 1309
Зарегистрирован: Пн авг 25, 2008 08:49:33
Контактная информация:

Сообщение demson »

вобщем переходник usb-com не являлся таковым. Спаял avr 309 все работает замечательно.
вечно все проблемы от подделок!!!! 8)
в спорах рождается ИСТИНА [AND] flud.
Hitalik
Родился
Сообщения: 18
Зарегистрирован: Пт окт 21, 2011 19:42:45

Re: ШИМ + UART как быть с пк

Сообщение Hitalik »

Люди помогите всё не допрёт, до меня вот реализован UART и шим; делаю так
OCR1B = 300;
так работает;
ну или

if(UDR=='1')
OCR1B = 300;
тоже работает но только я делаю типо такого
OCR1B = UDR; ну к примеру.
пробовал всякие преоброзования и всё такое... ШИМ таким оброзом не работает, что упустил, ну и сам вопррос то
как получть число с UDR и отправить OCR1B ;
Аватара пользователя
Engineer_Keen
Друг Кота
Сообщения: 3872
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

Re: ШИМ + UART как быть с пк

Сообщение Engineer_Keen »

UART настроен? Скорости совпадают? Процедура обработки приема данных через UART есть? Учитывается что OCR1B - 16 разрядный, а UDR - 8 разрядный?
phanis
Вымогатель припоя
Сообщения: 513
Зарегистрирован: Сб фев 19, 2011 18:04:08
Откуда: Татарстан, пос. Актюбинский
Контактная информация:

Re: ШИМ + UART как быть с пк

Сообщение phanis »

Может лучше сделать работу с двойным буфером. И отправлять количество требуемых байт в комп(запрос), когда нужно заполнить один из буферов.
В буфер складывать по прерыванию юсарта.
Из буфера читать в шим по прерыванию таймера.
С данными работать в виде структуры. Битовые поля.
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»