Часы на газоразрядных индикаторах

Что бы еще такого сделать?... Предлагайте! Обсудим все!!!
Аватара пользователя
Ян
Поставщик валерьянки для Кота
Сообщения: 1947
Зарегистрирован: Вт ноя 01, 2005 17:32:22
Откуда: Москва

Re: Часы на газоразрядных индикаторах

Сообщение Ян »

Вот. Нарисовано в Кореле. Вроде в такое отверстие удавалось вставить ИН-17 :)
Вложения
ИН-17.rar
(11 КБ) 207 скачиваний
Реклама
Аватара пользователя
КАШАК
Это не хвост, это антенна
Сообщения: 1303
Зарегистрирован: Вс апр 19, 2009 17:20:22
Откуда: г.Ростов-на-Дону/г.Таганрог/г.Геленджик
Контактная информация:

Re: Часы на газоразрядных индикаторах

Сообщение КАШАК »

Спасибо :beer:
Опыт растет прямо пропорционально выведенному из строя оборудованию...
Реклама
Аватара пользователя
vvsector85
Грызет канифоль
Сообщения: 282
Зарегистрирован: Ср июл 08, 2015 22:36:31
Откуда: Харьков, Украина

Re: Часы на газоразрядных индикаторах

Сообщение vvsector85 »

И снова вопрос по прерываниям: во встроенной функции AVRStudio6 (eeprom_write_byte) не увидел запрета прерываний на время записи. Можно, опять же, сделать просто

Код: Выделить всё

cli();
eeprom_write_byte(&eep,x);
sei();
или нужно написать свою функцию записи EEPROM, где будут запрещаться прерывания именно во время записи?
Аватара пользователя
Apparatchik
Держит паяльник хвостом
Сообщения: 908
Зарегистрирован: Вс май 23, 2010 13:55:42
Откуда: Украина, Александрия

Re: Часы на газоразрядных индикаторах

Сообщение Apparatchik »

А зачем их запрещать при записи в еепром?
«И всё-таки она вертится!»
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
vvsector85
Грызет канифоль
Сообщения: 282
Зарегистрирован: Ср июл 08, 2015 22:36:31
Откуда: Харьков, Украина

Re: Часы на газоразрядных индикаторах

Сообщение vvsector85 »

Я сделал сервисное меню, в котором можно устанавливать разные параметры, как например, скорость смены цветов RGB-подсветки, поправка температуры, плавность смены цифр и т.д. Почему-то, иногда записываются неверные данные. Почитал, пишут, что прерывания могут мешать процедуре записи.

И еще, мои часы немного спешат, где-то на 0,5с в сутки, хотя кварц ставил "термостабильный". Хочу сделать коррекцию, чтобы раз в сутки часы подводились. Но установить время на 1307 можно только в секундах. Поэтому, если часы подводить назад, нужно их просто приостановить на n миллисекунд, а если вперед - установить время на 1307 на +n секунд больше текущего, и, если время перевода вперед не кратно 1 с, то снова остановить, на n миллисекунд.
Может, у кого-то есть другое готовое решение для такой коррекции?
Реклама
Аватара пользователя
a_winner
Грызет канифоль
Сообщения: 275
Зарегистрирован: Чт сен 24, 2015 17:46:26
Откуда: Обираловка, МО
Контактная информация:

Re: Часы на газоразрядных индикаторах

Сообщение a_winner »

Есть: у Вас есть ёмкости от выводов кварца на общий провод? Замените одну ёмкость на подстроечник.
Errare humanum est
Реклама
Аватара пользователя
vvsector85
Грызет канифоль
Сообщения: 282
Зарегистрирован: Ср июл 08, 2015 22:36:31
Откуда: Харьков, Украина

Re: Часы на газоразрядных индикаторах

Сообщение vvsector85 »

По ДШ 1307 емкостей не положено. Кварц вот такой, Cнагр = 12.5 пФ. По ДШ ± 20 ppm (±0,002%)
Аватара пользователя
a_winner
Грызет канифоль
Сообщения: 275
Зарегистрирован: Чт сен 24, 2015 17:46:26
Откуда: Обираловка, МО
Контактная информация:

Re: Часы на газоразрядных индикаторах

Сообщение a_winner »

А, да, ds1307 не требует внешних резисторов и ёмкостей по выводам кварца, они уже внутри есть, только в ДШ на DS1307 написано, что max series resistance 45kOhm, а у Вашего кварца - 80kOhm. Но может можно внешнеё емкостью чуть подправить?

Кстати, не могут быть наводки по питанию или на линии X1, X2?
Errare humanum est
Аватара пользователя
vvsector85
Грызет канифоль
Сообщения: 282
Зарегистрирован: Ср июл 08, 2015 22:36:31
Откуда: Харьков, Украина

Re: Часы на газоразрядных индикаторах

Сообщение vvsector85 »

Та не должно быть помех, разве что дешифратор поблизости, но все землей разделено.
Больше склоняюсь к софтовому решению. Можно, конечно, кварц попробовать поменять, но выбор их в таком корпусе невелик.
Изображение
Аватара пользователя
xSanders
Потрогал лапой паяльник
Сообщения: 374
Зарегистрирован: Сб апр 27, 2013 21:39:15
Откуда: Украина

Re: Часы на газоразрядных индикаторах

Сообщение xSanders »

На правах оффтопа - Кто разбирается в подключении симисторов - посмотрите тут . Очередной шедевр инженерной китайской мысли . Не могу одолеть.
watchmaker
Поставщик валерьянки для Кота
Сообщения: 2179
Зарегистрирован: Вс ноя 15, 2009 23:13:59
Откуда: Харьков
Контактная информация:

Re: Часы на газоразрядных индикаторах

Сообщение watchmaker »

И еще, мои часы немного спешат, где-то на 0,5с в сутки, хотя кварц ставил "термостабильный". Хочу сделать коррекцию, чтобы раз в сутки часы подводились. Но установить время на 1307 можно только в секундах.
В таком случае от DS1307 стоило бы отказаться полностью, а счёт времени вести в софте. А там уже можно двигать в любую сторону и на любое время, кратное шагу таймера. На тех же AVR - до 1/128 секунды в сутки.
Иногда мой питомец уходит в такую спячку, что разбудить его можно только щелчком по первой ноге...
Аватара пользователя
Волосатый
Сверлит текстолит когтями
Сообщения: 1288
Зарегистрирован: Пн апр 14, 2008 12:54:35
Откуда: Город ГЕРОЙ Ленинград
Контактная информация:

Re: Часы на газоразрядных индикаторах

Сообщение Волосатый »

watchmaker писал(а):В таком случае от DS1307 стоило бы отказаться полностью
Я решил эту проблему просто - выход SQW завел на прерывание, один таймер настроил на 1/100 секунды от кварца 8МГц (да, стм32 так может), и получил 0,01 секунды :) По прерыванию сбрасываю счетный регистр (в моем случае на одном таймере сделано около 8 софтварных счетчиков для разных целей, сбрасываемых своими источниками), таким образом, синхронизирую начало секунды. Использую я этот счетчик, в основном, для визуальных эффектов, поэтому тут особой точности не требуется.
Опыт приходит сразу после того, как он был нужен...
Аватара пользователя
vvsector85
Грызет канифоль
Сообщения: 282
Зарегистрирован: Ср июл 08, 2015 22:36:31
Откуда: Харьков, Украина

Re: Часы на газоразрядных индикаторах

Сообщение vvsector85 »

Все равно тогда МК тактировать нужно кварцем. Часы я уже сделал, так что менять схему уже поздно, а вот софтовая коррекция - выход. Только вот в моей библиотеке для 1307 нет функции пуска-остановки часов. Пуск происходит при инициализации, а функция остановки просто отсутствует. По идее, в 7-й регистр нужно единицу записать, но боюсь чего-то намудрить. Если есть годная библиотека для 1307, поделитесь, пожалуйста.
Аватара пользователя
SLvik
Друг Кота
Сообщения: 7622
Зарегистрирован: Ср май 28, 2008 00:32:54
Откуда: г. Россия
Контактная информация:

Re: Часы на газоразрядных индикаторах

Сообщение SLvik »

Да, так и есть. есть там такой бит и он работает реально.
Я при старте проверяю его - если генератор отключен - включаю его.
И при установке часов я сначала останавливаю 1307 и обнуляю секунды, а после установки часов включаю генерацию этим флажком.
:)
Аватара пользователя
vvsector85
Грызет канифоль
Сообщения: 282
Зарегистрирован: Ср июл 08, 2015 22:36:31
Откуда: Харьков, Украина

Re: Часы на газоразрядных индикаторах

Сообщение vvsector85 »

Что-то никак не могу разобраться с остановкой 1307 (то что мне нужно для коррекции). Бит СН, управляющий тактовым генератором , судя по ДШ, почему-то находится в регистре секунд (в десятках секунд только 3 бита, решили сэкономить, наверное). Т. е. остановить/запустить 1307 я могу только перезаписав секунды? Тогда, каким чудом, при инициализации 1307 при включении часов не обнуляются секунды?

Функция инициализации в моей библиотеке 1307 выглядит вот так:

Код: Выделить всё

void rtc_init(unsigned char rs, unsigned char sqwe, unsigned char out)
{
rs&=3;
if (sqwe) rs|=0x10;
if (out) rs|=0x80;
i2c_start();
i2c_write(0xd0);
i2c_write(7);
i2c_write(rs);
i2c_stop();
}
На сколько я понимаю, здесь включается SQW и определяется его частота. Не могу понять, где происходит запись "0" в СН?


Правильно ли я понимаю, чтобы установить БИТ СН в "1" (остановить часы), не сбросив секунды, мне нужно сначала считать время, а потом записать как-то так:

Код: Выделить всё

i2c_start();
i2c_write(0xd0);
i2c_write(0);
i2c_write 0x80+(bin(sec));
i2c_stop();
А чтобы снова запустить 1307 нужно снова отправит секунды, только без 0х80?
Последний раз редактировалось vvsector85 Ср июн 08, 2016 19:04:39, всего редактировалось 2 раза.
Аватара пользователя
SLvik
Друг Кота
Сообщения: 7622
Зарегистрирован: Ср май 28, 2008 00:32:54
Откуда: г. Россия
Контактная информация:

Re: Часы на газоразрядных индикаторах

Сообщение SLvik »

Этот бит находится в регистре секунд по адресу 00
7й бит этого регистра и есть разрешение генерации.
:)
Аватара пользователя
vvsector85
Грызет канифоль
Сообщения: 282
Зарегистрирован: Ср июл 08, 2015 22:36:31
Откуда: Харьков, Украина

Re: Часы на газоразрядных индикаторах

Сообщение vvsector85 »

Кажется, я понял. При первом включении мои часы не пойдут. Это случится только после установки времени, когда в первые 6 бит регистра 00 запишутся секунды, а в 7-й - "0". Вот почему в функции инициализации ничего не записывается в регистр 00. Иначе, при каждом выключении часов секунды сбрасывались бы.

Значит, нужно при включении часов выполнять проверку 7-го бита в регистре 00. Если он = 0 - ничего не делать, если 1 - записать 0.
Аватара пользователя
SLvik
Друг Кота
Сообщения: 7622
Зарегистрирован: Ср май 28, 2008 00:32:54
Откуда: г. Россия
Контактная информация:

Re: Часы на газоразрядных индикаторах

Сообщение SLvik »

Правильно.
Когда батарейка стоит на часах, то этот бит не сбрасывается и часы уже идут.
А при старте программы она проверяет этот бит если часы стоят прога обнуляет все регистры
и ставит 7й бит и время пошло.
По крайней мере у меня так сделано.
:)
Аватара пользователя
vvsector85
Грызет канифоль
Сообщения: 282
Зарегистрирован: Ср июл 08, 2015 22:36:31
Откуда: Харьков, Украина

Re: Часы на газоразрядных индикаторах

Сообщение vvsector85 »

Так, вроде родил что-то. Гляньте, пожалуйста, а то не хочется лишний раз часы раскурочивать, чтобы прошить:

vars[7] - коррекция часов на vars[7] десятых секунд назад
vars[8] - коррекция часов на vars[8] десятых секунд вперед

Код: Выделить всё

//================Коррекция времени================
												
												if (corr_flag==0)
												{
													if ((H==1)&&(M==0)&&(S==30))
													{
														unsigned char corr_100ms;
														corr_flag=1;
														rtc_get_time(&H, &M, &S);
														if (vars[7])
														{
															corr_100ms = vars[8]%10;
															S=S-(vars[8]/10)+1;
															rtc_write(0x00,0x80);
															for(unsigned char i=0;i<=corr_100ms;i++)
															{
																_delay_ms(100);
															}
															rtc_write(0x00,bin(S));
															
														}
														if (vars[8])
														{
															
															corr_100ms = 10-(vars[8]%10);
															S=S+(vars[8]/10)+1;
															rtc_write(0x00,0x80);
															for(unsigned char i=0;i<=corr_100ms;i++)
															{
																_delay_ms(100);
															}
															rtc_write(0x00,bin(S));
															
														}
													}
													
												_delay_ms(1500);
												corr_flag=0;
												}
												//=======
Аватара пользователя
SLvik
Друг Кота
Сообщения: 7622
Зарегистрирован: Ср май 28, 2008 00:32:54
Откуда: г. Россия
Контактная информация:

Re: Часы на газоразрядных индикаторах

Сообщение SLvik »

Я не могу, ребята помогут.
Я только в ассемблере пишу проги.
:)
Ответить

Вернуться в «Умные мысли»