Алгоритм чтения данных в микроконтроллере поступающих с ПК через UART
Поможем в ✍️ написании учебной работы
Поможем с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой

Для управления станком с ЧПУ, используя микроконтроллер, была сформирована совокупность команд и данных, которые будут «пониматься» контроллером, обеспечен диалог ПКßàМК. Это необходимо для того, чтобы обойти причину нехватки памяти на МК. Ведь передаваемый объем может быть намного больше объема ОЗУ на МК. Для этого было решено формировать буфер приема на МК в 255 байт (255 символов – это с запасом в 2 – 3 раза) и после передачи строки данных дожидаться подтверждения выполнения предыдущей команды и сигнал на разрешение передачи следующей строки. Проанализировав все необходимые условия, было решено разработать алгоритм приема данных на контроллере, так как на нем более ограничены возможности реализации различных методов.

Программирование контроллера изначально выполнялось в среде Code Visio AVR на языке C. Во избежание частого перепрограммирования МК, работа программы тестировалась в комплексе Proteus. Однако во время работы часто наблюдались различия выходных результатов в протеусе и на самом деле, на «железе».

Для решения поставленной задачи, были анализированы функции и процедуры, имеющиеся в Code Visio AVR для работы с вводом/выводом через UART. Анализ велся исходя из поставленной задачи. Необходимо принять строку с ПК, отделить от другой строки, прочитать ее, анализировать на содержимое, если это команда - то перейти далее к анализу данных о координатах. Здесь главное правильно выбрать формат принимаемых данных, чтобы он был наиболее удобен для использования имеющихся функций. Первое время не удавалось «правильно» читать строки данных поступающих на МК, так как необходимо точно определить последний символ строки. А также прием и передача в МК организована на прерывании. И данные хранятся в том самом буфере, которых два – один на прием, другой на передачу. В Интернете [18], [19] и в научных источниках [9], [11], [17] для решения поставленной задачи были найдены функции, которые сканируют получаемые данные, автоматически выделяя строки. Например, такая функция, как scanf(), которая считывает из входного потока данные в формате определенном в первом параметре и сохраняет их в переменных, адреса которых переданы ей в качестве следующих параметров. Например:

Scanf (“% d ,% d / n ”,& x & y ); - мы считываем два числа в десятичной форме, которые разделены запятой в переменные X, Y соответственно. Но, как говорилось ранее, есть проблема, касающаяся нахождения конца строк, и эта функция не совсем правильно работает с данными, которые поступают от ПК. Было решено создать «свою» процедуру, формирующую строки из поступающих данных. Приведем ниже реализацию алгоритма формирования строки:

su[ii]=getchar(); if (su[ii]=='\n')    {        sscanf(su,"G%d\n",&op);

 Опишем более подробно данный алгоритм. Мы не работаем напрямую с прерыванием по приему символа. Буфер формируется самостоятельно по прерываниям и не стоит загружать функцию формирования буфера лишними операциями. Мы, когда нам необходимо будет, спокойно считываем символы из буфера (su [ ii ]= getchar ();) в строку su, используя индексный массив, и одновременно проверяем приходящий символ на наличие символа конца строки. При наличии такого, сканируем строку на всевозможно-необходимые для нас данные, которые могут быть в полученной строке. При помощи процедуры sscanf(su,"G%d\n",&op);, которая в данном случае сканирует строку su на наличие символа ‘G’ и при наличии такого помещает в переменную op число, находящееся в строке после символа ‘G’.

Таким образом, удалось анализировать входящие данные на МК с ПК и выполнять различные действия исходя из полученных данных. В код программы для микроконтроллера было добавлено несколько процедур, обеспечивающих работу таких операций, как сверление, инициализация станка. Все операции управляются с ПК. В дальнейшем были реализованы операции выжигания, и режим ручного управления (Робот).

 

Дата: 2019-12-22, просмотров: 212.