Мотив Начну с того, что каждый человек живет во времени, которое, к сожалению, остановить невозможно.
А раз мы живем в этом мире, то давайте следить за временем и не терять ни одной минуты, теряя его впустую.
Для этой цели я сделал это замечательное устройство, названное смотреть .
Давай начнем!
На улице взошло солнце, я нарисовал доску и поцарапал ее на ксероксе, чтобы распечатать доску.
Далее те, кто знает, как делаются платы, поймут, что рисунок я перевел утюгом на текстолит, травил, лудил и т. д., а кто не знает - читайте в Интернете об изготовлении плат методом ЛУТ — (Технология лазерной глажки).
Забыл сфотографировать результат, но думаю, что качество будет видно на готовой плате:
Видны места, которые не были взяты, но ничего страшного не произошло, только полигон отставал.
Далее нужно было спаять компоненты, на чем я не буду особо останавливаться, просто оставлю их список:
- 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. Этот язык очень удобен для программирования, так как код понятен, эффективен и не занимает много места на микроконтроллере.
Программу я не писал с нуля, а взял исходники одной статьи с сайта паяльника.
Кому интересно, он найдется, но я просто оставлю здесь модифицированный мной код:
Прошиваем в микроконтроллер почти 2 килобайта кода и наблюдаем, как вновь возрожденное устройство начало служить человеку.$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 дня я сделал устройство, которое будет показывать мне, сколько времени у меня осталось, чтобы сделать одно дело, и переходить к другому, когда придет время идти или начинать что-то важное.Ну вот и все, спасибо тем, кто дочитал до конца, удачи вам в ваших проектах и как говорится: «трески тебе, 47, и до встречи на других частотах!» КРЗ.
” Теги: #Компьютерное железо #микроконтроллеры #Сделай сам или сделай сам #arduino #сделай сам #часы #часы #быстро и легко
-
Союзы
19 Oct, 24 -
Черная Дыра Рынка В Диапазоне Цен На Сайте?
19 Oct, 24 -
Подарок Админу
19 Oct, 24 -
Полезен Ли Для Вас Хабрапоиск?
19 Oct, 24