Часы с большими цифрами

Концепция часов с большими цифрами

Конструктивно девайс будет состоять из двух плат – одна над другой. Первая плата – матрица светодиодов, образующих разряды часов и минут, Вторая – силовая часть (управление светодиодами), логика и питание. Такая конструкция сделает часики более компактным (без корпуса примерно 22см х 9 см, толщиной сантиметра 4-5) + даст возможность прикрутить матрицу к другому проекту, если что то пойдет не так.

Силовая часть будет построена на базе драйвера UL2003 и транзисторных ключах. Логическая - на Atmega8 и DS1307. Питание: 220В - трансформатор; логика 5В (через 7805), силовая часть - 12В (через LM2576ADJ). Отделено будет предусмотрена кроватка для батарейки 3В для автономного питания часов реального времени - DS1307.

Думаю использовать Atmega8 и DS1307 (часики планирую подвесить под потолком, и что бы в случае пропадания электричества каждый раз не лазить за настройкой), однако разводка платы будет предполагать возможность работы девайса и без DS1307 (на первое время, а может и навсегда – уж как получится).

Таким образом, в зависимости от комплектации алгоритм работы программы часов будет следующим:

Atmega8 – счетчик времени по таймеру. Работа в цикле без пауз: опрос клавиатуры, корректировка времени (если необходимо), отображение 4 разрядов и разделителя.

Atmega8 + DS1307. Работа в цикле без пауз: опрос клавиатуры, корректировка времени DS1307 (если необходимо), зачитка времени с DS1307, отображение 4 разрядов и разделителя. Или другой вариант – зачитка с DS1307 по таймеру, остальное в цикле (пока не знаю как лучше).

Сегмент представляет собой 4 красных светодиода, соединенных между собой последовательно. Одна цифра – 7 сегментов с общим анодом. Сегменты не планирую разделять шаблоном «восьмерки», как это сделано в обычных индикаторах.

Силовая часть часов

Силовая часть часов построена на драйвере UL2003 и транзисторных ключах VT1 и VT2.

UL2003 отвечает за управление сегментами индикатора, ключи – за управление разрядами.

Отдельно управляется разделитель часов и минут (сигнал K8).

Управление сегментами, разрядами и разделителем осуществляется от микроконтроллера подачей положительного потенциала (т.е. подачей +5В) на К1-К8, Z1-Z4.

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

В качестве транзистора VT1 (BCP53) можно использовать транзистор BCP52.

Схема силовой части часов с большими цифрами


Печатная плата семисегментного индикатора для часов с большими цифрами

Как я говорил ранее, конструктивно часы будут состоять из двух печатных плат - плата индикатора + логика и силовая часть.

Начнем с разработки и изготовления печатной платы индикатора.

Разработка печатной платы семисегментного индикатора для часов с большими цифрами


Печатная плата семисегментного индикатора для часов с большими цифрами в формате "lay" находится конце статьи, в присоединенных файлах. О технологии изготовления печатных плат методом ЛУТ можно почитать тут.

Если вы сделали все правильно, готовая печатная плата будет выглядеть примерно так.

Готовая печатная плата семисегментного индикатора для часов с большими цифрами


Сборка семисегментного индикатора

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

Межслоевые переходы на плате индикатора


Следующий шаг, собственно говоря, сборка индикатора. Для чего нам понадобится пачка красных (зеленых, белых, синих) светодиодов. Я, например, брал эти.

Подготовка к сборке индикатора


При установке диодов не забываем, что мы делаем индикатор с общим анодом - т.е. "+" диодов должны быть соединены вместе. Общие аноды на печатной плате - это большие фрагменты меди. Обязательно обратите внимание на анод разделительной точки.

Расположение анодов на печатной плате индикатора


В итоге, после 2 часов кропотливой работы должно получиться вот что:

Семисегментный индикатор


Цифровая часть часов

Цифровую часть часов с большими цифрами будем собирать по схеме:

Схема часов с большими цифрами


Схема часов довольно прозрачна, поэтому объяснять как она работает не вижу смысла. Печатную плату в формате *.lay можно скачать в конце статьи. Замечу, что печатная плата в основном разработана под детали для поверхностного монтажа.

Итак, элементная база, которую использовал я:

1. Диодный мост DFA028 (подойдет любой компактный для поверхностного монтажа);
2. Регуляторы напряжения LM2576ADJ в корпусе D2PAK, 78M05 в корпусе HSOP3-P-2.30A;
3. Транзисторные ключи BCP53 (корпус SOT223) и BC847 (корпус SOT23);
4. Микроконтроллер Atmega8 (TQFP);
5. Часы реального времени DS1307 (SO8);
6. Блок питания 14В 1,2А от какого-то старого устройства;
7. Остальные детали - любого типа, подходящие по размерам для установки на печатную плату.

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

Обратите внимание на номиналы сопротивлений R3 и R4 - они должны быть именно такими, какие указаны на схеме - не больше не меньше. Это сделано для того, что бы обеспечить на выходе регулятора напряжения LM2576ADJ ровно 12В. Если все таки не удастся найти такие номиналы резисторов, то значение сопротивления R4 может быть рассчитано по формуле:

R4=R3(12/1.23-1) или R4=8.76R3


Сборка цифровой части. Версия 1, без DS1307

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

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

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

На рисунке показаны контрольные точки, в которых следует проверить напряжение питания. Если напряжение соответствует заявленному, можно приступать к сборке цифровой части часов. Иначе проверяем монтаж и работоспособность элементов блока питания.

Контрольные точки и значения напряжений для блока питания часов


После того, как проверка блока питания выполнена приступаем к сборке цифровой части часов - устанавливаем все остальные элементы на печатную плату. Проверяем на КЗ, особенно в ногах микроконтроллера Atmega и драйвера UL2003.

Монтаж цифровой части часов


Обратите внимание на то, что сборку часов мы выполняем БЕЗ установки часов реального времени DS1307, однако вся обвязка этой микросхемы должна быть выполнена. В будущем, если возникнет необходимость, это сэкономит нам время на доработку часов под вторую версию, там где все таки будут использоваться отдельные, независимые часы реального времени на DS1307.

Предварительная проверка микроконтроллера ATMEGA8

Для того, что бы проверить правильность и работоспособность микроконтроллера нам потребуется:

1. Программатор, например USBASP.
2. Дата-кабель V4 для внутрисхемного программирования микроконтроллера.
3. Программа AVRDUDESHELL.

Подключаем плату часов к дата-кабелю. Дата-кабель подключаем к программатору. Программатор к компьютеру, на котором установлена программа AVRDUDESHELL. Подключать плату часов к питающей сети 220В не следует.

Пытаемся прочитать, например, фьюзы микроконтроллера. Если все ОК - поздравляю. Работу по изготовлению часов с большими цифрами можно считать практически законченной.

Удачное чтение данных с микроконтроллера программой AVRDUDESHELL


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

Сборка цифровой и силовой частей

Конструкция часов разработана с таким расчетом, что плата семисегментного индикатора должна крепиться над платой электроники. Так и поступаем. Соединяем многожильным (13 проводов) шлейфом платы. Длина шлейфа - сантиметров 5-6.

Соединение шлейфом печатных плат


Сами платы соединяем на расстоянии 3 см. В качестве распорок между платами я использовал разрезанный в соответствующий размер фломастер. Была проблема найти достаточно длинные винты М3, поэтому в качестве крепления использовал провод.

Крепление плат


Загрузка программы часов в микроконтроллер

Для загрузки программы нам потребуется программатор USBASP и дата-кабель V4, а так же архив, размещенный в конце статьи.

Часы подключаем к программатору (расстояние в 3 см между платами как раз позволяет это сделать).

Архив распаковываем в любую папку. Архив содержит в себе программу для прошивки микроконтроллеров (программа называется avrdude), поэтому достаточно перейти в папку "prog" и по очереди запустить файлы fuseprog.bat а за тем progprog.bat. Первый настроит фьюзы, второй запишет программу.

И еще, если вы используете программатор отличный от USBASP, вам необходимо скорректировать "батники", указав там свой программатор.

Результат









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

Скачать схему, печатную плату и программу часов с большими цифрами

Atmega. Расчет таймера на 1 сек

Рассмотрим пример настройки прерывания таймера T1 с периодом 1 раз в 1 сек (1 Гц). на микроконтроллере Atmega8. Такая настройка может очень пригодиться при разработке девайсов отсчитывающих реальное время, например часов. Итак:

1. Выбраем и устанавливаем делитель в регистре TCCR1B (биты CS12,CS11,CS10). Делитель частоты следует выбирать таким образом, что бы частота кварца, на которой работает контроллер в Гц деленная на делитель было целым числом. Например для кварца 8мГц (8000000Гц) нужно выбрать делитель TCCR1B равный 256 (установиь биты CS12=1,CS11=0,CS10=0).

2. Делим основную частоту на делитель. Полученное значение нужно будет для корректировки регистра TCNT1 (см. п. 3): 8000000/256=31250.

3. Корректируем регистр TCNT1 для получения прерывания ровно 1 сек. T1 - 16 разрядный таймер - это 65535 тиков. Тогда регистр TCNT1 будет равен 65535-31250=34285

4. Незабываем корретировать TCNT1 в самом прерывании.

Код для WinAvr будет выглядеть следующим образом:

// Инициализация прерывания
void t1_init()
{
   // Настраиваем делитель
   TCCR1B = (1<<CS12)|(0<<CS11)|(0<<CS10);
 
   // Выставляем значение TCNT1   
   // для коррекции счетчика, чтобы время было ровно 1 секунда 
   TCNT1 = 65535-31250;

   // Разрешаем прерывание по переполнению таймера
   TIMSK |= (1<<TOIE1);
 
   // Выставляем бит общего разрешения прерываний
   sei();                
}

// Прерывание
ISR(TIMER1_OVF_vect)
{
   // Выставляем значение TCNT1   
   // для коррекции счетчика, чтобы время было ровно 1 секунда 
   TCNT1 = 65535-31250;

   // Что-то делаем каждую секунду
   // ...
}




Android. Создание обработчика событий OnClick для кнопки в дизайнере

В папке с ресурсами (res/layout) находим описание кнопки и добавляем свойство android:onClick="onButtonClick". Обратите внимание на название обработчика событий - его точное написание потребуется на следующем шаге:

<Button
       android:id="@+id/button1"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:layout_alignLeft="@+id/textView1"
       android:layout_below="@+id/textView1"
       android:layout_marginTop="22dp"
       ...
       android:onClick="onButtonClick"
       ...
       android:text="Button"
/>

2. В соответствующей активности прописываем код обработчика. Важно что бы название обработчика совпадало с названием, которое было введено ранее:

public void onButtonClick(View v)
{
    // Что то делаем при нажатии на кнопку

}

Android. Анимационный GIF в кадры PNG или BMP

При разработке приложений для Android, скорее всего вы столкнетесь с задачей получения отдельных кадров из анимированной GIF-картинки и сохранения их (кадров) в формате PNG или BMP.

Программа AniGIFtoPNG может разобрать анимированный GIF на кадры и сохранить их в отдельные файлы в формате PNG или BMP.

Программа AniGIFtoPNG


Скачать программу AniGIFtoPNG для Windows.

LINUX. Firebird и FlameRobin

Ниже изложена краткая инструкция по настройке Firebird и FlameRobin для локального использования для операционной системы LINUX.

Устанавливаем через Synaptic:

- firebird2.5-classic



- flamerobin



Заходим в "Системные -> Пользователи и группы"
- Нажимаем кнопку "Управление группами"
- Находим группу "firebird"
- Нажимаем "Своства"
- В открывшемся окне ставим галку напротив своего пользователя



Если необходимо настроить FireBird, то под именем root выполняем команду "dpkg-reconfigure firebird2.5-classic".


Теперь можно запустить FlameRobin и попробовать создать локальную базу. Имя пользователя для Firebird указываем как "SYSDBA", пароль "masterkey".



Если при создании базы данных возникает ошибка 902, необходимо проверить настройки доступа ко всей цепочке в пути к базе данных.



Подключаемся и пробуем прочитать системную таблицу.



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


Android. Автоматическое создание классов для SQLite

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

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

Если выбрать признак "одна таблица" в наследник класса SQLiteOpenHelper, помимо механизма создания таблиц, будут включены основные функции для работы с БД (добавление, удаление, редактирование данных и т.п.). Если установить признак "несколько таблиц" - функции для работы с базой данных будут вынесены в отдельный класс, а наследник класса SQLiteOpenHelper будет содержать только процедуры для создания таблиц.

Программа SQLiteCreator для автоматического создания java классов для SQLite


Скачать программу для SQLiteCreator для автоматического создания java классов для SQLite.

Lazarus. Дистрибутивы для моих проектов

Lazarus — свободная среда разработки кроссплатформенного (Windows, Linux) программного обеспечения на языке Object Pascal в Delphi-подобном окружении.


IDE Lazarus


Многолетний опыт разработки программного обеспечения говорит о том, что всегда необходимо хранить проверенные на совместимость дистрибутивы используемых компонент для данной конкретной версии IDE. В первую очередь это относится к свободно распространяемым продуктам, поскольку совместимость от версии к версии может нарушаться, а новый компонент найти уже не представляется возможным. Поэтому я решил собрать все "свои" дистрибутивы, которые 100% работоспособны и проверены на совместимость.

О том, как устанавливать компоненты можно почитать в статье "Lasarus. Установка дополнительных компонент и модулей".

lazarus-1.2.6-fpc-2.6.4-win32.zip - IDE Lazarus. Всегда актуальную версию можно скачать на http://www.lazarus.freepascal.org/
TСomport - компонент Lazarus для работы с COM портом (RS232). На момент написания статьи компонент очень "капризный" для редактирования свойств через "инспектор объектов", поэтому работать со свойствами, да и создавать компонент, лучше в RunTime. Страница проекта.
Synapse - мощная библиотека для работы с TCP/IP протоколом. Есть реализация для работы с COM портом (RS232). Компонент не визуальный, поэтому при установке необходимо добавить компилятору путь для поиска библиотеки.Страница проекта.