Перейти к содержанию

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


bolt_2.0

Рекомендуемые сообщения

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

При использовании внутреннего 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

Изменено пользователем bolt_2.0
Ссылка на комментарий
Поделиться на другие сайты

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

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

Во первых.

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

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

Во вторых.

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

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

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

call 0x3FF

movwf OSCCAL

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

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

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

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

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

Ссылка на комментарий
Поделиться на другие сайты

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

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

Изменено пользователем bolt_2.0
Ссылка на комментарий
Поделиться на другие сайты

Организация питания на основе надежных литиевых аккумуляторов EVE и микросхем азиатского производства

Качественное и безопасное устройство, работающее от аккумулятора, должно учитывать его физические и химические свойства, профили заряда и разряда, их изменение во времени и под влиянием различных условий, таких как температура и ток нагрузки. Мы расскажем о литий-ионных аккумуляторных батареях EVE и нескольких решениях от различных китайских компаний, рекомендуемых для разработок приложений с использованием этих АКБ. Представленные в статье китайские аналоги помогут заменить продукцию западных брендов с оптимизацией цены без потери качества. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

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

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

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

Ссылка на комментарий
Поделиться на другие сайты

Сравнительное тестирование аккумуляторов EVE Energy и Samsung типоразмера 18650

Инженеры КОМПЭЛ провели сравнительное тестирование аккумуляторов EVE и Samsung популярного для бытовых и индустриальных применений типоразмера 18650. 

Для теста были выбраны аккумуляторы литий-никельмарганцевой системы: по два образца одного наименования каждого производителя – и протестированы на двух значениях тока разряда: 0,5 А и 2,5 А. Испытания проводились в нормальных условиях на электронной нагрузке EBD-USB от ZKEtech, а зарядка осуществлялась от лабораторного источника питания в режиме CC+CV в соответствии с рекомендациями в даташите на определенную модель. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Литиевые аккумуляторы EVE Energy и решения для управления перезаряжаемыми источниками тока (материалы вебинара)

Опубликованы материалы вебинара Компэл, посвященного литиевым аккумуляторам EVE Energy и решениям для управления перезаряжаемыми источниками тока.

На вебинаре мы представили информацию не только по линейкам аккумуляторной продукции EVE, но и по решениям для управления ею, что поможет рассмотреть эти ХИТ в качестве дополнительной альтернативы для уже выпускающихся изделий. Также рассмотрели нюансы работы с производителем и сервисы, предоставляемые Компэл по данной продукции. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

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

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

Изменено пользователем my504

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

Ссылка на комментарий
Поделиться на другие сайты

Литиевые батарейки и аккумуляторы от мирового лидера  EVE в Компэл

Компания Компэл, официальный дистрибьютор EVE Energy, бренда №1 по производству химических источников тока (ХИТ) в мире, предлагает продукцию EVE как со склада, так и под заказ. Компания EVE широко известна в странах Европы, Америки и Юго-Восточной Азии уже более 20 лет. Недавно EVE была объявлена поставщиком новых аккумуляторных элементов круглого формата для электрических моделей «нового класса» компании BMW.

Продукция EVE предназначена для самого широкого спектра применений – от бытового до промышленного. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

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

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

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

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

Изменено пользователем bolt_2.0
Ссылка на комментарий
Поделиться на другие сайты

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

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

Ссылка на комментарий
Поделиться на другие сайты

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

Изменено пользователем bolt_2.0
Ссылка на комментарий
Поделиться на другие сайты

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

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

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

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

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

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

Ссылка на комментарий
Поделиться на другие сайты

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

Изменено пользователем bolt_2.0
Ссылка на комментарий
Поделиться на другие сайты

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

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

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

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

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

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

Ссылка на комментарий
Поделиться на другие сайты

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

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

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

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

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

Изменено пользователем bolt_2.0
Ссылка на комментарий
Поделиться на другие сайты

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

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

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

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

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

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

Ссылка на комментарий
Поделиться на другие сайты

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

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

Изменено пользователем bolt_2.0
Ссылка на комментарий
Поделиться на другие сайты

Делаю именно так - перевожу пин ны выход и далее подпрограммой 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:

Изменено пользователем bolt_2.0
Ссылка на комментарий
Поделиться на другие сайты

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

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

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

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

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

Изменено пользователем my504

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

Ссылка на комментарий
Поделиться на другие сайты

: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 мкс...

Изменено пользователем bolt_2.0
Ссылка на комментарий
Поделиться на другие сайты

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

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

Ссылка на комментарий
Поделиться на другие сайты

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

bsf   TRIS, GP0

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

Изменено пользователем bolt_2.0
Ссылка на комментарий
Поделиться на другие сайты

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

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

Изменено пользователем bolt_2.0
Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...