Таймер оттайки для холодильника Indesit ТЭУ-01-х (ТИМ-01)
- Войдите на сайт для отправки комментариев
Сб, 07/08/2021 - 21:39
Выполнен на TINY13A, пятаки для программирования имеются, прошивки не нашёл.
Попробуем накидать для него прошивку.
Так как первый пост не редактируется, оформил таблицу по работе разных модификаций таймера и размещу в следующем посте.
Информацию брал отсюда. Будем пробовать ремонтировать )))
Таблица:
Исполнение
Продолжительность холодильного режима, Тхр.ч.
Продолжительность режима активной оттайки , Тао.мин.
Продолжительность режима пассивной оттайки , Тпо.мин.
Режим,
в который таймер переходит при включении
ТИМ-01.11
8
Не ограничивается
2
ХР
ТИМ-01С
8
Не ограничивается
2
АО
ТИМ-01Н
12
Не ограничивается
2
АО
ТИМ-01Ф-2
2
15
0
ХР
ТИМ-01Ф-3
3
30
0
ХР
ТИМ-01Ф-8
8
10
0
ХР
ТИМ-01Т-2
2
15
0
ХР
ТИМ-01Т-3
3
30
0
ХР
ТИМ-01Т-8
8
10
0
ХР
ТИМ-01С-1
8
<=40
2
АО
ТИМ-01H-1
12
<=40
2
АО
ТИМ-01.11-1
8
<=40
2
ХР
ТИМ-01
ТЭУ-01-1
8
Опр.тепл.рел. но <=40
10
ХР t=-10C в АО
ТЭУ-01-2FW1
12
Опр.тепл.рел. но <=40
10
ХР t=-10C в АО
ТЭУ-01-3FW2
Опр.тепл.рел. но <=40
10 (по факту 8)
ХР t=-10C в АО
ТЭУ-01-8
ТЭO-02
12 (заявлено)
Опр.тепл.рел. но <=40
10
ХР t=-10C в АО
Прошивки будут тут, просьба не комментировать!!!
ТЭУ-01-2 прошивка, взято здесь описание алгоритма - тут
HEX
EEP
1) Основная прошивка во флэш имеет расширение *.hex
2) Прошивка EEPROM: *.eep.
Значения для фьюзов:
lfuse 0x6A (все по-умолчанию)
hfuse 0xFB (BOD level 2.7V, остальное по умолчанию)
Если шить через простой программатор usbasp, то строки запуска avrdude могут выглядеть так
avrdude.exe -p t13 -c usbasp -B 8kHz -P usb -U flash:w:Timer_TEU.hex:a
avrdude.exe -p t13 -c usbasp -B 8kHz -P usb -U eeprom:w:Timer_TEU.eep:a
avrdude.exe -p t13 -c usbasp -B 8kHz -u -U lfuse:w:0x6A:m
avrdude.exe -p t13 -c usbasp -B 8kHz -u -U hfuse:w:0xFB:m
Эти строки можно скопировать в bat-файл и запускать из директории, где лежит прошивка и avrdude
Средствами IDE на ядре microCore может так:
// Настройка фьюзов // Fuse High Byte = 11111011 (0xFB) // SELFPRGEN = 1 (Self Programming Disabled) // DWEN = 1 (debugWire disabled, if enabled SPI low voltage programming is impossible) // BODLEVEL1 = 0 (Brown-out Detector trigger level = 2.7V) // BODLEVEL0 = 1 (Brown-out Detector trigger level = 2.7V) // RSTDISBL = 1 (External Reset enabled, if disabled SPI low voltage programming is impossible) // Fuse Low Byte = 01101010 (0x6A) // SPIEN = 0 (Serial Programming enabled, if disabled low and high voltage programming is impossible) // EESAVE = 1 (EEPROM is not preserved through Chip Erase) // WDTON = 1 (Watchdog Timer is not locked to be reset source, it can be set-up by software) // CKDIV8 = 0 (CLKPR = 3 upon start: divide clock by 8) // SUT1 = 1 (Slowly rising power: additional 64 ms for start-up time) // SUT0 = 0 (Slowly rising power: additional 64 ms for start-up time) // CKSEL1 = 1 (Clock source internal 9.6 MHz) // CKSEL0 = 0 (Clock source internal 9.6 MHz) #include <avr/io.h> #include <stdlib.h> #include <avr/interrupt.h> #include <util/delay.h> //#include <avr/eeprom.h> // не забываем подключить #include <EEPROM.h> #define freezer 0x00 //; freeser mode #define heater 0x01 //; heater mode #define _1min 12 //; 1 min const #define _1hour 60*_1min //; 1 hour const #define _2min 2*_1min //; 2 min const #define _8min 8*_1min //; 8 min const #define _8hour 8*_1hour //; 8 hour const #define ac_tick 15/0,02 //; количество 20-ти миллисекундных тиков за 15 секунд #define xp_tick 8*60*60/15 //; количество 15 секундных тиков в 8-часах работы #define po_tick 10*60/15 //; количество 15 секундных тиков за 10 минут #define ao_tick 40*60/15 //; количество 15 секундных тиков за 40 минут volatile int schetchik = 0; // считает в 15 секундных интервалах volatile int ac_schetchik = 0; bool ac_flag = 0; bool btn_flag = 0; volatile byte work_mode = 0; // 0 - рабочий режим, 1 - активная оттайка, 2 - пассивная оттайка // Прерывания // INT0 обрабатывает нажатие кнопки (настраивать INPUT_PULLUP) // PCINT2 (настраивать INPUT) ISR(INT0_vect) { // наш код обработки нажатия кнопки принудительного оттаивания if (!btn_flag) // еще не было нажатия кнопки { btn_flag = 1; digitalWrite(0, HIGH); // включим реле оттайки schetchik = 0; // сбросим счетчик в ноль work_mode = 1; EEPROM.write(2, work_mode); } } // Обработчик прерывания PCINT0 ISR(PCINT0_vect) { ac_schetchik++; if (ac_schetchik >= ac_tick) { ac_flag = 1; // увеличить счетчик в EEPROM ac_schetchik = 0; } } //Функции (с) Кэп void EEPROM_write(int uiAddress, char ucData) { while (EECR & (1 << EEWE)); /*Ждать завершения предыдущей записи*/ EEAR = uiAddress; /*Проинициализировать регистры*/ EEDR = ucData; EECR |= (1 << EEMWE); /*Установить флаг EEMWE*/ EECR |= (1 << EEWE); /*Начать запись в EEPROM*/ } char EEPROM_read(int uiAddress) { while (EECR & (1 << EEWE)); /*Ждать завершения предыдущей записи*/ EEAR = uiAddress; /* Проинициализировать регистр адреса*/ EECR |= (1 << EERE); /*Выполнить чтение*/ return EEDR; } void EEPROMWriteInt(int p_address, int p_value) // принимает 2 параметра, адресс и число 0...65534 { // забирает 2 ячейки, так что использовать ячейки 0, 2, 4, 6... byte lowByte = ((p_value >> 0) & 0xFF); byte highByte = ((p_value >> 8) & 0xFF); EEPROM_write(p_address, lowByte); EEPROM_write(p_address + 1, highByte); } int EEPROMReadInt(int p_address) //Считывает число в диапазоне 0...65534 { // использует 2 ячейки, так что считывает ячейки 0, 2, 4, 6... byte lowByte = EEPROM_read(p_address); byte highByte = EEPROM_read(p_address + 1); return ((lowByte << 0) & 0xFF) + ((highByte << 8) & 0xFF00); } void setup() { DDRB = 0b00000001; // pinMode(0, OUTPUT); PORTB &= ~(1 << PB0); // digitalWrite(0, LOW); pinMode(1, INPUT); // D1 PB1 (ATTINY13A - Attiny13) PORTB |= (1 << PB1); // D1 - INPUT_PULLUP pinMode(2, INPUT); // D2 PB2 (ATTINY13A - Attiny13) // Настройка прерываний // Инициализация INT0 и PCINT0 cli(); // Запрещаем прерывания на время изменения WDE и WDP MCUCR = _BV(ISC01) | _BV(ISC00); // FALLING // RISING - 11, LOW - 00,HIGH - 01, FALLING - 10 GIMSK |= (1 << PCIE) | _BV(INT0); // Разрешаем внешние прерывания PCINT0, INT0 PCMSK |= (1 << PB2)/* | (1<<PB1)*/; // Разрешаем по маске прерывания на ноге (PCINT2) sei(); // Разрешаем прерывания глобально: SREG |= (1<<SREG_I) // восстанавливаем значение счетчика и режим работы work_mode = EEPROM.read(2); schetchik = EEPROMReadInt(0); } void loop() { work_mode = EEPROM.read(2); // Раз в 15 секунд пишем счетчик в EEPROM if (ac_flag) { schetchik++; EEPROMWriteInt(0, schetchik); ac_flag = 0; } if (work_mode == 0) { if (schetchik >= xp_tick /*8 часов */) { // включить режим активной оттайки digitalWrite(0, HIGH); work_mode = 1; EEPROM.write(2, work_mode); schetchik = 0; // запущен таймер активной оттайки } } if (work_mode == 1) { if (schetchik >= ao_tick /*8 часов */) { work_mode = 2; EEPROM.write(2, work_mode); schetchik = 0; // запущен таймер пассивной оттайки } } if (work_mode == 1) { if (schetchik >= po_tick /*8 часов */) { btn_flag = 0; work_mode = 0; EEPROM.write(2, work_mode); schetchik = 0; // запущен таймер пассивной оттайки digitalWrite(0, LOW); // переключиться в режим охлаждения } } }Контроль температуры в холодильнике удобно вести залив на ESP8266 c парой-тройкой подключенных датчиков этот скетч:
PS определение номеров датчиков DS18B20 не требуется, SSID и пароль установить по вашему роутеру WI-FI.
Упрощённая схема включения с термореле по двухточечной схеме:
слабое место девайса - выпрямитель, резисторы номиналом 47 Ом по схеме реализованы на двух последовательно включенных резисторах номиналом по 27 Ом.
При проверке неработающего девайса обнаружено, что они выгорели.
Плёночные конденсаторы 0,33 x 400V имели фактическую ёмкость 0,07 и 0,12 микрофарады.
По типоразмеру однозначно не 400 а 250 вольт. Attiny13A исправна, осталось проверить на доступность скачивания прошивки, если мк не "защёлкнут", выложу.
Думал такое заделать.
Но потом понял, что при стоимости фабричного устройства в 450р, штучное изготовление ни разу не выгодно. Время только тратить. Собственно по этому их не ремонтируют , а меняют.
меняное работает месяц-два и даёт дуба...терзаем сомнениями, просится диод последовательно с резистором 1 Мом (первая нога реле)
PS оригинальное реле находил за 1400=
У меня дохлый где-то валяется. Причём, дохлая именно Тини13.
Получается, что дохнет именно по питанию?
Сложно сказать. Мне принесли в ремонт, выпаял Тини13 - никаких позывов на чип детект... А уж из за чего - хз.
Сложно сказать. Мне принесли в ремонт, выпаял Тини13 - никаких позывов на чип детект... А уж из за чего - хз.
у меня на новых тиньках кодик 0000, дохлые или залоченные? из 10 штук - 2 точно, одна не проверялась
на аналоговый вход напряжение поступает с размахом до 6 вольт, что не есть хорошо...
оказалось, что так задумывалось, переменное напряжение внутренними диодами ограничивается и просчитывается каждый 20 миллисекундный отрезок времени, от него работают счетчики.
Автор альтернативной разработки использует WDT таймер который с интервалом в 5 секунд скидывает в EEPROМ
накопительный счетчик. Исходя из таблицы счетчиков должно быть три XP, AO и PO режимов.
Напряжение не является проблемой, если имеет высокое внутреннее сопротивление. Я 220 подаю на вход через 1,5 мом и ничё.)
Напряжение не является проблемой, если имеет высокое внутреннее сопротивление. Я 220 подаю на вход через 1,5 мом и ничё.)
там через мегаом + делитель 30ком на землю, надо вскрыть и посмотреть, что именно вышло из строя...
не поленился быстренько сделал приборчик для проверки, комплектующие в 800 рублей обошлись, теперь можно и тестером пройтись, что там выходит из строя и почему
не поленился быстренько сделал приборчик для проверки...
Ну да, "внутреннее" там не к месту.
Насколько это актуально? Мне холодильщики только однажды приносили этот таймер для оттайки.
Хотя, после переустановки кондиционера, я стал им должен всю жизнь.)
не поленился быстренько сделал приборчик для проверки...
Ну да, "внутреннее" там не к месту.
Насколько это актуально? Мне холодильщики только однажды приносили этот таймер для оттайки.
Хотя, после переустановки кондиционера, я стал им должен всю жизнь.)
я вчера ТИМ-1 починил, сопли в пайках были, подчистил, поставил, работает, холодильщики жеж гонят полную пургу, сказали надо поменять реле оттайки, термореле, термостат и мозги, дескать оно там всё привязывается к мозгам )))
Разводят бабушек и дедушек пенсионеров на бабки, так как железяки без самого ремонта уже выходили на 10 тыр. Модель INDESIT BIA18NF то-есть самая простая, вентилятор обдува на движке 220 вольт, аналогичный как в проигрывателях 3-го класса ...
Да, ты сильно в них веришь, что далеко от истины, свой кондей (LG) починили сами, плата там сложная, износ контактной группы реле оттайки был в результате перемерзал...
По неисправности ТЭУ-01-3, сгорели резисторы цепи выпрямителя +24 и +5, обведены на рисунке.
замена резисторов, вместо +24 вольта чуть более 8, вместо +5 вольт чуть более 2.5 вольта, видимо не зря погорели, в точках электролитов сопротивление более 200 ком, непонятки )))
Резистор - пассивный элемент, сам по себе не горит.
Что касается ремнтников, что разводят - на мой взгляд как минимум половина и сами не знают, как оно устроено - вот и меняют все подряд, пока не повезет.
нечему там засаживать напряжение, может электролит под большим напряжением течёт разве что, но тестер этого не видит, схема то пяток деталей всего )))
Даушь, пяток деталек )))
и не говори...очень странная схема...я о питании
и не говори...очень странная схема...я о питании
Для таких случаев мне нравятся "последовательные источники питания". Эт я только что придумал название. По науке не знаю как это называется. Вот набросал схему.
Реле нужно выбирать на большее напряжение, например 24-42 В и можно выше - ток удержания будет ниже.
С1 такой емкости, чтоб ток через него был больше тока удержания реле.
При срабатывании реле ток на источник +5В потечет через обмотку реле. В противном случае-через VD2.
Схему холодильника желательно не менять )))

Толком еще ничего не написал, а скетч уже: )))
Скетч использует 858 байт (83%) памяти устройства. Всего доступно 1024 байт.
Глобальные переменные используют 28 байт динамической памяти.
сменил ядро на MicroCore, поинтересней вышло:
Скетч использует 584 байт (57%) памяти устройства. Всего доступно 1024 байт.
Глобальные переменные используют 21 байт (32%) динамической памяти, оставляя 43 байт для локальных переменных. Максимум: 64 байт.
Упрощённая схема включения с термореле по двухточечной схеме:
слабое место девайса - выпрямитель, резисторы номиналом 47 Ом по схеме реализованы на двух последовательно включенных резисторах номиналом по 27 Ом.
При проверке неработающего девайса обнаружено, что они выгорели.
Плёночные конденсаторы 0,33 x 400V имели фактическую ёмкость 0,07 и 0,12 микрофарады.
По типоразмеру однозначно не 400 а 250 вольт. Attiny13A исправна, осталось проверить на доступность скачивания прошивки, если мк не "защёлкнут", выложу.
Резисторы могли выгореть только из-за неисправных пленочных конденсаторов. Если уж ставить пленочные, то только на 630 В. А резисторы можно и поменьше номиналом поставить.
Так и не понял для чего резистор 3.9 кОм и диод последовательно с ним? Если только это стабилитрон так изобразили?
Реле на сколько вольт?
реле на 24 вольта, конденсаторы плёночные по схеме на 400 вольт, по маркировке тоже, но по типоразмеру, хоть наши К73-17, хоть китайские максимум 250 вольт, работал много с плёночными конденсаторами местного производства (Карачаевск) проблем вообще никогда не было, плёнка там была японская, а то что могут терять ёмкость для меня вообще открытие )))
На 630 вольт по высоте в реле не войдут...кстати по даташиту наши должны держать перенапряжение в 1.5 раза 1 минуту, то-есть 400 вольтовых настоящих достаточно
Предполагаю, что диод с резистором 3.9 килоом - погасить дугу или переходные процессы на контактах реле
Бывает индусский код, а бывают индусские схемы)))
Всеж думаю последовательно с резистором 3.9кОм стабилитрон вольт так на 30. Это чтоб электролит 22х100В не пукнул.
Если при работе компрессора срабатывает реле, то выброс ЭДС с компрессора фигачит через через RC, цепь питания реле, и МК может достаться. И какой там величины выброс, и сколько кому достанется - вот вопрос. Но похоже достается всем))
При замкнутом реле RC цепочки запаралелены - типа увеличить ток по питанию этого реле. Зачем? Реле сработало, и для его удержания нужен ток в четверть от номинала... Так что одни вопросы.
... Так что одни вопросы.
опишу как оно работает, в этой схеме запитка реле оттайки от сети 220 вольт осуществляется через две цепи
1. Фаза, через реле терморегулятора TH1 приходит на контакт 3 реле оттайки с контакта 3 имеем первую RC цепь питания выпрямителя реле (+24V) и с выхода 1-й RC цепи запитывается выпрямитель +5 вольт питания контроллера. Контакт 3 реле оттайки НЗ контактом замыкает цепь питания компрессора (контакт 2 реле оттайки)
2-я RC цепь с выхода первой цепи приходит на контакт 4 реле оттайки и далее через нагреватель сопротивлением 240 ом на тепловое реле TR тэна испарителя.
2. При тёплом включении температура тэна испарителя >+8C контакты теплового реле TR разомкнуты и реле оттайки обесточено. Включается компрессор, вентилятор обдува испарителя и холодильник начинает набирать режим.
3. При достижении температуры -10С контакты реле TR замыкаются образуя в средней цепи делителя (RC1) - (RC2) переменное напряжение амплитудой до 110 вольт, начинают работать оба выпрямителя +24 вольта и +5 вольт
4. Между выводами 1 и 2 реле оттайки TR появляется полное напряжение сети 220 вольт, через делитель 1Мом - 30Ком (порядка 6 вольт) поступает на вывод AC1 микроконтроллера.
5. По наличию этого напряжения при первом включении включается реле оттайки, снимается фаза с контакта 2 реле оттайки и через рабочую обмотку компрессора на второй контакт реле оттайки (общий провод контроллера) подтягивается нулевой провод сети 220 вольт )))
То-есть нулевой провод подтягивается на общий провод контроллера или через тэн оттайки или через рабочую обмотку компрессора
Далее всё по циклограмме!
Да, скорее всего для ограничения выбросов на выпрямителе +24V в цепи RD должен быть стабилитрон, маркировки на диоде нет, по внешнему виду стабилитрон на 5,1 вольта, этот диод и диод в цепи реле одинаковы
по аналогичной схеме построены холодильники Stinol, Indesit, Ariston
Это чтоб электролит 22х100В не пукнул.
кстати, с электролитами всё очень не просто, купил целый ряд электролитов, для того, чтобы можно было быстро отремонтировать разные БП с ШИМ контроллерами, лежали они так себе, лежали целый год, полез в коробочку, а все раздулись, как от перенапряжения...марки RUBICON однако, полез посмотреть, что там не так, других вариантов, что нарушена химия электролита на ум не пришло...в ответственных БП ставим Хитачи, только найти их сложно
опишу как оно работает, в этой схеме запитка реле оттайки от сети 220 вольт осуществляется через две цепи
1. Фаза, через реле терморегулятора TH1 приходит на контакт 3 реле оттайки с контакта 3 имеем первую RC цепь питания выпрямителя реле (+24V) и с выхода 1-й RC цепи запитывается выпрямитель +5 вольт питания контроллера. Контакт 3 реле оттайки НЗ контактом замыкает цепь питания компрессора (контакт 2 реле оттайки)
При обесточеном реле оттайки фаза на земле контроллера и первая RC цепь бездействует.
2-я RC цепь с выхода первой цепи приходит на контакт 4 реле оттайки и далее через нагреватель сопротивлением 240 ом на тепловое реле TR тэна испарителя.
При обесточеном реле оттайки и разомкнутых контактах TR вторая RC цепь тоже бездействует. При работе компрессора схема обесточена.
2. При тёплом включении температура тэна испарителя >+8C контакты теплового реле TR разомкнуты и реле оттайки обесточено. Включается компрессор, вентилятор обдува испарителя и холодильник начинает набирать режим.
3. При достижении температуры -10С контакты реле TR замыкаются образуя в средней цепи делителя (RC1) - (RC2) переменное напряжение амплитудой до 110 вольт, начинают работать оба выпрямителя +24 вольта и +5 вольт
4. Между выводами 1 и 2 реле оттайки TR появляется полное напряжение сети 220 вольт, через делитель 1Мом - 30Ком (порядка 6 вольт) поступает на вывод AC1 микроконтроллера.
5. По наличию этого напряжения при первом включении включается реле оттайки, снимается фаза с контакта 2 реле оттайки и через рабочую обмотку компрессора на второй контакт реле оттайки (общий провод контроллера) подтягивается нулевой провод сети 220 вольт )))
При вкл реле оттайки на пине АС1 МК пропадает напряжение.
То-есть нулевой провод подтягивается на общий провод контроллера или через тэн оттайки или через рабочую обмотку компрессора
Скажу так: земля МК до вкл реле оттайки сидит на фазе, а после срабатывания реле соединяется с нулем через обмотку компрессора. Такая "плавающая земля".
Далее всё по циклограмме!
Да, скорее всего для ограничения выбросов на выпрямителе +24V в цепи RD должен быть стабилитрон, маркировки на диоде нет, по внешнему виду стабилитрон на 5,1 вольта, этот диод и диод в цепи реле одинаковы
Дополнил, если правильно все понял.
Дополнил, если правильно все понял.
Теперь можно попробовать накидать скелет скетча. )))
При первом включении или включении после разморозки с отключением электропитания контакты реле TR разомкнуты - это будет одна циклограмма, при работе в штатном режиме оттаивания контакты реле TR остаются замкнутыми, регулятор температуры даже в минимальном положении при гистерезисе порядка 8 градусов не должен уходить из области отрицательных температур, а если говорить о запасе то пожалуй не более -12 градусов цельсия!?
Всё таки оттаивание как мне кажется не должно выводить реле TR в режим размыкания контактов...
проверил, TR замкнуто при подаче питания сразу включается режим оттаивания на 10 минут, через 10 минут реле отпускает и включается компрессор... Да уж...
Логика работы странная )))
Будем пробовать так:
Исходное TR разомкнуто:
1. Подаём питание
2. Включается компрессор
3. Имитируем срабатывание TR
4. Включается режим оттаивания (на 10 минут)
5. Имитируем размыкание TR (ранее 10 минутного цикла нагревания) - реле оттаивания
остаётся в замкнутом положении на 10 минут компрессор и нагреватель оттаивателя обесточены
6. Через 10 минут включается компрессор
7. Имитируем TR переведя в режим замыкания, компрессор продолжает работать
8. Снимаем питание имитирую срабатывание термореле установки температуры.
9. Подаём питание - включается компрессор
10. Имитируем многократное срабатывание термореле - при каждом срабатывании включается компрессор,
по видимому вошёл в режим отсчёта времени между оттаиваниями, реле TR оставляю замкнутым
Из исходного: Проблемы начались при отключении питания, после чего испаритель полностью перемёрз.
Магическая кнопка нажатие которой доступно через технологическое отверстие в реле оттайки полностью перезапускает цикл работы реле оттайки.
Сервис мануала нет, но выходит как-то так )))
Выходит, что 8 часов, это 8 часов работы компрессора, как только это время накопится включится режим оттайки?!
Если раз в минуту писать в епром на сколько времени хватит?
PS реле переходит в рабочий режим при выходе из пассивного режима (TR разомкнуто, питание на реле поступает через рабочую обмотку компрессора, отработан временной отрезок пассивного режима)
Выходит, что 8 часов, это 8 часов работы компрессора, как только это время накопится включится режим оттайки?!
Я тоже так думаю. При отключеном компрессоре питание на схему не подается, и время простоя компрессора отследить невозможно.
Если раз в минуту писать в епром на сколько времени хватит?
Не менее чем на 100 000 минут))
Можно считать количество включений компрессора.
Как я представляю алгоритм.
STEP_1:
только включился и работает компрессор (К). Появилось питание МК.
Если контакты TR замкнуты - продолжаем считать время работы К
если разомкнуты - было длительное откл. электричества или прошла оттайка - считаем время работы К сначала.
Если насчитали 8 ч, переходим на STEP_2
STEP_2:
контакты TR замкнуты, К работает.
Включаем реле оттайки, одновременно отключая К.
Если контакты TR разомкнулись, переходим на STEP_3
STEP_3:
Ждем время пассивной оттайки 2-10 мин. переходим на STEP_4
STEP_4:
Сброс времени работы К. Отключаем реле оттайки. Питание пропадает. К сам включается. Контакты TR разомкнуты.
После замыкания контактов TR питание МК появится и начнется STEP_1.
я уже тут всю голову изломал...не выходит каменный цветок...если писать в еепром можно напороться на сбой при отключении питания...вот недаром он у меня два раза перемёрз...возможно конечно глючит TR, там биметалл, контакт мог и пригореть за время эксплуатации...единственное радует, что таких attiny13 у меня целый десяток, сегодня собрал переходник, шьётся на ура из IDE...
теперь хочу попробовать считать программу их тиньки, может не закрыта? осталось найти какой GUI поддерживает ARDUINO AS ISP
PS интересно, в полностью перемёрзшем холодильнике TR может быть разомкнуто? (t > -12C)
прошивку выложил в первом посте
Ещё немного букв найдено на просторах:
Циклограмма работы таймера примерно следующая:
1) При включении теплого холодильника датчик разомкнут, таймер обесточен, реле таймера в обесточенном состоянии замыкает компрессор. В этот момент кнопку нажимать бесполезно
2) Когда температура в камере опустилась до -10, датчик замыкается, на таймер поступает питание (через входной резистивно-емкостной делитель по цепи датчик-ТЭН), и таймер начинает считать полуволны синуса от сети 50Гц. Этот этап заканчивается, когда таймер насчитал 8 часов. Этот этап можно принудительно закончить, если нажать кнопку.
3) Когда прошло 8 часов после замыкания датчика (или после нажатия на кнопку), микроконтроллер включает режим оттайки. При этом он включает реле, переключая питание с компрессора на ТЭН. Полуволны синуса сети при этом не поступают на вход микроконтроллера, и он не ведет отсчет, хотя сам микроконтроллер запитан и удерживает реле включенным. Этот этап продолжается до момента размыкания датчика при +10 градусах.
(или срабатывания таймера 40 минут) -дополнено
4) Когда достигнута температура +10 на датчике, он размыкается. Таймер по-прежнему запитан, так как, начиная с этапа 3, ноль идет через низкоомные обмотки неработающего компрессора, а питание через две резистивно-емкостные ветви, которые при включенном реле параллелятся (а не делят питание) для увеличения мощности питания при включенном реле (оно потребляет гораздо больше остальной части схемы). До размыкания датчика, т.е. на этапе 3, он замыкал синус сети на ноль, и микроконтроллер ничего не считал. На этапе 4 датчик разомкнут, ТЭН поэтому обесточен, и через пассивный ТЭН синус проходит на вход микроконтроллера, который по ним отсчитывает 2 мин (время пассивной оттайки, когда и ТЭН обесточен, и компрессор еще не запущен).(время пассивной оттайки10 минут) дополнено
5) Когда истекло время пассивной оттайки, микроконтроллер выключает реле, включая таким образом компрессор и одновременно обесточивая самого себя, потому что питание не может поступать ни через компрессор, который в работе, ни через цепь датчик-ТЭН, потому что датчик разомкнут. Этап 5 – это на самом деле этап 1 выше, цикл повторяется. Всего 4 этапа: 1 и 2 заморозка, причем на этапе 1 нет питания на таймере; этап 3 – активная оттайка, когда включен ТЭН; этап 4 – пассивная оттайка, когда уже выключен ТЭН, но еще не включен компрессор
Пиши в еепром секциями и все будет хорошо.
почитал форумы, конденсатор питания держит порядка 150 миллисекунд, при тактовой 300 килогерц, если определять пропадание питания за 80 миллисекунд, 70 миллисекунд достаточно чтобы записать счетчик в епром
Думаю, что такая запутанная схема и алгоритм электронного таймера пришли от желания сохранить взаимозаменяемость с механическим таймером. Изначально таймеры были механическими и такой алгоритм был естественным и простым для него.
Система находится в режиме первоначального набора холода, таймер подает питание на компрессор и вентилятор. Однако, испаритель еще недостаточно охладился, поэтому контакты дефрост-термостата разомкнуты.
Обратите внимание на то, что двигатель таймера питается не напрямую от источника, а через нагреватель оттайки. Сопротивление двигателя значительно больше сопротивления нагревателя, поэтому при последовательном их включении практически вся мощность будет выделяться на двигателе, оставляя нагреватель холодным.
Система работает в таком режиме недолго, около 10 минут. Обычно, этого времени хватает, чтобы испаритель достаточно охладился и контакты дефрост-термостата замкнулись.
Система находится в режиме охлаждения, таймер подает питание на компрессор и вентилятор. Испаритель уже достаточно охладился, поэтому контакты дефрост-термостата замкнуты.
Система перешла в режим оттайки. Таймер снял питание с компрессора и вентилятора и подал его на нагреватель оттайки. Испаритель пока имеет низкую температуру, поэтому контакты дефрост-термостата замкнуты.
Под действием нагревателя испаритель прогрелся выше температуры плавления инея и контакты дефрост-термостата разомкнулись, сняв питание с нагревателя. Таймер все еще находится в режиме оттайки, но на его двигатель теперь подается питание, поэтому через некоторое время он переключит свои контакты и перейдет в режим набора холода.
http://nofrost.ru/ru/diagrams/standard_feedback
видимо да, было просто и со вкусом )))
А вот интересно, может ли attiny13a в глубоком сне от электролита 22мкф продержаться 8 часов
Ионистор поставь, точно продержится
А вот интересно, может ли attiny13a в глубоком сне от электролита 22мкф продержаться 8 часов
Не думаю.
А вот интересно, может ли attiny13a в глубоком сне от электролита 22мкф продержаться 8 часов
135 секунд
А вот интересно, может ли attiny13a в глубоком сне от электролита 22мкф продержаться 8 часов
Не думаю.
это было в описании, что без питания сохраняет предыдущее состояние в течении 8 часов, одно дело пишет в епром, но при чем тут 8 часов тогда )))
Описание делал писатель-фантаст на аутсорсинге.
Описание делал писатель-фантаст на аутсорсинге.
мастер по ремонту холодильников скорее )))
При цене в 500 рублей ремонт конечно практического смысла не имеет, но вот при разборе схемы и принципа работы - логика построения программы интересна (как задачи Евгения). Есть логические косяки обойти которые я пока в принципе не понимаю как, а интересно, я так понимаю разработчик оригинального девайса из Орла...
Неплохо было бы услышать начальника транспортного цеха...
Счетчик наработки сперва хотел сделать на миллис, но увидел, что предлагают считать тики сети...
Но это не главное, а вот поведение программы при внезапном отключении сети и обесточивании девайса...как обеспечить возврат в точку вылета из программы...только накапливать счетчики и вид операции в епром...альтернативы не вижу...тут засада с этими тиньками...перестали читаться...придётся подключить тяжёлую артиллерию...ChipProg-48 ))) (их есть у меня, но на работе)
Битва таймеров продолжается, еще один боец:
Таймер электронный ТЭО-02
Если контакты термореле разомкнуты, то при подаче питания запустится компрессор. Температура опускается до замыкания контактов теплового реле. Как только они замкнутся, таймер переводится в режим оттайки и находится в режиме оттайки до размыкания контактов теплового реле. (но не более 40 минут - кажется) После этого переходит в режим «пассивной» оттайки на 3 мин (10мин - по измерениям). Затем включается холодильный режим и работой компрессора управляет терморегулятор, а таймер отсчитывает 12 часов работы компрессора. Если на таймер в течении предыдущих 4-8 часов подавалось питание, то он не перейдет в режим оттайки, даже если контакты теплового реле будут разомкнуты. Для того что бы он перешел в режим оттайки, необходимо нажать на кнопку перед подачей питания на схему.
ЗЫ проверяю заявленные характеристики, немного не сходится с описанием. Питание схемы организовано по контактам 1-2 потребляет 2ма
В рабочий режим переходит после отработки режима пассивной оттайки .
Выполняя просьбу UA6EM, привожу исходный код программы для таймера оттайки
Выполняя просьбу UA6EM, привожу исходный код программы для таймера оттайки
Код на ассемблере, ниже, адаптировать под IDE выше моих возможностей
; ; Holodilnik_ASM.asm ; ;CLK < 4 MHz ; ; Program followes the next conventions about GPR: ; R0-R15 used as variables (0<=d<=31: ADC,ADD,AND,ASR,BLD,BST,CLR,COM, CP,CPC,CPSE,DEC,ELPM,EOR, IN,INC, ; LAC,LAS,LAT, LD,LDS,LPM,LSL,LSR,MOV,MUL, NEG, OR, POP,ROL,ROR,SBC,SUB) ; R16-R20 used as intermediate variables (16<=d<=31: ANDI, CBR, CPI, LDI, LDS, MULS, ORI, SBCI, SBR, SER, SUBI) ; R21-R25 used by subroutines as formal parameters ; R26-R27 used as 16-bit counter X ; R28-R31 used as two 16-bit indirect address register pointers Y, Z ; ;Fuse High Byte = 11111011 (0xFB) ;SELFPRGEN = 1 (Self Programming Disabled) ;DWEN = 1 (debugWire disabled, if enabled SPI low voltage programming is impossible) ;BODLEVEL1 = 0 (Brown-out Detector trigger level = 2.7V) ;BODLEVEL0 = 1 (Brown-out Detector trigger level = 2.7V) ;RSTDISBL = 1 (External Reset enabled, if disabled SPI low voltage programming is impossible) ; ;Fuse Low Byte = 01101010 (0x6A) ;SPIEN = 0 (Serial Programming enabled, if disabled low and high voltage programming is impossible) ;EESAVE = 1 (EEPROM is not preserved through Chip Erase) ;WDTON = 1 (Watchdog Timer is not locked to be reset source, it can be set-up by software) ;CKDIV8 = 0 (CLKPR = 3 upon start: divide clock by 8) ;SUT1 = 1 (Slowly rising power: additional 64 ms for start-up time) ;SUT0 = 0 (Slowly rising power: additional 64 ms for start-up time) ;CKSEL1 = 1 (Clock source internal 9.6 MHz) ;CKSEL0 = 0 (Clock source internal 9.6 MHz) .include <tn13adef.inc> .equ freezer = 0x00 ; freeser mode .equ heater = 0x01 ; heater mode .equ _1min = 12 ; 1 min const .equ _1hour = 60*_1min ; 1 hour const ;.equ _2min = 2*_1min ; 2 min const .equ _8min = 8*_1min ; 8 min const .equ _8hour = 8*_1hour ; 8 hour const .ESEG .ORG 0x20 CNT_5sec: .dw 0x0000 ; clear timer-counter in EEPROM MODE: .db freezer ; set MODE = freezer .CSEG rjmp RESET ; Reset Handler rjmp EXT_INT0 ; IRQ0 Handler rjmp PCINT ; Pin Change interrupt Handler reti;rjmp TIM0_OVF ; Timer0 Overflow Handler reti;rjmp EE_RDY ; EEPROM Ready Handler reti;rjmp ANA_COMP ; Analog Comparator Handler rjmp TIM0_COMPA ; Timer0 CompareA Handler reti;rjmp TIM0_COMPB ; Timer0 CompareB Handler rjmp WATCHDOG ; Watchdog Interrupt Handler reti;rjmp ADC_INTR ; ADC Conversion Handler RESET: ; Main program start ; Set Stack Pointer to top of RAM ldi r16, low(RAMEND) out SPL,r16 ; ------------------------------WDT settings------------------------------ rcall WDT_off ; switch off watchdog reset ; --------------------------Power down settings--------------------------- ; Main Clock prescaler setup (timed sequence) ldi r16, 0x80 ldi r17, 5 ; set divider to 2^5=32 (CLK=9.6MHz/32=0.3 MHz) out CLKPR,r16 ; set Clock Prescaler Change Enable (CLKPCE) bit ; Got 4 cycles to set the new Clock Prescale value from here out CLKPR,r17 ; set Clock Prescale Factor (1-8) to 2^r17 ; Power Off Comparator for reduction of the power consumption sbi ACSR, ACD ; set ACD bit in Comparator Control and Status Register ; Power Off ADC for reduction of the power consumption ldi r16, 1 ; set PRADC bit in... out PRR, r16 ; ...Power Reduction Register ; Sleep mode setup ldi r16, (1<<SE) ; allow sleep mode out MCUCR, r16 ; -------------------------------PortB setup------------------------------ ; set pull-up on PB1 input to use the KEY1 ldi r16, (1<<PB1) | (1<<PB3) | (1<<PB4) | (1<<PB5) out PORTB, r16 ; set PB0 as output (freeser mode by default), PB1-PB5 are inputs ldi r16, 1<<PB0 out DDRB, r16 ; ------------------------------Timer0 setup------------------------------ rcall Timer_STOP ; stop and clear Timer0 ; setup Timer0 mode ldi r16, 2 ; load mode 2 (Clear Timer on OCRA Match) to... out TCCR0A, r16 ; ...Timer/Counter Control Register A ; set Timer0 to 50Hz pulse counting ldi r16, 7 ; load CS0[2:0]=7 (Clock on T0 rising edge) to... out TCCR0B, r16 ; ...Timer/Counter Control Register B ; set Timer0 period overflow to 250 (250/50Hz=5sec) ldi r16, 249 ; load TOP value (T0max-1) to... out OCR0A, r16 ; ...match A Register ; clear Timer0 interrupt flags ldi r16, 0x0E ; load a logic ones to... out TIFR0, r16 ; ...Timer/Counter 0 Interrupt Flag Register ; set mask for Timer0 interrupts ldi r16, 1<<OCIE0A; enable OCIE0A interrupt with... out TIMSK0, r16; ...Timer/Counter Interrupt Mask Register ; ------------------------------Check EEPROM------------------------------ ; Read 5sec interval counter low byte ldi r24, CNT_5sec rcall EEPROM_read mov XL, r23 ; Read 5sec interval counter high byte ldi r24, CNT_5sec+1 rcall EEPROM_read mov XH, r23 ; Read TCNT0 ldi r24, MODE rcall EEPROM_read bst r23, 0 ; store mode to T-flag cbr r23, 1 ; clear LSB, because... out TCNT0, r23 ; ...only even TCNT0 value is saved brtc EEPROM_Cheked ; if MODE == freeze, jump over heater mode set up ; It's heater mode is saved in EEPROM. ; Check if it is active or passive heater mode. ; If active mode was aborted, switch to heater mode. ; In the case Timer and Counter are zero both, otherwise it's the passive ; mode. Passive mode must be ignored. So freeze mode must be retained, ; but Timer & Counter data are ignored (cleared) ;cpi r23, 0 ;brne Incorrect_Mode ; if TCNT0 != 0, jump over heater mode set up cpi r23, 20 brsh Incorrect_Mode ; if TCNT0 >= 20, jump over heater mode set up ;sbiw XH:XL, 0 ;brne Incorrect_Mode ; if X != 0, jump over heater mode set up sbiw XH:XL, 2 brsh Incorrect_Mode ; if X >= 2, jump over heater mode set up sbi PORTB, 0 ; switch to heater mode Incorrect_Mode: rcall Timer_CLEAR ; clear Timer EEPROM_Cheked: ; ------------------------External interrupts setup----------------------- ; May be pause here to wait for relay toggles? How long? ; INT0 mode setup in r16, MCUCR andi r16, ~3 ; clear INT0 interrupt mode field ori r16, 2 ; falling edge INT0 interrupt out MCUCR, r16 ; PC interrupt mode setup sbi PCMSK, PCINT2 ; PB2 pin change interrupt enable ldi r16, (1<<INT0) | (1<<PCIE) ; define external interrupts... out GIFR, r16 ; ...reset their flags and... out GIMSK, r16 ; ...enable by mask rcall Timer_RUN ; start Timer0 sei ; Enable interrupts INFINITE: sleep rjmp INFINITE ; infinite background cycle TIM0_COMPA: ; compare event happens every 5 sec. if Timer0 is run push YH push YL push r16 in r16, SREG ; store SREG value to Stack adiw XH:XL, 1 ; increment counter X by 5 sec. movw YH:YL, XH:XL; get copy of counter X sbic PORTB, PB0 ; if MODE == heater... rjmp Wait_Heater ; ...jump to heater timeout waiting Wait_Freeze: ; Compare counter against _8hour subi YL, low(_8hour) ; Subtract low byte sbci YH, high(_8hour) ; Subtract with carry high byte brlo End_of_CMP ; if (YH:YL < _8hour), jump to End_of_CMP ; If (YH:YL >= _8hour)... rcall Timer_CLEAR ; ...clear Timer sbi PORTB, 0 ; ...switch to heater mode rjmp End_of_CMP ; jump to End_of_CMP Wait_Heater: ; Compare counter against _8min subi YL, low(_8min) ; Subtract low byte sbci YH, high(_8min) ; Subtract with carry high byte brlo End_of_CMP ; if (YH:YL < _8min), jump to End_of_CMP ; If (YH:YL >= _8min)... rcall Timer_CLEAR ; ...clear Timer cbi PORTB, 0 ; ...switch to freezer mode End_of_CMP: out SREG, r16 ; restore SREG value pop r16 pop YL pop YH reti PCINT: ; this ISR is executed every 10ms if 50Hz pulses are present push r16 in r16, SREG ; store SREG value rcall WDT_INT_Enable ; enable WDT interrupt and clear WDT out SREG, r16 ; restore SREG value pop r16 reti WATCHDOG: ; this ISR is executed once in 32ms after last 50Hz pulse was dissapear push r16 in r16, SREG ; store SREG value rcall WDT_INT_Disable ; disable WDT interrupt ldi r25, 0 ; Erase & Write to EEPROM... ldi r24, CNT_5sec ; ...5sec interval counter... mov r23, XL ; ...low byte rcall EEPROM_Prog ldi r24, CNT_5sec+1 ; ...5sec interval counter... mov r23, XH ; ...high byte rcall EEPROM_Prog ldi r24, MODE ; ...relay mode in r23, TCNT0 ; Save Timer0 bits, but LSB... cbr r23, 1 ; is cleared to save freezer mode by default sbic PORTB, PB0 ; if "Active Mode" == heater... sbr r23, 1 ; ...save heater mode to EEPROM rcall EEPROM_Prog out SREG, r16 ; restore SREG value pop r16 reti EXT_INT0: ; this ISR is executed when Button is pressed push r16 in r16, SREG ; store SREG value rcall Timer_CLEAR ; clear Timer sbi PORTB, 0 ; switch to heater mode out SREG, r16 ; restore SREG value pop r16 reti EEPROM_Prog: ; r23 - EEPROM data to be written, ; r24 - EEPROM address where to write, ; r25 - EEPROM operation: 0x00 - Erase & Write, 0x10 - Only Erase, 0x20 - Only Write. ; Wait for completion of previous write sbic EECR,EEPE rjmp EEPROM_Prog push r16 in r16, SREG ; store SREG value out EECR, r25 ; Set Programming mode out EEARL, r24 ; Set up address (r24) in address register out EEDR, r23 ; Write data (r23) to data register ; Start EEPROM timed sequence cli ; disable interrupts during timed sequence sbi EECR, EEMPE ; Write logical one to EEMPE to enable timed operation sbi EECR, EEPE ; Start EEPROM write by setting EEPE out SREG, r16 ; restore SREG value (I-bit) pop r16 ret EEPROM_read: ; r23 - EEPROM data to be returned, r24 - EEPROM address to be read ; Wait for completion of previous write sbic EECR,EEPE rjmp EEPROM_read push r16 in r16, SREG ; store SREG value ; Read EEPROM at address r24 cli ; disable interrupts during timed sequence out EEARL, r24 ; Set up address (r24) in address register sbi EECR, EERE ; Start eeprom read by writing EERE in r23, EEDR ; Read data from EEPROM data register out SREG, r16 ; restore SREG value (I-bit) pop r16 ret WDT_off: ; If WDTON fuse is programmed (WDTON = 0), ; WDT_off subroutine does nothing. That means WDE is not ; cleared and WDP is not changed. If WDTON fuse is ; unprogrammed (WDTON = 1), WDT_off subroutine clears WDE, ; but WDP is not changed anyway. WDTIE and WDTIF are also ; not changed anyway. push r16 push r17 in r16, SREG ; store SREG value cli ; Turn off global interrupt wdr ; Reset Watchdog Timer ; Clear WDRF in MCUSR in r17, MCUSR andi r17, ~(1<<WDRF) out MCUSR, r17 ; Write logical one to WDCE and WDE ; Keep old prescaler setting to prevent unintentional time-out in r17, WDTCR ori r17, (1<<WDCE) | (1<<WDE) out WDTCR, r17 ; Got four cycles to set the new values of WDE or WDP from here ; Turn off WDT cbr r17, (1<<WDCE) | (1<<WDE) out WDTCR, r17 out SREG, r16 ; restore SREG value (I-bit) pop r17 pop r16 ret WDT_INT_Enable: ; enables WDT interrupt with predefined period ; input: r21 - WDT prescaler value (0-9) push r21 ldi r21, 1 ; force WDT time-out to 32ms (4096 WDT oscillator cycles) wdr ; Reset Watchdog Timer sbrc r21, 3 ori r21, 1<<WDP3 andi r21, (1<<WDP3) | 7 ori r21, (1<<WDTIF) | (1<<WDTIE) out WDTCR, r21 ; Enable WDT interrupt and set WDT prescaler pop r21 ret WDT_INT_Disable: ; disables WDT interrupt push r21 ldi r21, 0 out WDTCR, r21 pop r21 ret Timer_CLEAR: ; Timer0 and Counter X are cleared push r16 ; clear Timer0 ldi r16, 0 ; clear r16... out TCNT0, r16 ; ...and load Timer/Counter Register ; clear counter X clr r27 ; clear high byte clr r26 ; clear low byte pop r16 ret Timer_RUN: ; Timer0 to be run push r16 ldi r16, 0 ; clear TSM... out GTCCR, r16 ; ...and load General Timer/Counter Control Register pop r16 ret Timer_STOP: ; stop and clear timer push r16 ; stop Timer0 ldi r16, 0x81 ; set TSM = 1; PSR10 = 1... out GTCCR, r16 ; ...and load General Timer/Counter Control Register rcall Timer_CLEAR ; clear Timer pop r16 retКак же так! Ведь помнится кто то на Асм х86 писал закрученные драйвера? А тут хорошо структурированный исходник, с которого даже по каментам можно переписать на Си, не?)
Как же так! Ведь помнится кто то на Асм х86 писал закрученные драйвера? А тут хорошо структурированный исходник, с которого даже по каментам можно переписать на Си, не?)
и хде тут jnz, jz и т.д. )))
PS и таки да, С то я не знаю...
ritten, ; r24 - EEPROM address where to write, ; r25 - EEPROM operation: 0x00 - Erase & Write, 0x10 - Only Erase, 0x20 - Only Write. ; Wait for completion of previous write sbic EECR,EEPE rjmp EEPROM_Progи хде тут jnz, jz и т.д. )))
А почитать? sbic - Skip if Bit Io Clear... Этот ассемблер примитивный до неприличия.)
и хде тут jnz, jz и т.д. )))
А почитать? sbic - Skip if Bit Io Clear... Этот ассемблер примитивный до неприличия.)
вот так что ли?
// Настройка фьюзов // Fuse High Byte = 11111011 (0xFB) // SELFPRGEN = 1 (Self Programming Disabled) // DWEN = 1 (debugWire disabled, if enabled SPI low voltage programming is impossible) // BODLEVEL1 = 0 (Brown-out Detector trigger level = 2.7V) // BODLEVEL0 = 1 (Brown-out Detector trigger level = 2.7V) // RSTDISBL = 1 (External Reset enabled, if disabled SPI low voltage programming is impossible) // Fuse Low Byte = 01101010 (0x6A) // SPIEN = 0 (Serial Programming enabled, if disabled low and high voltage programming is impossible) // EESAVE = 1 (EEPROM is not preserved through Chip Erase) // WDTON = 1 (Watchdog Timer is not locked to be reset source, it can be set-up by software) // CKDIV8 = 0 (CLKPR = 3 upon start: divide clock by 8) // SUT1 = 1 (Slowly rising power: additional 64 ms for start-up time) // SUT0 = 0 (Slowly rising power: additional 64 ms for start-up time) // CKSEL1 = 1 (Clock source internal 9.6 MHz) // CKSEL0 = 0 (Clock source internal 9.6 MHz) #include <avr/io.h> #include <stdlib.h> #include <avr/interrupt.h> #include <util/delay.h> #include <avr/eeprom.h> // не забываем подключить #define freezer 0x00 //; freeser mode #define heater 0x01 //; heater mode #define _1min 12 //; 1 min const #define _1hour 60*_1min //; 1 hour const #define _2min 2*_1min //; 2 min const #define _8min 8*_1min //; 8 min const #define _8hour 8*_1hour //; 8 hour const // Прерывания // INT0 обрабатывает нажатие кнопки (настраивать INPUT_PULLUP) // PCINT2 (настраивать INPUT) ISR(INT0_vect) { // наш код обработки нажатия кнопки принудитильного оттаивания } // Обработчик прерывания PCINT0 ISR(PCINT0_vect) { if ((PINB & (1 << PB2)) == 0 ) { // считаем тики сети } } ISR(WDT_vect) { // Обработчик таймера WDT } void WDT_INT_Disable(void) //disables WDT interrupt { /* asm volatile( "push r21 \n" "ldi r21, 0 \n" "out WDTCR, r21 \n" "pop r21 \n" :::"r21" ); */ wdt_disable(); } void setup() { DDRB = 0b00000001; // pinMode(0, OUTPUT); PORTB &= ~(1 << PB0); // digitalWrite(0, LOW); pinMode(1, INPUT); // D1 PB1 (ATTINY13A - Attiny13) PORTB |= (1 << PB1); // D1 - INPUT_PULLUP pinMode(2, INPUT); // D2 PB2 (ATTINY13A - Attiny13) // Настройка прерываний // WDT стр.48-49 datasheet cli(); // Запрещаем прерывания на время изменения WDE и WDP //инициализация ватчдога wdt_reset(); // сбрасываем wdt_enable(WDTO_4S); // разрешаем ватчдог 4 сек WDTCR |= (1 << WDTIE); // разрешаем прерывания по ватчдогу. Иначе будет резет. // Инициализация INT0 и PCINT0 MCUCR = _BV(ISC01) | _BV(ISC00); // FALLING // RISING - 11, LOW - 00,HIGH -01 GIMSK |= (1 << PCIE) | _BV(INT0); // Разрешаем внешние прерывания PCINT0, INT0 PCMSK |= (1 << PB2)/* | (1<<PB1)*/; // Разрешаем по маске прерывания на ноге (PCINT2) sei(); // Разрешаем прерывания глобально: SREG |= (1<<SREG_I) } void loop() { }Инициализация WDT таймера с моим даташитом что-то не сходится: