Умный дом

Первая сборка на макетной плате

Пришло время поделиться впечатлениями.

Подсчитав свои финансовые возможности, я отказался от некоторых запланированных покупок и решил упростить программатор, поскольку в настоящий момент собираюсь ра­ботать только с контроллером PIC16F628A. Я убрал из схемы программатора внешнее питание, из схемы адаптера к про­грамматору - все панельки, кроме 18-ножечной, и использо­вал батарейку «Крона» в качестве внутреннего источника питания (для высоковольтного режима программирования).

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

К схеме конвертера я добавил стабилизатор на 5 В. Кабель от разъема DB9 конвертера RS232-RS485 я распаял на плате конвертера, хотя вначале собирался использовать разъем. После исправления нескольких монтажных ошибок (и эти «грабли» имели место) я решил проверить программатор, поскольку не в полной мере был уверен, что правильно ра­зобрался со схемой.

С программой MPLAB программатор, естественно, не ра­ботает. В Интернете есть схемы программаторов, работаю­щих с MPLAB. Они не настолько сложны, чтобы их не исполь­зовать, но я решил, что лучше воспользоваться программой PonyProg2000, схему программатора к которой собрал. При­ходится скачивать последнюю версию программы, поскольку в предыдущей нет контроллера PIC16F628A.

Первая сборка на макетной плате

Рис. 1.42. Программа РопуРгод2000

Первое, что я делаю после запуска программы - выбираю устройство в меню Device Ріс 16 micro (Устройство Ріс 16 micro) или в окошках на панели. После выбора устройства проверяю работу порта в меню Setup (Interface Setup... (Ус­тановки интерфейса), используя СОМ2-порт), задаю номер порта и SI Prog I/O. После щечка кнопки Probe (Проба) я получаю сообщение - Test Ok. Затем провожу калибровку (меню Setup Calibration (Установки Калибровка)) и опять получаю одобрение.

На этом везение заканчивается.

Вставляю микросхему в панельку, и первое, на что отважи­ваюсь - щелкаю кнопку чтения Read Device (Прочитать устрой­ство) на инструментальной панели. Итог показан на рис. 1.43.

:L. > ЩЩЩ Ш

Г Device ткяпд or unknown device (£4) I Abort 1 Jflnofe.#

Рис. 1.43. Первое сообщение программы PonyProg2000

Программа не распознает микросхему. Обращаюсь на сайт, с которого «срисовал» программу. В разделе типовых вопро­сов и ответов нахожу похожую ситуацию и рекомендацию воспользоваться кнопкой Ignore (Игнорировать). Что и осу­ществляю.

Процесс проходит успешно, о чем сообщает программа, но в буфере сплошные единицы, а у меня сплошные сомнения - прочитал ли я хоть что-то? Я отключаю разъем от СОМ-пор - та, получаю сообщение об успешном чтении, но в буфере одни нули, а тест порта не проходит. Появляется надежда, что я что-то читаю.

Вторая волна сомнений касается вопроса: работает ли микросхема, если я не записал биты конфигурации, опреде­ляющие режим работы тактового генератора контроллера, ведь я еще ничего не записывал. Поэтому решаюсь записать биты конфигурации, выбрав режим работы тактового гене­ратора INTRC (сэкономил, отказавшись от покупки кварца). В меню Command Security and Configuration Bits...

(Команда Биты конфигурации и защиты) устанавливаю флажки (рис. 1.44).

C«»f%ur«ttenaiu! Security toll»

'"Шг 'mcip mm

M - г ■ і 0*

Jja^Lj&f»-MR

Рис. 1.44. Задание слова конфигурации микроконтроллера

Сознаюсь, что, не разглядев, как устанавливаются биты, я сде­лал все наоборот - поставил галочки там, где должны быть нули. Я полагал, что, отметив биты, установлю их в единицу, а в результате закрыл все программирование. Пришлось испра­вить свою ошибку.

Биты конфигурации записались, я сбрасываю их и читаю. Появляется надежда, что вопрос с программированием ре­шен.

Но первые «мягкие» грабли, на которые я наступаю - про­грамма ведет себя не так, как я от нее ожидаю. Я загружаю в программатор файл, созданный по версии, написанной на языке С. В итоге, я могу записать в контроллер все нули или все единицы. Но стоит мне попытаться изменить в буфере хотя бы один байт, используя возможность редактирования в меню Edit Edit Buffer enabled (Редактирование Буфер редактирования доступен), чтобы записать что-то другое, как контроллер полностью обнуляется. С этой проблемой я долго не могу разобраться, поскольку не понимаю, вина ли это про­граммы, или я что-то делаю не так. Я работаю с программой впервые и, судя по ошибке с установкой бит конфигурации, могу сделать множество ошибок. Конечно, все попытки обой­ти проблему успехом не увенчались.

Устав от проб и ошибок, я решаю изменить подход - если я не смогу запрограммировать контроллер, то сама микросхема, которую я так берегу, мне будет не нужна. Либо я смогу ее за­программировать, либо выброшу сразу.

Я решаюсь сделать попытку программировать ее как мик­росхему другого типа. Удачной оказывается попытка про­граммирования РІС 16X84. И я решаю, что именно так я буду ее программировать, а биты конфигурации запишу под эги­дой PIC16F628. Это неудобно, но не покупать же дорогой про­грамматор!

Итак, я могу записать в микросхему что-то кроме нулей и единиц.

Я загружаю НЕХ-файл, созданный программой, написан­ной на языке С, используя на инструментальной панели кноп­ку Read Program Memory (FLASH) (Прочитать память про­граммы).

Вторые «мягкие» грабли выгладят так - вся программа не занимает и двух строк в буфере. Я в это не верю. Поскольку файл имеет расширение HEX, я пытаюсь просмотреть его НЕХ-редактором и не вижу ничего, кроме символьной запи­си. Тогда я открываю файл блокнотом:

:10000000830100308A0004282030840038300D201D :100010008301392B04068001840A0406031D0A2883 :020020000034АА

:1004Е20083018С1Е712А1А0808008301В700831247 :1004F20003130C1E782A370899000800F401F5014D :100502000310F30CF20C031C8D2A7008F407710817 :100512000318710AF5070310F00DF10D7208730448 :1005220003190034812A8301850107309F00831655 :100532008501FE30860090308312980006308316C3 :100542009800683099008312061083169B011C14D0 и т. д.

Признаться, не ожидал. Пришлось углубиться в руковод­ства и понять, что этот файл предназначен для загрузки в программатор и формат файла имеет вид:

: BBAAAATTHHH... ННСС

Где ВВ - количество байт в строке файла, АААА - адрес за­писи данных, ТТ - указатель типа строки (00 - данные, 01 - конец файла, 02 - адрес сегмента, 04 - линейный адрес), ННН...НН - собственно данные, а СС - контрольная сумма строки.

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

Первой приходит мысль исправить адреса в файле HEX. Но это потребует изменения контрольных сумм, которые придется либо рассчитывать на калькуляторе, либо писать программу пересчета. Сущность же проблемы состоит либо в том, что файл подготовлен под загрузку в программатор, работающий с MPLAB, либо в том, что срок действия демон­страционной версии компилятора языка С закончился.

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

Делаю последнюю попытку - компилирую программу в MPLAB для микросхемы PIC16F627A, которая имеет объем памяти программы вдвое меньше, чем моя PIC16F628A.

Теперь, загружая НЕХ-файл в программу PonyProg2000, я вижу больше пары строк в буфере. Записываю этот файл (для микросхемы РІС 16X84), используя кнопку Write Program Memory (FLASH) (Записать память программы). Записываю биты конфигурации (для микросхемы PIC16F628). Проверяю в меню Command Verify All (Команда Проверить все) и получаю подтверждение правильности записи, затем перено­шу микросхему на макетную плату, где собран интерфейс и установлены светодиоды.

С этого момента опять начинаются «железные» грабли. Ничего у меня, естественно, не работает.

Первое, что следует сделать, - определиться, что у меня работает, а что нет. Уверен ли я, что программатор у работа­ет? Нет. Уверен ли я, что программа написана правильно? Нет. И т. д. Я понимаю, что «нет» - это самое определенное, что я получил к настоящему моменту.

Тогда я решаю последовательно удалять эти «нет». В Ин­тернете нахожу пример программирования на языке С для микроконтроллеров РІС - простая программа, которая за­ставляет светодиод мигать.

#include "picl6f62xa. h"

#define bitset(var, bitno) ((var) 1= 1 « (bitno)) #define bitclr(var, bitno) ((var) &= -(1 « (bitno)))

Main() {

Unsigned int k;

CMCON = 0x07; //Компараторы выключены.

TRISA = OblllllllO; //RAO выход,

Repeat:

For (k=0; k<45000; k++); //"Пустой" цикл для временной задержки.

Bitset (PORTA, 0); //Выставить на RAO высокий уровень, for (k=0; k<45000; k++);

Bitclr (PORTA, 0); //Выставить на RAO низкий уровень.

Goto repeat; ■ //Повторить ещё раз. }

Я компилирую ее и программирую микросхему. После уста­новки на макетную плату и включения питающего напряжения я получаю первое «да». Светодиод мигает. По меньшей мере, программатор работает.

Теперь я хочу проверить работу конвертера RS232-RS485. Удобнее всего было бы использовать осциллограф. Но у меня нет ничего кроме мультиметра с набором обычных функций измерения напряжения, тока, сопротивления.

Кое-что я, все-таки, проверить могу. Для этого мне потре­буется программа работы с СОМ-портом. Можно написать на любом из языков программирования то, что работало бы с СОМ-портом. Но это займет время (позже это приходится сделать). Нахолсу в Интернете программу под названием RS232Pro, в которой я смогу 25 дней поработать бесплатно. Есть, правда, предложение зарегистрировать программу, но сайт, где предлагается ее зарегистрировать, отсутствует. Ду­маю, 25 дней - это срок, когда я либо получу положительные результаты, либо откалсусь от всего.

Проверяю, включив мультиметр, на измерение постоянно­го напряжения на пределе 20 В входные напряжения от СОМ-порта. Некоторое время уходит на то, чтобы понять, что нужно щелкать кнопку RTS OFF в программе RS232Pro, но, наконец, я делаю и этот решительный шаг. Затем отправ­ляю в порт последовательность символов 12345, и вижу, что у меня меняется напряжение на выводе TXD. Меньше, но ме­няется напряжение на выводе 3 микросхемы МАХ1483. Хоте­лось бы проверить линию RS485.

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

Порт ц, модуль я настраиваю на скорость 9600, 8 бит дан­ных, 1 стоповый бит без бита четности. Первым делом, я упрощаю программу релейного модуля, оставив только один символ R на прием, который сразу зажигает светодиод. Мо­дуль не работает, но обращение к документации на микросхе­му контроллера PIC16F628A заставляет меня задуматься в правильности выбора скорости. Я проверяю, меняя значение регистра SPBRG, разные скорости (соответственно, каждый раз перепрограммируя контроллер), пока не зажигается све­тодиод. Скорость оказывается равной 2400 (я даже не уверен, что ее не следует снизить до 1200). Модуль начинает реагиро­вать на команды, передаваемые с компьютера.

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

Я человек терпеливый, но и мое терпение истощается по мере продвижения к выполнению поставленной задачи. Главная беда - я не уверен, что программа RS232Pro подходит для ра­боты. По этой причине отправляюсь к знакомым, чтобы на­писать программку для работы с модулем. Думаю, я так надо­ел им, что они дарят мне старенькую версию Visual Basic (не совсем полную), которую кто-то из них получил на презента­ции во время одной из конференций. Мне важно, что версия работает.

Итак, я создаю заготовку для среды программирования (о чем речь пойдет в конце этой части книги), куда добавляю три кнопки: одну - для отправки команд, другую - для полу­чения команд и последнюю - для того, чтобы полученные команды отобразить.

Используя оба варианта работы с СОМ-портом, я посте­пенно начинаю понимать, что после получения команды зап­роса состояния реле модуль начинает передавать ответ, но одновременно читает все, что есть на линии RS485. Прочи­тав же обращение к релейному модулю, свой номер модуля, он пытается реагировать на эти события. То есть, при передаче модулем в сеть каких-либо данных нужно дать время на передачу - это во-первых, и отключить на время передачи приемник - это во- вторых.

Не с первого раза получилась и запись состояния реле в EEPROM - скоро сказка сказывается, да не скоро дело дела­ется.

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

Когда я написал, что отправляюсь в магазин, и поделюсь впечатлениями, я и сам не ожидал, что впечатлений будет так много. Конечно, отсутствие опыта, не совсем подходящие средства разработки, разница между тем, что нарисовано на бумаге, и тем, что будет создано на основе этого рисунка - все так, но... Я не ожидал, что столько «граблей» окажется на пути реализации достаточно простой конструкции.

Однако продолжим создание запланированных модулей.

Умный дом

Какие современные технологии позволяют сделать дом энергоэффективным?

Современные технологии для энергоэффективного дома Энергоэффективный дом — это здание, которое потребляет минимальное количество энергии для отопления, охлаждения, освещения и других нужд. Это не только снижает затраты на коммунальные услуги, …

Как рассчитать бюджет на строительство и избежать лишних затрат?

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

Какой фундамент лучше для частного дома: ленточный, свайный или плитный?

Выбор фундамента для частного дома – один из ключевых этапов строительства, который влияет на долговечность и устойчивость здания. Основные виды фундаментов – ленточный, свайный и плитный – имеют свои преимущества …

Как с нами связаться:

Украина:
г.Александрия
тел./факс +38 05235  77193 Бухгалтерия

+38 050 457 13 30 — Рашид - продажи новинок
e-mail: msd@msd.com.ua
Схема проезда к производственному офису:
Схема проезда к МСД

Партнеры МСД

Контакты для заказов оборудования:

Внимание! На этом сайте большинство материалов - техническая литература в помощь предпринимателю. Так же большинство производственного оборудования сегодня не актуально. Уточнить можно по почте: Эл. почта: msd@msd.com.ua

+38 050 512 1194 Александр
- телефон для консультаций и заказов спец.оборудования, дробилок, уловителей, дражираторов, гереторных насосов и инженерных решений.