Умный дом

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

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

Подсчитав свои финансовые возможности, я отказался от некоторых запланированных покупок и решил упростить программатор, поскольку в настоящий момент собираюсь ра­ботать только с контроллером 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 - скоро сказка сказывается, да не скоро дело дела­ется.

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

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

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

Умный дом

Вторая версия основной программы на языке С++

/****************^ * TOC o "1-3" h z Copyright (С) 2006 by Vladimir Gololobov * * vgololobov@yandex. ru * * * * This program is free software; you can redistribute it …

Циклы

Циклы выполняют выражения или блоки выражений до тех пор, пока выражение условия не становится истинным. Наша программа требует двух циклов (один вложен в дру­гой). Пока пользователь желает угадывать последовательно­сти: { …

Две полезные схемы

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

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

Украина:
г.Александрия
тел./факс +38 05235  77193 Бухгалтерия
+38 050 512 11 94 — гл. инженер-менеджер (продажи всего оборудования)

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

Оперативная связь

Укажите свой телефон или адрес эл. почты — наш менеджер перезвонит Вам в удобное для Вас время.