Jump to content

Калибровка Осциллятора


bolt_2.0
 Share

Recommended Posts

Вот что пишут по этому поводу:

При использовании внутреннего RC генератора необходимо использовать калибровочную константу для получения более точного значения частоты. Поэтому константа для каждого кристалла разная и записана на заводе в последней ячейке памяти: для PIC12C508 в ячейке 0x1FF, для PIC12C509 в 0x3FF. Но записана там не сама константа, а команда, заносящая эту константу во временный регистр WREG - MOVLW XX (где ХХ - калибровочная константа). При конфигурации с внутренним RC генератором выполнение программы начинается не с 0-го адреса, а с последнего, то есть с этой самой команды, а только потом переходит на 0-ой. И вот, чтобы занести эту константу в нужный регистр OSCCAL, сама программа должна начинаться (по адресу 000) с команды MOVWF OSCCAL, которая переносит содержимое регистра WREG (калибровочную константу) в регистр OSCCAL. Конечно не принципиально, чтобы первой командой была именно MOVWF OSCCAL, это может быть и команда перехода, но только не команда, модифицирующая регистр WREG. Но такая команда обязательно должна быть.

При программировании однократных кристаллов в последнюю ячейку не должно ничего записываться, чтобы не нарушить команду и константу. При использовании отладочных кристаллов (с ультрафиолетовым стиранием) обязательно надо прочитать содержимое памяти и записать где-нибудь (лучше на самом корпусе) калибровочную константу. Потому, что при стирании сотрется и сама константа тоже. И в программе для отладочного кристалла должна быть записана команда MOVLW XX в последней ячейке. Например, так:

Однако выше пишут, что в последней строке программной памяти хранится только лишь команда, заносящая константу в регистр OSCCAL, а ниже уже пишут, что там сама калибровочная константа находится... :blink:

Подключил PIC12F509 в программатор, считал Поней всё, что было в пустом МК (ранее я его не прошивал!!!) и все значения были FF, в том числе и по адресу 0x3FF (на скрине). Как узнать эту константу???

И ещё момент - когда считывал, Поня сказала, что считала 2048 байт, хотя в 509 же всего 1024 :blink:

post-126400-0-22009800-1296542044_thumb.jpg

Edited by bolt_2.0
Link to comment
Share on other sites

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

Во первых.

Разрядность константы 1 байт. Т.е. ВОСЕМЬ разрядов.

А разрядность команд МК либо 12 либо 14 (в зависимости от типа МК)

Во вторых.

В последнем СЛОВЕ (а не байте) программной памяти записана не сама константа, а КОМАНДА возврата из подпрограммы с константой в аккумуляторе. Таким образом, константа ВКЛЮЧЕНА в код этой команды и занимает в ней 8 разрядов из 12(или 14). Смотрите во-первых.

Если все сказанное собрать в кучу, то расклад такой:

В тексте программы (в самом начале) пишется следующая последовательность команд:

call 0x3FF

movwf OSCCAL

А на заводе изготовителе по адресу программной памяти 0x3FF записана команда retlw XX, где ХХ - это и есть константа калибровки.

Т.е. при исполнении команды call 0x3FF контроллер перескочит на исполнение кода по адресу 0x3FF, а там как раз и записан ВОЗВРАТ обратно, но с константой ХХ в аккумуляторе. И тогда СЛЕДУЮЩАЯ команда movwf OSCCAL и запишет константу в регистр калибровки осциллятора.

Код команды retlw XX в гекса виде : 0х34ХХ

Т.е. для корректного исполнения кода первые две цифры записанные в последней строке программной памяти ОБЯЗАНЫ БЫТЬ - 34

戦う前に相手のベルトの色に注目

Link to comment
Share on other sites

Спасибо, теперь понял всё досканально :rolleyes: То есть если прошить МК, константа калибровки сотрётся и капут... А как всё таки не потерять её значение при программировании МК?

Edited by bolt_2.0
Link to comment
Share on other sites

30.03.2023 Приглашаем на вебинар «Обзор литиевых батареек и аккумуляторов FANSO и EVE. Особенности выбора батареек для импульсных устройств»

Компания Компэл приглашает на вебинар, посвященный литиевым батарейкам и аккумуляторам (химическим источникам тока, ХИТ) производства FANSO и EVE.
Мы расскажем об особенностях выбора литиевых батареек для устройств, работающих в импульсном режиме и в широком диапазоне температур, рассмотрим типы батареек, наиболее оптимальных для этих устройств, разберем, на что следует обращать основное внимание, чтобы избежать распространенных проблем. В программу мероприятия также включены вопросы о пассивации/депассивации, влиянии условий эксплуатации на основные параметры батареек, продлении срока службы батарейки и многое другое.

Подробнее >>

Нормальный софт программатора не стирает константу.

А всякая левота стирает на раз или задает глупый вопрос "стирать?". А ламеры, не зная английского, пишут Йееессс!

戦う前に相手のベルトの色に注目

Link to comment
Share on other sites

Литиевые батарейки FANSO EVE Energy. Кросс-референс с продукцией основных производителей

Литиевые батарейки широко применяются в различном электронном оборудовании гражданского назначения, таком как GPS-трекеры, приборы учета ресурсов, устройства IoT-технологий и прочее.
В настоящий момент с доступностью продукции некоторых производителей есть определенные трудности. Для их преодоления можно воспользоваться кросс-референсами по цилиндрическим и дисковым батарейкам и подобрать для своего устройства источник питания известного производителя FANSO EVE Energy. Батарейки этой компании доступны и не зависят от меняющихся условий рынка.

Подробнее >>
 

Новые серии ИП NSP-1600/3200 от MEAN WELL. Мощные и управляемые!

Компания MEAN WELL разработала две новые серии мощных управляемых источников питания – NSP-1600 и NSP-3200 с высотой 1U и выходной мощностью 1600 и 3200 Вт, соответственно. В новых сериях NSP-1600/ NSP-3200 реализована интеллектуальная система управления вентилятором (термостатическое управление). Также за счет исключения нескольких функций, избыточных для некоторых приложений, снижена стоимость этих изделий по сравнению с предшественниками. 

Подробнее>>

Понятия не имею. Прочитайте сначала константу, а потом если сотрет, то восстановите вручную

Кстати, никакого капута при стертой костанте не будет. Просто запишите в эту последнюю ячейку 3480, а потом подкорректируете по диаграмме.

Edited by my504

戦う前に相手のベルトの色に注目

Link to comment
Share on other sites

Прочитайте сначала константу

Так как её прочитать то если пони прог говорит, что по адресу 0x3FF пусто... Мож другие программы есть? IcProg у меня на 7 не пошла...

Просто запишите в эту последнюю ячейку 3480, а потом подкорректируете по диаграмме.

По какой диаграмме?

Edited by bolt_2.0
Link to comment
Share on other sites

Внутренний осциллятор может работать и без константы. Для этого достаточно удалить две строки упомянутого выше кода (вызов и запись в регистр калибровки). Соответственно частота будет выставлена хуже чем 1 %. А с константой не более 1 %. Кварц дает на много порядков более точное значение и главное с высокой стабильностью. У внутреннего стабильность очень низкая и зависит и от питания и от температуры.

戦う前に相手のベルトの色に注目

Link to comment
Share on other sites

Мне кажется что без калибровки разброс будет от 3-6 МГц... Да, наверное кварц лучше будет, да и тем более ножек свободных куча... :lol: А какой вывод у 12F509 с открытым стоком как RA4 на 84-м?

Edited by bolt_2.0
Link to comment
Share on other sites

Мне кажется что без калибровки разброс будет от 3-6 МГц... Да, наверное кварц лучше будет, да и тем более ножек свободных куча... :lol: А какой вывод у 12F509 с открытым стоком как RA4 на 84-м?

Когда кажется - нужно креститься...

Перестройка частоты с помощью регистра калибровки возможна только в пределах 3,8...4,2 МГц

Вывода с открытым стоком у этого МК нет.

Зачем вам нужен "оупен дрейн"?

戦う前に相手のベルトの色に注目

Link to comment
Share on other sites

RA4 мне нужен как вывод датчика в сенсорном выключателе, на простых портах сенсор работает нестабильно, вероятно у RA4 сопротивление огромное...

Edited by bolt_2.0
Link to comment
Share on other sites

Ничего не понял.

Если нужен вход, то причем тут открытый сток?

При работе пина как входа - ОБА транзистора выхода закрыты.

Если все таки нужен ВЫХОД с открытым стоком, то его можно эмулировать с помощью регистра TRIS соответствующего порта. Для этого управление необходимым пином переводят на TRIS, а в выходную защелку порта в этом разряде ставят постоянный ноль.

Получается либо ноль, либо обрыв. Т.е. тот самый открытый сток. Однако к этому открытому стоку нельзя присоединять резистор нагрузки с потенциала выше, чем питание контроллера. Иначе откроется диод верхнего мосфета выходной защелки и этот потенциал попадет на линию питания МК. Это называется паразитное питание.

戦う前に相手のベルトの色に注目

Link to comment
Share on other sites

Если все таки нужен ВЫХОД с открытым стоком, то его можно эмулировать с помощью регистра TRIS соответствующего порта. Для этого управление необходимым пином переводят на TRIS, а в выходную защелку порта в этом разряде ставят постоянный ноль.

Получается либо ноль, либо обрыв

Не до конца понял задумку...

Я делал по другому - написал программку, которая выводит на дисплей время заряда цепи сенсора до напряжения переключения триггера порта. При касании пальцем емкость увеличивается и значит время заряда этой цепи так же уваличивается. Схема простая - напряжение +5V поступает на вывод RA4 через резистор 1,5 МОм, и сам вывод RA4 подключен к сенсору через защитную цепочку - резистор и конденсатор. К тому же вывод RA4 универсален тем, что может измерять уровень на себе даже тогда, когда включён на выход :rolleyes:

Экспериментально вывод RA4 показал 22 мкс в дежурном режиме и 40-50 мкс при касании сенсора. Если вместо RA4 указать любой другой вывод порта А или Б, переключить его на вход и подключить к нему эту сенсорную цепочку, то время зарада цепи падает до 1 мкс и при касании еле-еле очень редко увеличивается до 2 мкс, т.е. время заряда падает в 22 раза!!! <_< Чем это можно объяснить???

Edited by bolt_2.0
Link to comment
Share on other sites

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

КМОП технология имеет на выходе ДВА комплементарных транзистора. Один N-типа с земли на пин, а второй P-типа с питания на пин.

У пина с открытым стоком нет верхнего транзистора(P-типа ).

Но если управлять пином не через PORT, а через TRIS (единица в соответствующем разряде делает закрытыми ОБА транзистора), то получится тот же самый открытый сток. Только в PORT должен постоянно сидеть ноль.

Вы так не делали. Вы просто управляли портом. А в таком случае конденсатор быстро перезаряжается через верхний транзистор. Резистор с питания им попросту шунтирован.

戦う前に相手のベルトの色に注目

Link to comment
Share on other sites

Но если управлять пином не через PORT, а через TRIS (единица в соответствующем разряде делает закрытыми ОБА транзистора), то получится тот же самый открытый сток. Только в PORT должен постоянно сидеть ноль.

То биш Вы хотите сказать что бы получить результаты контакта RA4 нужно перевести другой пин в высокое состояние и анализировать его уровень....?

Edited by bolt_2.0
Link to comment
Share on other sites

Делаю именно так - перевожу пин ны выход и далее подпрограммой Get_Time_Accumulation анализирую время заряда:

Get_Time_Accumulation ; Модуль снятия времени заряда цепи

bcf PORTA, RA0

movlw 0xFF

Call Pause_X4 ; Пауза на полный разряд сенсорной площадки

clrf TMR0

bsf PORTA, RA0 ; Начало заряда сенсорной цепи

btfss PORTA, RA0 ; Ожидание высокого уровня на пине

Goto $-0x01

movf TMR0, W ; Передача показаний

return

т.е. перевожу пин RA0 в высокое состояние и жду, когда на нём появится 1. На дисплее светится время - 1мкс, т.е. 1 наступает сразу же при переводе пина в высокое состояние и на прикосновение не реагирует... Где у меня ошибка?

РыСы: Если замениить RA0 на RA4, то всё начинает работать... :unsure:

Edited by bolt_2.0
Link to comment
Share on other sites

т.е. перевожу пин RA0 в высокое ВЫСОКОИМПЕДАНСНОЕ состояние и жду

... Где у меня ошибка?

Вот тут и ошибка.

Перевод пина RA0 в высокоимпедансное состояние:

bsf   STATUS, RP0
bsf   TRISA,  RA0
bcf   STATUS, RP0

Edited by my504

戦う前に相手のベルトの色に注目

Link to comment
Share on other sites

:rolleyes: Заработало... Только вот заметил один момент: в прошлых версиях MPLab-а строки:

bsf   STATUS, RP0
bsf   TRISA,  RA0
bcf   STATUS, RP0

Можно было бы заменить кодом:

bsf   TRISA^80h,  RA0

На MPLab 8.63 так уже не зделаеш... неработает почему то такое выражение... Так же заметил, что на иных портах полное время заряда заниженно - на RA4 ~ 40-110 мкс, а на RA0, RA3 и RB0 на поднимается выше 50 мкс...

Edited by bolt_2.0
Link to comment
Share on other sites

Никогда не применяйте макросы и разного рода синтаксические замены. Всегда явно указывайте переключение банков. TRISx находятся в первом банке по адресам соответствующим PORTx.

戦う前に相手のベルトの色に注目

Link to comment
Share on other sites

Помогите разобраться с командами 12F509. Например для того, что бы перевести вывод на вход я пишу

bsf   TRIS, GP0

А компиллятор в этом месте выдаёт ошибку... как это зделать правильно?

Edited by bolt_2.0
Link to comment
Share on other sites

Что за бит такой GP0 ?

Это бит контакта GP0, он же в прикреплённом файле прописанн... то же самое что и 0, зато понятнее :)

Edited by bolt_2.0
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
  • Сообщения

    • 2 и 3 замкнуть, 5 и 8 замкнуть, 1 и 6 замкнуть, 7 и 4 замкнуть. К образовавшемуся четырехполюснику самостоятельно подключить трансформатор и нагрузку
    • У существа такой девайс давным-давно применён по назначению.  Интересно, зачем бы я стал цитировать Платошкина ?  Вот просто - зачем?  И всё бы хорошо, было бы похоже на правду - всё, что несёт жучило, если бы не несколько "но" : 1) Платошкин мерил на 16кГц. 2) на форуме Бегемот предлагал девайс, работающий на 20кГц. 3) Измерения были проведены раньше.  График видел? видел. Частота измерений какая? -16кГц.  А самый главный прокол жучки, который выдаёт его враньё с головой - вид спектра. Режектор не обладает бесконечной добротностью. Будучи настроен на 16кГц идеально точно, и давя её на 40дБ, он так же успешно будет давить и окружающие, близкие частоты, чем ближе они к частоте настройки-тем сильнее, ширина этой зоны зависит от добротности, но она не может быть бесконечно узкой. Это приводит к характерному виду снятых с режектором спектров - с глубоким провалом вокруг основной частоты.  Теперь взглянем на спектр измерений ещё раз. Сделан, кстати, не в спецсофте, показанном Бегемотом, а в обычном СпектраПлюсе.  Вокруг основной частоты нет никакого провала, выдающего режекторный фильтр. Следовательно, Платошкин говорит правду, я цитирую его слова и измерения без дополнений, а уж на той стороне какой дым из пукана идёт - история умалчивает. Бить морду! За всю брехню - по его наглой салом откормленной мордеЗа каждый визг и писк, чморить и гнобить, гнать отовсюду, куда он только попробует сунуться Дерьмо собачье  
    • Именно так, я на одной lm358 собирал. Остается добавить, что током окончания зарядки для литиевых аккумуляторов принято считать ток в диапазоне 0,01...0,05С. Плюс можно добавить ключ-защелку, чтобы отсекал заярдку полностью...
    • Да, причем на другой модели кэнон. Решил проще - скачал данные из eeprom, когда уже была ошибка, что памперс почти полон, теперь просто загружаю назад этот образ, когда памперс полон на 100% и принтер полностью заблокирован.
    • шунт-> усилитель -> компаратор + ИОН -> светодиод
    • Всем привет! Кому не сложно помогите пожалуйста К данной схеме нужно подключить однофазный трансформатор и R нагрузку (резистор) Диодная сборка должна оставаться неизменной, указать полярность
×
×
  • Create New...