ШИМ + UART как быть с пк
ШИМ + UART как быть с пк
доброго времени суток.
итак имеется МК соединенный с ПК по uart. необходимо вывести на МК 3 байта, первый байт разобрать на биты, если первый бит 1 вотрой бит 0 третий бит 1 то следующие 2 байта являются значениями которые необходимо вывести на 2 шима.
непонятно как взаимодействовать с пк из приложения, ведь пересылаются символы. а надо еще и разбить на биты.
помогите с куском кода.
PS пишу на С
итак имеется МК соединенный с ПК по uart. необходимо вывести на МК 3 байта, первый байт разобрать на биты, если первый бит 1 вотрой бит 0 третий бит 1 то следующие 2 байта являются значениями которые необходимо вывести на 2 шима.
непонятно как взаимодействовать с пк из приложения, ведь пересылаются символы. а надо еще и разбить на биты.
помогите с куском кода.
PS пишу на С
в спорах рождается ИСТИНА [AND] flud.
- Реклама
Надо принять символы-байты в буфер и потом их разобрать - какие биты в них. Парсинг команд - называется.
Пример приема команд по UART с ПК на Си есть в PROTEUS - это пример AN696. в папке Proteus\SAMPLES\VSM MPLAB Viewer\App Notes\AN696
Я очень советую вам скачать и использовать PROTEUS 7.4 sp3 с лекарством 1.6.5
PROTEUS позволяет ВИДЕТЬ что происходит ВНУТРИ микроконтроллера - это интересно и полезно при отладке.
Разбор команды начинается со строк
Весь исходник прицеплен.
Подробно работу с UART USART AVR на Си недавно обсуждали в "МЯУУУУ" - прием и передача данных.
http://radiokot.ru/forum/viewtopic.php?p=194982#194982
Анализ битов проводят с помощью битовых операций с масками - с числами типа 0b00101110
Пример приема команд по 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
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"); };
};
не уверен что написал правильно, поправьте как должно быть.
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.
чтото никто не отвечает
приходится самому ответ искать:
итак возник вопрос как и чем и что отправлять с компа (в планах на basic)чтобы МК принял 160 а не 1 потом 6 потом 0 !
- 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.
Специальные проги есть для работы с приборами через COM порт.demson писал(а): как и чем и что отправлять с компа (в планах на basic)
Посмотрите - вот 3 программы
http://kazus.ru/forum/topics/f_76711.html#76711
Дак отправьте 160 он и примет 160.demson писал(а): чтобы МК принял 160 а не 1 потом 6 потом 0 !
- Реклама
нет скорости одни и те-же даже в симуляторе vmlab работает. а как всетаки передать с компа число 1101 1111 или BF
чтобы мк его принял как единое целое а не b и f.
вот еще исходник гляньте может в нем что косо.
чтобы мк его принял как единое целое а не b и f.
вот еще исходник гляньте может в нем что косо.
- Вложения
-
- 1.c
- (4.91 КБ) 412 скачиваний
в спорах рождается ИСТИНА [AND] flud.
Из проги терминальной для COM порта передасть число 0хBF или BFhdemson писал(а): а как всетаки передать с компа число 1101 1111 или BF чтобы мк его принял как единое целое а не b и f.
Удобные программы для COM порта есть в "Связь COM порта ПК и USART МК AVR" - http://radiokot.ru/forum/viewtopic.php?p=198337#198337
нашел проблему номер 1 - не встали фьюзы при первой прошивке, а больше я их и не смотрел
вобщем так и тактовался мк от своего 1 мГц генератора, исправил теперь тактутся от кварца 16 мГц но проблема с usart не решилась. теперь думаю что не исправен переходник usb-com. вот так вот. скоро за мах232 поеду. 
в спорах рождается ИСТИНА [AND] flud.
- Negor
- Вымогатель припоя
- Сообщения: 586
- Зарегистрирован: Ср мар 07, 2007 22:58:02
- Откуда: Черкассы, Украина
- Контактная информация:
Чтобы проверить ком порт нужно замкнуть пины 2 и 3 на разьёме. Таким образом ПК будет принимать то, что отправит. И если в терминале(именно это вам и нужно попробуйте PuTTY - хороший терминал. В личке помогу настроить) Вы увидите то, что отправите. Например набрали "G" а в терминале будет "GG". Чтобы отправить байт 160(0xA0 или 0b10100000) нужно по таблице ASCII символов найти символ с таким кодом. Ещё хочу добавить что обычно для проверки правильности связи МК и ПК по UART'у обычно на Си пишут такой код
Таким образом если скорости выставлены правильно и связь налажена верно то на терминале вы топять таки должны получить то что и отправляли.[/b]
Код: Выделить всё
putchar(getchar());
There is only 10 kind of people: those who understands binary code and those who dont!!!
Re: ШИМ + UART как быть с пк
Люди помогите всё не допрёт, до меня вот реализован UART и шим; делаю так
OCR1B = 300;
так работает;
ну или
if(UDR=='1')
OCR1B = 300;
тоже работает но только я делаю типо такого
OCR1B = UDR; ну к примеру.
пробовал всякие преоброзования и всё такое... ШИМ таким оброзом не работает, что упустил, ну и сам вопррос то
как получть число с UDR и отправить OCR1B ;
OCR1B = 300;
так работает;
ну или
if(UDR=='1')
OCR1B = 300;
тоже работает но только я делаю типо такого
OCR1B = UDR; ну к примеру.
пробовал всякие преоброзования и всё такое... ШИМ таким оброзом не работает, что упустил, ну и сам вопррос то
как получть число с UDR и отправить OCR1B ;
- Engineer_Keen
- Друг Кота
- Сообщения: 3872
- Зарегистрирован: Пт янв 29, 2010 10:27:40
- Откуда: Москва
Re: ШИМ + UART как быть с пк
UART настроен? Скорости совпадают? Процедура обработки приема данных через UART есть? Учитывается что OCR1B - 16 разрядный, а UDR - 8 разрядный?
-
phanis
- Вымогатель припоя
- Сообщения: 513
- Зарегистрирован: Сб фев 19, 2011 18:04:08
- Откуда: Татарстан, пос. Актюбинский
- Контактная информация:
Re: ШИМ + UART как быть с пк
Может лучше сделать работу с двойным буфером. И отправлять количество требуемых байт в комп(запрос), когда нужно заполнить один из буферов.
В буфер складывать по прерыванию юсарта.
Из буфера читать в шим по прерыванию таймера.
С данными работать в виде структуры. Битовые поля.
В буфер складывать по прерыванию юсарта.
Из буфера читать в шим по прерыванию таймера.
С данными работать в виде структуры. Битовые поля.


