Термометр на PIC и роль конденсаторов в обвязке кварца?

Обсуждаются темы не относящиеся к журналу "РАДИО"

Re: Термометр на PIC и роль конденсаторов в обвязке кварца?

Сообщение Нафис » 13 фев 2018, 10:07

Можно и статически, только придется занять у МК от 28 до 32 разрядов то есть 4 порта.И энергопотребление будет большое.
Нафис
 
Сообщения: 281
Зарегистрирован: 12 апр 2015, 12:28

Re: Термометр на PIC и роль конденсаторов в обвязке кварца?

Сообщение vovavova » 13 фев 2018, 12:07

Понятно. Значит все-таки рациональность и энергоэкономия.
vovavova
 
Сообщения: 253
Зарегистрирован: 20 сен 2012, 22:15

Re: Термометр на PIC и роль конденсаторов в обвязке кварца?

Сообщение Sergey7 » 13 фев 2018, 16:22

Что сказать, видимо асемблер или особенность архитектуры этого МК я все-таки подзабыл, уже давно не им пользовался и где-то все-таки не вижу ошибки. Добавляю вроде безобидную команду и Протеус начинает кричать о переполнении/опустошении стека. Да и MPLAB у меня старый, поскольку давно перешел на AVR, поэтому многие ошибки легко пропускает без предупреждений.
Для статической индикации потребуется не только много выводов, но и одноразрядные индикаторы, чтобы из отдельно подключить, понятно, что это намного дороже и бессмысленно.
С расчетом десятых у меня действительно что-то непонятное, результат вроде выходит правильный, но что-то все же не порядке. В следующий раз выбирайте МК AVR, например самый ходовой и дешевый ATMega8, тогда проблем не будет, готовых библиотек на С море.

В общем, чтобы Вас долго не мучить, можете еще опробовать чужой проект, выглядит он не плохо, http://radioshem.net/index.php?newsid=128 , к сожалению исходники автор не дает, но я проверил работу программы в симуляторе, здесь опрос датчика проходит правильно, примерно раз в 2,5 секунды, плюс реализованы два уровня яркости индикатора. Из той схемы можете просто выкинуть транзисторы, соединив МК с общими выводами индикатора как сейчас. Чтобы отказаться от внешнего резонатора можно просто в конфигурации изменить генератор на IntRC I/O, получится конфигурация 0x3F14. Только обратите внимание, что в авторском варианте RA работает как вход, а не вывод сброса. (С отключенным MCLR потом возможно только высоковольтное программирование, когда на этот вывод программатор подает 12-13В.)
Sergey7
 
Сообщения: 236
Зарегистрирован: 24 фев 2010, 20:32

Re: Термометр на PIC и роль конденсаторов в обвязке кварца?

Сообщение Sergey7 » 13 фев 2018, 20:49

Однако, vovavova, несмотря на то, что я сейчас для себя разрабатываю одновременно две программы, поскольку не знаю какие детали приедут первыми, Ваша, задача мне покоя не дает.
И, похоже, я вспомнил о чем совершенно забыл. В программе для перевода числа 0-9 в коды для управления сегментами индикатора, а также при переводе числа 0-15 (0х00-0х0F) сразу в коды индикатора, соответствующие цифрам 0-9 использовался метод условного табличного перехода, поскольку выполнить это арифметическими расчетами на асме сложно:
Код: Выделить всё
         call      TABLE
         movwf      LED1
......................
TABLE    addwf       PCL,1      ;       Содержимое счетчика команд PC увеличивается на величину содержимого аккумулятора W.
         retlw b'00111111'     ; Происходит скачек по таблице
         retlw b'00000110'

Вот в этом и была ошибка, из-за которой я и нагородил много лишнего. Я совсем забыл, что в этом МК нужно строго контролировать местоположение подпрограммы TABLE в памяти программ, иначе возврат из неё по стеку не произойдет куда нужно. Из-за особенностей организации счетчика команд, он занимает два байта и при переполнении младшего байта PCL в ПП TABLE приращение адреса в старшем байте PCLATH автоматически не происходит, из-за чего возврат из этой ПП происходит по неверному адресу. Эта подпрограмма не должна пересекать границы блоков памяти по 256 бит каждый. То есть, она не должна попадать на 256, 512, 768, 1024 байт и т.д. Именно поэтому порой попытка дописать безобидную команду приводила к смещению этого блока в недопустимую область памяти, что приводило к сбоям и переходу программы в случайное место.
Сейчас я поместил эту ПП в начало , чтобы она наверняка скомпилировалась в области первых 256 байт.

Если не разобрали снова макет, то попробуйте еще разок: пароль QAZ, файл https://www.sendspace.com/file/e94f7i
Sergey7
 
Сообщения: 236
Зарегистрирован: 24 фев 2010, 20:32

Re: Термометр на PIC и роль конденсаторов в обвязке кварца?

Сообщение Sergey7 » 13 фев 2018, 21:08

P.S.: Да, про паузу снова забыл, для симуляции ставил минимум, вот то же самое, но с паузой 3 секунды: https://www.sendspace.com/file/y18mgb
Sergey7
 
Сообщения: 236
Зарегистрирован: 24 фев 2010, 20:32

Re: Термометр на PIC и роль конденсаторов в обвязке кварца?

Сообщение vovavova » 14 фев 2018, 12:49

Sergey7 писал(а):Однако, vovavova, несмотря на то, что я сейчас для себя разрабатываю одновременно две программы, поскольку не знаю какие детали приедут первыми, Ваша, задача мне покоя не дает.

Я даже не знаю, как Вас благодарить? Я сегодня же проверю Вашу исправленную версию прошивки. Правда, Вы скинули мне проект MPLAB IDE без HEX файла, только ASM, но я уже сам разобрался, как его скомпилировать. У меня MPLAB IDE версии v8.91. Так что все в порядке! Проверил в Proteus'e - работает! Спасибо, что исправили все эти ошибки, а то я сам бы не разобрался вообще. Знаете... наверное, правильно Вы и Нафис писали в самом начале, что опрос датчика должен проводится, примерно, 2-4 сек, потому что вчера, например, термометр за 4-5 часов непрерывной работы "ушел" на один градус вперед. Поэтому 3 сек, думаю, в самый раз! Ну, если что... то я теперь сам могу все добавить и перекомпилировать новую прошивку.
Мне вот только одно непонятно: как Вы связываете "логику" с "физикой" в программировании МК??? Я имею ввиду вот что... когда я пишу программу на бейсике и запускаю трассировку, то сразу в этом же IDE вижу, как именно работает та или иная процедура или функция, как открываются окна, в какой последовательности, проводятся вычисления и сразу могу отловить ошибку и справить, как говориться - "на лету". То есть, все тут же на лицо! Все ясно и понятно! А в МК как это происходит? Ведь код ASM немаленький! Вы запускаете MPLAB IDE, пишите кучу текста на ассемблере, потом компилите в HEX, возможно, даже без ошибок, запускаете Proteus и делаете виртуальную модуляцию физического устройства, вставляете в него прошивку и тут выясняется, что вообще ничего не работает, к примеру. Ну и где искать ошибку??? Так ли это??? Если да... то ведь это очень неудобно получается. Пока отработаешь весь код, начнешь проклинать тот день, когда сел за "баранку этого трандулета"! :D

Насчет чужого проекта...
Так это и был мой "План Б", как Вы только догадались??? :?: Но я, пожалуй, делать его не буду. Мне Ваш "План А" нравиться больше. :) Тем более, что я теперь тоже могу что-то менять в этом проекте.

AVR не очень мне нравиться, поскольку, проблемы там начинаются с FUSED конфигурации. В PIC конфигурация как бы идет вместе с прошивкой, а в AVR отдельно. Было дело прошивал и гробил МК. Из-за неправильных параметров МК просто лочился (lock), а чтобы его разблокировать нужен высоковольтный программатор, который стоит столько, сколько 10 таких же МК. А чтобы собрать разблокировщика, то опять таки нужно прошивать МК для этой схемы - замкнутый круг! :cry: В общем, из-за этого невзлюбил я AVR. А с фьюзами ошибиться очень легко. Если в стандартном языке программирования "0" - неустановленный бит, а "1" - установленный, то в МК все наоборот. Причем, инверсию могут делать программы прошивки, а могут и не делать, все зависит какая программа. Короче, очень легко все перепутать к чертям. Зачем так сделано запудренно, я не знаю. :roll:

Вы писали про TABLE...
Ну, это вообще высшая математика! :roll: Мне это как решить тройной интеграл дифференциальным способом. Блин... у меня аж температура подскочила! :oops: Пойду выпью таблетку какую-нибудь. :roll:
vovavova
 
Сообщения: 253
Зарегистрирован: 20 сен 2012, 22:15

Re: Термометр на PIC и роль конденсаторов в обвязке кварца?

Сообщение Sergey7 » 14 фев 2018, 19:20

Раз разобрались, то все в порядке. У меня версия 7.42, если разница небольшая, то можно выделить в окошке слева файл asm и выбрать в меню View-Disassembly listing, появится окно, где видно размещение скомпилированной программы в памяти, и упомянутая ПП табличного перехода сейчас расположилась в ячейках 0х0054 - 0х006Е.
ПП TABLE работает просто. Нам нужно вывести на дисплей цифру 8. Сперва в аккумулятор помещается нужное двоичное число, movlw 0х08, потом идет переход в ПП командой Call TABLE.
В ПП первая команда addwf PCL,1 производит прибавку содержимого аккумулятора (8) к счетчику команд PCL. Если в аккумуляторе был ноль, то выполняется просто следующая строка, а если 0х08, то происходит скачек на 8 строку вниз (считая с нуля), где и прописана команда выхода из подпрограммы retlw и указанный аргумент (код управления сегментами индикатора, при выводе которого в порт В зажигается нужная цифра 8 ) при этом помещается в аккумулятор.
Таким образом после возврата из ПП остается полученный семисегментный код числа 8 скопировать из аккумулятора в регистр LED, для вывода на индикатор.
К слову, если нужно поменять на схеме местами выводы индикатора (сегменты), для удобства разводки, то достаточно в программе TABLE просто поменять местами нужные значения. Так, сейчас в строках 0-9 прописаны коды цифр 0-9 для целых градусов, а в строках 10-26 прописаны отдельно 16 кодов для отображения десятых долей градуса.

План Б. Найти версию термометра на PIC628 оказалось не просто, а полный проект с исходным кодом на асме и вовсе не удалось. Так что мир тесен...

О написании программ. Открываем сразу Протеус и среду разработки программы. Писать программу лучше небольшими частями, сразу компилируя и проверяя работу в симуляторе. Начать просто с настройки выводов, таймеров и иных модулей. Прошивка в Протеусе обновляется автоматом, достаточно просто перезапускать симуляцию. В конце программы можно поставить временную заглушку - бесконечный цикл
Код: Выделить всё
E   GOTO   E

В MPLAB и иных средах есть возможность пошагового анимированного выполнения программы, но это только для небольших фрагментов, скажем чтобы проверить время выполнения команд, подбора какой-нибудь точной задержки. Можно при этом видеть состояние портов, всей памяти и даже иммитировать подачу простых входных сигналов. Но все это проще и удобнее делать сразу в Протеусе. Как-то так...

Я тоже, когда впервые решил заняться МК выбрал PIC, потому что ассемблер для него был проще... Но сейчас только С и AVR, возможностей больше. С конфигурацией ничего сложного нет, все описано в инструкциях, чаще всего кроме бит выбора генератора ничего трогать не нужно, я пользуюсь для AVR Pony Prog 2.08c, он не дает установить RSTDISBL.

Все-таки, vovavova, удалось мне Вас немного заинтересовать разработкой программ, а это главное!
Sergey7
 
Сообщения: 236
Зарегистрирован: 24 фев 2010, 20:32

Re: Термометр на PIC и роль конденсаторов в обвязке кварца?

Сообщение vovavova » 16 фев 2018, 13:47

Здравствуйте, Sergey7! Вчера целый день ''гонял'' термометр с новой прошивкой. Все нормально работает на положительных температурах, точность в рамках заявленой погрешности. Но вот неожиданно возникла одна проблема. Когда решил проверить отработку отрицательных температур, то выяснилось, что почему то в этой прошивке кудато пропал знак минуса! То есть минусовая температура отображается без знака ''минус''! Грешу на себя, потому что, когда компилил HEX в IC-Prog, то процедура проверки кода в нем, почему то завершалась ошибкой, что только не делал. Программатор писал: ''...ошибка по адресу 00XXh'' - цифры менялись. Думал не важно, но может как раз и важно. Может быть я не учел какие то фьюзы?? Попробую еще раз перешить и проверить.
vovavova
 
Сообщения: 253
Зарегистрирован: 20 сен 2012, 22:15

Re: Термометр на PIC и роль конденсаторов в обвязке кварца?

Сообщение Sergey7 » 16 фев 2018, 20:58

Здравствуйте, vovavova! Минус пропасть не должен, в последней версии в этой части ничего не менялось, да и Протеус работает успешно. На всякий случай перезагружу последнюю версию проекта целиком, QAZ, https://www.sendspace.com/file/lc77js

У меня для PIC-ов тоже IC-Prog. Сперва просто считайте память МК и сравните CRC с той, что указана в MPLAB.

В настройках опции-программирование лучше поставить только проверку после программирования. Конфигурация загружается автоматически из HEXа, при желании можно только флаг BODEN еще отметить, для вкл. контроля понижения напряжения питания. Ошибок проверки не должно быть. Попробуйте проверить соединения, настройки, стереть память, проверить стирание и лишь потом программировать.

Автоматическая проверка дает ложную ошибку только в двух случаях: если установлена защита памяти (CP, CPD) и если программа успела запуститься и изменить содержимое EEPROM между записью и чтением кода. Но это на наш случай.
Sergey7
 
Сообщения: 236
Зарегистрирован: 24 фев 2010, 20:32

Re: Термометр на PIC и роль конденсаторов в обвязке кварца?

Сообщение vovavova » 17 фев 2018, 01:11

Ок. проверяем...
vovavova
 
Сообщения: 253
Зарегистрирован: 20 сен 2012, 22:15

Пред.След.

Вернуться в Всё остальное

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 17