PDA

Просмотр полной версии : Нужно реализовать алгоритм работы...



alexis
20.05.2007, 21:58
Короче принцип таков. Есть исходный сигнал - мигание светодиода
раз в 3-4 сек. (соотв. лог 0 и 1). Есть микроконтроллер PIC16F84 и устройство на нём, которое время от времени "зависает". Нормальная работа - мигание светодиода. Зависон - либо потух постоянно, либо горит постоянно.
Как сделать авторесет ПИКа по этому сигналу. Нужна реализация в железе, типа откл. питания на 1-2 сек. и снова вкл. либо через MCLR что труднее...
Помогите советом! :)

Genadi Zawidowski
20.05.2007, 22:10
А случайно "зависания" не связаны с наводками? Нет ли ограничений на реализацию "ватчдога", работающего в непосредственной близости от зависающего девайса?
И может вообще - добиться нормальной работы оригинала?

alexis
20.05.2007, 22:20
Трудно сказать что-либо по этому поводу. Нужно юзать девайс,
а зависоны непонятно с чем связаны, возможно с передачей данных с компа (ежеминутно), возможно прошивка немного кривоватая.
Абсолютно непредсказуемы эти завсоны иной раз почти двое суток робил без проблем а иногда и час не проработает - повиснет.
И ещё видимо я недостаточно пояснил. Светодиод и работает от этого ПИКа на одном из портов. Он как индикатор введён в схему. Вот от него то и хотелось бы получать сигнал к ресету.
А вообще может проще сделать таймер на 1006ВИ1 и принудительно допустим через 1 час делать ресет через MCLR? :D
Кстати сейчас посмотрел на конфигурацию программирования ПИКа.
Там не стоит галка "включить WDT". Может поставить? Но опять же мы не знаем реализована ли в прошивке эта функция "сторожевой собаки". Вот сама прошивка:

EU1ME
20.05.2007, 22:37
Если есть исходники, то как сказал Геннадий, нужно реализовать имеющийся в контроллере вочдог.

alexis
20.05.2007, 22:53
Так всё таки надо модифицировать прошивку, или автоматом при установке галки включится watchdog ?

alexis
20.05.2007, 23:41
Если есть исходники, то как сказал Геннадий, нужно реализовать имеющийся в контроллере вочдог.
А кто поможет? Я в них не силён. :oops:

UN9GW
21.05.2007, 01:02
Так всё таки надо модифицировать прошивку, или автоматом при установке галки включится watchdog ?

Watchdog должен сбрасываться программно, иначе программа нормально работать не будет. Поэтому прошивку нужно дорабатывать. Для этого и нужны исходники (желательно).

Genadi Zawidowski
21.05.2007, 05:14
Я-то обозвал ватчдогом атдельнок устройство, но если речь об проекте с имеющимися исходниками, то причину зависания лучше найты по ним.
А встроенный в микропроцессор ватчдог использовать "на всяуий случай". Как я понял, помех в месте эксплуатации нет?

alexis
21.05.2007, 08:10
Смотря что понимать под помехами...
Есть рядом в 200 метрах работающий средневолновый передатчик мощой в 7,5 кВт.

alexis
21.05.2007, 10:40
Конкретный вопрос. Кто-то может доработать прошивку ПИКа с командами для сброса сторожевого таймера?

EU1ME
21.05.2007, 11:02
Без исходника (файл с расширением .asm или .с) заниматься этим совсем не удобно.

alexis
21.05.2007, 11:09
А что, нельзя ли преобразовать обратно в asm из hex? :?

Genadi Zawidowski
21.05.2007, 11:40
Смотря что понимать под помехами...
Есть рядом в 200 метрах работающий средневолновый передатчик мощой в 7,5 кВт.
Если антенны рядом, то думаю можно считать это помехами.
Обычные меры по борьбе - не забыть блокировочные конденсаторы на питании. На все провода "наружу" поставить фильтры (хоть десяток витков в колечке).

alexis
21.05.2007, 15:31
Толку нет. Уже пробовали. Всё равно виснет. Блок необслуживаемый и поэтому то хочется бесперебойной его работы.
Жду предложений.
Вот прошивка дизассемблированная с помощью WinPic800.
Не знаю, правильно или нет выполнил...?

Виталик
21.05.2007, 17:25
Да не морочте тогда голову, чем разбираться в чужих исходниках (не исключено, что кривых- отсюда и зависание) поставте одновибратор на половине 561ла7 с постоянной времени RC = 5-6 сек, выход напрямую к ресету ПИКа и сбрасывайте его сигналом светодиода, как тот мигать перестанет, одновибратор перекинется и пик рестартует.. 3 детали на 1,5 рубля и 5 мин спаять..

alexis
22.05.2007, 10:22
Да не морочте тогда голову, чем разбираться в чужих исходниках (не исключено, что кривых- отсюда и зависание) поставте одновибратор на половине 561ла7 с постоянной времени RC = 5-6 сек, выход напрямую к ресету ПИКа и сбрасывайте его сигналом светодиода, как тот мигать перестанет, одновибратор перекинется и пик рестартует.. 3 детали на 1,5 рубля и 5 мин спаять..
Виталик, а можешь набросок схемки сделать? Я пока не представляю как это будет выглядеть... :?
И ещё состояние светодиода может принять и и лог. 1 (горит) и лог. 0
(не горит). Как анализировать два состояния, что это зависон ПИКа?

alexis
22.05.2007, 20:06
Так никто и не владеет темой?

Genadi Zawidowski
22.05.2007, 22:10
На днях проверяли. Чип с частотой 4 мгц устойчиво работает с кварцем
на 16 мгц. :D
У меня насчет "устойчиво" есть устойчивое сомнение.

RZ3AIR
22.05.2007, 23:32
М-да стиль конечно необычный, если кто хочет может поразбираться.
Clrwdt нет, так что галку ставить нельзя. Похоже что реализованы программно как минимум два синхронных порта, а такие вещи без таймаута делать опасно. Хотя может и питание, и MCLR сбоить, как у автора это реализовано неясно. У меня PIC12F685 управляет усилителем на ГУ-74, так светодиоды индикации сгорели, а ему хоть бы хны. Резистор + емкость + стабилитрон 5,6В на каждую ногу и вперед.

bob1
23.05.2007, 08:47
Попробуй может будет работать.!?

alexis
23.05.2007, 13:50
Попробуй может будет работать.!?
А что это, объясни пожалуйста?

bob1
23.05.2007, 16:24
Попробуй может будет работать.!?
А что это, объясни пожалуйста?Ваша прошивка с вкл. битом WDT. Если временные интервалы не критичны, то должно работать.

alexis
24.05.2007, 09:29
Попробуй может будет работать.!?
А что это, объясни пожалуйста?Ваша прошивка с вкл. битом WDT. Если временные интервалы не критичны, то должно работать.
Спасибо конечно за труд. Пока не проверял в работе, но при включении питания устройства, светодиод начинает мигать. Судя по всему должно работать... :D
Сегодня окончательно проверю в рабочем режиме, как назло вчера из строя вышел ни стого нис сего блок питания передатчика (трансформатор сгорел 8-ми ваттный 8O ). Пока отремонтирую а там и проверю..
Если не секрет, подскажи пожалуйста, каким образом удалось поставить команды Clrwdt?
Это было сделано через дизассемблер из исходного hex файла или взят мой выложенный asm. Честно говоря я сомневаюсь в корректности своего asm файла, так как сделагл его на "ура", через WinPic800 (кто-то в инете посоветовал, что в нём крутой дизассемблер... :? ).

bob1
24.05.2007, 17:58
Если не секрет, подскажи пожалуйста, каким образом удалось поставить команды Clrwdt?
Это было сделано через дизассемблер из исходного hex файла или взят мой выложенный asm. Честно говоря я сомневаюсь в корректности своего asm файла, так как сделагл его на "ура", через WinPic800 (кто-то в инете посоветовал, что в нём крутой дизассемблер... :? ).Дизассемблером пользовался, встроенным в icprog 1.05D. Подправил пару строк. Компиляция показала , что ваш и полученный HEX файл не отличаются. В исходнике везде при выходе из подпрограмм расставил команды Clrwdt(Подпрограмм достаточно). Все измененные строки справа. 2 строки лишние оказались. Вместо них вставил подключение предделителя к WDT.(регистр TMR0 или адрес 0X01 в исходнике не нашел) Если есть желание поэкспериментировать то стерите проставленные мной команды Clrwdt и поставьте их вместо NOP команд. Тогда и временные задержки сохранятся.

alexis
24.05.2007, 19:59
А ещё что-то там про задержку в 18 мсек для WDT, достаточно это или нет.
Говорят что нужен ещё какой то делитель чтоб увеличить время задержки, а то в секунду будет почти 50 раз ресетится и прога исполнятся не будет...
Короче я в этом ничего не понимаю может подскажете что это и нужно ли это здесь?

bob1
24.05.2007, 21:13
А ещё что-то там про задержку в 18 мсек для WDT, достаточно это или нет.
Говорят что нужен ещё какой то делитель чтоб увеличить время задержки, а то в секунду будет почти 50 раз ресетится и прога исполнятся не будет...
Короче я в этом ничего не понимаю может подскажете что это и нужно ли это здесь?Нужно вкл. питание и проверить наконец уже.(Надеюсь программа не управлят ядерной кнопкой ). За последствия я не отвечаю. Строки MOVLW 0B00001111 и MOVWF OPTION_REG добавлены.Это подключение предделителя к WDT. Сброс через 18*128.

alexis
24.05.2007, 21:48
Спасибо bob1 за помощь, сегодня уже поздно и тестировать буду завтра. Результаты сообщу.