Жизнь на stm32

Что наша жизнь — Игра!
Чайковский «Пиковая дама», ария Германа

Жизнь — достаточно известная математическая игра, точнее клеточный автомат. Данная игра в своё время сильно повлияла на математику, информатику, радиоэлектронику, статистические и прогнозируемые науки…

Правила игры простые: у клетки всего два состояния: мертва и жива. В игре всего 2 правила: если у живой клетки 2 или 3 соседа, то она выживает, если меньше — умирает от голода, больше — от переедания и если у мертвой клетки есть 3 соседа, то в ней зарождается жизнь. Соседние клетки — это все прилегающие в том числе по диагонали.

Игра Жизнь на экране. Микроконтроллер stm32f103

Игра Жизнь на экране. Микроконтроллер stm32f103

Статью можно считать продолжением — подключение COG LCD дисплея на ST7565R контроллере к stm32. В статье приведен алгоритм клеточного автомата — Жизнь. Так же экспериментально немного рассмотрены некоторые скоростные и тепловые особенности stm32.

Когда первый раз узнал об этой игре, то она мне понравилась и заняла на некоторое время. Каждый раз, когда встречал её позднее она привлекала моё внимание. Недавно (на момент написания, а не публикации статьи) у друга наткнулся на журнал популярной механики, где была посвящена ей статья, которая напомнила, как она привлекала меня ранее. Прочитав её появилось желание реализовать её.

Алгоритм был реализован по простому: 2 массива для первого и второго шага. Во время шага для каждого пикселя, по порядку просчитывается, согласно каноническим правилам, описанным выше, жива или мертва клетка. Вычисление ведутся для первого массива, результат записывается во второй массив. Для следующего кадра всё то же самое, только массивы, точнее их указатели, меняются местами.
Всего имеем 128 столбцов по 64 строки, итого 8192 клетки. Для -1 столбца берётся 127 столбец, для 127 берется -1, аналогично для строк. Для экономии памяти и удобства вывода на дисплей (на него вывод идёт постранично (по байтово)) данные храним в unsigned char массиве с такой же постраничной (по 8 байт подряд по вертикале, подробнее организация памяти у st7565r контроллера), т.е. имеем массив 128 на 8 в unsigned char.

Начальная генерация осуществляется псевдослучайно с использованием шума АЦП контроллера.

В итоге получаем следующий пример работы алгоритма:


Видео

Кому интересен алгоритм — см. прикреплённый к статье проект.

Вывод изображения на дисплей

Между делом напомню простой алгоритм вывода монохромных точечных не сжатых изображений, который приведен в статье генератор изображений.

Вывод изображения на дисплей

Вывод изображения на дисплей

Скачать проект под CoCox. Вывод изображения

Скоростные и тепловые испытания

Может для кого-то это и общеизвестная информация, но стало интересно, что будет если выставить множитель частоты выше заявленной в документации. Решил проверить до какой частоты можно разогнать контроллер и на какой частоте сможет работать дисплей.

  • Микроконтроллер — STM32F103C8T6.
  • Максимальная заявленная частота 72МГц.

Изначально на отладочной плате стоял кварц на 8МГц. Максимальный доступный множитель частота 16, следовательно, применив его, получаем 128МГц. Стало интересно, можно ли получить большую частоту. Взяв максимально разрешенный кварц на 16МГц смог максимум помножить его на 9, получив 144МГц, что в 2 раза выше максимальной заявленной.

Получились следующие скоростные характеристики:

  • Тактовый кварц — 16МГц
  • Предделители — отключены
  • Множитель — 9
  • Частота системной шины — 144МГц
  • Частота портов вводы вывода дисплея — 2МГц (управление программное)
  • Время обновления всего экрана (128х64 точки) — 568 микро секунд
  • Частота шагов игры/частота кадров (алгоритм оптимизирован, но не оптимальный) — 25,8Гц
  • Температура контроллера на 7 градусов выше комнатной
  • потребление 63мА (21,5мА — 32МГц, 15,5мА — 16МГц) (замер по входу питания платы: питание от 5В через LDO + LCD + 2 светодиода)

Осциллограммы: шина дисплея Осциллограммы: период обновления дисплея Осциллограммы: частота шагов игры

Осциллограммы: шина дисплея, период обновления дисплея, частота шагов игры

Осциллограмма тактовой частоты системной шины

Осциллограмма тактовой частоты системной шины

Тактовая частота системной шины снята с выхода PA8, который сконфигурирован на выход частоты системной шины. На щупе включен делитель x10. Частота около 144МГц. Скриншот сотовым, USB порты на осциллографе закрыты.

Получается достаточно интересная картина, контроллер смог работать на частоте в 2 раза выше заявленной системной, при этом сбоев замечено не было. Тем не менее выше заявленной частоты лучше не работать, т.к. надёжность системы снижается, см. ниже. На другой плате с точно таким же контроллером, но с кварцем на 12МГц, после умножения частоты более чем в 10 раз (120МГц), контроллер начинал повисать через некоторое время (от нескольких секунд до пары минут) работы. Частота шины дисплея составила 2МГц, а скорость обновления всего дисплея 568мкс. При этом быстро сменяющиеся объекты (пиксели) выглядят нечётко.

Игра жизнь. Контроллер на частоте 144МГц.

Игра жизнь. Контроллер на частоте 144МГц.

Примечание. Было замечено упоминание на форуме tqfp.org, что stm32f103c8t6 с включенным множителем частоты PLL при нагреве феном начинает работать нестабильно и зависает. Это удалось частично подтвердить. При прогреве разогнанного до 144МГц контроллера феном до 100°С, он по началу начинает работать нестабильно (на экране и в работе алгоритма начинают появляться артефакты), при дальнейшем прогреве зависает; после остывания и сброса работает стабильно. При прогреве частота системной шины не изменяется (снятая с выход PA8). На штатных частотах в 72МГц (16МГц/2*9) и от внутренней RC цепочки 64МГц (8МГц/2*16) при прогреве феном до 150°С всё работает стабильно. Прогревать более высокими температурами не стал, т.к. мог оплавить разъемы и провода находящиеся вокруг контроллера. Для справки максимальная заявленная температура для данного типа контроллеров 105°С.

Скачать проект под CoCox. Игра Жизнь

Внимание! В примере были проведены некоторые оптимизации библиотеке работы с дисплеем с целью повышения быстродействия за счёт надёжности работы. Для применения библиотеки в своих целях рекомендую скачать её из статьи — Подключение COG LCD дисплея на ST7565R контроллере.

Комментировать »

Alex_EXE | 11.06.2016 | STM32 |

Комментарии RSS

Оставьте отзыв