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

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

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

Сообщение vovavova » 31 янв 2018, 00:35

Да нет... МК не греется и с питанием все в порядке. Попробую я все-таки план Б.
vovavova
 
Сообщения: 253
Зарегистрирован: 20 сен 2012, 22:15

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

Сообщение Sergey7 » 31 янв 2018, 20:10

Теперь Вы понимаете, vovavova,какие чувства и я испытывал раньше, но желание создать свое устройство пересилило.
Теперь даже не уверен, знакомы ли Вам системы счисления: двоичная, шестнадцатеричная...
Не стоило сразу смотреть всю программу, все расчеты в маленьком блоке Process, где из двух принятых от датчика байтов получается один байт с температурой в градусах и второй с десятыми долями. Как работают внутри последующие подпрограммы по переводу двоичного числа в код индикатора, общение по шине и тем более вычисление CRC я разобраться в то время и не пытался, это головоломка для математиков. CRC - это контрольная сумма, если первые 8 байт полученных от датчика обработать по алгоритму CRC, то результат совпадает с последним 9 байтом, переданным датчиком, а если нет - значит данные приняты с ошибкой и надо повторить чтение. В принципе это не обязательно, но памяти ведь не жалко.

Для написания программы достаточно лишь понять устройство МК (есть же русские описания), какие регистры за что отвечают и иметь под рукой список команд ассемблера для PICов, их всего-то около 30. Названия и адреса регистров в разных контроллерах почти всегда совпадают, просто надо знать, что именно доступно в данной версии PICа. Здесь как с компьютером, поймешь как пользоваться клавиатурой и мышью и какая это будет программа уже не важно. Язык С конечно более универсален, но с ассемблера легко начинать, команд в нем мало, вот полное их описание: https://www.sendspace.com/file/3yri7x

Я бы дополнил, но к ассемблеру давно не возвращался, так что так сходу не вышло, в С куда все проще, напишешь заковыристую формулу с корнями-интегралами и готово, а здесь надо больше думать... Вот если бы надо было на AVR, это просто.

Но и вариантов Б в сети уже хоть отбавляй.
Sergey7
 
Сообщения: 236
Зарегистрирован: 24 фев 2010, 20:32

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

Сообщение Sergey7 » 31 янв 2018, 21:26

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

Индикация минуса, гашение не значащего нуля спереди, вычисление от -55 до +99,9 градусов, если надо выше напишите, это поправить проще.
Частота опроса датчика раз в 3 секунды, можно сделать любую в пределах разумного. К слову, яркости хватает, а то может транзисторы надо на общие выводы индикатора добавить?

Пароль архива QAZ , файл https://www.sendspace.com/file/wp3s8l
Sergey7
 
Сообщения: 236
Зарегистрирован: 24 фев 2010, 20:32

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

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

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

Охота пуще неволи! Я понимаю. ;)

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

Нафис написал, что в статье журнала есть архив. Я сразу не заметил, но потом еще раз перечитал, и нашел в конце статьи "От редакции..." ссылку на FTP сервер. Скачал, глянул ASM... немного понятно было только в конце кода, где реализовывались процедуры пауз на 500, 50, 10, 1 мс. Вообще реализация алгоритма интересная, но непонятная. Какая-то "матрешка"... Вот, чтобы в программе выполнить паузу в 500 мс, командой CALL MS500 (делается вызов процедуры MS500), внутри которой десять раз вызывается CALL MS50, то есть переход на процедуру задержки в 50 мс, где, в свою очередь, делается переход на вызов 5-ти раз на задержку в 10 мс, а тот вызывает процедуру задержки в 1 мс, которая выполняется 10-ть раз - таким образом, в конечно итоге, все сводится к процедуре выполнения команды NOP. Что это за команда, я не знал. Сейчас вот глянул в PDF, что Вы мне переслали, оказывается, это команда "нет операции". Я так понимаю МК выполняет пустой цикл, то есть время импульсов задающего генератора тратиться ни на что, никаких действий. Таким образом реализуется пауза. Но мне непонятно, зачем так сложно??? Почему сделана такая "матрешка"??? Почему нельзя сразу вызывать n-ное количество команды NOP, и не делать эти переходы одна через другую... десять раз по сто раз??? Вот это непонятно мне. :roll:

Sergey7
Спасибо Вам за документацию по ASM, я посмотрю, еще почитаю. И я обязательно проверю Вашу версию прошивки термометра. Потом отпишусь, как все получилось. В любом случаю спасибо, что вообще тратите на это свое время. Спасибо за участие! :)

У меня еще есть парочка вопросов к Вам.
Вопрос 1
Вы написали, что легче писать программы для МК на С, то есть, можно использовать язык высоко уровня, не обязательно ASM ??? Скажите: есть ли, в таком случаи, какой-то редактор написания программ под МК на обычном бейсике???
Было бы любопытно ознакомится.

Вопрос 2
Вы написали, что CRC - это алгоритм вычисления контрольной суммы, так сказать, для проверки верности переданных данных. Получается, что 8 переданных байтов вычисляются по алгоритму CRC и результат должен совпасть с 9 байтом переданных данных. Вот тут интересное замечание: а если ошибка попадет как раз на 9-й байт??? Ведь где гарантия, что 9-й байт всегда будет передаваться безошибочно??!! Вот что тогда??? :roll:
vovavova
 
Сообщения: 253
Зарегистрирован: 20 сен 2012, 22:15

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

Сообщение Sergey7 » 01 фев 2018, 20:03

vovavova писал(а): С системами счисления знаком, конечно. Я пишу программы не очень сложные, только на бейсике. Так что с программированием немножко знаком, так сказать.

Ну вот, а пишете о дремучем лесе ;) Ассемблер освоить проще, да и С после бейсика уже не будет казаться таким сложным.

Что касаемо пауз в программе. Давайте разберем, пауза в 1 секунду, для этого надо вызвать подпрограмму, формирующую паузу в 100 мс десять раз :
Код: Выделить всё
PAUSE1s         movlw      0x0A
               movwf      Temp3           ;В переменную Temp3 помещается число 0х0А, то-есть 10
               call       PAUSE100ms      ;Вызывается подпрограмма, которая будет выполняться строго 100 мс
               decfsz      Temp3,1        ;Переменная Temp уменьшается на единицу, Temp=Temp-1 
               goto      $-2              ;Эта строка выполняется только если Temp не равен нулю - переход вверх на две строки, call
               return                     ;Если  Temp=0, то выдержка завершена, выход из подпрограммы PAUSE1s
               

Аналогично и в подпрограмме паузы на 100 мс. Использование нескольких вложенных друг в друга циклов связано с тем, что одна переменная может иметь значения от 0 до 255 (То есть один цикл можно выполнить 256 раз) и этого мало для больших задержек. Конечно, если меньшие задержки в программе нигде не используются, то все это можно соединить в одну подпрограмму. А 100 мс мне тоже где-то нужны были отдельно. В С можно было просто написать _delay_ms 1000; , что означает запуск стандартной подпрограммы, которая устроена аналогично с помощью циклов.

В PICах есть еще такая штука, что выполнение одной команды занимает 4 такта, то-есть команда NOR при 4МГц выполняется 1 мкс. (А в AVR операция занимает 1 такт.) Выходит, что если в программе написать NOR 1000 раз, заняв половину памяти, то это займет всего-то 1 мс. :)

Вы написали, что легче писать программы для МК на С, то есть, можно использовать язык высоко уровня, не обязательно ASM ??? Скажите: есть ли, в таком случаи, какой-то редактор написания программ под МК на обычном бейсике???

К сожалению с Бейсиком я знаком совсем немного, насколько я понимаю Бейсик имеет много разных похожих вариантов, помню у меня даже была на старом телефоне программа на Яве, где можно было писать программы на упрощенном бейсике, которые компилировались в яву, собственно для запуска на этом самом телефоне. Было забавно. Для МК вроде существуют коммерческие среды разработки на Бейсике, но это экзотика. Производители чипов дают бесплатные программы только для С и ассемблера.

Для разработки нужна программа, где можно написать текст на С или Ассемблере, выполнить какую-то простую отладку, скажем просчитать время выполнения, и получить файл hex для прошивки. Для AVR это фирменные Atmel Studio, для PIC это MPLAB IDE, или иные варианты редакторов-компиляторов сторонних разработчиков. Помню даже видел какой-то визуальный редактор, про него и в Радио были заметки, там картинку из блоков составлять, но лучше не ищите это чудо.

Вы написали, что CRC - это алгоритм вычисления контрольной суммы, так сказать, для проверки верности переданных данных. Получается, что 8 переданных байтов вычисляются по алгоритму CRC и результат должен совпасть с 9 байтом переданных данных. Вот тут интересное замечание: а если ошибка попадет как раз на 9-й байт??? Ведь где гарантия, что 9-й байт всегда будет передаваться безошибочно??!! Вот что тогда???

Смотрите внимательнее, датчик после команды чтения может выдать 9 байт, 8 информационных и 1 последний это CRC, которую он сам вычислил при передаче этих 8 байтов.
Мы, принимая тоже вычисляем CRC этих 8 байтов. А потом приняв 9 байт с версией CRC датчика сравниваем со своим подсчетом. То есть, если контрольная сумма, вычисленная нами и датчиком не сходится, то была где-то ошибка, может в первых 8 байтах, а может и в контрольном 9, где именно не известно. Возможно, что температура в первых 2 байтах была принята без ошибок, а ошибка возникла позднее, но это не важно, результат один, раз была ошибка, значит лучше повторить чтение с самого начала, чтобы однажды на дисплее не мелькнули каракули. Для термометра это может и не страшно, через несколько секунд данные обновятся, но термостат может выполнить не нужное действие из-за ошибки. Да и производитель датчика рекомендует не игнорировать эту функцию.

Ранее Вы писали о программе Proteus, это программа для построения схемы, ее виртуального запуска, и полуавтоматического создания чертежей платы. Про 3-D картинку собранной платы и формирование спец. файлов для передачи на промышленные ЧПУ станки для изготовления плат я уже молчу. Советую заиметь, правда тяжелая, под гигабайт места занимает на диске, ну и ... понятно, что бесплатно производитель ее не раздает. В ней я и проверил работу программы, пробуйте, если надо по мелочи дополню что-то, там еще можно минус сдвигать вправо при однозначной температуре.
Так что чем могу помогу, удачи Вам!
Sergey7
 
Сообщения: 236
Зарегистрирован: 24 фев 2010, 20:32

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

Сообщение vovavova » 02 фев 2018, 22:59

Sergey7 писал(а):Так что чем могу помогу, удачи Вам!

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

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

Сообщение Нафис » 03 фев 2018, 14:05

Собрал термометр, свел в одну точку три термометра, два цифровых и спиртовой. В новом термометре задал интервал опроса температуры 25 мс, выждал 30 минут. Показания, спиртовой-между 18 и 20 градусами, цифровой 18,6 градуса, "быстрый" цифровой 18,9 градуса. Подхожу поближе, цифровые термометры радостно приветствуют меня повышением показаний на 0,1 градуса и все. Что значат 0,3 градуса разницы между показаниями цифровых термометров? Возможно нагрев кристалла, а возможно погрешность у датчиков разная.
Нафис
 
Сообщения: 281
Зарегистрирован: 12 апр 2015, 12:28

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

Сообщение СНГ » 03 фев 2018, 16:05

По ёмкостям С1 и С2 в обвязке кварца в схеме Пирса.
На каждый тип кварца производитель указывает нагрузочную ёмкость.
Поэтому суммарная ёмкость С1 и С2, включённых для кварца последовательно, должна быть равна нагрузочной. При расчете нелишне приплюсовать к С1 и С2 емкости входа и выхода инвертора генератора, монтажа. Ориентировочно можно прибавить по 5пФ к С1 и С2, а затем произвести расчёт их последовательного включения под нагрузочную ёмкость. Как правило, “попадание” получается достаточно верное.
СНГ
 
Сообщения: 287
Зарегистрирован: 15 апр 2010, 22:40

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

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

Нафис писал(а):Собрал термометр, свел в одну точку три термометра, два цифровых и спиртовой. В новом термометре задал интервал опроса температуры 25 мс, выждал 30 минут. Показания, спиртовой-между 18 и 20 градусами, цифровой 18,6 градуса, "быстрый" цифровой 18,9 градуса. Подхожу поближе, цифровые термометры радостно приветствуют меня повышением показаний на 0,1 градуса и все. Что значат 0,3 градуса разницы между показаниями цифровых термометров? Возможно нагрев кристалла, а возможно погрешность у датчиков разная.

О каких датчиках речь? У DS18B20 время преобразования при 12 битах 750 мс, поэтому делать реальные замеры чаще просто не возможно, а читать содержимое памяти датчика по двадцать раз бессмысленно. Когда я делал наружный термометр с радиоканалом на батарейках, то вообще МК просыпался лишь 2 раза в минуту, в первый раз отправлял команду запуска преобразования на DS18B20, а во второй раз считывал результат из буфера датчика и передавал трансиверу NRF24L01, это помогло сделать потребление тока от батарейки более равномерным, к слову 2хAA работают уже больше двух лет. В чем смысл пытаться делать замеры воздуха чаще?
О нагреве кристалла я когда-то вычитал из одной из инструкций производителя чипа, но насколько это существенно не знаю.

Как-то, получив от китайцев 5 шт. оригинальных DS18B20 от Dallas, проверял разброс их калибровки, подключая все их кучкой одновременно к ПК через простой адаптер для COM порта. Разница в их показаниях не превышала 0,3 градуса, что оказалось стабильнее, чем можно было ожидать, учитывая заявленную погрешность.
Sergey7
 
Сообщения: 236
Зарегистрирован: 24 фев 2010, 20:32

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

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

Отвечаю Sergey7, датчики DS18B20 конфигурация по умолчанию 12 бит. Программы термометров не позволяют опрашивать датчики ранее окончания всех процедур, получается около 1 секунды. Повторное обращение к одному из датчиков через 20 секунд, к другому через 25 миллисекунд. Я пытался выяснить почему термометр собранный vovavova так странно себя ведет.
СНГ по поводу кварцевого генератора. Сведений по генератору разработчик дает очень мало, в частности указана рекомендуемая емкость конденсаторов, иногда с привязкой к частоте кварца, пишу для микроконтроллеров AVR.
Нафис
 
Сообщения: 281
Зарегистрирован: 12 апр 2015, 12:28

Пред.След.

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

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

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