DS1232
- Войдите на сайт для отправки комментариев
Экспериментирую со взятыми на сдачу 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 - плата стартовала чаще. Но, не исключаю, что это просто привиделось.
Что можно предпринять в такой ситуации - поискать еще более быстрый бутлоадер (какой?), подвесить волшебный конденсатор на какой-то выход, как-то хитро заинитить блинкающий выход МК или оставить надежду на совместимость этой МС с ардуиной, снабженной загрузчиком?
Залей нужный скетч ,к примеру , через" Arduino as ISP"(или другой програматор) без загрузчика и пробуй .
А ... дочитал доконца , сорри. Вам нужен с загрузчиком.
Поставь RC цепочку на питание приблуды, что бы стартовала с задержкой(где-то у буржуев видел , но не могу сейчас найти).
Да, хотелось бы сохранить возможность лить прошивки через UART, временно отключая собаку. Так-то она еще и шить не дает - дудку с ума сводит.
sadman41, взять исходник оптибута, вписать в него ногодрыг нужного пина, скомпилить -залить :)
Т.е. прямо в опитибуте таймером устроить медленный ШИМ на ногу?
sadman41, ну да можно запустить таймер, а в сетапе потом отключить.
Если даташит внимательно посмотреть, то можно увидеть что timeout можно менять переключая ножку TD. Если подключить её к +5В, то timeout будет ок. 1.2 секунды. Микруха интересная, применял её и с Z80, и с 51-ми МК. Если напряжение сильно отличается от 5 вольт, обратите внимание на вход TOL.
Если даташит внимательно посмотреть, то можно увидеть что timeout можно менять переключая ножку TD. Если подключить её к +5В, то timeout будет ок. 1.2 секунды. Микруха интересная, применял её и с Z80, и с 51-ми МК.
В 4-м абзаце первого поста я это и написал. Не успевает. Конечно при наличии нативной собаки в 328-й - такая МС не не очень-то и нужна, но ради эксперимента...
Мне иногда помогала, в условиях сильных помех. Кондёр и резистор на RES не спасали, а с ней всё устаканивалось.
МК без неторопливого бутлоадера был, как я понимаю?
Я тогда вообще на ASM писал.
Всем доброго! Вопрос! Победили вы эту проблему, когда ардуина не успевает перегрузиться и входит в цикл?? Очень актуально! Имею два модуля... один резится на 600 миллисекунд, второй на 650, а унка с момента включения питания входит в работу через 3,6 секунды..... КАК ПОБЕДИТЬ? Модуль заводской. Питание изначально заведено на 1,2 сек, в реале в два раза меньше. Мои танцы с бубном! https://www.youtube.com/watch?v=FUNiGUBbUaU
Нет, я более не занимался этим - переписывать бутлоадер муторно и смысла лично для меня в этом никакого нет.
Жаль!!! А мне надо! Собираю приблуду, и, зависание, мне крайне противопаказано. А как показывает практика, а раз в сутки-двое, виснет всё! Я имею ввиду свои наработки на ардуино. Придется паять самому и на 555 серии..
А чем внутренний Watchdog не устраивает?
В готовом изделии шейте прошивку без бутлодера, через ICSP... Самый простой способ "проскочить" собаку. Или вот такое попробуйте оседлать: https://www.st.com/resource/en/datasheet/stwd100.pdf - в нем есть вход EN, который обнуляет таймер.
Спасибо зи инфу!!! А так хотелось простого.... подключить четыре проводочка, и жить счастливо!
Самое простое - это #include <avr/wdt.h>
Я не особый спец в программировании.... Программирую в Flprog. Железо, да!
А мы-то думаем тут - чего оно виснет. Вона что... FLProg опять.
Как бы там ни было, а благодаря этой проге тем кому за 50 и учиться уже достаточно сложно, а в железе хоть чуть-чуть, есть возможность делать свои поделки.... и в данном случае, не срабатывает просто железо, и, фл прог тут ни причем.... блымать светодиодом не слишком сложно... примеров для начинающих полно. Имеющиеся платы, просто не заточены под ардуино, под что-то другое, да... под просто ардуино без танцев с бубном, нет.
У меня 328й процессор завсивал при использовании программ i2c.
Я включил внутренний WDT это мне "помогло". С одной стороны при зависании процессор перегружается. С другой стороны - при перезагрузке обнуляется вся память и я теряю всю информацию. Я начал лепить сверху DS1307 - в ней есть отдельное ОЗУ, которое подпитывается от батарейки часов. Но это не совсем удобно.
Поэтому бутлоадер надо менять однозначно :) или танцевать с бубном.
Поэтому бутлоадер надо менять однозначно :) или танцевать с бубном.
чем вам поможет смена бутлоадера - не понятно. Очевидно, что если проц виснет - информация по любому будет утеряна, переписывай бутлоадер или нет...
Не обязательно. Инфо можно не терять - всё зависит от обработчика wdt.
чем вам поможет смена бутлоадера - не понятно. Очевидно, что если проц виснет - информация по любому будет утеряна, переписывай бутлоадер или нет...
Насколько мне известно - память в AVR процессоре статическая. Можно сделать такой "финт" - запитать процессор от блока питания 5 вольт и от 3в батарейки. Поставить внешний WDT + супервизор питания, который при падении напряжения ниже 4,5 в будет останавливать процессор. Батарейка будет подпитывать ОЗУ и все, что насчитано должно остаться. Главное при запуске не затереть все бутоладером.
Я похожее делал на 8031/51, но там программа писалась на ассемблере и учитывалось все вплоть до бита.
Батерейку на ионистор можно заменить.
Я похожее делал на 8031/51, но там программа писалась на ассемблере и учитывалось все вплоть до бита.
Не имеет смысл делать через жо если есть возможность сделать по нормальному.)
Не имеет смысл делать через жо если есть возможность сделать по нормальному.)
Что есть жопа и что есть норальное?
У меня на столе лежит промышленный контроллер известной фирмы, стоимость не в пример Arduino на AVR - 328м процессоре. Устройство зависает (!) раз в несколько суток. Иногда работает неделю. По цене - это должо быть "нормальное" устройство. Но мы его сняли от нашего заказчика, т.к. фактически контроллер не работает без присмотра.
По факту - я знаю еще один случай, когда из-за контроллера этой же фирмы произошел пожар, т.к. контроллер завис и не выключил нагреватель по температуре. Электрической защиты не было.
при этом моя "поделака" работает с 2000 года. Без проблем!
Так где сделано нормально?
Ну работает и хорошо. Продолжайте, какие вопросы. Мы ведь как раз о 328.
а в 2000м году 328й уже был?
Решил сразу попробовать сделать какую-нибудь полезную вещь - аппаратный 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
а в 2000м году 328й уже был?
Конечно не был :) Даже если гипотетически предположить, что он уже вышел, то любителям он был не доступен ещё многие годы.
В 2000м был 386й. Ещё.)
Для 328ого процессора есть встроенный WDT до 8 сек.
http://arduino.ru/forum/apparatnye-voprosy/ds1232#comment-367201
http://arduino.ru/forum/apparatnye-voprosy/ds1232#comment-367201
Сорри. Уже забыл все обсуждение.
Думал можно быстро найти нужный аналог, но не нашел. Аналог тоже оказался на 1,6с
А микросхемы ниже не совсем аналог.
DS1286 http://www.farnell.com/datasheets/29940.pdf
DS1371 https://voron.ua/files/pdf/ms-prod/maxim_integrated/DS1371-98164.pdf
Analog Devices ADM83xx Supervisory Circuits
https://ru.mouser.com/new/Analog-Devices/adi-adm83xx-circuits/
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
Дополнительный функционал: Сторожевой таймер
Спасибо за поддержку темы. Вы сами эти чипы пытали - получается проскочить бутлоадер?
Спасибо за поддержку темы. Вы сами эти чипы пытали - получается проскочить бутлоадер?
Я не использовал. Но заказал себе на 64 секунды - хочу "отремонтировать" провышленный контроллер, который раз в сутки зависает.
У меня Ардуинка (не помню мини или нано) включила WDT и он работал "из коробки". А уже после того повится "новый" бутлоадер в оболочке ардуино. Я уже не помню обровлялся им или нет... но точно помню что WDT на UNO работал и была проблема - после сброса UNO обнуляет всю ОЗУ и программа не помнит ни одной переменной. :(
Ну так с любым вачдогом, который дёргает за reset, RAM будет сброшена.
Ну так с любым вачдогом, который дёргает за reset, RAM будет сброшена.
Ну вот за AVR лично не читал и поэтому рассазать ничего не могу, но в 1999м году писал программу на 8051/8031 процессор и ставил на него внешний WDT. Причем для проверки в программе сделал пункт "зависания". Так Reset - это отдельно. ОЗУ - отдельно. После перезапуска ОЗУ не портилось и программа работала как нивчем не бывало.
У AVR тоже статическое ОЗУ, может работать на любой частоте...
https://myrobot.ru/stepbystep/mc_architecture.php
"Размер оперативной памяти может варьироваться у различных чипов от 64 Байт до 4 КБайт. Число циклов чтения и записи в RAM не ограничено, но при отключении питающего напряжения вся информация теряется. "
Нигде быстро не нашел информации. Но между строк читаю, что память ОЗУ изменяется когда в нее что-то записывают или выключают питание. От сброса ничего не должно менятся. Есть же режими малого энергопотребления, когда процессор засывает, при этом он уходит в глубокий сон, а выходит из него по прерыванию...
Нигде быстро не нашел информации. Но между строк читаю, что память ОЗУ изменяется когда в нее что-то записывают или выключают питание. От сброса ничего не должно менятся. Есть же режими малого энергопотребления, когда процессор засывает, при этом он уходит в глубокий сон, а выходит из него по прерыванию...
А... Ну, мне так глубоко пока не нужно было погружаться. Вот есть некоторые рецепты: http://kazus.ru/forums/showthread.php?t=17141 , https://mcuoneclipse.com/2014/04/19/gnu-linker-can-you-not-initialize-my-variable/
Ну так с любым вачдогом, который дёргает за reset, RAM будет сброшена.
Не с любым. У 328 (и других свежих) WDT есть свой вектор. Если настроите, никакая RAM не будет сброшена. Как же ж из спячки люди выходят через WDT по вашему?
Не с любым. У 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"
ИМХО, WDT, как средство против зависания - без очистки состояния регистров - вещь малоосмысленная. так как программа с помощью WDT будет "разбужена" в точке зависона и с очень большой вероятностью зависнет снова.
Регистры и память общего назначения в данном случае разные вещи.
Например в памяти можно записать переменную "количество перезагрузкок", которую инкрементировать каждый раз при старте программы. Считать время, например. А при старте проверять часы 0..23 минуты 0..59 секкунды 0..59 и т.д.
А вот регистры общего назначения иннициализируются всегда.
ИМХО, WDT, как средство против зависания - без очистки состояния регистров - вещь малоосмысленная. так как программа с помощью WDT будет "разбужена" в точке зависона и с очень большой вероятностью зависнет снова.
Да ладно! Как быть с микропотребялемым датчиком, который раз в пол дня должен передавать данные? Правильно. Всю дорогу спим, а раз в 8 сек. просыпаемся от WDT, после чего считаем время и снова засыпаем. А уж на 12-й час уже что то таки передаём. И работаем без всяких больших вероятностей!
Да ладно! Как быть с микропотребялемым датчиком
Грин, ты читаешь, на что отвечаешь? :) Я писал про WDT как средство против зависания - а не как будильник для спящего режима. Это разные вещи. ты не находишь?
Большая часть случаев зависания программ - это нехватка памяти под динамические переменные. попадание в бесконечный цикл, либо порча памяти за счет записи по неверному адресу. Во всех этих случаях ресет без очистки оперативки и регистров ни к чему не приведет.
Регистры и память общего назначения в данном случае разные вещи.
Например в памяти можно записать переменную "количество перезагрузкок"
вы оперативку и ЕЕПРОМ не путаете, случаем? Переменную "количество перезагрузок", очевидно, надо хранить в ЕЕПРОМ - и она не будет очищена при ресете
Я не хочу скахать. что тема совсем бесполезна - но если честно, я пока не вижу смысла во внешнем ватчдоге... тем более на 64 секунды.
Грин, ты читаешь, на что отвечаешь? :) Я писал про WDT как средство против зависания - а не как будильник для спящего режима. Это разные вещи. ты не находишь?
Честно? Не читаю. Чисто поверхностно. Пробежал - ответил.(( Извиняюсь.
Пришли 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 кОм.
Тестировал на нано со старым загрузчиком.