Написание основного кода picaxe - часть 4

Написание основного кода picaxe - часть 4
Написание основного кода picaxe - часть 4
Anonim

Написание PICAXE BASIC Code - часть 4

Рекомендуемый уровень

начинающий

Предпосылки

Написание PICAXE BASIC Code - часть 1

Написание PICAXE BASIC Code - часть 2

Написание PICAXE BASIC Code - часть 3

Это четвертая статья в многостраничной серии по написанию кода PICAXE BASIC.

• В первой части представлены команды с высоким, низким, паузой и goto, директива #picaxe и концепция меток.

• В части 2 представлены команды … для следующего, ожидания и символа, переменные общего назначения и директива #no_data

• В части 3 представлены команды if … then, endif, gosub и return.

• В части 4 представлены команды readadc, select, case и endselect.

Прежде чем продолжить эту статью, потребуется выполнить часть 1 этой серии. В части 1 приведены подробные сведения о конструкции испытательной цепи кодирования PA-08M2, которая необходима для завершения этой статьи. Принципиальная схема приведена ниже для справочных целей.

Image
Image

Разделители напряжения

В испытательной цепи кодирования PA-08M2 VR1 является потенциометром (коротким, коротким), расположенным в конфигурации делителя напряжения. Чтобы понять его функцию в схеме, сначала необходимо понять, что такое делитель напряжения.

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

Image
Image

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

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

Vout = (R1 / (R1 + R2)) x Vin

Когда VR1 вращается, напряжение выходит из строя, но оно никогда не поднимается выше + 5 В (или независимо от фактического напряжения питания в вашей цепи) и никогда не опускается ниже земли. Предполагая, что горшок линейный, его выход растет и падает пропорционально положению вращающегося контакта, также называемого «стеклоочистителем». Независимо от напряжения, это напряжение присутствует в pinC.4 PICAXE 08M2.

Следующий логический вопрос - это то, что микроконтроллер будет делать с этим аналоговым напряжением. Для ответа сначала посмотрите на рисунок раскроя 08M2 +, воспроизведенный ниже.

Image
Image

PinC.4 расположен на ноге 3 PICAXE 08M2 +, и, как показано, pinC.4 может функционировать как сенсорный вход, вход ADC, цифровой выход общего назначения или цифровой вход общего назначения. Необходимая функция - это функция АЦП; АЦП является аббревиатурой от аналого-цифрового преобразователя. 08M2 является микроконтроллером и, по сути, является цифровым устройством, поэтому аналоговое значение напряжения, которое присутствует в pinC.4, должно быть преобразовано в цифровой формат, и именно это выполняет функция АЦП.

«Но», вы можете спросить: «Как знает 08M2, что pinC.4 должен быть входом АЦП». Конечно, это программный код, который «говорит» о том, что делать с микроконтроллером. Вот код для загрузки.

Скачать код

Программа Aanlysis

Первые 23 строки программы показаны ниже. Линии с 1 по 10 были ранее объяснены и не нуждаются в дальнейшем разъяснении. Аналогично, строки с 17 по 19 являются символьными определениями, с которыми вы должны быть очень знакомы.

Image
Image

Посмотрите на строку 20; обратите внимание, что это определение символа для pinC.4 из 08M2, которое является самой штырькой, о которой идет речь. PinC.4 теперь называется «V_pot», и вы видите из строки 20 комментарий, что он действительно представляет показание напряжения с потенциометра VR1 в схеме.

Как вы помните, в любое время данные считываются, для него должно быть назначено место хранения. Это цель линии 21; напряжение, считанное с выхода VR1, будет называться «d_val» и будет храниться в местоположении b4, переменной байта общего назначения.

Конечно, там есть проблема. Показание напряжения является аналоговым, и его необходимо преобразовать в цифровой формат для хранения. Строка 23 - ответ; команда readadc сообщает μC для чтения аналогового значения в V_pot (который является pinC.4), преобразует его в цифровой формат и сохраняет его в d_val (который является байтовой переменной общего назначения b4). Это хорошо работает, поскольку readadc создает 8-битное цифровое представление напряжения, а b4 - байтовая (8-битная) переменная.

8-битовое двоичное число может передавать 2 8 или 256 различных комбинаций данных, таким образом, d_val может быть где угодно от 0 (ноль) до 255, в зависимости от уровня напряжения на pinC.4. Это помогает объяснить строки с 11 по 16 в коде, которые присваивают символы шести различным значениям d_val: 0, 51, 102, 153, 205 и 256. Эти шесть значений эффективно делят весь диапазон на пять равных сегментов, как указано по именам символов. Имейте это в виду, когда вы смотрите на следующий раздел кода, показанный ниже.

Image
Image

Строка 24 вводит команду выбора, а комментарий в строках 24 и 25 указывает, что она делает. Select направляет микроконтроллер для сравнения d_val с разными «случаями» того, что может быть d_val. Первый случай: когда d_val не меньше V_min (0), но меньше V_low (51), второй случай - это когда d_val не менее V_low (51), но меньше V_med_low (102) и т. Д. До V_max.

Image
Image

Строка 81 сигнализирует PICAXE, что больше нет случаев для рассмотрения в ответ на команду выбора d_val в строке 24.

Вот обзор операций с кодом до сих пор. ΜC считывает напряжение на pinC.4 (V_pot), преобразует его в 8-битный цифровой номер и сохраняет его в байтовой переменной общего назначения b4 (d_val). Затем он сравнивал d_val с диапазоном значений, определенных в первом случае (от 0 до 51), и если совпадение не было, оно переходило к каждому случаю, пока не было найдено совпадение.

Предположим, что совпадение было найдено в последнем случае, то есть в строке 70. Затем PICAXE выполняет код в строках 71-78, а светодиоды включаются и выключаются в последовательности, определенной и в соответствии с включенными паузами.

Сравните последовательность светодиодного освещения во всех пяти случаях, и вы поймете, что они идентичны: красный включается, приостанавливается, а затем выключается, желтый включается, приостанавливается, а затем выключается, наконец, зеленый включается, приостанавливается, а затем выключает. Только длины пауз разные. Например, в первом случае пауза определяется символом V_low, который равен 51, и поскольку команда паузы всегда обозначается в миллисекундах, длина паузы составляет 51 миллисекунду. Длина паузы в каждом из пяти случаев определяется таким же образом, что приводит к пяти различным длинам паузы: 51 мс, 102 мс, 153 мс, 204 мс и 255 мс. Возможно, вы заметили, что длины пауз и диапазоны d_val определяются определениями символов в строках с 11 по 16. Это необязательно и сделано автором просто для удобства. Код можно было бы улучшить, указав отдельные символы длины паузы, что позволило бы изменить паузы, не затрагивая диапазоны случаев.

Из-за основной команды goto в последней строке каждой последовательности случаев выполнение повторяется до тех пор, пока питание не будет отключено. Конечным результатом является 3-х светодиодный «chaser» с пятью различными скоростями преследования, управляемыми настройкой VR1. Если вы еще не запускали код, вы очень терпеливы; попробуйте сейчас и убедитесь сами.

Что нужно попробовать

• Отмените полярность VR1 (перемещая только два провода) и наблюдайте влияние на выбор случая.

• Измените код, чтобы изменить направление, в котором мигают светодиоды.

• Добавить определения символов в код для пяти различных периодов паузы; затем выполните новые тайм-ауты паузы в каждом из пяти случаев.

• Внесите изменения в код, так что вместо светодиодного индикатора, настройка VR1 контролирует, какой из светодиодов загорается следующим образом: минимальный диапазон напряжения горит только зеленым светодиодом; второй самый высокий диапазон напряжения загорается зеленым и желтым светодиодами; средний диапазон напряжения горит желтым светодиодом; четвертый самый высокий диапазон напряжений загорается желтым и красным светодиодами; верхний диапазон напряжения загорается красным светодиодом. На основе напряжения питания вашей схемы, вычислите напряжение, на котором светятся светодиодные комбинации. Проверьте результаты с помощью цифрового мультиметра.

Вывод

Это заключительная часть в написании кода PICAXE BASIC. Эта серия была написана для новичков, и если вы закончили все четыре части, вы больше не новичок. Поздравляем!

Конечно, это не значит, что учиться нечем. PICAXE - удивительные устройства, и эти статьи едва начали исследовать их. Найдите дополнительные технические статьи и проекты PICAXE здесь, в AAC. Всегда впереди!