Кое что новенькое: http://lightportal.at.ua/publ/chasy/cha … /19-1-0-87
Аналого цифровые светодиодные часы с эффектами
Сообщений 1 страница 12 из 12
Поделиться12014-10-07 20:37:02
Поделиться22014-10-07 20:57:45
Нет слов.
Поделиться32014-10-07 22:23:13
Я так малец и не понял, часы теперь требуют компьютера или нет?
Поделиться42014-10-07 22:30:58
Часы абсолютно автономные.
Компьютер нужен только для создания новых эффектов, отрисовки диаграммы с показаниями датчиков и если лень устанавливать время с пульта, можно с компа нажатием одной кнопки.
Хотя DS3231 показала себя очень положительно в отличии от DS1307 в плане точности, поэтому практически часы не корректирую.
Поделиться52014-10-08 10:50:40
Тогда да, "нет слов"! 
Хотя DS3231 показала себя очень положительно в отличии от DS1307 в плане точности, поэтому практически часы не корректирую.
Я обленился, время просто беру с спутника (GPS).
Поделиться62014-10-08 13:45:11
radan
Не поделитесь куском рабочего кода для работы с DS3231?
Поделиться72014-10-08 14:22:13
Не поделитесь куском рабочего кода для работы с 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
Поделиться82014-10-09 09:41:13
Епт тут не то что нет слов , тут дыхание так сперло, что еле отошол , какая же всетаки красотища . Огромный респект за такую работу. Просто одни эмоции!!!!!!!!!
Поделиться92014-10-09 12:37:36
radan
Спасибо за код. 
Поделиться102014-10-24 12:22:42
Да уж!
Не построено то здание, этажность которого, позволила-бы выразить степень восхищения!
Поделиться112014-12-02 19:16:32
radan Вы еше не передумали выложить часики???
шутка , очень давно искал реализацию шим на 595 , не могли бы хотя бы алгоритм работы расписать , ну или кусочик кода если это не сикрет
Поделиться122014-12-03 08:31:20
Секрета никакого нет.
Только здесь нужно не PWM, а BAM использовать.
Таймер должен перестраиваться на каждом шаге так, чтобы прерывания происходили с периодом 1, 2, 4, 8, 16, 32, 64, 128.
Это для 256 градаций.
Соответственно для 16 градаций достаточно будет четырёх шагов (до значения 8)
В каждом шаге загоняем единицы в те регистры, веса шагов которых в сумме дадут нужную яркость.
Например, для яркости 25 из 256 нужно включать регистры на первом, четвёртом и пятом шагах (1 + 8+ 16)
Надеюсь что будет понятно, а если нет - почитайте про BAM.
Код моей программы формирует всего 3 яркости - выключенное состояние, средняя и максимальная яркости.
Для моих целей этого вполне достаточно - на фоне динамических эффектов пониженной яркости отображать стрелочные или цифровые часы, бегущую строку.
Код для понимания процесса без переделки не подойдёт, потому что там кроме градаций яркости ещё и динамическая развёртка используется со скважностью 1/16.
Проще написать свой под конкретные нужды.