Я насчитал штук 6 прошивок, и два или три типа контроллера. Конкретней, какая?sergsurf писал(а):Часы прошиты прошивкой указанной в начале темы.
Часы-календарь-термометр (Mega8+DS1307+DS18B20+4LED)
Re: Часы-календарь-термометр (Mega8+DS1307+DS18B20+4LED)
- Реклама
Re: Часы-календарь-термометр (Mega8+DS1307+DS18B20+4LED)
[uquote="Dimon456",url="/forum/viewtopic.php?p=3769201#p3769201"]
Часы уже так давно работают что я уже не помню. Да и не стоит заморачиваться пусть себе и дальше так работают, Все уже привыкли. Спасибо за участие.
Я насчитал штук 6 прошивок, и два или три типа контроллера. Конкретней, какая?[/uquote]sergsurf писал(а):Часы прошиты прошивкой указанной в начале темы.
Часы уже так давно работают что я уже не помню. Да и не стоит заморачиваться пусть себе и дальше так работают, Все уже привыкли. Спасибо за участие.
Еще не придумал.
Re: Часы-календарь-термометр (Mega8+DS1307+DS18B20+4LED)
Всем. Привет.
Может кто подскажет в чем дело. Часы работали. Решил поменять батарейку. Вставил новую. На часах надпись "Fn:d0" и висит до бесконечности. В режим часов не переходит.
Может кто подскажет в чем дело. Часы работали. Решил поменять батарейку. Вставил новую. На часах надпись "Fn:d0" и висит до бесконечности. В режим часов не переходит.
- samand587
- Поставщик валерьянки для Кота
- Сообщения: 2312
- Зарегистрирован: Вт фев 21, 2017 18:59:21
- Откуда: Седой Урал
Re: Часы-календарь-термометр (Mega8+DS1307+DS18B20+4LED)
[uquote="CNCBaby",url="/forum/viewtopic.php?p=3782326#p3782326"]Часы работали.[/uquote]
У меня так же часы работали, но из-за чужих кривых рук по настройкам зависли. Помогла перепрошивка МК.
У меня так же часы работали, но из-за чужих кривых рук по настройкам зависли. Помогла перепрошивка МК.
Re: Часы-календарь-термометр (Mega8+DS1307+DS18B20+4LED)
Перепрошивка МК помогла но опять до тех пор пока не вытащил батарейку. Но это не выход. Нужно понять в чем дело.
- Реклама
-
Demiurg
- Это не хвост, это антенна
- Сообщения: 1480
- Зарегистрирован: Ср июн 25, 2008 15:19:44
- Контактная информация:
Re: Часы-календарь-термометр (Mega8+DS1307+DS18B20+4LED)
[uquote="CNCBaby",url="/forum/viewtopic.php?p=3782343#p3782343"]Перепрошивка МК помогла но опять до тех пор пока не вытащил батарейку. Но это не выход. Нужно понять в чем дело.[/uquote]
Варианты:
1 - Не выставлены фьюзы BODEN и BODLEVEL. Из-за этого, когда передергиваете питание, происходит программный сбой, программа могла улететь куда угодно и записать что-то в EEPROM. Отсюда, при включении питания считываются неверные параметры и зависание часов. Методы решения: выставить фьюзы. Я не знаю, какое напряжение питания МК. Исходить из этого. Идем дальше. Никогда не использовать нулевой (первый по порядковому номеру) байт EEPROM. В конце каждого обращения к EEPROM выставлять указатель EEPROM в нуль.
Пример на ассемблере
Пример на си
В идеале, в начале программы нужно сделать проверку данных на корректность. Я думаю здесь проблемы. Параметры вышли за пределы, а проверки на валидность нет.
Мне некогда и лень искать архив. Дайте ссылку на исходники часов. Посмотрю, что да как.
Посмотрел схемы часов в начале темы. Речь о батарейке для DS3107? Эта микросхема капризная, я от нее отказался. Встает раком чуть ли не от чиха. Решение. Переинициализация микросхемы. Щупать ее как-то, проверять, жива ли. Использовать вывод IRQ, часы настроить на дрыгание выводом IRQ с частотой 1 Гц.
Есть еще решение. Считывать управляющий регистр микросхемы, проверять его. Но, может быть такой вариант, что в часах может оказаться полная каша. Я, когда баловался, пробовал часы сделать, делал полную переинициализацию микросхемы. Запуск, настройка, задание времени указанное в проекте. Скажем, 6.00. Если вывод IRQ замолчал, можно считать, что микросхема зависла.
Варианты:
1 - Не выставлены фьюзы BODEN и BODLEVEL. Из-за этого, когда передергиваете питание, происходит программный сбой, программа могла улететь куда угодно и записать что-то в EEPROM. Отсюда, при включении питания считываются неверные параметры и зависание часов. Методы решения: выставить фьюзы. Я не знаю, какое напряжение питания МК. Исходить из этого. Идем дальше. Никогда не использовать нулевой (первый по порядковому номеру) байт EEPROM. В конце каждого обращения к EEPROM выставлять указатель EEPROM в нуль.
Пример на ассемблере
Спойлер
Код: Выделить всё
//************************************************************************
//========= EEPROM ===================
//************************************************************************
// Так как возможна случайная запись в EEPROM в случае сбоя питания, то:
// 1 - В микроконтроллере включить контроль снижения напряжения питания.
// 2 - Первый (0x00) байт никогда не используется.
// 3 - После ресета обнулить указатель адреса EEPROM.
// Решения для увеличения ресурса EEPROM:
// 4 - Перед записью считывается байт, предназначенный для записи,
// проверяется на равенство с записываемым, если байты равны, то переход
// к записи следующего байта.
// 5 - В конце работы с EEPROM обнулить указатель адреса.
// В программе, в нужном месте:
// .eseg
// .org 0x01
// bla-bla - пошли данные.
// BRIGHT_BUF: ; Значение яркости VFD.
// .byte 1
#if (EEPROM==YES)
.macro Read_EEPROM
ldix @0 // Указатель адреса EEPROM.
ldiy @1 // Указатель адреса SRAM.
ldi r17,@2
rcall _Read_EEPROM
.endmacro
_Read_EEPROM:
sbic EECR,EEWE
rjmp _Read_EEPROM
.ifdef EEARH
out EEARH,XH
.endif
out EEARL,XL
sbi EECR,EERE
sbi EECR,EERE
in EEDREG,EEDR
st Y+,EEDREG
adiw XL,1
dec r17
brne _Read_EEPROM
_Read_EEPROM_0:
sbic EECR,EEWE
rjmp _Read_EEPROM_0
.ifdef EEARH
out EEARH,RCLR
.endif
out EEARL,RCLR
ret
EERead:
sbic EECR,EEWE
rjmp EERead
.ifdef EEARH
out EEARH,XH
.endif
out EEARL,XL
sbi EECR,EERE
sbi EECR,EERE
in EEDREG,EEDR
EERead_1:
sbic EECR,EEWE
rjmp EERead_1
.ifdef EEARH
out EEARH,RCLR
.endif
out EEARL,RCLR
ret
EEWrite:
sbic EECR,EEWE
rjmp EEWrite
.ifdef EEARH
out EEARH,XH
.endif
out EEARL,XL
out EEDR,EEDREG
sbi EECR,EEMWE
sbi EECR,EEWE
EEWrite_1:
sbic EECR,EEWE
rjmp EEWrite_1
.ifdef EEARH
out EEARH,RCLR
.endif
out EEARL,RCLR
ret
.macro Write_EEPROM
ldiy @0 // Указатель адреса SRAM.
ldix @1 // Указатель адреса EEPROM.
ldi r17,@2
rcall _Write_EEPROM
.endmacro
_Write_EEPROM:
sbic EECR,EEWE
rjmp _Write_EEPROM
.ifdef EEARH
out EEARH,XH
.endif
out EEARL,XL
ld EEDREG,Y+
out EEDR,EEDREG
sbi EECR,EEMWE
sbi EECR,EEWE
adiw XL,1
dec r17
brne _Write_EEPROM
_Write_EEPROM_0:
sbic EECR,EEWE
rjmp _Write_EEPROM_0
.ifdef EEARH
out EEARH,RCLR
.endif
out EEARL,RCLR
ret
.macro Clear_EEPROM
ldx @0
ldy @1
rcall _Clear_EEPROM
.endmacro
_Clear_EEPROM:
sbic EECR,EEWE
rjmp _Clear_EEPROM
.ifdef EEARH
out EEARH,XH
.endif
out EEARL,XL
out EEDR,RCLR
sbi EECR,EEMWE
sbi EECR,EEWE
adiw XL,1
sbiw YL,1
brne _Clear_EEPROM
_Clear_EEPROM_0:
sbic EECR,EEWE
rjmp _Clear_EEPROM_0
.ifdef EEARH
out EEARH,RCLR
.endif
out EEARL,RCLR
ret
#endif
//************************************************************************
Спойлер
Код: Выделить всё
//==================
//#pragma location = 0x01
/*
__eeprom u08 ee_empty_val @ 0x0100 = 0;
__eeprom u16 ee_tim_heat_val @ 0x0101 = 10;
__eeprom u16 ee_tim_formovka_val @ 0x0103 = 10;
__eeprom u16 ee_tim_pnevmosyem_val @ 0x0105 = 10;
__eeprom u16 ee_timout_sens_1_val @ 0x0107 = 30;
__eeprom u16 ee_timout_sens_2_val @ 0x0109 = 30;
__eeprom u16 ee_timout_sens_3_val @ 0x010B = 30;
__eeprom u16 ee_timout_sens_4_val @ 0x010D = 30;
__eeprom u32 ee_sett_quant @ 0x010F = 1000;
__eeprom u32 ee_curr_quant @ 0x0113 = 0;
*/
__eeprom u08 ee_empty_val = 0;
__eeprom u16 ee_tim_heat_val = 12;
__eeprom u16 ee_tim_formovka_val = 12;
__eeprom u16 ee_tim_pnevmosyem_val = 6;
__eeprom u16 ee_timout_sens_1_val = 30;
__eeprom u16 ee_timout_sens_2_val = 30;
__eeprom u16 ee_timout_sens_3_val = 30;
__eeprom u16 ee_timout_sens_4_val = 30;
__eeprom u32 ee_sett_quant = 10000;
__eeprom u32 ee_curr_quant = 5304;
__eeprom u16 ee_quant_products = 777;
__eeprom u08 ee_state_tens = 0<<TEN_1 | 0<<TEN_2;
//==================
//==================
void read_proc_eds_param (void)
{
tim_heat_val = ee_tim_heat_val;
tim_formovka_val = ee_tim_formovka_val;
tim_pnevmosyem_val = ee_tim_pnevmosyem_val;
timout_sens_1_val = ee_timout_sens_1_val;
timout_sens_2_val = ee_timout_sens_2_val;
timout_sens_3_val = ee_timout_sens_3_val;
timout_sens_4_val = ee_timout_sens_4_val;
sett_quant = ee_sett_quant;
curr_quant = ee_curr_quant;
quant_products = ee_quant_products;
outputs_buf [1] = ee_state_tens;
volatile u08 a = ee_empty_val; // В конце каждого обращения указатель EEPROM в 0.
}
//==================
//==================
void save_parameters_eeprom (void)
{
if (ee_tim_heat_val != tim_heat_val) ee_tim_heat_val = tim_heat_val;
if (ee_tim_formovka_val != tim_formovka_val) ee_tim_formovka_val = tim_formovka_val;
if (ee_tim_pnevmosyem_val != tim_pnevmosyem_val) ee_tim_pnevmosyem_val = tim_pnevmosyem_val;
//------------------------------------------------------------------------
if (ee_timout_sens_1_val != timout_sens_1_val) ee_timout_sens_1_val = timout_sens_1_val;
if (ee_timout_sens_2_val != timout_sens_2_val) ee_timout_sens_2_val = timout_sens_2_val;
if (ee_timout_sens_3_val != timout_sens_3_val) ee_timout_sens_3_val = timout_sens_3_val;
if (ee_timout_sens_4_val != timout_sens_4_val) ee_timout_sens_4_val = timout_sens_4_val;
//------------------------------------------------------------------------
if (ee_sett_quant != sett_quant) ee_sett_quant = sett_quant;
//------------------------------------------------------------------------
if (ee_curr_quant != curr_quant) ee_curr_quant = curr_quant;
//------------------------------------------------------------------------
if (ee_quant_products != quant_products) ee_quant_products = quant_products;
//------------------------------------------------------------------------
if (ee_state_tens != outputs_buf [1]) ee_state_tens = outputs_buf [1];
//------------------------------------------------------------------------
volatile u08 a = ee_empty_val; // В конце каждого обращения указатель EEPROM в 0.
}
//==================
Мне некогда и лень искать архив. Дайте ссылку на исходники часов. Посмотрю, что да как.
Посмотрел схемы часов в начале темы. Речь о батарейке для DS3107? Эта микросхема капризная, я от нее отказался. Встает раком чуть ли не от чиха. Решение. Переинициализация микросхемы. Щупать ее как-то, проверять, жива ли. Использовать вывод IRQ, часы настроить на дрыгание выводом IRQ с частотой 1 Гц.
Есть еще решение. Считывать управляющий регистр микросхемы, проверять его. Но, может быть такой вариант, что в часах может оказаться полная каша. Я, когда баловался, пробовал часы сделать, делал полную переинициализацию микросхемы. Запуск, настройка, задание времени указанное в проекте. Скажем, 6.00. Если вывод IRQ замолчал, можно считать, что микросхема зависла.
Re: Часы-календарь-термометр (Mega8+DS1307+DS18B20+4LED)
Да речь идет о DS1307. Прочитал половину форума. Сколько осилил. У многих эта проблема. Но решение так и не увидел. Проблема в SMD корпусе DS1307. Другие часы с Dip корпусом DS1307 без проблем переносят извлечение батарейки. Исходники есть на первой странице.
Добавлено after 6 minutes 11 seconds:
Собрал 3 шт. часов на платах из одной партии. У у всех одна и та же "болезнь" с извлечением батарейки. Что самое удивительное после перепрошивке все работает. Я думаю проблема в коде связанном с DS1307.
Добавлено after 6 minutes 11 seconds:
Собрал 3 шт. часов на платах из одной партии. У у всех одна и та же "болезнь" с извлечением батарейки. Что самое удивительное после перепрошивке все работает. Я думаю проблема в коде связанном с DS1307.
-
Demiurg
- Это не хвост, это антенна
- Сообщения: 1480
- Зарегистрирован: Ср июн 25, 2008 15:19:44
- Контактная информация:
Re: Часы-календарь-термометр (Mega8+DS1307+DS18B20+4LED)
[uquote="CNCBaby",url="/forum/viewtopic.php?p=3782374#p3782374"]Я думаю проблема в коде связанном с DS1307.[/uquote]
Проблема комплексная. Микросхема боится помех по питанию. Я когда делал макет, сначала у меня платка с часами висела на проводочках. Потом впаял в макетку. Один хрен, часы вставали, достаточно было дотронуться отверткой до питания или просто выводов деталей.
Поэтому, решение - написано выше. Проверять вывод IRQ. Если часы встали, считать это равнозначно вытаскиванию батарейки и сбою микросхемы. В таком случае полная переинициализация часов. Можно сделать какую-то индикацию, что микросхема сбойнула и нужно переустановить дату, время.
Нашел, кстати видеоотчет одного своего проекта. Часы заменил на DS3231. Обращение к микросхеме в основном идентично, есть пара нюансов. В этом проекте у меня комплексная проверка работоспособности микросхемы. При первом включении устройства после прошивки, перепрошивки. После сбоя микросхемы. После сбоя по питанию устройства.
Проблема комплексная. Микросхема боится помех по питанию. Я когда делал макет, сначала у меня платка с часами висела на проводочках. Потом впаял в макетку. Один хрен, часы вставали, достаточно было дотронуться отверткой до питания или просто выводов деталей.
Поэтому, решение - написано выше. Проверять вывод IRQ. Если часы встали, считать это равнозначно вытаскиванию батарейки и сбою микросхемы. В таком случае полная переинициализация часов. Можно сделать какую-то индикацию, что микросхема сбойнула и нужно переустановить дату, время.
Нашел, кстати видеоотчет одного своего проекта. Часы заменил на DS3231. Обращение к микросхеме в основном идентично, есть пара нюансов. В этом проекте у меня комплексная проверка работоспособности микросхемы. При первом включении устройства после прошивки, перепрошивки. После сбоя микросхемы. После сбоя по питанию устройства.
-
Самсусамыч
Re: Часы-календарь-термометр (Mega8+DS1307+DS18B20+4LED)
[uquote="CNCBaby",url="/forum/viewtopic.php?p=3782374#p3782374"]У многих эта проблема. Но решение так и не увидел. Проблема в SMD корпусе DS1307.[/uquote]
Дело в том, что при подаче питания на DS1307 начальное состояние всех регистров не определено. Поэтому необходимо принудительно включать тактовый генератор (СН = 0). Я в своих программах с использованием DS1307 настраиваю выход SQW на частоту 1 Гц и при старте МК проверяю данный выход… если он «не тикает» значит необходима инициализация часов с запуском тактового генератора. А если тикает, то инициализация не сброшена при замене батарейки...
Дело в том, что при подаче питания на DS1307 начальное состояние всех регистров не определено. Поэтому необходимо принудительно включать тактовый генератор (СН = 0). Я в своих программах с использованием DS1307 настраиваю выход SQW на частоту 1 Гц и при старте МК проверяю данный выход… если он «не тикает» значит необходима инициализация часов с запуском тактового генератора. А если тикает, то инициализация не сброшена при замене батарейки...
Последний раз редактировалось Самсусамыч Чт янв 30, 2020 18:42:20, всего редактировалось 2 раза.
-
Demiurg
- Это не хвост, это антенна
- Сообщения: 1480
- Зарегистрирован: Ср июн 25, 2008 15:19:44
- Контактная информация:
Re: Часы-календарь-термометр (Mega8+DS1307+DS18B20+4LED)
[uquote="Самсусамыч",url="/forum/viewtopic.php?p=3782392#p3782392"]Дело в том, что при подаче питания на DS1307 начальное состояние всех регистров не определено. Поэтому необходимо принудительно включать тактовый генератор (СН = 0). Я в своей программах с использованием DS1307 настраиваю выход SQW на частоту 1 Гц и при старте МК проверяю данный выход… если он «не тикает» значит необходима инициализация часов с запуском тактового генератора. А если тикает, то инициализация не сброшена при замене батарейки.[/uquote]
Ну вот, о чем и речь. Кстати, в моем проекте микросхема считывается один раз, после включения устройства. В дальнейшем время тикает по выводу IRQ.
Ну вот, о чем и речь. Кстати, в моем проекте микросхема считывается один раз, после включения устройства. В дальнейшем время тикает по выводу IRQ.
-
Самсусамыч
Re: Часы-календарь-термометр (Mega8+DS1307+DS18B20+4LED)
[uquote="Demiurg",url="/forum/viewtopic.php?p=3782394#p3782394"]В дальнейшем время тикает по выводу IRQ.[/uquote]
Разве есть такой вывод у DS1307?
Разве есть такой вывод у DS1307?
-
Demiurg
- Это не хвост, это антенна
- Сообщения: 1480
- Зарегистрирован: Ср июн 25, 2008 15:19:44
- Контактная информация:
Re: Часы-календарь-термометр (Mega8+DS1307+DS18B20+4LED)
Прошу прощения, последнее время работал с микросхемами, у них выводы так обзываются. SQW/OUT
Re: Часы-календарь-термометр (Mega8+DS1307+DS18B20+4LED)
Провел ряд экспериментов. Питание, фьзы здесь ни причем. При замене батарейки не происходит иницилизация DS1307. У автора есть условия проверки на сбой микросхемы. Там он через 1,5 секунд сравнивает время. Если одинаковое то запускает генератор. Это если есть что сравнивать. Выход из этой ситуации вижу пока так. На свободный пин подцепить джампер, и программно отследить, если джампер в нуле то инициализировать DS (режим первого вкл.).
-
Demiurg
- Это не хвост, это антенна
- Сообщения: 1480
- Зарегистрирован: Ср июн 25, 2008 15:19:44
- Контактная информация:
Re: Часы-календарь-термометр (Mega8+DS1307+DS18B20+4LED)
Лишняя сущность. Ввести пункт меню.
Re: Часы-календарь-термометр (Mega8+DS1307+DS18B20+4LED)
[uquote="Demiurg",url="/forum/viewtopic.php?p=3782961#p3782961"]Лишняя сущность. Ввести пункт меню.[/uquote]
Интересно, как Вы в это меню попадете. В режиме "Fn:d0" кнопки не активны. Выше я предложил поставить джампер и вкл. питание. Это и будет условием для инициализации DS.
Интересно, как Вы в это меню попадете. В режиме "Fn:d0" кнопки не активны. Выше я предложил поставить джампер и вкл. питание. Это и будет условием для инициализации DS.
-
Demiurg
- Это не хвост, это антенна
- Сообщения: 1480
- Зарегистрирован: Ср июн 25, 2008 15:19:44
- Контактная информация:
Re: Часы-календарь-термометр (Mega8+DS1307+DS18B20+4LED)
Я не знаю, что это за функция. И глупо делать режим, в котором все кнопки не активны. Я предложил вариант. Исхожу из оптимизации. Если есть лишний вывод и желание разбирать корпус, чтобы ставить джампер, ради бога. Можно джампер, можно потайную кнопку, а можно пункт меню.
Re: Часы-календарь-термометр (Mega8+DS1307+DS18B20+4LED)
Какой пункт меню. Я Вам объясняю. При замене батарейки появляется надпись "Fn:d0" и на на этом все. На кнопки нет никакой реакции. И как попасть в Ваше "предполагаемое" меню, даже не предполагаю. ЕСть вариант использовать кнопки БУД1 или БУД2. ЕСли удерживать какуюто из кнопок и при этом вкл. питание, то все нормально заходит в нужный режим. ВЫбор типа индикатора или запись в ячеки епрома.
Добавлено after 13 minutes 47 seconds:
[uquote="Demiurg",url="/forum/viewtopic.php?p=3783312#p3783312"]Если есть лишний вывод и желание разбирать корпус, чтобы ставить джампер,[/uquote]
Интересно. А для замены батарейки, корпус разбирать не нужно? Ели корпус при замене батарейки уже разобран, то почему не поставить джампер, а после вкл. его снять и собрать корпус.
Добавлено after 13 minutes 47 seconds:
[uquote="Demiurg",url="/forum/viewtopic.php?p=3783312#p3783312"]Если есть лишний вывод и желание разбирать корпус, чтобы ставить джампер,[/uquote]
Интересно. А для замены батарейки, корпус разбирать не нужно? Ели корпус при замене батарейки уже разобран, то почему не поставить джампер, а после вкл. его снять и собрать корпус.
Re: Часы-календарь-термометр (Mega8+DS1307+DS18B20+4LED)
CNCBaby, можно фото где прилеплен кварц DS1307? И откуда вы этот кварц взяли?
-
Demiurg
- Это не хвост, это антенна
- Сообщения: 1480
- Зарегистрирован: Ср июн 25, 2008 15:19:44
- Контактная информация:
Re: Часы-календарь-термометр (Mega8+DS1307+DS18B20+4LED)
Я про то, чтобы переделать проект. Перепрошивать каждый раз после сбоя или замены батарейки это как то не нормально, не находите?
Добавлено after 3 minutes 7 seconds:
[uquote="Demiurg",url="/forum/viewtopic.php?p=3783383#p3783383"]Я про то, чтобы переделать проект. Перепрошивать каждый раз после сбоя или замены батарейки это как то не нормально, не находите?[/uquote]
Я мог бы этим заняться. Вижу, что тема живая, многие повторили поделку. Создать новый проект с нуля, легко редактируемый. Исходники этого проекта сырые. Программа плохо структурирована, и плохо предназначена для дальнейшей работы.
Добавлено after 3 minutes 7 seconds:
[uquote="Demiurg",url="/forum/viewtopic.php?p=3783383#p3783383"]Я про то, чтобы переделать проект. Перепрошивать каждый раз после сбоя или замены батарейки это как то не нормально, не находите?[/uquote]
Я мог бы этим заняться. Вижу, что тема живая, многие повторили поделку. Создать новый проект с нуля, легко редактируемый. Исходники этого проекта сырые. Программа плохо структурирована, и плохо предназначена для дальнейшей работы.
- samand587
- Поставщик валерьянки для Кота
- Сообщения: 2312
- Зарегистрирован: Вт фев 21, 2017 18:59:21
- Откуда: Седой Урал
Re: Часы-календарь-термометр (Mega8+DS1307+DS18B20+4LED)
[uquote="Demiurg",url="/forum/viewtopic.php?p=3783383#p3783383"]Я мог бы этим заняться.[/uquote]
Так что от нас нужно благославление?
Так это мы благославляем!

Так что от нас нужно благославление?


