DS1232

sadman41
Offline
Зарегистрирован: 19.10.2016

Экспериментирую со взятыми на сдачу DS1232 : https://datasheets.maximintegrated.com/en/ds/DS1232.pdf

Решил сразу попробовать сделать какую-нибудь полезную вещь - аппаратный watchdog. Подключил всё по схеме из datasheet (вместо Z80 ATmega328):

На /ST подаю быстрый блинк (HIGH-100мс-LOW-100мс) для сброса аппаратного таймера DS-ки.

Но, к сожалению, не могу добиться устойчивого старта ардуины (Nano, например). Т.е. иногда она загружается, но чаще (как я понимаю) не успевает проскочить бутлоадер. Осциллографом смотрел на /RST: опускание ноги в 0V, подъем на заданный (входом TD) период до уровня VCC - 1.2сек (максимальный), опять опускание в 0V и так по кругу.

Бутлоадер менял на Optiboot - не помогло. 

Заметил, что когда совался обычным тестером на GND и /RST - плата стартовала чаще. Но, не исключаю, что это просто привиделось.

Что можно предпринять в такой ситуации - поискать еще более быстрый бутлоадер (какой?), подвесить волшебный конденсатор на какой-то выход, как-то хитро заинитить блинкающий выход МК или оставить надежду на совместимость этой МС с ардуиной, снабженной загрузчиком?

nikolaki
nikolaki аватар
Offline
Зарегистрирован: 14.02.2013

Залей нужный скетч ,к примеру , через" Arduino as ISP"(или другой програматор) без загрузчика  и пробуй .

А ... дочитал доконца , сорри. Вам нужен с загрузчиком.

 Поставь RC цепочку на питание приблуды, что бы стартовала с задержкой(где-то у буржуев видел , но не могу сейчас найти).

sadman41
Offline
Зарегистрирован: 19.10.2016

Да, хотелось бы сохранить возможность лить прошивки через UART, временно отключая собаку. Так-то она еще и шить не дает - дудку с ума сводит.

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

sadman41, взять исходник оптибута, вписать в него ногодрыг нужного пина, скомпилить -залить :)

sadman41
Offline
Зарегистрирован: 19.10.2016

Т.е. прямо в опитибуте таймером устроить медленный ШИМ на ногу? 

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

sadman41, ну да можно запустить таймер, а в сетапе потом отключить.

alex_r61
Offline
Зарегистрирован: 20.06.2012

Если даташит внимательно посмотреть, то можно увидеть что timeout можно менять переключая ножку TD. Если подключить её к +5В, то timeout будет ок. 1.2 секунды. Микруха интересная, применял её и  с  Z80,    и  с 51-ми МК. Если напряжение сильно отличается от 5 вольт, обратите внимание на вход TOL.

sadman41
Offline
Зарегистрирован: 19.10.2016

alex_r61 пишет:

Если даташит внимательно посмотреть, то можно увидеть что timeout можно менять переключая ножку TD. Если подключить её к +5В, то timeout будет ок. 1.2 секунды. Микруха интересная, применял её и  с  Z80,    и  с 51-ми МК.

В 4-м абзаце первого поста я это и написал. Не успевает. Конечно при наличии нативной собаки в 328-й - такая МС не не очень-то и нужна, но ради эксперимента... 

 

alex_r61
Offline
Зарегистрирован: 20.06.2012

Мне иногда помогала, в условиях сильных помех. Кондёр и резистор на RES не спасали, а с ней всё устаканивалось.

sadman41
Offline
Зарегистрирован: 19.10.2016

МК без неторопливого бутлоадера был, как я понимаю?

alex_r61
Offline
Зарегистрирован: 20.06.2012

 Я тогда вообще на ASM писал.

Suxovei
Offline
Зарегистрирован: 14.01.2019

Всем доброго! Вопрос! Победили вы эту проблему, когда ардуина не успевает перегрузиться и входит в цикл?? Очень актуально! Имею два модуля... один резится на 600 миллисекунд, второй на 650, а унка с момента включения питания входит в работу через 3,6 секунды..... КАК ПОБЕДИТЬ? Модуль заводской. Питание изначально заведено на 1,2 сек, в реале в два раза меньше. Мои танцы с бубном! https://www.youtube.com/watch?v=FUNiGUBbUaU

sadman41
Offline
Зарегистрирован: 19.10.2016

Нет, я более не занимался этим - переписывать бутлоадер муторно и смысла лично для меня в этом никакого нет.  

Suxovei
Offline
Зарегистрирован: 14.01.2019

Жаль!!! А мне надо! Собираю приблуду, и, зависание, мне крайне противопаказано. А как показывает практика, а раз в сутки-двое, виснет всё! Я имею ввиду свои наработки на ардуино. Придется паять самому и на 555 серии..

 

asam
asam аватар
Offline
Зарегистрирован: 12.12.2018

А чем внутренний Watchdog не устраивает?

sadman41
Offline
Зарегистрирован: 19.10.2016

В готовом изделии шейте прошивку без бутлодера, через ICSP... Самый простой способ "проскочить" собаку. Или вот такое попробуйте оседлать: https://www.st.com/resource/en/datasheet/stwd100.pdf - в нем есть вход EN, который обнуляет таймер.

Suxovei
Offline
Зарегистрирован: 14.01.2019

Спасибо зи инфу!!! А так хотелось простого.... подключить четыре проводочка, и жить счастливо!

 

sadman41
Offline
Зарегистрирован: 19.10.2016

Самое простое - это #include <avr/wdt.h> 

Suxovei
Offline
Зарегистрирован: 14.01.2019

 Я не особый спец в программировании.... Программирую в Flprog. Железо, да!

sadman41
Offline
Зарегистрирован: 19.10.2016

А мы-то думаем тут - чего оно виснет. Вона что... FLProg опять.

Suxovei
Offline
Зарегистрирован: 14.01.2019

Как бы там ни было, а благодаря этой проге тем кому за 50 и учиться уже достаточно сложно, а в железе хоть чуть-чуть, есть возможность делать свои поделки.... и в данном случае, не срабатывает просто железо, и, фл прог тут ни причем.... блымать светодиодом не слишком сложно... примеров для начинающих полно. Имеющиеся платы, просто не заточены под ардуино, под что-то другое, да... под просто ардуино без танцев с бубном, нет.

Veoramid
Offline
Зарегистрирован: 20.07.2016

У меня 328й процессор завсивал при использовании программ i2c.

Я включил внутренний WDT это мне "помогло". С одной стороны при зависании процессор перегружается. С другой стороны - при перезагрузке обнуляется вся память и я теряю всю информацию. Я начал лепить сверху DS1307 - в ней есть отдельное ОЗУ, которое подпитывается от батарейки часов. Но это не совсем удобно.

Поэтому бутлоадер надо менять однозначно :) или танцевать с бубном.

b707
Offline
Зарегистрирован: 26.05.2017

Veoramid пишет:

Поэтому бутлоадер надо менять однозначно :) или танцевать с бубном.

чем вам поможет смена бутлоадера - не понятно. Очевидно, что если проц виснет - информация по любому будет утеряна, переписывай бутлоадер или нет...

Green
Offline
Зарегистрирован: 01.10.2015

Не обязательно. Инфо можно не терять - всё зависит от обработчика wdt.

Veoramid
Offline
Зарегистрирован: 20.07.2016

b707 пишет:

чем вам поможет смена бутлоадера - не понятно. Очевидно, что если проц виснет - информация по любому будет утеряна, переписывай бутлоадер или нет...

Насколько мне известно - память в AVR процессоре статическая. Можно сделать такой "финт" - запитать процессор от блока питания 5 вольт и от 3в батарейки. Поставить внешний WDT + супервизор питания, который при падении напряжения ниже 4,5 в будет останавливать процессор. Батарейка будет подпитывать ОЗУ и все, что насчитано должно остаться. Главное при запуске не затереть все бутоладером. 

Я похожее делал на 8031/51, но там программа писалась на ассемблере и учитывалось все вплоть до бита.

sadman41
Offline
Зарегистрирован: 19.10.2016

Батерейку на ионистор можно заменить.

Green
Offline
Зарегистрирован: 01.10.2015

Veoramid пишет:

Я похожее делал на 8031/51, но там программа писалась на ассемблере и учитывалось все вплоть до бита.


Не имеет смысл делать через жо если есть возможность сделать по нормальному.)

Veoramid
Offline
Зарегистрирован: 20.07.2016

Green пишет:

Не имеет смысл делать через жо если есть возможность сделать по нормальному.)

Что есть жопа и что есть норальное?

У меня на столе лежит промышленный контроллер известной фирмы, стоимость не в пример Arduino на AVR - 328м процессоре. Устройство зависает (!) раз в несколько суток. Иногда работает неделю. По цене - это должо быть "нормальное" устройство. Но мы его сняли от нашего заказчика, т.к. фактически контроллер не работает без присмотра.

По факту - я знаю еще один случай, когда из-за контроллера этой же фирмы произошел пожар, т.к. контроллер завис и не выключил нагреватель по температуре. Электрической защиты не было.
при этом моя "поделака" работает с 2000 года. Без проблем!

Так где сделано нормально?

Green
Offline
Зарегистрирован: 01.10.2015

Ну работает и хорошо. Продолжайте, какие вопросы. Мы ведь как раз о 328.

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

а в 2000м году 328й уже был?

Veoramid
Offline
Зарегистрирован: 20.07.2016

sadman41 пишет:

Решил сразу попробовать сделать какую-нибудь полезную вещь - аппаратный watchdog. Подключил всё по схеме из datasheet (вместо Z80 ATmega328):

Для 328ого процессора есть встроенный WDT до 8 сек. Там тоже есть "проблема" бутлоадером, но конкретный мой образец его воспринял нормально. Ссылки на вскидку:

http://narodstream.ru/avr-urok-53-watchdog-timer-wdt-chast-1/

https://habr.com/ru/post/189744/

http://mypractic.ru/urok-16-povyshenie-nadezhnosti-programm-dlya-arduino-storozhevoj-tajmer.html

 

 

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

DetSimen пишет:

а в 2000м году 328й уже был?

Конечно  не был :) Даже если гипотетически предположить, что он уже вышел, то любителям он был не доступен ещё многие годы. 

Green
Offline
Зарегистрирован: 01.10.2015

В 2000м был 386й. Ещё.)

sadman41
Offline
Зарегистрирован: 19.10.2016

Veoramid пишет:

Для 328ого процессора есть встроенный WDT до 8 сек. 

http://arduino.ru/forum/apparatnye-voprosy/ds1232#comment-367201

Veoramid
Offline
Зарегистрирован: 20.07.2016

Сорри. Уже забыл все обсуждение.

Думал можно быстро найти нужный аналог, но не нашел. Аналог тоже оказался на 1,6с

А микросхемы ниже  не совсем аналог.

DS1286 http://www.farnell.com/datasheets/29940.pdf

DS1371 https://voron.ua/files/pdf/ms-prod/maxim_integrated/DS1371-98164.pdf

Veoramid
Offline
Зарегистрирован: 20.07.2016

Analog Devices ADM83xx Supervisory Circuits

https://ru.mouser.com/new/Analog-Devices/adi-adm83xx-circuits/

  • 4 reset timeout options
  • 1ms, 20ms, 140ms, and 1120ms (minimum)
  • 4 watchdog timeout options
  • 6.3ms, 102ms, 1600ms, and 25.6 sec (typical)
Veoramid
Offline
Зарегистрирован: 20.07.2016

TPL5000DGST

http://www.kosmodrom.com.ua/el.php?name=TPL5000DGST&page=

Напряжение питания: 1,8...5 В.

Ток потребления: 30 нА.

Рабочая температура: -40...105 С

Временные интервалы, с.: 1, 2, 4, 8, 10, 16, 32, 64

Дополнительный функционал: Сторожевой таймер

sadman41
Offline
Зарегистрирован: 19.10.2016

Спасибо за поддержку темы. Вы сами эти чипы пытали - получается проскочить бутлоадер?

Veoramid
Offline
Зарегистрирован: 20.07.2016

sadman41 пишет:

Спасибо за поддержку темы. Вы сами эти чипы пытали - получается проскочить бутлоадер?

Я не использовал. Но заказал себе на 64 секунды - хочу "отремонтировать" провышленный контроллер, который раз в сутки зависает.
У меня Ардуинка (не помню мини или нано) включила WDT и он работал "из коробки". А уже после того повится "новый" бутлоадер в оболочке ардуино. Я уже не помню обровлялся им или нет... но точно помню что WDT на UNO работал и была проблема - после сброса UNO обнуляет всю ОЗУ и программа не помнит ни одной переменной. :(

sadman41
Offline
Зарегистрирован: 19.10.2016

Ну так с любым вачдогом, который дёргает за reset, RAM будет сброшена.

Veoramid
Offline
Зарегистрирован: 20.07.2016

sadman41 пишет:

Ну так с любым вачдогом, который дёргает за reset, RAM будет сброшена.

Ну вот за AVR лично не читал и поэтому рассазать ничего не могу, но в 1999м году писал программу на 8051/8031 процессор и ставил на него внешний WDT. Причем для проверки в программе сделал пункт "зависания". Так Reset - это отдельно. ОЗУ - отдельно. После перезапуска ОЗУ не портилось и программа работала как нивчем не бывало.

У AVR тоже статическое ОЗУ, может работать на любой частоте...

https://myrobot.ru/stepbystep/mc_architecture.php

"Размер оперативной памяти может варьироваться у различных чипов от 64 Байт до 4 КБайт. Число циклов чтения и записи в RAM не ограничено, но при отключении питающего напряжения вся информация теряется. "

Нигде быстро не нашел информации. Но между строк читаю, что память ОЗУ изменяется когда в нее что-то записывают или выключают питание. От сброса ничего не должно менятся. Есть же режими малого энергопотребления, когда процессор засывает, при этом он уходит в глубокий сон, а выходит из него по прерыванию...

sadman41
Offline
Зарегистрирован: 19.10.2016

Veoramid пишет:

Нигде быстро не нашел информации. Но между строк читаю, что память ОЗУ изменяется когда в нее что-то записывают или выключают питание. От сброса ничего не должно менятся. Есть же режими малого энергопотребления, когда процессор засывает, при этом он уходит в глубокий сон, а выходит из него по прерыванию...

А... Ну, мне так глубоко пока не нужно было погружаться. Вот есть некоторые рецепты: http://kazus.ru/forums/showthread.php?t=17141 , https://mcuoneclipse.com/2014/04/19/gnu-linker-can-you-not-initialize-my-variable/

Green
Offline
Зарегистрирован: 01.10.2015

sadman41 пишет:

Ну так с любым вачдогом, который дёргает за reset, RAM будет сброшена.

Не с любым. У 328 (и других свежих) WDT есть свой вектор. Если настроите, никакая RAM не будет сброшена. Как же ж из спячки люди выходят через WDT по вашему?

sadman41
Offline
Зарегистрирован: 19.10.2016

Green пишет:

Не с любым. У 328 (и других свежих) WDT есть свой вектор. Если настроите, никакая RAM не будет сброшена. Как же ж из спячки люди выходят через WDT по вашему?

Ещё не выходил - нужды не было. Так что до сего момента для меня WTD был эквивалентен дёрганью за ногу и я, на всякий случай, всегда руководствовался "During reset, all I/O Registers are set to their initial values, and the program starts execution from the Reset Vector"

b707
Offline
Зарегистрирован: 26.05.2017

ИМХО, WDT, как средство против зависания -  без очистки состояния регистров - вещь малоосмысленная. так как программа с помощью WDT будет "разбужена" в точке зависона и с очень большой вероятностью зависнет снова.

Veoramid
Offline
Зарегистрирован: 20.07.2016

Регистры и память общего назначения в данном случае разные вещи. 

Например в памяти можно записать переменную "количество перезагрузкок", которую инкрементировать каждый раз при старте программы. Считать время, например. А при старте проверять часы 0..23 минуты 0..59 секкунды 0..59 и т.д. 
А вот регистры общего назначения иннициализируются всегда. 
 

 

Green
Offline
Зарегистрирован: 01.10.2015

b707 пишет:

ИМХО, WDT, как средство против зависания -  без очистки состояния регистров - вещь малоосмысленная. так как программа с помощью WDT будет "разбужена" в точке зависона и с очень большой вероятностью зависнет снова.

Да ладно! Как быть с микропотребялемым датчиком, который раз в пол дня должен передавать данные? Правильно. Всю дорогу спим, а раз в 8 сек. просыпаемся от WDT, после чего считаем время и снова засыпаем. А уж на 12-й час уже что то таки передаём. И работаем без всяких больших вероятностей!

b707
Offline
Зарегистрирован: 26.05.2017

Green пишет:

Да ладно! Как быть с микропотребялемым датчиком

Грин, ты читаешь, на что отвечаешь? :) Я писал про WDT как средство против зависания - а не как будильник для спящего режима. Это разные вещи. ты не находишь?

Большая часть случаев зависания программ - это нехватка памяти под динамические переменные. попадание в бесконечный цикл, либо порча памяти за счет записи по неверному адресу. Во всех этих случаях ресет без очистки оперативки и регистров ни к чему не приведет.

 

b707
Offline
Зарегистрирован: 26.05.2017

Veoramid пишет:

Регистры и память общего назначения в данном случае разные вещи. 

Например в памяти можно записать переменную "количество перезагрузкок"
 

вы оперативку и ЕЕПРОМ не путаете, случаем? Переменную "количество перезагрузок", очевидно, надо хранить в ЕЕПРОМ - и она не будет очищена при ресете

Я не хочу скахать. что тема совсем бесполезна - но если честно, я пока не вижу смысла во внешнем ватчдоге... тем более на 64 секунды.

Green
Offline
Зарегистрирован: 01.10.2015

b707 пишет:

Грин, ты читаешь, на что отвечаешь? :) Я писал про WDT как средство против зависания - а не как будильник для спящего режима. Это разные вещи. ты не находишь?

Честно? Не читаю. Чисто поверхностно. Пробежал - ответил.(( Извиняюсь.

Pyotr
Offline
Зарегистрирован: 12.03.2014

Пришли DS1232, и решил я поиграться с ними. Чтоб с загрузчиком работала и не мешала шить скетчи через UART.

Подключил вывод 6 RST DS1232 к reset ардуино через N мосфет 2N7000 (какой попался). Исток к пину 6 DS1232, а сток к ресет ардуино. Затвор на землю через резистор 4-10 кОм. Также затвор на пин ардуино для включения-отключения WTD, путем замыкания-размыкания цепи сброса.

Работает с любым таймаутом (150-1200 мс) и загрузке скетчей не мешает. Программно можно отключать и включать ватчдог.

При старте WDT отключен. Включается через сотни мс после первого входа в loop()

Проверочный скетч. Светик на PIN_LED мигает раз в 5 сек. Если выдернуть проводок с PIN_ST ардуино, и подключить его на землю или +5В, то ардуино начнет перезагружаться. Оставлять неподключеным пин ST DS1232 нельзя-он ловит наводки, и перезагрузки может не быть. Или подтянуть его на землю резистором 3-10 кОм.

Тестировал на нано со старым загрузчиком.

#define PIN_ST     7
#define PIN_LED    8
#define PIN_WDT_ON_OFF 9

void setup() {
  pinMode(PIN_ST, OUTPUT); // С этого пина Watchdog будет получать сигнал
  pinMode(PIN_LED, OUTPUT);   
  pinMode(PIN_WDT_ON_OFF, OUTPUT);  
}

void loop() {
  static word currMillis = millis(), prevMillis = currMillis;
  static byte countCycle = 0, statePinST = 0;
  currMillis = (word)millis();
  if (currMillis - prevMillis >= 50) {
    prevMillis = currMillis;
    
    digitalWrite(PIN_ST, ++statePinST % 2);//подаем на pin ST DS1232 10 Гц
    
    switch (countCycle){
      case 0:
      digitalWrite(PIN_LED, HIGH);
      break;
      case 1:
      digitalWrite(PIN_LED, LOW);
      break;
      case 10:
      digitalWrite(PIN_WDT_ON_OFF, HIGH);//вкл WDT на DS1232
      break;      
//      case 50:
//       digitalWrite(PIN_WDT_ON_OFF, LOW);//так ОТКЛ. WDT на DS1232
//       delay(3000);//тормознутый код
//        break;           
    }
  if(++countCycle >= 100)   countCycle = 0; 
  }
}