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

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


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
Ссылка на комментарий
Поделиться на другие сайты

Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов

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

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

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

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

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

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

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

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

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

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

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

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

Так как её прочитать то если пони прог говорит, что по адресу 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 пользователей онлайн

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

    • Все предложенные к рассмотрению источники питания работают примерно по одному принципу: сетевое напряжение выпрямляется, фильтруется (получаем чуть больше 300 вольт постоянного), затем преобразуется снова в переменное, но уже на частотах в несколько десятков килогерц, понижается на трансформаторе и снова выпрямляется. За счёт высокой частоты преобразования используется трансформатор на ферритовом, а не на стальном, сердечнике, гораздо меньших габаритов и стоимости. Минусы: значительное усложнение схемы блока и вероятность возникновения различных помех от него. Модули управления (кроме первого) также являются импульными преобразователями, с теми же достоинствами и недостатками. Если нужно по быстрому собрать некое подобие ЛБП, то уж лучше брать модуль вроде этого. Ну и блок питания к нему соответствующий. Но не очень понятно, какой практический опыт можно получить от соединения готовых модулей парой проводов.  
    • У меня больше всего вопросов вызвала необычная схема обеспечения отрицательного питания. Автор этой обстоятельной заметки пишет: For this supply to work correctly, the transformer must have a secondary voltage of at least 18V RMS.  Почему? Что будет не так с отрицательным питанием, если напряжение на трансформаторе будет меньше 18В?   https://tinyurl.com/23mlwxtt - я в простейшей эмуляции ставлю 12В пикового напряжения для трансформатора и на стабилитроне все как положено: -5.6В.
    • Согласен, очень криво объяснил. Это работа трёх вольтовой линии, просто на диод шотки сдвоенный, на один анод приходит сигнал напрямую с трансформатора, а на второй через дроссель. Вольт/деление 5 вольт в клетке, тайминг по моему 10 МС. Третья фотография это сигнал на катодах уровень земли ровно по центру экрана. Но все линии по итогу в порядке 3.3 в, 5, в, 12 в и -12 в. Нагрузить все линии не могу сразу ,так как тут же выгорают транзисторы (имеется нагрузка 250 ватт по 10 ампер на каждую линию за исключением-12в), поэтому нагружаю 3.3 вольтовую линию на 10 ампер,  подключаю переменный резистор 50 ватт на 15 ом на 5 вольтовую линию и постепенно довожу до той той картины с перекосом (это гдето  50 ватт общее). По поводу микросхемы, вверху имеется скрин где между импульсами проскакивает мини импульс, если так можно сказать, он проскакивает и на одной  и на второй ноге (7,8). Микросхема не tl 494, а lw4933/abx942.1/c9421646. Далее они приходят на базы транзисторов 945g  коллекторы этих транзисторов соединены с  выводами трансформатора. Просто схема типовая, легче мне кажется просто привести фото самого блока, для тех кто разбирается будет гораздо информативне.  Диод шотки по 12 вольтовой линии был подгоревший, заменил на донора. Приводить скрины не буду что бы не захламлять тему. В итоге, пока все так же, при достижении определенной нагрузки суммарно где-то 50 ватт, появляется этот "выброс и перекос". По этому имеются мысли на два варианта, это микросхема , этот мини импульс между периодами, на низкой нагрузке особо не влияет, но при достижении определенной приводит с самовозбуждению входной цепи и непроизвольному открытию транзистора нижнего плеча. Либо дело в "горячей части", плавающий дефект в обвязке силовых ключей.  Спасибо за ответ.
    • @Gomerchik а вы контролировали как меняется уровень сигнала на А1 ардуины?
    • Спасибо за совет. Автором данного проекта я не являюсь, мне нужно было воссоздать уличный датчик для метеостанции взамен пропавшего(( Из разного найденного в интернете этот проект работает с моей станцией Орегон (спасибо автору). В понедельник попробую последовать Вашему совету. Но все равно куча непоняток  как блин это работает)) Если дело в неправильной отправки команды, то как на это влияет подключение датчика температуры? Если совсем не подключать таймер, то передача идет один раз (как и прописано в программе), станция принимает и отображает, но минут через сколько-то естественно станция уже ни чего не показывает, но с таймером питание полностью не пропадает с ардуинки, но передача сигнала каким-то образом работает по таймеру.  В моем понимании данная команда подается один раз потому, что таймер должен отключать питание МК после передачи сигнала и каждые 43 сек снова подавать питание (так того требует станция).  Ардуино передает показания температуры отключается полностью и 43 секунды мк не работает.  Сейчас у меня питание пока сделано на подпитке от солнечной батареи, но пару пасмурных дней и аккумулятор съедается до отключения(
    • thickman Так и сделаю. Вытащу из бу БП.  Буду знать, как отличить. Благодарю. Заменил транзисторы на IRFB20N50K. Картина стала, совсем другой.  Похоже трудность не в драйвере, на момент подвозбуда, переходные процессы, в нем, завершены. Увеличил затворные резисторы до 50ом, стало немного лучше.  Не понятно, почему верхний ключ греется несколько сильнее. Возможно, стоит посмотреть ток в коллекторе.  Снабберные емкости временно удалил, изменений не произошло.  Замена ТГР на другой, на кольце MSTN-16A-TH, так же, результата не принесла.   irfb20n50k.pdf
×
×
  • Создать...