Перейти к содержанию
    

SKov, да да, хотел, чтобы до включения МК модем был включен, а вот про паразитную запитку не подумал.

Правда уже не актуально, необходимость в этом отпала.

Спасибо.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Прочитал тему. Действительно это одна из самых острых проблем модема.

Спасибо тем кто помог ее решить.

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

Сразу оговорюсь - в GPRS работа не планируется, в серию не пойдет (для себя, для друзей)

В программировании контроллеров ноль, буду просить кого нибудь.

А сейчас хотелось узнать мнение об оптимальном алгоритме работы контроллера (временные интервалы и тд).

 

АЛГОРИТМ

При включении питания устанавливает на первом выходе (управление питанием модуля) логическую единицу и не реагирует на состояние входов 60 секунд (переходные процессы, регистрация в сети).На втором выходе (сигнализация) – логический ноль.

 

По окончанию этого времени контролирует состояние двух входов:

1. STATUS - логическая единица (модем готов к работе)

Если отсутствует сигнал STATUS, завис или не включился модем.

2. NETLIGHT – импульсы положительной полярности длительностью 64 mS и периодом 3000 mS.

Если период импульсов меньше (например 800 mS), модем по какой то причине не смог зарегистрироваться в сети. Если импульсов нет – авария или зависание модема.

 

При отсутствии лог единицы на входе STATUS, или несовпадении частоты на входе NETLIGHT, переводит первый выход в ноль (выключает питание модуля) на 60 секунд. Подает сигнал тревоги в течении 30 секунд.

Затем переводит первый выход в единицу (включает питание модуля) и далее по кругу.

 

На рисунке - алгоритм в графике.

С уважением.

post-71346-1347794480_thumb.jpg

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Посмотрите мое решение на http://gegelsoft.ru/files.php?dir=files

Скачайте то, что касается таймеров.

В принципе, очень близко к вашему заданию, за исключением интервала времени - максимально допустимый промежуток между импульсами у меня 2.3 сек (по периоду WDT пика, а с запасом будет 2 сек макс.) - у меня импульсы "жизни" с периодом 100 мс генерируются OCPU-кодом. Но можно просто добавить задержку и дотянуть до периода на NetLight.

Там того кода надо кот наплакал, могу даже сырцы бросить.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо за помощь и предоставленную информацию. К сожалению, я практик, моих познаний в программировании хватает только для того чтобы прошить контроллер в программаторе. Как говорится : есть желание но нет возможности. А учиться уже поздно. К модему прикручиваю уже готовые схемы на контроллерах выложенные в Сети. С SIM300DZ пытаюсь перейти на SIM900R и хочу на плате поставить «смотрящего за модемом». Должно получиться автономное самодостаточное устройство.

С Вашего сайта обязательно скачаю все что сможет мне помочь.

С уважением.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо GeGeL. Прочитал описание Вашего антизависателя. Все великое просто. Сигнал STATUS в модеме можно и не контролировать. Достаточно следить за сигналом NETLIGHT. И контроллер меняем на PIC10F200 (дешевле и есть в продаже). Изменить нужно только временные интервалы применительно к SIM900.

Алгоритм работы – есть в tmr1 (должно быть SIM900)

 

Включение

1п. отключает питание на 3 секунды (должно быть на 60 сек)

2п. включает питание лог 0 на выводе 4 (меняется на единицу в прошивке)

3п. через 7 сек контролирует вывод CLK – меандр 50 мсек (должно быть через 60 сек, меандр 3000 мсек)

4п. при отсутствии меандра в течении 2 сек переходит к пункту 1 ( должно быть – при отсутствии меандра в течении 30 сек переходит к пункту 1)

 

Вопрос. Контроллеру ведь все равно что меандр, что импульсы длительностью 64 мсек на входе? У Вас 50 мсек это период или длительность сигнала?

Вход DATA если не используется сажаем куда – земля, питание, оставляем в воздухе?

Нескромный вопрос. А не могли бы Вы переделать программу. Если нет, выложите пожалуйста исходник.

Со своей стороны беру на себя тестирование и обновление схемы.

С уважением.

P.S.

Нашел. Неиспользуемые вывода сажаем на землю.

Изменено пользователем Maratt

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо GeGeL. Прочитал описание Вашего антизависателя. Все

Вопрос. Контроллеру ведь все равно что меандр, что импульсы длительностью 64 мсек на входе? У Вас 50 мсек это период или длительность сигнала?

 

Нескромный вопрос. А не могли бы Вы переделать программу. Если нет, выложите пожалуйста исходник.

.

В даной реализации все равно. 50 мс - это длительность (полупериод), период 100 мс.

Переделать можно, но учитывая вашу задачу, скорее всего нет смысла использовать WDT, как в даном вотчдоге. Если нет особой срочности, переделаю под настроение (уберу команды и тамер и скорректирую интервалы). Только уточните один момент - в первом посте речь шла о перезапуске при длительной регистрации в сети (т.е. без регистрации). Это нужно? Какой там период на NetLight? Через какое время отсутствия регистрации перезапускать?

И еще - а зачем, если не секрет, тушить на 60 сек, а не на 3? По моему, без разницы, сколько модуль пробудет отключенным.

Исходник прилепил - это не тот код, который стоит секретить. Он с коментами, правда, англ. (влом язык переключать)...

Если сами не справитесь с интервалами, помогу при возможности.

10Fgps11.rar

Изменено пользователем GeGeL

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

C PIC10F200 будет выглядеть так.

Остались интервалы. А вообще мой алгоритм для SIM900 правильный?

Поправте если что не так.

С уважением.

post-71346-1347904848_thumb.jpg

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

У меня собран модем на SIM900R. Время регистрации в сети у него от почти мгновенно до 10 –15 секунд. Это в лабораторных условиях, в центре города, на столе. Как будет вести себя на периферии, пока не знаю.

Период на NetLight :

800 мсек при поиске сети

3000 мсек если регистрация прошла успешно

Длительность импульсов в обоих случаях 64 мсек.

ИМХО перезапускать модем нужно через 20 -30 секунд, если он за это время не смог зарегистрироваться в сети.

В схеме модема стоит цепочка автовключения – это элементы R1, C1, VD1, VD2. Она создает импульс логического нуля длительностью 2 -3 сек на контакте PWRKEY при подаче питания на модем. Этим импульсом модем включается.

При выключении питания емкости модема разряжаются гораздо медленнее. Да и по опыту звонков по телефону, когда робот отвечает «абонент недоступен, позвоните попозже», хотя телефон абонента лежит рядом, нужно немного подождать. Поэтому выключать ИМХО, нужно на одну минуту.

Сделать бы временные интервалы изменяемыми.

Тема «Модуль не сбрасывается по выводу NRESET» интересна но у нее нет завершения. Нет алгоритма.

С уважением.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Понятно. Так может лучше сделать включение на пике, раз он уже будет стоять в качестве вотчдога?

Как раз две ноги свободные - 6 на STATUS (in) для контроля включения, 4 на POWERKEY (out) собственно для включения. Чуть прошивку доделать - и не надо RC-цепочку и прочую требедень...

 

От скуки для разминки мозгов нацарапал код под вашу задачу:

; Notes: Pinout

; pin 1 (gpio 0) Power Control (out) 1-active

; pin 3 (gpio 1) POWERKEY (out) 1-active, 0-work (transistor used)

; pin 4 (gpio 2) NETLIGHT (in) 3000ms register, 800 ms serch

; pin 6 (gpio 3) STATUS (in) 1-work

 

Логика:

 

рестарт модуля:

- отключаем питание на 3 с

- включаем питание, паверкей неактивен - на 1 с

- активируем паверкей - на 1 с

- проверяем статус, если не вкл, то повторяем рестарт

- отпускаем поверкей, ждем 1 с

- снова проверяем статус, если не вкл, то повторяем рестарт

 

работа модуля:

- если в течение 30 сек состяние нетлайт не меняется, делаем рестарт

- если в течение 30 сек длительности 0 на нетлайт постоянно меньше 1200 мс. то идем на рестарт

 

asm-исходник и hex-прошивка в аттаче. В работе не проверял, но код простой и с коментами, если что - легко поправить.

10Fsim.rar

Изменено пользователем GeGeL

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Уважаемый GeGeL. Протестировал Вашу программу на мекетке см. схему. Контроллер в PDIP корпусе. В качестве сигнала NETLIGHT – генератор Г5 - 75, вместо сигнала STATUS цепочка R2, S1.

Включаем питание схемы.

При разомкнутом S1 ( сигнал STATUS в норме), на выводах контроллера 4 и 5 импульсы, см. рисунок.

При замыкании S1 (отсутствие сигнала STATUS), светодиоды гаснут и тишина… Хотя ни чего не должно меняться по логике.

На вывод 3 подавал импульсы с периодом от 100 до 3000 мсек. Реакции нет.

Я что - то неправильно делаю?

С уважением.

post-71346-1350312052_thumb.jpg

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я код не тестировал, но там его - кот наплакал (исходник вложен в архив).

То, что Вы описали, верно для уровня 0 на STATUS (вот соответствующий фрагмент кода из исходника):

 

;***** PIN DEFINITIONS

pstat EQU 3

 

start:

;CODE ..... Тут отрабатываем старт

 

btfss GPIO, pstat ;test STATUS

goto start ;repeat if not started Повторяем, если на входе STATUS - 0

 

 

Если у Вас такое происходит при 1 на входе GP3, а при 0 - все мертво, то могу предположить, что программатор использовал свою конфигурацию (а не из HEX-файла) и установил вывод GP3 в режим MCLR.

В прошивке задано так:

__CONFIG _MCLRE_OFF & _CP_OFF & _WDT_ON

 

PS: Также попробуйте отключить WDT, тут уже я мог где-то недосмотреть в коде цикл без clrwdt

Изменено пользователем GeGeL

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо GeGeL. У меня все на работе. Завтра проверю конфигурацию, отпишусь.

С уважением.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Уважаемый GeGeL, челом бью, помогите.

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

Результат.

Подаем питание на схему.

(S1 и S2 разомкнуты)

Включается питание модема, следом идет секундный импульс PWRKEY.

 

Питание остается включенным постоянно (единица на выходе GP0), хотя на вход GP2 импульсы не поступают (вывод притягивал и к питанию и к земле).

 

Если до подачи питания на схему замкнуть S2 (отсутствие сигнала STATUS), то схема ведет себя нормально : (постоянно перезагружает модем).

Но в процессе работы когда STATUS в норме, питание модема включилось, не реагирует на замыкание S2 (пропадание сигнала STATUS).

Если подавать импульсы на вход GP2 (кратковременно замыкать S2) с периодом менее 1200 ms, то схема через несколько секунд перезагружает модем, что тоже нормально.

 

Подправить исходник возможности нет.

Может доведем схему до ума?

 

С уважением.

 

post-71346-1354031963_thumb.jpg

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Сорри за задержку, только приехал. Вечером посмотрю. Сразу могу сказать, что контроль состояния STATUS ( перезапуск модема при появлении 0 во время работы) я не предусматривал в виду малой вероятности этого: если модуль виснет, то как правило, статус остается в 1. Но можно исправить.

 

А вот то, что модем не перезапускается при отсутствии изменений NETLIGHT - это неверно. Посмотрю, возможно, ошибка в коде. Просьба еще раз перепроверить: подключить линии STATUS и POWERKEY от пика к модулю, а линию NETLIGHT не подулючать. Модем должен периодически перезапускаться не зависимо от того, замкнут или разомкнут будет S1.

 

---------

 

Еще раз просмотрел свой код: вроде все верно. Проверьте следующее:

 

1. S1 - не важно как, S2 - замкнут (т.е. STATUS=0: модуль не включился). После старта выход управления питанием должно постоянно перезапускаться с интервалом в 5 сек.

 

2. S1 - не важно как (но не меняется), S2 - разомкнут. После старта выход должен установиться в положение вкл., затем раз в 30 сек перезапускаться.

 

3. S1 - переключаем постоянно быстро (период "туда-сюда" не более 1.5 сек), S2-разомкнут. После старта выход должен установиться в положение вкл., затем перезапуститься через 38 переключений туда-сюда. Т.к. предполагается, что переключения будут по 800 мс (поиск сети согласно даташиту), то это составит 30 сек. Если клацать быстрее (плюс дребезг контактов), то тогда раньше.

 

4. S1 - переключаем медленно ("туда-сюда" не чаще, чем раз в 1.5 сек и не реже чем раз в 30 сек), S2-разомкнут. После старта выход должен установиться в положение вкл. и удерживаться в нем бесконечно долго. Опять же, не забывайте про дребезг контактов, зашунтируйте S1 конденсатором!

 

Может, по п.2 Вы просто не дождались перезапуска или проглядели?

Изменено пользователем GeGeL

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Уважаемый GeGeL.

Проверил работу схемы по Вашим пекомендациям.

Пункт 1 - соответствует.

По пункту 2, 3, 4 результат можно обьединить:

Схема перезапускается не зависимо от периода следования импульсов.

Пробовал периоды 0,5 сек, 2 сек, 5 сек, 10 сек, в любом из этих случаев схема перезапускается через 38 импульсов.

Получился счетчик импульсов до 38 без ограничения по времени.

А вот если импульсы не подавать, перезагрузки не происходит.

 

С уважением.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...