8-900-374-94-44
[email protected]
Slide Image
Меню

Часы на микроконтроллере attiny2313 – Простые часы на микроконтроллере Attiny2313. Схема и описание

ЧАСЫ НА ATTINY

   Представляю вашему вниманию очень простые часы на МК Attiny2313. Особо в них в тот момент не нуждался, но руки чесались что нибудь сделать на микроконтроллере, в плане освоения его работы. Итак, меньше слов — больше дела. Схемотехника часов проста как валенок, смотрим принципиальную схему (а если надо её увеличить, чтоб получше разглядеть — кликаем):


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


   Теперь нужно прошить наш МК, я делал это в CodeVisionAVR. Всё необходимое, в т.ч. и печатная плата — в архиве. Прошиваем, фьюзы прописываем вот таким образом:


   Для удобства работы, приобрёл семисегментный четырёхразрядный индикатор CC56-12YWA.


   Сразу оговорюсь, что для экспериментов купил индикаторы красного, зелёного и оранжевого цвета. Красный выигрывает по яркости, зато оранжевый смотрится просто замечательно!


   Ну что, собрали и проверили? Всё работает? Отлично. Теперь встаёт вопрос о блоке питания. Порылся в закромах, нашёл небольшой тороидальный трансформатор, по внешнему виду ватт на 15. Вроде бы сначала вопрос показался решённым, но замеряя напряжение во вторичке, вольтметр выдал мне 12,7 вольт. Многовато для схемы, стабилизатор греться будет, а значит радиатор ставить придётся… В общем не обрадовала меня эта преспектива. Вскрывать трансформатор и сматывать провод тоже не стал. Торик маленький, аккуратненький, пригодится ещё. Да и вдруг после этого жужжать начнёт. Сидя в раздумьях и крутя в руках трансформатор, у меня начал жаловаться телефон, мол разряжусь я скоро, подпитаться бы… и в этот момент вспомнил, что где-то в своих коробках видел ненужный зарядник от старой мобилы NOKIA. 


   Порылся, оказалось память меня не обманула, и он действительно лежал там. Смотрю параметры на выходе: 5 V, 350mA. Вполне нормально для питания электронных часов, подумал я, и начал его ковырять.

   Вскрыл, включил, проверил — на выходе оказалось 5,07 вольт.

   Теперь собираем всё это во что-нибудь подходящее по размерам, долго с корпусом не мучился, на глаза попалась пластмассовая мыльница — её и приспособил, правда получилось не совсем аккуратно, но зато работает, как часы 🙂 Удачи в сборке, с вами был Fenix.

   Форум по микроконтроллерам

   Обсудить статью ЧАСЫ НА ATTINY




radioskot.ru

Часы за два дня на attiny2313 и ds1307 / Habr

Мотив

Начну с того, что каждый человек живёт во времени, которое, к огромному сожалению, не возможно остановить. И раз мы живём в этом мире, то давайте следить за временем и не упускать ни минуты, тратя её впустую. Для этого я и сделал это чудесное устройство, по имени часы.


Начнём!

На улице встало солнце, я нарисовал плату и почесал на ксерокс, дабы напечатать плату

Дальше те, кто знают как изготавливаются платы поймут, что я перевёл рисунок утюгом на текстолит, протравил, залудил и т.д., а те, кто не в курсе — почитайте в интернете про изготовление плат методом

ЛУТ — (Лазерно-утюжная технология).
результат я заснять забыл, но думаю, что качество будет видно и на готовой плате:

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

  • AtTiny2313 — 8ми битный микроконтроллер
  • ds1307 — микросхема-счётчик с неплохой точностью
  • часовой кварц на 32.768кГц
  • 2 резистора на 10 КОм
  • 7 резисторов на 10 Ом
  • 1 резистор на 5.2 КОм
  • 4 резистора на 1 КОм
  • 4 транзистора КТ315 (их современные братья)
  • буззер на 5 вольт
  • 2 тактовые кнопки (угловой монтаж)
  • 4 индикатора (10011-BSR) общий анод
  • тантал на 47 микрофарад
  • и гнездо питания и угловым креплением (диаметр отверстия — 5.1мм, диаметр центр. контакта — 1.5мм)

И пускай вас не смущает длина этого списка, ведь мы собираем устройство на долгие года, и оно должно быть собрано на должном уровне!
Кто желает посмотреть на плату с другой стороны, вот фото:

Программа

Как и все устройства, часы нуждаются в программе. В данном случае программа написана на языке BASIC в BASCOM AVR. Этот язык очень удобный для программирования, так как код понятный, эффективный и занимает не много места на микроконтроллере. Писать программу с ноля я не стал, а взял исходник одной статьи сайта паяльник. Кто интересуется — найдёт, я же просто оставлю доработанный мною код тут:
$regfile = "attiny2313.dat"
$crystal = 8000000

Dim Count As Byte
Dim Number(4) As Integer
Dim Pointmem As Byte
Dim Point As Bit
Dim Mine As Byte
Dim Hour As Byte
Dim Seco As Byte
Config Porta.1 = Output
Porta.1 = 1
Waitms 10
Porta.1 = 0
Waitms 70
Porta.1 = 1
Waitms 10
Porta.1 = 0
Config Portb = Output
Config Porta.0 = Output
Config Portd.2 = Output
Config Portd.3 = Output
Config Portd.6 = Output
Config Sda = Portd.5
Config Scl = Portd.4
Config Pind.0 = Input
Portd.0 = 1
Config Pind.1 = Input
Portd.1 = 1
Config Timer1 = Timer , Prescale = 64
On Timer1 Awake:
Config Timer0 = Timer , Prescale = 64
On Ovf0 Refresh
Dig1 Alias Porta.0 : Dig2 Alias Portd.2 : Dig3 Alias Portd.3 : Dig4 Alias Portd.6
Enable Interrupts
Enable Ovf0
Enable Timer1
Start Timer1

Hour = 0
Mine = 0

If Pind.1 = 0 And Pind.0 = 0 Then
Porta.1 = 1
Waitms 100
Porta.1 = 0
Hour = 0
Mine = 0
Seco = 1

Seco = Makebcd(seco)
I2cstart
I2cwbyte &HD0
I2cwbyte 0
I2cwbyte Seco
I2cstop

Mine = Makebcd(mine)
I2cstart
I2cwbyte &HD0
I2cwbyte 1
I2cwbyte Mine
I2cstop

Hour = Makebcd(hour)
I2cstart
I2cwbyte &HD0
I2cwbyte 2
I2cwbyte Hour
I2cstop
Waitms 1000
Porta.1 = 1
Waitms 10
Porta.1 = 0
End If

Do
I2cstart
I2cwbyte &HD0
I2cwbyte &H00
I2cstart
I2cwbyte &HD1
I2crbyte Seco , Ack
I2crbyte Mine , Ack
I2crbyte Hour , Nack
I2cstop
Seco = Makedec(seco)
Mine = Makedec(mine)
Hour = Makedec(hour)

If Seco = 80 Then
Seco = 10
Seco = Makebcd(seco)
I2cstart
I2cwbyte &HD0
I2cwbyte 0
I2cwbyte Seco
I2cstop
End If

If Hour > 9 Then
Number(1) = Hour / 10
Number(1) = Abs(number(1))
Else
Number(1) = 20
End If

Number(2) = Hour Mod 10

If Mine > 9 Then
Number(3) = Mine / 10
Number(3) = Abs(number(3))
Else
Number(3) = 0
End If

Number(4) = Mine Mod 10

If Pind.1 = 0 Then
Porta.1 = 1
Waitms 10
Porta.1 = 0
If Mine = 59 Then
Mine = 0
Else
Incr Mine
End If

Mine = Makebcd(mine)
I2cstart
I2cwbyte &HD0
I2cwbyte 1
I2cwbyte Mine
I2cstop
Else

If Pind.0 = 0 Then
Porta.1 = 1
Waitms 10
Porta.1 = 0
If Hour = 23 Then
Hour = 0
Else
Incr Hour
End If
Hour = Makebcd(hour)
I2cstart
I2cwbyte &HD0
I2cwbyte 2
I2cwbyte Hour
I2cstop
End If
End If

Waitms 250
Loop

Awake:
If Point = 1 Then
Porta.1 = 1
Waitus 10
Porta.1 = 0
End If
Toggle Point
Return

Refresh:
Reset Dig1 : Reset Dig2 : Reset Dig3 : Reset Dig4
Incr Count : If Count > 4 Then Count = 1
If Count = 2 And Point = 1 Then
Pointmem = Number(2) + 10
Portb = Lookup(pointmem , Digits)
Else
Portb = Lookup(number(count) , Digits)
End If
Select Case Count
Case 1 : Set Dig1
Case 2 : Set Dig2
Case 3 : Set Dig3
Case 4 : Set Dig4
End Select
Return

Digits:

Data &B00101000 , &B01111011 , &B00110100 , &B00110010 , &B01100011
Data &B10100010 , &B10100000 , &B00101011 , &B00100000 , &B00100010
Data &B00001000 , &B01011011 , &B00010100 , &B00010010 , &B01000011
Data &B10000010 , &B10000000 , &B00001011 , &B00000000 , &B00000010
Data &B11111111

Прошиваем почти 2 килобайта кода в мк и наблюдаем как только-что ожившее устройство начало служить человеку.

Чесно сказать, я испытываю невероятное удовольствие от того, что могу создать нечто такое, что для многих далёкое и не понятное)
Так выглядит устройство без корпуса, корпус буду делать после написания статьи:

И так, часы готовы, а как они работают? Это я демонстрирую в первой половине этого видео (не прошу подписки или чего-то ещё, просто материал)

Заключение

Таким образом, за 2 дня я сделал устройство, которое покажет мне, сколько мне осталось заниматься одним делом и переходить к другому, когда пора идти, или начать что-то важное.
Ну а на этом всё, спасибо тем, кто дочитал до конца, успехов вам в ваших проектах, и как говорится: «треска вам, 47, и до встречи на других частотах! QRZ..»

habr.com

РадиоКот :: Простые часы на микроконтроллере.

РадиоКот >Схемы >Цифровые устройства >Бытовая техника >

Простые часы на микроконтроллере.

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

В качестве индикатора был использован 7-сегментный 4-х разрядный индикатор с общим катодом и объединенными одноименными сегментами. Почему объединенными? Да, просто на плате меньше дорожек и перемычек и все намного компактнее при использовании динамической индикации. О которой, кстати, можно почитать тут.
И вот что получилось на одностороннем стеклотекстолите размерами 60х40 мм:

Кнопкой S2 устанавливают минуты, а кнопкой S3 — часы. Я еще сделал кнопку на сброс (S1), которая позволяет установить время на полночь, иногда бывает полезно, хотя ее можно не устанавливать. Точка, разделяющая часы и минуты, моргает с частотой 1,25 Гц, то есть 0,4 секунды горит, 0,4 сек. нет.

Блок питания от старого принтера Canon он дает 5В и 24В, нагружаю только линию 5В.

Файлы:
Печатная плата в формате SL 4.0
Прошивка с исходником

Вопросы, как всегда в Форум.


Как вам эта статья?

Заработало ли это устройство у вас?


Эти статьи вам тоже могут пригодиться:

www.radiokot.ru

Часы за два дня на attiny2313 и ds1307

Мотив

Начну с того, что каждый человек живёт во времени, которое, к огромному сожалению, не возможно остановить. И раз мы живём в этом мире, то давайте следить за временем и не упускать ни минуты, тратя её впустую. Для этого я и сделал это чудесное устройство, по имени часы.

Начнём!

На улице встало солнце, я нарисовал плату и почесал на ксерокс, дабы напечатать плату

Дальше те, кто знают как изготавливаются платы поймут, что я перевёл рисунок утюгом на текстолит, протравил, залудил и т.д., а те, кто не в курсе — почитайте в интернете про изготовление плат методом ЛУТ — (Лазерно-утюжная технология).
результат я заснять забыл, но думаю, что качество будет видно и на готовой плате:

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

  • AtTiny2313 — 8ми битный микроконтроллер
  • ds1307 — микросхема-счётчик с неплохой точностью
  • часовой кварц на 32.768кГц
  • 2 резистора на 10 КОм
  • 7 резисторов на 10 Ом
  • 1 резистор на 5.2 КОм
  • 4 резистора на 1 КОм
  • 4 транзистора КТ315 (их современные братья)
  • буззер на 5 вольт
  • 2 тактовые кнопки (угловой монтаж)
  • 4 индикатора (10011-BSR) общий анод
  • тантал на 47 микрофарад
  • и гнездо питания и угловым креплением (диаметр отверстия — 5.1мм, диаметр центр. контакта — 1.5мм)

И пускай вас не смущает длина этого списка, ведь мы собираем устройство на долгие года, и оно должно быть собрано на должном уровне!
Кто желает посмотреть на плату с другой стороны, вот фото:

Программа

Как и все устройства, часы нуждаются в программе. В данном случае программа написана на языке BASIC в BASCOM AVR. Этот язык очень удобный для программирования, так как код понятный, эффективный и занимает не много места на микроконтроллере. Писать программу с ноля я не стал, а взял исходник одной статьи сайта паяльник. Кто интересуется — найдёт, я же просто оставлю доработанный мною код тут:

$regfile = "attiny2313.dat"
$crystal = 8000000

Dim Count As Byte
Dim Number(4) As Integer
Dim Pointmem As Byte
Dim Point As Bit
Dim Mine As Byte
Dim Hour As Byte
Dim Seco As Byte
Config Porta.1 = Output
Porta.1 = 1
Waitms 10
Porta.1 = 0
Waitms 70
Porta.1 = 1
Waitms 10
Porta.1 = 0
Config Portb = Output
Config Porta.0 = Output
Config Portd.2 = Output
Config Portd.3 = Output
Config Portd.6 = Output
Config Sda = Portd.5
Config Scl = Portd.4
Config Pind.0 = Input
Portd.0 = 1
Config Pind.1 = Input
Portd.1 = 1
Config Timer1 = Timer , Prescale = 64
On Timer1 Awake:
Config Timer0 = Timer , Prescale = 64
On Ovf0 Refresh
Dig1 Alias Porta.0 : Dig2 Alias Portd.2 : Dig3 Alias Portd.3 : Dig4 Alias Portd.6
Enable Interrupts
Enable Ovf0
Enable Timer1
Start Timer1

Hour = 0
Mine = 0

If Pind.1 = 0 And Pind.0 = 0 Then
Porta.1 = 1
Waitms 100
Porta.1 = 0
Hour = 0
Mine = 0
Seco = 1

Seco = Makebcd(seco)
I2cstart
I2cwbyte &HD0
I2cwbyte 0
I2cwbyte Seco
I2cstop

Mine = Makebcd(mine)
I2cstart
I2cwbyte &HD0
I2cwbyte 1
I2cwbyte Mine
I2cstop

Hour = Makebcd(hour)
I2cstart
I2cwbyte &HD0
I2cwbyte 2
I2cwbyte Hour
I2cstop
Waitms 1000
Porta.1 = 1
Waitms 10
Porta.1 = 0
End If

Do
I2cstart
I2cwbyte &HD0
I2cwbyte &H00
I2cstart
I2cwbyte &HD1
I2crbyte Seco , Ack
I2crbyte Mine , Ack
I2crbyte Hour , Nack
I2cstop
Seco = Makedec(seco)
Mine = Makedec(mine)
Hour = Makedec(hour)

If Seco = 80 Then
Seco = 10
Seco = Makebcd(seco)
I2cstart
I2cwbyte &HD0
I2cwbyte 0
I2cwbyte Seco
I2cstop
End If

If Hour > 9 Then
Number(1) = Hour / 10
Number(1) = Abs(number(1))
Else
Number(1) = 20
End If

Number(2) = Hour Mod 10

If Mine > 9 Then
Number(3) = Mine / 10
Number(3) = Abs(number(3))
Else
Number(3) = 0
End If

Number(4) = Mine Mod 10

If Pind.1 = 0 Then
Porta.1 = 1
Waitms 10
Porta.1 = 0
If Mine = 59 Then
Mine = 0
Else
Incr Mine
End If

Mine = Makebcd(mine)
I2cstart
I2cwbyte &HD0
I2cwbyte 1
I2cwbyte Mine
I2cstop
Else

If Pind.0 = 0 Then
Porta.1 = 1
Waitms 10
Porta.1 = 0
If Hour = 23 Then
Hour = 0
Else
Incr Hour
End If
Hour = Makebcd(hour)
I2cstart
I2cwbyte &HD0
I2cwbyte 2
I2cwbyte Hour
I2cstop
End If
End If

Waitms 250
Loop

Awake:
If Point = 1 Then
Porta.1 = 1
Waitus 10
Porta.1 = 0
End If
Toggle Point
Return

Refresh:
Reset Dig1 : Reset Dig2 : Reset Dig3 : Reset Dig4
Incr Count : If Count > 4 Then Count = 1
If Count = 2 And Point = 1 Then
Pointmem = Number(2) + 10
Portb = Lookup(pointmem , Digits)
Else
Portb = Lookup(number(count) , Digits)
End If
Select Case Count
Case 1 : Set Dig1
Case 2 : Set Dig2
Case 3 : Set Dig3
Case 4 : Set Dig4
End Select
Return

Digits:

Data &B00101000 , &B01111011 , &B00110100 , &B00110010 , &B01100011
Data &B10100010 , &B10100000 , &B00101011 , &B00100000 , &B00100010
Data &B00001000 , &B01011011 , &B00010100 , &B00010010 , &B01000011
Data &B10000010 , &B10000000 , &B00001011 , &B00000000 , &B00000010
Data &B11111111

Прошиваем почти 2 килобайта кода в мк и наблюдаем как только-что ожившее устройство начало служить человеку.
Чесно сказать, я испытываю невероятное удовольствие от того, что могу создать нечто такое, что для многих далёкое и не понятное)
Так выглядит устройство без корпуса, корпус буду делать после написания статьи:

И так, часы готовы, а как они работают? Это я демонстрирую в первой половине этого видео (не прошу подписки или чего-то ещё, просто материал)

Заключение

Таким образом, за 2 дня я сделал устройство, которое покажет мне, сколько мне осталось заниматься одним делом и переходить к другому, когда пора идти, или начать что-то важное.
Ну а на этом всё, спасибо тем, кто дочитал до конца, успехов вам в ваших проектах, и как говорится: «треска вам, 47, и до встречи на других частотах! QRZ..»

Автор: TehnoPingvin

Источник

www.pvsm.ru

Идеальные часы. LED часы на ATtiny2313 и DS1307

Протые часики с секундами на 7ми сегментных индикаторах с календарём и термометром, + 6 эффектов индикации.

Мой НОВОГОДНИЙ ПОДАРОК.
ВСЕХ С НОВЫМ 2014м ГОДОМ.

Это простеникие часики — термометр на семисегментных светодиодных матрицах с общим анодом.

Что они могут:

Дата: (Дата — Месяц — День недели)

Температура дома:

А это датчик на улицу выкинул:

6 режимов индикации:

Автопоказ даты и температуры каждые 35 секунд.

Описание кнопок:
Кнопка «-» в режиме установки часов и кнопка перебора режимов индикации в рабочем режиме часов.
Кнопка «ОК» — для входа в режим установки часов.
Кнопка «+» в режиме установки часов и кнопка показания даты и температуры в рабочем режиме часов.

Перебор режимов индикации:
Жмём кнопку «-» — перебор режимов индикации.

Появится:

Первый режим индикации — цифры плавно гаснут и плавно появляются новые.

Жмём ещё раз
Появится:

Второй режим индикации — часики работают как обычно.

И ещё раз
Появится:

Третий режим индикации — цифры при смене меняются перебором.

Ещё раз нажимаем
Появится:

Четвёртый режим индикации — цифры при смене накладываются друг на друга.

Ещё одно нажатие
Появится:

Пятый автоматический режим индикации — режимы индикации сами меняются каждый час.

И ещё одно нажатие
Появится:

Шестой автоматический режим индикации — режимы индикации сами меняются каждые сутки в 00:00.

Включение / выключение автоматического показа даты и температуры каждые 35 секунд.
Жмём и держим в течении 3 секунд кнопку «+» — показ даты/температуры.
Если появится:

Автопоказ выключен.

Автопоказ включен.

Установка времени:
Для установки времени жмём и держим кнопку «ОК» в течении 3х секунд во время показа времени.
Часы переходят в режим установки времени и начинают мигать часы.
Кнопками «-» и «+» устанавливаем час и нажимаем кнопку «ОК» и переходим к установке минут.
И так далее в последовательности час > минуты > число > месяц > день недели.
При долгом удержании кнопок «-» или «+» цифры автоматически сами убывают или прибавляются.

Часы собраны на минимуме микросхем:
PIC16F628 — контроллер часов.
DS1307 — сами часики.
BU2090 — Дешифратор катодов.
DS18B20 — термодатчик.
DS32KHz — микросхема генератора для точности хода.
Если точность не нужна и вы просто подберёте точный кварц на 32.768
то DS32KHz можно и не ставить.

Схема стандартная.

Схема стандартная №2.

Она нужна если вы будете использовать многосветодиодные индикаторы.
Типа таких:
(фотка)
Для которых 5ти вольт анодного напряжения маловато будет.
Для переключения контроллера на эту схему нажимаем и держим кнопку «-» и включаем часы.
Для обратного перевода делаем тоже самое.
Это команда инвертирует выходные импульсы с контроллера для управления анодными ключами.

Регулируя питание в такой схеме можно менять яркость часиков.
Схемка регулятора яркости:

Настройка катодов, то есть назначение сегментов.
В часах можно использовать любые индикаторы.
Для платы что входит в проект я использовал три светодиодные сборки от модулей стиральных машин DE07-00011A.

Прошивка контроллера рассчитана на использование моей платы для моих индикаторов,
если будете использовать другие или рисовать свою плату
нужно после сборки платы и запуска часов переназначить подключение сегментов к BU2090.
Т.к. их порядок нарушается — например вместо 0ля или 7ка будет белеберда.

Исключение только для точки, если она есть в индикаторе.
Точки надо подключать только к 15му выводу BU2090.

Назначение сегментов:

Сам процесс:
Жмём и держим кнопку «+» и включаем часы — появится 8ка — показывая что все сегменты подключены.

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

Надо назначить сегменты от A до G — согласно рисунку ниже:

При зажигании нужных сегментов нажимаем кнопку «+»
и так последовательно от появления сегмента A до G — согласно рисунку.

Затем загорается 2й разряд — это разрешение мигания секундных индикаторов.
На тот случай если вы секундные семисегментники расположите по центру между часами и минутами вместо секундных точек.
Тут так же
Если нажать кнопку «+» на 0 то мигание отключается.

Если на 1 то включается.

После чего часы переходят в рабочий режим.

Платы нарисованы с помощью программы Sprint Layout 5.0
На плате «LED clk» кнопки расположены сверху.
На плате «LED clk_v2» — сбоку.
Плата «LED clk_v3» для 2го варианта схемы — для больших индикаторов.

Сдесь фотка верхней части платы «LED clk_v2» с подписанными элементами для большей наглядности:

А тут со стороны монтажа:

Сдесь фотка верхней части платы «LED clk_v3» с подписанными элементами для большей наглядности:

Тут со стороны монтажа:

Прошивка контроллера Clck_6x14_v7.hex показывает день недели буквами — пН, оР, сР, ЧР, пА, сb, ос.

Почему день недели, а не год? — (Вы меня можете спросить)
Да потому что все и так знают какой сейчас год, а вот с днём недели иногда проблемы возникают.

Прошивка Clck_6x14_v7с.hex имеет коррекцию времени.
В период установки времени после установки дня недели
загораются часы и секунды.

В часах кнопками «-» и «+» устанавливаем время в секундах
на сколько нужно подводить время — диапазон от -4 до +4 секунд.
Затем нажав кнопку «OK» переходим к установке дней.
Если поставить 00, то коррекция будет происходить каждый день в 03:00.
Если 01, то через день.
Если 02, то через два дня.
И т.д. до 31го дня — то есть через 31 день.
Коррекция потребовала места в контроллере поэтому пришлось пожертвовать назначением сегментов.
Но их можно назначить сначала зашив в контроллер прошивку Clck_6x14_v7.hex,
назначить на ней сегменты и мигание секунд,
а потом не трогая EEPROM контроллера зашить прошивку с коррекцией.
Все настройки сохранятся.

Прошивка Clck_6x14_v7сb.hex имеет ещё и будильник помимо коррекции времени.
Чтобы поставить будильник жмём и держим кнопку «OK» в течении 3х секунд.
Когда на дисплее появится время ранее установленного будильника, а секундах появится b1 отпускаем кнопку.

Если кнопку продолжать держать, то мы войдём в установку времени.
Выставляем час и миеуты.
Если поставить 00:00 то будильник отключается.

bumotors.ru

Экономичный кухонный таймер на ATtiny2313

Дата публикации: .

Это мой третий проект на AVR: кухонный таймер. Аппаратная часть основана на микроконтроллере Atmel ATtiny2313, питание от батареи 3.6V, для настройки используется вращающийся регулятор(энкодер) с кнопкой, три семисегментных светодиодных индикатора и пьезозуммер для сигнализации. Программное обеспечение использует некоторые более сложные функции контроллера AVR: прерывание таймера и глубокий режим пониженного энергопотребления. Корпус выполнен из дерева.

Схема очень проста. Светодиодные индикаторы в таймере имеют общий анод и с десятичной точкой расположенной слева.  Сегменты подключаются через резисторы 200 Ом к выводам контроллера, а общие аноды через транзисторы. Значения резисторов R9-R11, возможно, потребуется корректировать для нормальной яркости дисплея, основанной на реально имеющихся образцах индикаторов и напряжения питания. Для точности отсчета времени в устройстве можно использовать внешний кварц на частоту 1МГц, который подключается к выводам XTAL1-2, но перед этим выставить соответствующую конфигурацию фьюз-битов.

ATtiny2313 припаян непосредственно на печатную плату поэтому я включил 6-контактный разъем для программирования. Зуммер я использовал «CPM 121», со встроенным генератором, который работает от 3-15V. Пъезоизлучатель потребляет примерно 3,5 мА ,что лежит в пределах нагрузочной способности порта микроконтроллера.

Извлеките батарею перед подачей питания для программирование контроллера!

После включения питания начинается тест индикаторов и зуммера. Нажатие кнопки энкодера переводит прибор в спящий режим. При повторном нажатии кнопки таймер пробуждается и переходит в режим установки времени. Поворот налево увеличивает время, поворот направо уменьшает время. Максимальное время около 99 минут + 59 секунд. Минимальное время составляет 5 секунд. Установка времени меньше 0 секунд выключает таймер. Нажатие на кнопку запускает таймер. Первые и последние 5 секунд отсчета таймер мигая индикаторами показывает оставшееся время. По окончании отсчета включается зуммер определенное количество раз (чем больше установленное время, тем чаще) и засыпает. Нажатие кнопки во время работы таймера, показывает оставшееся время в течение 5 секунд.

Для сокращения размеров таймера я использовал одну литиевую батарею напряжением 3.6V размера АА. Корпус состоит из передней панели сделанной из 4 мм фанеры, стенки вырезаны из одной части деревянного бруска. Чтобы сделать точные вырезы для ручки энкодера, индикаторов и зуммера был сделан трафарет на бумаге.

Описание прошивок:

econom_timer_at tiny2313 — стандартная прошивка для трехразрядного индикатора с ОА и точками слева от цифр;

econom_timer_at tiny2313_FYT-3631BG-11 — для трехразрядного индикатора с ОА и точками справа от цифр;

economic_timer_ attiny2313_up10to1min — для трехразрядного индикатора с ОА и точками справа от цифр, при настройке времени свыше 10 минут, разрядность шага энкодера 1 минута;

econom_timer_attiny2313_E30561_OK+OUT — прошивка под индикатор E30561_OK, на выходе(PA0) на время отсчета лог. единица.

Автор: KIO

Обсуждение статьи на форуме.


Архив для статьи «Экономичный кухонный таймер на Attiny2313»
Описание: Файл прошивки микроконтроллера, макет печатной платы Eagle 5
Размер файла: 44.24 KB Количество загрузок: 2 767 Скачать

radioparty.ru

Наручные часы на ATmega328 и OLED дисплее

Дата публикации: .

Главным стимулом создания этого проекта был вопрос — как много я смог бы втиснуть с точки зрения аппаратного и программного обеспечения в наручные часы, устройство которое не больше по размерам, чем его дисплей. OLED -дисплей был выбран из-за того, что его толщина только 1,5 mm, ему не требуется подсветка (каждый пиксель производит свой собственный свет), но главным образом потому, что он выглядит очень круто.

Первоначально для часов планировалось использовать дисплей 0,96″, но это оказалось слишком сложно, чтобы воплотить в нем все свои идеи. Решение увеличить размер экрана до 1,3″ было правильным.

Аппаратная реализация

В аппаратной части часы содержат микроконтроллер Atmel ATmega328P, 2,5 V регулятор напряжения Torex, часы реального времени DS3231M(RTC), 1.3″ 128×64 монохромный OLED дисплей, 2 светодиода (красный и зеленый), зуммер, 3-х позиционный переключатель для навигации, питание от 150 mAh LiPo аккумулятора, который можно заряжать через USB и 2-х печатных плат(хотя одна используется только для монтажа OLED дисплея).

Принципиальная схема часов

ATmega328P использует свой внутренний генератор 8 МГц и работает от 2,5 V линейного регулятора. Ее ток потребления составляет около 1,5 mА при активной и 100 nА в режиме сна.

DS3231M является отличным прибором, который выпускается в небольшом 8-ми контактном корпусе и включает в себя встроенную температурную компенсацию MEMS резонаторов с точностью ± 5 ppm (± 2 минуты 40 секунд в год). В обвязке только фильтрующий конденсатор и несколько дополнительных подтягивающих резисторов. Питание RTC подключено не к выводу VCC, а к выводу Vbat, для того чтобы уменьшить ток потребления с 100 uА до 2,5uA. К сожалению, этот чип очень трудно заполучить по разумной цене, если вы не в США. Я получил необходимое количество DS3231M в качестве образцов.

Для зарядки аккумулятора используется Microchip MCP73832 вместе с некоторыми дополнительными компонентами для распределения нагрузки, где батарея может заряжатся без вмешательства в остальную часть часов.

Вы могли заметить, что на схеме светодиоды напрямую связаны с микроконтроллером без резисторов. Внутренние MOSFET микроконтроллера имеют сопротивление около 40 Omh, напряжение с 2,5 V падает до 2 V, что достаточно для питания светодиодов. Мне хотелось использовать синий светодиод, но у него большое падение напряжения, что потребовало бы увеличить напряжение питания до 3 V и ставить некоторые дополнительные резисторы и MOSFET.

Поскольку микроконтроллер работает от 2,5 V чтобы измерить напряжение батареи нужно понизить этот сигнал перед тем как подключить его к АЦП. Для этого используется делитель напряжения. Однако, делитель напряжения подключен параллельно батарее и через него будет постоянно протекать ток 350 uA, а это огромная трата энергии. В этой версии проекта добавлен P-MOSFET, чтобы делитель был включен только при необходимости.

2,5 V регулятор используется марки Torex XC6206, в первую очередь я выбрал его из-за своего крошечного ток покоя, всего 1 uA. Почему выбран линейный регулятор, а не импульсный? КПД у импульсного стабилизатора не менее 80% при нагрузке 2 mА, но с нагрузками 100 uА его эффективность падает до менее чем 50%. Так как потребление устройства в спящем режиме составляет 2-3 uA, импульсный стабилизатор показал себя невероятно плохо по сравнению с линейным регулятором. Эффективность 2,5 V линейного регулятора составляет до 60% с 4,2 V на  входе и до 83% с 3 V на входе.

Нижняя сторона платы

Верхняя сторона платы под дисплеем

Программное обеспечение

Итак, мы имеем в нашем распоряжении хороший OLED-дисплей и 32 КB флеш памяти микроконтроллера, конечно же, мы можем иметь больше, чем просто время и дату?

Почти все анимировано

Много времени было потрачено на оптимизацию кода визуализации, который включает в себя копирование растровых изображений с флэш в кадровый буфер оперативной памяти и отправки кадра по SPI на OLED. Конечный результат был способен поддерживать 100 FPS почти во всех областях с частотой генератора микроконтроллера 8 МГц. Однако, поскольку кадр анимации длится определенное время, чтобы сократить расход энергии, частота кадров ограничена до 60 FPS.

Некоторые из основных анимированных кадров:

— CRT анимация при входе и выходе из спящего режима (по аналогии с анимацией Android CRT).
— Цифры главных часов имеют эффект Ticker.
— Меню имеет анимированные прокрутки влево/вправо, при входе в текущее меню, при навигации по меню выше или ниже.

Будильники

— Активация до 10 будильников.
— Количество будильников ограничено только количеством доступных EEPROM и RAM.
— У каждого будильника настраиваются часы, минуты и в какие дни недели он должен быть активным.

Игры

Побег

Автомобиль Dodge

Приложения

Фонарик. Включаетвсе пикселиOLEDи

светодиоды, а также имеетрежим

стробоскопа

 

 

Стопкадр

Некоторые возможности:

— 3 канала регулировки громкости для:

Основного режима;
Будильника;
Почасового сигнала.

— Режим ожидания
— Регулировка яркости дисплея
— Анимация

Вы же не собираетесь, от этого отказываться, или может g shock купить спб ?

Энергосбережение

В активном режиме микроконтроллер пытается уйти в режим сна при каждой возможности. В режиме сна контроллер просыпается на миллисекунду чтобы посмотреть нуждается устройство в обновлении, если нет, то он возвращается в режим сна, это обычно занимает менее 100 us, если дисплей не нуждается в обновлении. В этом режиме ток потребления может быть примерно от 0,8 мА до 2 мА, в зависимости от того, как долго высвечивается кадр.

В режиме сна микроконтроллер отключает OLED дисплей и уходит в спящий режим, где его разбудит только нажатие кнопки, сигнал от RTC или при подключении к USB. В этом состоянии микроконтроллер потребляет ничтожные 100 nА.

В спящем режиме общий ток потребления часов 6 uA. В активном режиме ток может варьироваться от 2 мА до более чем 70 мА, средний ток потребления 10 mA.

Общее потребление тока, емкость аккумулятора: 150mAh

Минимальный
(В режиме сна)
Нормальный
(Индикация главных часов)
Высокий
(Фонарик)
6uA
2.85 years
10mA
15 hours
64mA
2 hours, 20 minutes

Если часы находятся в активном режиме в среднем 1 минуту в день (с 5-секундный тайм-аутом сна и проверкой времени 12 раз в день), то они должны работать около 1 года 4 месяцев на одной зарядке. (30 дней, если часы просыпаются на 1 минуту в час).

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

Компонент Потребление тока
ATmega328P (сон/активный) 100nA / 1.5mA
OLED (сон/активный) 500nA / 8.5mA
DS3231M RTC 2.5uA
Диод Шоттки (D1) (ток обратной утечки) 1uA
Регулятор (ток покоя) 1uA
Другие (MOSFET и конденсаторы и т.п. утечки) 1uA
Всего (сон/активный) 6.1uA / 10mA

Дальнейшее совершенствование проекта

— Программирование через USB.
На данный момент используются 4 провода для SPI программирования, при частом подключении к разъему программирования, боюсь что он расшатается.

— Добавить другой метод измерения заряда батареи.
На данный момент уровень заряда батареи определяется ее напряжением, это не очень точный метод получения оставшегося заряда батареи.

— Поддержка различных микроконтроллеров.
Текущая прошивка использует примерно 28 KB из 32 KB свободного места памяти  ATmega328P, при использовании других микроконтроллеров с большим объемом памяти, необходимо будет добавить больше возможностей, например калькулятор. Тем не менее, ATmega328P имеет самое большое количество памяти для AVR в 32 контактных TQFP корпусах, чтобы иметь больше памяти я должен был бы использовать 44 контактный AVR. ATmega1284 выглядит очень интересно.

— Импульсный стабилизатор, регулятор подкачки заряда или может быть гибридное решение?
Линейный регулятор который используется в данный момент не является особо эффективным, импульсный регулятор, кажется, не очень хорош при низком токе. Может есть возможность использования регулятора подкачки заряда или гибридное решение — линейным регулятор для неактивного режима и импульсный стабилизатор для активного режима?

Может кто знает?

Фотогалерея проекта

Автор: Zak Kemble


Архив для статьи «Наручные часы на Atmega328 и OLED дисплее»
Описание: Исходный код(Си), файлы прошивки микроконтроллера, схема и макет печатной платы Eagle 6
Размер файла: 279.08 KB Количество загрузок: 3 719 Скачать

radioparty.ru

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *