СОВРЕМЕННАЯ ЭЛЕКТРОНИКА №9/2014

ПРИБОРЫ И СИСТЕМЫ 42 WWW.SOEL.RU СОВРЕМЕННАЯ ЭЛЕКТРОНИКА ◆ № 9 2014 дисплея. В оставшуюся часть дисплея выведем текстовую строку по оси Y, где будут отображаться параметры развёрт- ки, значение уровня захвата сигнала (красный кружок в левой части экрана) и режим отображения (Md = 1, 2, 3, 4). Установку цвета фона и текста произ- водят функции: LCD_SetBackColor(LCD_COLOR_ YELLOW); LCD_SetTextColor(LCD_COLOR_ BLACK). За вывод служебной строки с данны- ми в нужную позицию отвечает функ- ция: LCD_DisplayStringLine(LCD_ LINE_12, (uint8_t*)aTextBuffer). В графической библиотеке приведе- но несколько способов вывода точки на дисплей: в виде пикселя со значени- ем закрашенного единичного радиуса, в виде одной линии и в виде линии по указанным точкам. Самым быстрым методом рисования линий оказалась функция отображения точками. Но она не подходит в данном примере, так как при больших изменениях значения по оси Y не прорисовывается линия связи. Поэтому используем функцию в виде линии по указанным точкам: LCD_DrawUniLine(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2). Для отображения новой линии на дисплее предыдущая информация должна стираться, то есть требуется найти самый быстрый способ обновле- ния дисплея. Для исключения мерцания при обновлении дисплея на обычном ПК изображение сначала формируется вне экранной области памяти, а затем готовый кадр копируется в область памяти дисплея. Такой способ обнов- ления изображений в данной плате не тестировался из-за большого объё- ма передаваемых данных (копируются пиксели всего дисплея), что приводит к значительной задержке. Прорисов- ка одного кадра на дисплее с последу- ющим стиранием также не дали поло- жительный результат, так как функция стирания LCD_Clear(uint16_t Color) оказалась затратной по времени. Оптимальным способом рисова- ния линий с обновлением дисплея без мерцаний оказался метод, при кото- ром перед прорисовкой новой линии с минимальным приращением в два пикселя по оси X необходимо стирать предыдущую информацию на дисплее рисованием цветом фона трёх линий толщиной в один пиксель по оси Y: LCD_SetTextColor(LCD_COLOR_ BLACK); LCD_DrawLine(0, X,237,LCD_DIR_ HORIZONTAL); LCD_DrawLine(0, X-1,237,LCD_DIR_ HORIZONTAL); LCD_DrawLine(0, X-2,237,LCD_DIR_ HORIZONTAL). Вслед за формированием изображе- ния сигнала, в этой же области дисплея рисуется масштабная сетка с клетками 30 × 30 пикселей с помощью выбран- ных методов: // Сетка линии по горизонтали LCD_SetTextColor(LCD_COLOR_ BLUE); LCD_DrawCircle(30, X, 0); // Сетка линии по вертикали LCD_SetTextColor(LCD_COLOR_ BLUE); LCD_DrawLine(0, X,237,LCD_DIR_ HORIZONTAL); Стирание и прорисовка изображе- ния на дисплее данными из АЦП про- исходит в цикле. Затем выводятся зна- чения некоторых параметров для четы- рёх режимов работы: /* Установки дисплея, цвет фона и цвет текста */ LCD_SetBackColor(LCD_COLOR_ YELLOW); LCD_SetTextColor(LCD_COLOR_BLACK); sprintf((char*)aTextBuffer, MESSAGE6, Mode ,delay_zad/16 , Vmax/50,(Vmax%50)/5); sprintf((char*)aTextBuffer, MESSAGE5, Mode ,delay_zad/3 , Vmax/50,(Vmax%50)/5); sprintf((char*)aTextBuffer, MESSAGE3, Mode ,DelU , TimTemp ); sprintf((char*)aTextBuffer, MESSAGE4, Mode ,SensU , TimTemp ); Время обновления изображения на дисплее (вместе с вычислениями) составило от 12 до 15 мс в зависимо- сти от плотности прорисовки. Вре- мя прорисовки экрана дисплея соста- вило 2–3 мс в режиме отображения Md = 4 (см. дополнительные материа- лы к статье на сайте и рис. 4). Н АСТРОЙКА ЭНКОДЕРА Для переключения значений задерж- ки, установки времени развёртки и изменения коэффициента деле- ния используется энкодер PEC12–4. В основном цикле программы опра- шивается кнопка, а в прерывании по таймеру (примерно 1 мс) определяется направление вращения энкодера. Далее в основном цикле программы считы- вается это направление, увеличивают- ся или уменьшаются значения и снова разрешается определение направления вращения. Для инициализации энко- дера потребуется 5 свободных выво- дов контроллера (см. дополнительные материалы к статье на сайте). М ОДУЛЬ ФЛЭШ - ПАМЯТИ Чтобы при отключении питания некоторые последние значения пере- менных сохранялись, записываем их во флэш-память микроконтролле- ра STM32F4хх. При этом необходи- мо помнить, что в ней хранится про- грамма микроконтроллера. Поэтому область для записи данных необходи- мо выбрать в свободном от кода про- граммы пространстве памяти, напри- мер, на последней странице: /* Базовый адрес флэш-памяти и его сектор */ #define DEVICE_ADDRESS 0x080E0000 // нач. адрес #define DEVICE_SECTOR FLASH_ Sector_11 // сектор Флэш-память МК делится на сектора. В контроллере находится 12 секторов, и каждый сектор отвечает за заданную область памяти. Стирать память мож- но только по секторам. Если необходи- мо сохранить какие-то данные в сектор памяти, но в нём уже хранится нужная информация, необходимо скопировать Рис. 4. Время прорисовки экрана дисплея составляет 3 мс

RkJQdWJsaXNoZXIy MTQ4NjUy