Проект 16х16 (часть 2)

«И вновь продолжается бой…»

Так как данным проектом я занимаюсь в свободное от работы время (вечером, ночью или в выходные) то все дела идут не так быстро.
Но, в принципе, спешить некуда. Хоть и хочется «вылизать» и оптимизировать программу, чтобы в итоге представить на суд публики «идеальный вариант»,
но это лишь мечта. Радиолюбительское творчество — должно доставлять удовольствие.

А еще у меня есть маленький помощник :-) юный программист который очень любит молотить по клавиатуре, особенно в те моменты,
когда я уже выровнял исходный код в MPLABe. Иногда, после таких «соло на клавиатуре» мне приходится заново восстанавливать исходный код.

Так как эту статью я пишу для начинающих, то мне бы хотелось рассказать об основных, организационных принципах разработки и отладки программ для PIC-контроллеров.

Принцип 1. Четкая постановка задачи

С этого начинается написание любой, мало-мальски полезной программы. Попытки сесть и написать «… что-нибудь этакое», без четкой постановки задачи — ОБРЕЧЕНЫ НА НЕУДАЧУ!!!
Поэтому, если у Вас есть устройство или идея обязательно нужно сформулировать цель. Это должно быть одно или несколько предложений описывающих конкретное назначение программы.
Эту формулировку вы вносите в заголовок исходного файла, и он всегда находится у Вас перед глазами в процессе разработки.

В процессе написания программы иногда хочется «уйти в сторону» он намеченной цели. Особенно когда есть вдохновение и в голову приходят удачные мысли. Но этого делать не следует.
Мысли стоит записать, например, в виде комментариев в программе и продолжить работу по решению поставленной задачи.

Принцип 2. Создание базового алгоритма.

Признаюсь честно — иногда лень разрабатывать базовый алгоритм программы. Но потом, особенно в случаях, когда программа достаточно сложна и имеет множество ветвлений,  все равно в процессе написания программы начинаешь что-то рисовать на бумажках. Обычно это куски алгоритма, описание сложных мест и т.п. В итоге все равно в какой-то момент написания программы — «сей артефакт» рождается.

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

Многие разработчики пишут на C или Basic для PIC-контроллеров — это в некоторых случаях упрощает задачу и сокращает время разработки программы, но, наверное,
и они вынуждены создавать базовые алгоритмы для собственных программ.

Принцип 3. Использование проверенных решений.

Не поленитесь поискать в Интернете подобные решения. Может кто-то уже решал подобную задачу и Вам останется только подогнать код под свои нужды.
Это же касается и использования библиотеки собственных проверенных функций.
Но не забывайте — что это палка «о двух концах». Все время используя чужой код — не научишься писать собственные,
красивые программы. Но так как мы люди реальные, то в некоторых случаях не стоит заниматься мазохизмом, а просто взять и использовать проверенное решение.

Принцип 4. Разделяй и властвуй.

Основной принцип борьбы со сложностью любой системы — это деление ее на подсистемы, модули, компоненты — выполняющие свою часть работы в рамках целой системы.
Это же касается и структуры программы. Выделение функциональных кусков кода и оформление их в виде функций (подпрограмм) — есть правильный подход.
В функции можно передавать параметры через регистр W и получать обратно. Это очень удобно.

Принцип 5. Комментарии — основа программы.

Важно понимать, что не исходный код делает программу — ее делают КОММЕНТАРИИ!!! Человеческий мозг далек от эффективного понимания ассемблерных и прочих команд. Они для него слишком примитивны! Поэтому комментируйте Ваши творения! И те разработчики кто будет использовать Ваши исходные коды — скажут Вам спасибо!

Принцип 6. Разрубить «Гордиев узел».

У каждого разработчика, наверное, были моменты, когда вот все…. Ну не идет программа, как ее не оптимизируй, не переставляй местами куски кода и т.п.
Это может случиться по нескольким причинам. Например, не проработан базовый алгоритм для сложной программы, или функциональные возможности микропроцессора не дотягивают «до планки». Иногда легче и правильней переписать программу заново, чем пытаться оптимизировать имеющийся код.

После создания схемы я вдруг задумался. Зачем я использовал сдвиговый регистр для создания динамической индикации — т.е. управления столбцами (анодами) индикаторами.
Задачу можно было решить немного проще. Потом вспомнил — этот вариант позволяет уменьшить «табличную» информацию с 16 строк до 8 (а соответственно и размер всей программы)
в случае симметричности выводимого изображения. Просто в этом случае выборка делается сначала с 0-ой строки до 7, а затем с 7-ой до нулевой строки. Пустячок…, а приятно :-).
Это наследие тех времен, когда при написании программ для PIC16F84 приходилось экономить каждый байт, по несколько раз оптимизируя программу.
У PIC16F877 памяти гораздо больше, так что пока можно не экономить.

Ну ладно, продолжим разработки…

Так как мое устройство изначально предназначалось для вывода нескольких графических символов в зависимости от некоторых условий, то настала пора научить его делать это.
Для примера выведем цифры от 1 до 5 в каждом из 4-х элементов 8х8 с частотой 0,5 Гц.

В базовом алгоритме я «подчистил» программу, выделил несколько простых функций, сформировал тело основной программы для удобства ее модернизации. Так что пользуйтесь этим вариантом как основой (.ASM и .HEX файл программы 16х16_01 можно взять здесь).

 

P.S.
Помните, что перед Вами полноценный графический полигон и вывести можно на него довольно интересные и информативные знаки.
Наверное Вы уже поняли что на основе данной программы
можно сделать «сдвиговую» анимацию.Если дойдут руки, то я выложу программу на сайт.
Следующей задачей, которую я себе поставил — создать библиотеку символов
16х16 и записать ее в какую-нибудь память (например 24LC64) и делать выборку символов при помощи микропроцессора и выводить на панель.

Comments are disabled.