Администрация форума не несёт ответственности за достоверность информации и оставляет за собой право редактировать или в особых случаях даже удалять посты без предупреждения. Спасибо за понимание.

Программирование ATMEL в BASCOM.

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Программирование ATMEL в BASCOM. » Световые эффекты » Аналого цифровые светодиодные часы с эффектами


Аналого цифровые светодиодные часы с эффектами

Сообщений 1 страница 12 из 12

1

Кое что новенькое: http://lightportal.at.ua/publ/chasy/cha … /19-1-0-87
http://lightportal.at.ua/2014/Chronos/bl01-s.jpg

+1

2

Нет слов.

0

3

Я так малец и не понял, часы теперь требуют компьютера или нет?

0

4

Часы абсолютно автономные.
Компьютер нужен только для создания новых эффектов, отрисовки диаграммы с показаниями датчиков и если лень устанавливать время с пульта, можно с компа нажатием одной кнопки.
Хотя DS3231 показала себя очень положительно в отличии от DS1307 в плане точности, поэтому практически часы не корректирую.

0

5

Тогда да, "нет слов"! :D

radan написал(а):

Хотя DS3231 показала себя очень положительно в отличии от DS1307 в плане точности, поэтому практически часы не корректирую.


Я обленился, время просто беру с спутника (GPS).

0

6

radan
Не поделитесь куском рабочего кода для работы с DS3231?

0

7

Sergik07 написал(а):

Не поделитесь куском рабочего кода для работы с DS3231?

Код аналогичный 1307.

Код:
'заводим константы на биты чтения и записи ds3231
Const Ds3231w = &HD0                                        'бит записи
Const Ds3231r = &HD1                                        'бит чтения
Const Upradress = &H0E                                      'адрес регистра управления

'Активируем выход часовой микросхемы 1Гц для светодиода и прерывания
I2cstart                                                    'запись байта  в регистр упрaвления
I2cwbyte Ds3231w                                            '&B11010000
I2cwbyte Upradress                                          '&H0E
I2cwbyte &B00100000                                         'start squarewav output 1Hz (низкий уровень в bit3, bit4)
I2cstop


'----------\
' DS3231   |
'          |                       / /
' (1Hz) SQW|-3-------[1kOm]-------|<|-------> +5v
'          |
'----------/

'Читаем время
Gosub Getdatetime

'========== Считывание даты и времени с микросхемы DS3231 ==========
'***************************************************************************************
Getdatetime:
   I2cstart
   I2cwbyte Ds3231w
   I2cwbyte &H00
   'I2cstop
   I2cstart
   I2cwbyte Ds3231r
   I2crbyte Seco , Ack
   I2crbyte Mine , Ack
   I2crbyte Hour , Ack
   I2crbyte Weekday , Ack
   I2crbyte Dat , Ack
   I2crbyte Month , Ack
   I2crbyte Year , Nack
   I2cstop
'переводим данные в двоично-десятичный формат
   Seco = Makedec(seco)
   Mine = Makedec(mine)
   Hour = Makedec(hour)
   'Weekday = Makedec(weekday)
   Dat = Makedec(dat)
   Month = Makedec(month)
   Year = Makedec(year)

   ' получаем десятки/единицы часов, минут, секунд
   Des_hour = Hour / 10
   Ed_hour = Hour Mod 10
   Des_min = Mine / 10
   Ed_min = Mine Mod 10
   Des_sec = Seco / 10
   Ed_sec = Seco Mod 10
   ' получаем десятки/единицы числа, месяца, года
   Des_dat = Dat / 10
   Ed_dat = Dat Mod 10
   Des_month = Month / 10
   Ed_month = Month Mod 10
   Des_year = Year / 10
   Ed_year = Year Mod 10
Return                                                      'возвращаемся

'==========Отправляем текущую дату в часы==========
'***************************************************************************************
Setdate:
   Dat = Makebcd(dat)
   I2cstart
   I2cwbyte Ds3231w
   I2cwbyte 4
   I2cwbyte Dat
   I2cstop

   Month = Makebcd(month)
   I2cstart
   I2cwbyte Ds3231w
   I2cwbyte 5
   I2cwbyte Month
   I2cstop

   Year = Makebcd(year)
   I2cstart
   I2cwbyte Ds3231w
   I2cwbyte 6
   I2cwbyte Year
   I2cstop
Return

'==========Отправляем текущие время в часы==========
'***************************************************************************************
Settime:
   Hour = Makebcd(hour)
   I2cstart
   I2cwbyte Ds3231w
   I2cwbyte 2
   I2cwbyte Hour
   I2cstop

   Mine = Makebcd(mine)
   I2cstart
   I2cwbyte Ds3231w
   I2cwbyte 1
   I2cwbyte Mine
   I2cstop

   Seco = Makebcd(seco)
   I2cstart
   I2cwbyte Ds3231w
   I2cwbyte 0
   I2cwbyte Seco
   I2cstop
Return

'==========Обнуляем секунды==========
'***************************************************************************************
Sec_zero:
   Seco = Makebcd(0)
   I2cstart
   I2cwbyte Ds3231w
   I2cwbyte 0
   I2cwbyte Seco
   I2cstop
Return

'==========Инкремент минут==========
'***************************************************************************************
Min_plus:
   Mine = Mine + 1
   If Mine = 60 Then Mine = 0
   Mine = Makebcd(mine)
   I2cstart
   I2cwbyte Ds3231w
   I2cwbyte 1
   I2cwbyte Mine
   I2cstop
Return

'==========Инкремент часов==========
'***************************************************************************************
Hour_plus:
   Hour = Hour + 1
   If Hour = 24 Then Hour = 0
   Hour = Makebcd(hour)
   I2cstart
   I2cwbyte Ds3231w
   I2cwbyte 2
   I2cwbyte Hour
   I2cstop
Return

'==========Установить день недели==========
'***************************************************************************************
Week_day:
   Seco = Makebcd(0)
   I2cstart
   I2cwbyte Ds3231w
   I2cwbyte 3
   I2cwbyte Weekday
   I2cstop
Return

'==========Инкремент числа==========
'***************************************************************************************
Data_plus:
   Dat = Dat + 1
   If Dat > 31 Then Dat = 1
   Dat = Makebcd(dat)
   I2cstart
   I2cwbyte Ds3231w
   I2cwbyte 4
   I2cwbyte Dat
   I2cstop
Return

'==========Инкремент месяца==========
'***************************************************************************************
Mounth_plus:
   Month = Month + 1
   If Month > 12 Then Month = 1
   Month = Makebcd(month)
   I2cstart
   I2cwbyte Ds3231w
   I2cwbyte 5
   I2cwbyte Month
   I2cstop
Return

'==========Инкремент года==========
'***************************************************************************************
Year_plus:
   Year = Year + 1
   If Year > 99 Then Year = 13
   Year = Makebcd(year)
   I2cstart
   I2cwbyte Ds3231w
   I2cwbyte 6
   I2cwbyte Year
   I2cstop
Return

0

8

Епт тут не то что нет слов , тут дыхание так сперло, что еле отошол , какая же всетаки красотища . Огромный респект за такую работу. Просто одни эмоции!!!!!!!!!

0

9

radan
Спасибо за код. 8-)

0

10

Да уж!

Не построено то здание, этажность которого, позволила-бы выразить степень восхищения!

0

11

radan Вы еше не передумали выложить часики???  :crazyfun: шутка , очень давно искал реализацию шим на 595 , не могли бы хотя бы алгоритм работы расписать , ну или кусочик кода если это не сикрет

0

12

Секрета никакого нет.
Только здесь нужно не PWM, а BAM использовать.
Таймер должен перестраиваться на каждом шаге так, чтобы прерывания происходили с периодом 1, 2, 4, 8, 16, 32, 64, 128.
Это для 256 градаций.
Соответственно для 16 градаций достаточно будет четырёх шагов (до значения 8)
В каждом шаге загоняем единицы в те регистры, веса шагов которых в сумме дадут нужную яркость.
Например, для яркости 25 из 256 нужно включать регистры на первом, четвёртом и пятом шагах (1 + 8+ 16)
Надеюсь что будет понятно, а если нет - почитайте про BAM.

Код моей программы формирует всего 3 яркости - выключенное состояние, средняя и максимальная яркости.
Для моих целей этого вполне достаточно - на фоне динамических эффектов пониженной яркости отображать стрелочные или цифровые часы, бегущую строку.
Код для понимания процесса без переделки не подойдёт, потому что там кроме градаций яркости ещё и динамическая развёртка используется со скважностью 1/16.
Проще написать свой под конкретные нужды.

0


Вы здесь » Программирование ATMEL в BASCOM. » Световые эффекты » Аналого цифровые светодиодные часы с эффектами