Помогите подправить прошивку

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
otest
Друг Кота
Сообщения: 7853
Зарегистрирован: Ср фев 11, 2009 20:35:58

Re: Помогите подправить прошивку

Сообщение otest »

через 330Ом подключен к пин 6

Здесь можно напрямую.
ur5got
Встал на лапы
Сообщения: 104
Зарегистрирован: Ср май 23, 2012 23:33:53
Откуда: UA

Re: Помогите подправить прошивку

Сообщение ur5got »

otest писал(а):
через 330Ом подключен к пин 6

Здесь можно напрямую.

Подключил для защиты порта МК. Всегда стараюсь вешать для ограничения тока (к.з. на плате или другая беда), если конечно возможно.
С уважение, Владимир UR5GOT.
ur5got
Встал на лапы
Сообщения: 104
Зарегистрирован: Ср май 23, 2012 23:33:53
Откуда: UA

Re: Помогите подправить прошивку

Сообщение ur5got »

To otest
Протестировал счетчик в полностью собранном варианте и проявился вот какой глюк. Счетчик нормально считает приходящие с валкода импульсы и при достижении заданного числа включает исполнительный механизм (движок). Но где-то после 24-26 включений (когда как) исполнительный механизм не отключается. Может подскажете, каким образом можно определить с чем это связано? Гонять проект в Proteus? Может можно как-то отследить в железе, что при этом происходит в прошивке?
С уважение, Владимир UR5GOT.
Alexeyslav
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич
Контактная информация:

Re: Помогите подправить прошивку

Сообщение Alexeyslav »

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

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

Например если счетчик проверяется на крайнее значение при помощи равенства а не больше или равно, есть шансы проскочить этот предел(хотя кажется что в программе нет таких мест) и условие будет думать что счетчик еще не досчитал до нужного значения, хотя на самом деле уже намного его превысил.
ur5got
Встал на лапы
Сообщения: 104
Зарегистрирован: Ср май 23, 2012 23:33:53
Откуда: UA

Re: Помогите подправить прошивку

Сообщение ur5got »

Сегодня еще пару раз удалось выловить указанный глюк и вот, что получается. Похоже на то, что проявляется он спонтанно, без какой либо системности (то после 50-ти срабатываний, то после восьми). Счетчик считает, досчитывает до занесенного ранее в EEPROM числа, затем счет прекращается (на входные импульсы он более не реагирует), а выход остается в высоком состоянии (соответственно реле не отключается и движок работает). А вот светодиод "переполнение" исправно сбрасывается! То есть, почему-то, подвисает именно порт выхода. Если при этом нажать кнопку "сброс", то показания индикатора обнуляются, счет продолжается до заданного числа и уже теперь по достижении заданного числа порт выхода сбрасывается в ноль. То есть в программе действительно происходит периодический пропуск команды сброса порта выхода при переполнении.

Alexeyslav
Спасибо за пояснения. Напрашивается, для решения проблемы, простой вариант - параллельно светодиоду "переполнение" подключить светодиод оптопары и ею через дополнительный транзистор управлять исполнительным реле. Но думаю правильнее будет разобраться с этим глюком более "культурно". Буду пытаться "грызть" программу.
С уважение, Владимир UR5GOT.
Alexeyslav
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич
Контактная информация:

Re: Помогите подправить прошивку

Сообщение Alexeyslav »

Прерывания используешь? плавающий глюк может быть обусловлен прерыванием, например в прерывании портится регистр основной программы, или регистр статуса... тогда глюк может произойти в любом месте, как правило эти места - проверка и последующий условный переход. Если между ними возникнет прерывание и исказится значение регистра состояния то условие может не сработать.
ur5got
Встал на лапы
Сообщения: 104
Зарегистрирован: Ср май 23, 2012 23:33:53
Откуда: UA

Re: Помогите подправить прошивку

Сообщение ur5got »

Да, прерывания используются. Я совсем не большой специалист в программировании, да и исходник то не мой. Поэтому многое для меня не совсем понятно.
С уважение, Владимир UR5GOT.
ur5got
Встал на лапы
Сообщения: 104
Зарегистрирован: Ср май 23, 2012 23:33:53
Откуда: UA

Re: Помогите подправить прошивку

Сообщение ur5got »

Alexeyslav писал(а):не отключается выход? значит программа не доходит до того места...

Странно, почему она не доходит до нужной строки.
Строка - bcf indLED, overflow - выполняется,
а следующая сразу за ней - bcf overflowPulse - пропускается и после этой строки строки снова выполняются

_upHold bcf indLED, overflow
bcf overflowPulse
bsf flags, resetNext
bcf INTCON, INTE
goto _exitInt
С уважение, Владимир UR5GOT.
Alexeyslav
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич
Контактная информация:

Re: Помогите подправить прошивку

Сообщение Alexeyslav »

что такое overflowPulse?

Используй чтоли такую конструкцию как DEFINE:

Код: Выделить всё

#define led_r_on  SBI PORTB, PINB2
#define led_r_off CBI PORTB, PINB2


Удобно потом в программе использовать более понятные конструкции.
Я думаю они не пропускаются, а просто где-то забываешь вывести значение в порт...
ur5got
Встал на лапы
Сообщения: 104
Зарегистрирован: Ср май 23, 2012 23:33:53
Откуда: UA

Re: Помогите подправить прошивку

Сообщение ur5got »

Alexeyslav писал(а):что такое overflowPulse?

Это обозначение порта выхода (который управляет реле)

Используй чтоли такую конструкцию как DEFINE:

Так в основном файлюке так и сделано:

#define digitDrive PORTA
#define segmentDrive PORTB
#define overflowPulse PORTA,7
#define switchIn PORTA,6
#define countIn PORTB,0

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

Да в том то и дело, что значение в порт выводиться лишь в нескольких местах и забыть вроде-бы как невозможно.
С уважение, Владимир UR5GOT.
Alexeyslav
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич
Контактная информация:

Re: Помогите подправить прошивку

Сообщение Alexeyslav »

bcf overflowPulse

заменяется на bcf PORTA,7

Как думаешь, что эта команда сделает? Учитывая что PORTA - это обычная константа.

Странно что оно у тебя РАБОТАЕТ... с такой записью надо использовать команды SBI/CBI.
ur5got
Встал на лапы
Сообщения: 104
Зарегистрирован: Ср май 23, 2012 23:33:53
Откуда: UA

Re: Помогите подправить прошивку

Сообщение ur5got »

Alexeyslav писал(а):bcf overflowPulse заменяется на bcf PORTA,7
Как думаешь, что эта команда сделает? Учитывая что PORTA - это обычная константа.

Должна сбросить седьмой бит в регистре PORTA?
Странно что оно у тебя РАБОТАЕТ...

Да работает. К тому же, так сделано в буржуйском исходнике.
с такой записью надо использовать команды SBI/CBI.

Насколько я знаю это команды установки и сброса битов для ATMEL AVR, а у PIC как раз bsf/bcf. Разве не так?
С уважение, Владимир UR5GOT.
Alexeyslav
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич
Контактная информация:

Re: Помогите подправить прошивку

Сообщение Alexeyslav »

Что-то я думал что речь идет об ATMEL...
А где тогда переключение страниц регистров? При компиляции предупреждений никаких небыло?
ur5got
Встал на лапы
Сообщения: 104
Зарегистрирован: Ср май 23, 2012 23:33:53
Откуда: UA

Re: Помогите подправить прошивку

Сообщение ur5got »

Alexeyslav писал(а):Что-то я думал что речь идет об ATMEL..

Дак я выкладывал все, включая схему...
А где тогда переключение страниц регистров? При компиляции предупреждений никаких небыло?

При компиляции предупреждений никаких небыло


Debug build of project `D:\rab\radiokot\Otest\counter1\count_pic16f88.mcp' started.
Language tool versions: MPASMWIN.exe v5.47, mplink.exe v4.45, mplib.exe v4.45
Preprocessor symbol `__DEBUG' is defined.
Sun Dec 09 10:21:29 2012
----------
Clean: Deleting intermediary and output files.
Clean: Deleted file "D:\rab\radiokot\Otest\counter1\counter2009.o".
Clean: Deleted file "D:\rab\radiokot\Otest\counter1\counter2009.err".
Clean: Deleted file "D:\rab\radiokot\Otest\counter1\counter2009.lst".
Clean: Deleted file "D:\rab\radiokot\Otest\counter1\count_pic16f88.cof".
Clean: Deleted file "D:\rab\radiokot\Otest\counter1\count_pic16f88.hex".
Clean: Deleted file "D:\rab\radiokot\Otest\counter1\count_pic16f88.mcs".
Clean: Done.
Executing: "D:\Program Files\Microchip\MPASM Suite\MPASMWIN.exe" /q /p16F88 "counter2009.asm" /l"counter2009.lst" /e"counter2009.err" /o"counter2009.o" /d__DEBUG=1
Executing: "D:\Program Files\Microchip\MPASM Suite\mplink.exe" /p16F88 "counter2009.o" /u_DEBUG /z__MPLAB_BUILD=1 /z__MPLAB_DEBUG=1 /o"count_pic16f88.cof" /M"count_pic16f88.map" /W
MPLINK 4.45, Linker
Device Database Version 1.10
Copyright (c) 1998-2011 Microchip Technology Inc.
Errors : 0

MP2HEX 4.45, COFF to HEX File Converter
Copyright (c) 1998-2011 Microchip Technology Inc.
Errors : 0

Loaded D:\rab\radiokot\Otest\counter1\count_pic16f88.cof.
----------
Debug build of project `D:\rab\radiokot\Otest\counter1\count_pic16f88.mcp' succeeded.
Language tool versions: MPASMWIN.exe v5.47, mplink.exe v4.45, mplib.exe v4.45
Preprocessor symbol `__DEBUG' is defined.
Sun Dec 09 10:21:34 2012
----------
BUILD SUCCEEDED
С уважение, Владимир UR5GOT.
ur5got
Встал на лапы
Сообщения: 104
Зарегистрирован: Ср май 23, 2012 23:33:53
Откуда: UA

Re: Помогите подправить прошивку

Сообщение ur5got »

Может глюк связан с этим "... при разработке программы необходимо следить, что бы вложенность подпрограмм с учетом возможных прерываний не превысило уровень стека. В противном случае возврат из подпрограммы или прерывания будет произведен по случайному адресу..." ?
С уважение, Владимир UR5GOT.
Alexeyslav
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич
Контактная информация:

Re: Помогите подправить прошивку

Сообщение Alexeyslav »

а ты следишь? скорей всего тогда глюки были бы жестче...
ur5got
Встал на лапы
Сообщения: 104
Зарегистрирован: Ср май 23, 2012 23:33:53
Откуда: UA

Re: Помогите подправить прошивку

Сообщение ur5got »

Alexeyslav писал(а):скорей всего тогда глюки были бы жестче...

Согласен, глюки были бы каждый раз разные.
А не подскажете, в Proteus при симуляции работы схемы можно видеть пошаговое выполнение программы как в MPLab или AVRStudio?
С уважение, Владимир UR5GOT.
Alexeyslav
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич
Контактная информация:

Re: Помогите подправить прошивку

Сообщение Alexeyslav »

Так протеус можно запустить прямо из-под MP-LAba в качестве удаленного отладчика, надо только найти плагин под MPlab... Правда, в последний раз когда я им пользовался иногда возникали ошибки и протеус просто слетал ни с того ни с сего, даже не считая такой мелочи что в этом режиме протеус открывается как ВНУТРЕННЕЕ окно МПЛАБа, нельзя видеть одновременно схему и пошагово отлаживать программу - либо окну с исходником места не будет, либо протеус будет слишком мелок. И ведь в такой ситуации даже второй монитор не спасет.
otest
Друг Кота
Сообщения: 7853
Зарегистрирован: Ср фев 11, 2009 20:35:58

Re: Помогите подправить прошивку

Сообщение otest »

Странно, почему она не доходит до нужной строки.
Строка - bcf indLED, overflow - выполняется,

Это работа с флагом и видеть её без дебагера невозможно.
Какая длительность импульса по входу?
См. входные цепи на внешние помехи и по питанию. Возможны ложные срабатывания. В прерывании МК находится ~20mksek . Если за это врямя придут 2 импульсных помехи,то будет сбой программы.
Прошивка с защитой от помех.
ur5got
Встал на лапы
Сообщения: 104
Зарегистрирован: Ср май 23, 2012 23:33:53
Откуда: UA

Re: Помогите подправить прошивку

Сообщение ur5got »

Это работа с флагом и видеть её без дебагера невозможно.

Я собрал себе ICD2 и PicKit2, только я использую их всегда в роли программатора, хотя они вроде бы могут выполнять и функции дебагера. Но к сожалению использовать их в роли дебагера мне не приходилось и я не знаю как это делать. Может подскажете и я попробую?
Какая длительность импульса по входу?

Насчет длительности импульсов не скажу (не мерял). Да и по ходу дела частота входных импульсов не всегда постоянна, соответственно изменяется и длительность.Частота входных импульсов не более 200Гц. Скважность должна быть около 2, так как входные импульсы формируются оптопарой и "резным" диском у которого ширина прорези равна ширине зуба.
См. входные цепи на внешние помехи и по питанию. Возможны ложные срабатывания.

Кабель от оптопары экранированный. Самый мощный потребитель - электронасос порядка 300Вт. На выходе оптопары (входе порта счета) стоит RC цепочка 330Ом+10нФ. Питается устройство от +12В компьютерного БП + СLCRC фильтр (100мкрФ+10мкрГ+0,1мкрФ+39Ом+100мкрФ) +КРЕН 5В на самой плате счетчика. При питании от стабилизированного трансформаторного источника +12В сбои также присутствовали.
В прерывании МК находится ~20mksek.Если за это врямя придут 2 импульсных помехи,то будет сбой программы.

Получается, что при частоте входных импульсов около 200Гц имеем более чем на два порядка запас.
Прошивка с защитой от помех.

Спасибо за прошивку, завтра досконально протестирую и отпишусь.
С уважение, Владимир UR5GOT.
Ответить

Вернуться в «Разные вопросы по МК»