Найдя микросхему приёмника DTMF, я засел за разработку нового устройства, с иным алгоритмом обмена данными между диспетчерским блоком и удаленными подстанциями.
Во-первых, я понял, что мне не нужна высокая скорость реакции на какие-либо события в подстанции. Во-вторых, с учетом первого, я отказался от индивидуальных приёмников и передатчиков для каждой из линий связи. В результате этого схема и плата значительно упрощались, хотя появлялась некоторая сложность с цикличным управлением каждой линией.
На практике это выражалось в таком алгоритме: к передатчику и приёмнику диспетчера подключалась нужная линия связи, в линию передавался сигнал управления или опроса, в ответ приходила тоновая посылка. Линия отключалась, подключалась следующая и так по кругу.
Уж чего я только не придумывал, чего только не применял! Но как бы я не изголялся, а размеры будущей платы были бы ну очень большие: около 12-15 микросхем! Нет, я мог её развести и изготовить, но душа уже требовала чего-то этакого! И этакое нашлось.
Напомню, что я занимался в радиокружке при городском радиоклубе. Там более взрослые радиолюбители собрали цифровую шкалу-частотомер (среди радиолюбителей известная как «макеевская схема»). Сердцем устройства был миниатюрный микроконтроллер: микросхема с 18 выводами (вроде был PIC16F84A или PIC16F628A). (Для тех, кто не в курсе: Микроконтроллер — МК, является мелким компьютером: в одной микросхеме есть процессор, память и устройства связи. Плюс есть нестандартные для процессоров компьютеров блоки таймеров, счетчиков, энергонезависимой памяти…)
В той схеме микроконтроллер заменял примерно 20 корпусов обычных микросхем!
Логично, что мне захотелось применить МК в своём устройстве.
Но было несколько «но»:
- для работы МК нужна программа, а я её не мог написать,
- для загрузки программы — «прошивки» — был нужен программатор, а у меня его не было, а фирменный стоил почти всю мою зарплату,
- консультироваться было не у кого, а свободного доступа к интернету у меня тогда не было (он был на заводах, да и нескольких «мажоров» типа детей директоров крупных контор города).
Но от самой идеи использовать МК в своём блоке я не отказался. Используя интернет на работе, я рылся в сети: искал учебники и самоучители по написанию программ для МК. Наткнулся на простую схему: микросхема приёмника на MT8870, микроконтроллер pic16F84 и ключи для управления реле. Схема называлась как-то вроде «Управление устройствами через телефонную линию». Прилагалась и демо-прошивка с парой ограничений в работе. И мёня попёрло! Я скачал какой-то дисассемблер, расковырял программу и сутками пытался понять как всё это работает. Но ничего не получалось! Во-первых, я не знал устройство МК и работу его периферии. Во-вторых, ассемблер PIC был весьма специфичен (на тот момент я только пару раз пощупал ассемблер процессора Z80, но почти ничего не понял – книжка была как-то нелогично построена).
Тогда я пошел самым простым для себя путём: недостатки программы хотел обойти и решить исключительно аппаратными методами: добавлением внешних микросхем. Но когда я поглядел что получается – приуныл: получается унылое гэ!
Но судьба улыбается смелым :) — Я нашел автора устройства (судя по адресу почты – из СПб) и написал ему письмо. И через какое-то время он мне ответил. Мало того: он подарил мне исходник программы! Господи, я чуть не танцевал от счастья: код был прекрасно прокомментирован! И я начал его изучать. Чистый асм, с кучей комментариев и подсказок. Вадим, я тебе до сих пор благодарен!
Параллельно я искал программатор. И кто-то мне подсказал простой вариант на резисторах, стабилитроне и паре конденсаторов, который работал через COM-порт ПК. Оболочка была под DOS, но тогда это была не проблема: во времена Windows-98 ДОСовские программы работали неплохо и из-под самой Windows. Но практика показала, что под DOS устройство работает надёжнее. Для экспериментов я собрал отдельный системник на Пентиум-1.
Уже и не помню, как я уговорил руководство купить несколько микроконтроллеров.
И где-то через пару месяцев я смог внести в программу нужные изменения! И они заработали. Заработал и самодельный программатор! Первые разы я загружал прошивку в МК не дыша, отключив дома всю нагрузку, которая могла включиться или отключиться во время загрузки (и часто забывал включить холодильник обратно, за что получал по хребту :)
Так я получил небольшую плату, на который было всего три микросхемы: приёмник DTMF, передатчик DTMF, микроконтроллер. Да, всего три мелких чипа! Плата получилась размером с небольшую открытку. И это работало!
Снова демонстрация работы устройств руководству, снова их «небольшие хотелки», снова мой ответ «реально, но надо время», снова внесения доработок…
С момента спора до момента этой версии устройств прошло почти полтора года. Процесс доработок и добавления «хотелок» начальства превратил процесс разработки в бесконечный. И моего начальника стало это раздражать: я почти всё время на работе занимался только этим проектом. И он предложил это как-то завершить итоговой конструкцией.
В то время на работе знакомого (эл.сети другого региона) монтировали мнемощит, на котором было много лампочек и выключателей. И я загорелся сдеалть нечто подобное: вывести всё управление в диспетчерской на мнемощит! Но если паять я умел, то руками работать – совершенно не очень… Получилось коряво просто страшно. От этой идеи решили отказаться.
И тут снова улыбка судьбы: начальство уверовало, что я реально могу сделать всяко-разно и в очередные «хоетлки» добавился пункт контроля действий диспетчера. То есть, куда-то сохранять время включения и отключения уличного освещения. Дело в том, что некоторые диспетчера позволяли себе забить и забыть вовремя включить или отключить уличное освещение в городе. Я сказал, есть микросхемы энергонезависимой памяти, есть микросхемы часов, но я не смогу быстро написать такую программу: для освоения шины i2c мне требуется время на опыты. Но начальство заартачилось: надобно быстро! (тогда я не знал с чего такая прыть в них появилась).
И как-то в разговоре мой начальник сказал: а если диспетчерский блок сделать на основе компьютера? Ну, тогда это можно реализовать за месяц. На том и порешили.
Но главный инженер подложил мне очередную свинью: нафига ему давать хороший комп?! Сломает еще! Дайте ему списанный древний!
И дали: Пентиум-1, посыпавшийся винчестер, убитый в нуль монитор с «севшим» кинескопом («сел» так, что был немного виден только красный). Круто да?
Но снова я пошел на принцип: привод дисковода ведь цел. Значит, сделаю загрузку программы с дискеты. Благо делать это часто не требовалось. А вот логии посуточно можно накапливать в памяти, и в полночь сохранять на вторую дискету — для этого я поставил второй дисковод 3.5 дюйма.
А вместо монитора будет ранее сделанный мнемощит. На этом с начальником отдела и порешили.
Далее встал вопрос написания программы для компьютера. Тут было проще: я уже имел некоторый опыт программирования на Спектруме (Бейсик), УКНЦ (Бейсик и Паскаль). Я планировал всё написать на ТурбоПаскале. И уже начал работу. Но встретил знакомого, что-то зацепили эту тему, а он мне прямо в лоб: а кто еще в вашей конторе и среди твоих знакомых владеет Паскалем? Ну и пофигу, что тебе он нравится. Главное, кто после тебя это будет поддерживать!
И я реально призадумался. Он пояснил так: надо выбрать язык программирования такой, чтобы даже без тебя могли в твоей программе разобраться. Паскаль знают единицу «компьютерщиков», вот спроси у вашего сисадмина: сможет он с нуля разобраться с программой на Паскале? Узнал: сможет, но неделю будет курить описание языка и разбираться с моим кодом. Тогда знакомый предложил взять всеми оплёванный Бейсик, который идёт в комплекте с компьютером. Мол, как бы «компьютерщики» не плевались, но как он работает понимают даже самые тупые.
Был выбран компилирующий вариант Бейсика – QuickBasic. На нём я написал всю программу. И оно работало! Снова собралось руководство, пощупало, пощёлкало – всё отображалось на небольшом мнемощите, собранном на боковой стенке самого системного блока. Так это устройство и ввели в работу.
Я уже стал постепенно остывать от мыслей: «А вот это можно было бы сделать иначе, красивее, надёжнее»…
И тут произошло одно очень интересное событие, о настоящей подоплёке которого я узнал только через несколько лет. Вызывает меня технический директор в кабинет. Захожу, а там всё наше начальство. К нам едет губернатор. Надо показать, как у нас автоматизировано всё и вся! Надо что-то аховое сделать. Что тебе надо для этого?
А, так как голова всё равно продолжала думать немного наперёд даже после сдачи проекта, то я попросил нормальный комп, монитор, мышь и месяц.
— Не, — сказали начальники. — Месяц это дофига! Давай за две недели!
И работа снова началась!
Я придумал и реализовал в коде интерфейс управления и отображения данных. Прикрутил сохранение данных на винчестере после каждого изменения. Добавил отображение всех ситуаций на подстанциях в виде замещающихся строк (потом покажу, не знаю, как это описать коротко). Показал получившееся руководству. Те заплясали.
— А можно прикрутить мышку? А то как-то кнопки на клавиатуре учить лень… — заявили начальники.
И снова я засел за работу. И получил от мелкософта под дых! Дело в том, что к компилирующему QuickBasic не было нормальной библиотеки работы с мышкой. Она то не инициализировалась, или отваливалась в процессе работы. Тогда я за ночь переписал код под интерпретирующую версию компилятора. Там были какие-то отличия, но я уже не помню. Но зато мышь работала нормально!
Снова переписал интерфейс программы. И вот что получилось: