bolt_2.0 Опубликовано 1 февраля, 2011 Поделиться Опубликовано 1 февраля, 2011 (изменено) Вот что пишут по этому поводу: При использовании внутреннего RC генератора необходимо использовать калибровочную константу для получения более точного значения частоты. Поэтому константа для каждого кристалла разная и записана на заводе в последней ячейке памяти: для PIC12C508 в ячейке 0x1FF, для PIC12C509 в 0x3FF. Но записана там не сама константа, а команда, заносящая эту константу во временный регистр WREG - MOVLW XX (где ХХ - калибровочная константа). При конфигурации с внутренним RC генератором выполнение программы начинается не с 0-го адреса, а с последнего, то есть с этой самой команды, а только потом переходит на 0-ой. И вот, чтобы занести эту константу в нужный регистр OSCCAL, сама программа должна начинаться (по адресу 000) с команды MOVWF OSCCAL, которая переносит содержимое регистра WREG (калибровочную константу) в регистр OSCCAL. Конечно не принципиально, чтобы первой командой была именно MOVWF OSCCAL, это может быть и команда перехода, но только не команда, модифицирующая регистр WREG. Но такая команда обязательно должна быть.При программировании однократных кристаллов в последнюю ячейку не должно ничего записываться, чтобы не нарушить команду и константу. При использовании отладочных кристаллов (с ультрафиолетовым стиранием) обязательно надо прочитать содержимое памяти и записать где-нибудь (лучше на самом корпусе) калибровочную константу. Потому, что при стирании сотрется и сама константа тоже. И в программе для отладочного кристалла должна быть записана команда MOVLW XX в последней ячейке. Например, так: Однако выше пишут, что в последней строке программной памяти хранится только лишь команда, заносящая константу в регистр OSCCAL, а ниже уже пишут, что там сама калибровочная константа находится... Подключил PIC12F509 в программатор, считал Поней всё, что было в пустом МК (ранее я его не прошивал!!!) и все значения были FF, в том числе и по адресу 0x3FF (на скрине). Как узнать эту константу??? И ещё момент - когда считывал, Поня сказала, что считала 2048 байт, хотя в 509 же всего 1024 Изменено 1 февраля, 2011 пользователем bolt_2.0 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
my504 Опубликовано 1 февраля, 2011 Поделиться Опубликовано 1 февраля, 2011 Я не буду предполагать откуда вы взяли всю эту процитированную муть. Просто расскажу Вам как обстоит на самом деле ситуация с калибровочной константой. Во первых. Разрядность константы 1 байт. Т.е. ВОСЕМЬ разрядов. А разрядность команд МК либо 12 либо 14 (в зависимости от типа МК) Во вторых. В последнем СЛОВЕ (а не байте) программной памяти записана не сама константа, а КОМАНДА возврата из подпрограммы с константой в аккумуляторе. Таким образом, константа ВКЛЮЧЕНА в код этой команды и занимает в ней 8 разрядов из 12(или 14). Смотрите во-первых. Если все сказанное собрать в кучу, то расклад такой: В тексте программы (в самом начале) пишется следующая последовательность команд: call 0x3FF movwf OSCCAL А на заводе изготовителе по адресу программной памяти 0x3FF записана команда retlw XX, где ХХ - это и есть константа калибровки. Т.е. при исполнении команды call 0x3FF контроллер перескочит на исполнение кода по адресу 0x3FF, а там как раз и записан ВОЗВРАТ обратно, но с константой ХХ в аккумуляторе. И тогда СЛЕДУЮЩАЯ команда movwf OSCCAL и запишет константу в регистр калибровки осциллятора. Код команды retlw XX в гекса виде : 0х34ХХ Т.е. для корректного исполнения кода первые две цифры записанные в последней строке программной памяти ОБЯЗАНЫ БЫТЬ - 34 0 戦う前に相手のベルトの色に注目 Ссылка на комментарий Поделиться на другие сайты Поделиться
20% скидка на весь каталог электронных компонентов в ТМ Электроникс!Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!Перейти на страницу акции Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849
bolt_2.0 Опубликовано 1 февраля, 2011 Автор Поделиться Опубликовано 1 февраля, 2011 (изменено) Спасибо, теперь понял всё досканально То есть если прошить МК, константа калибровки сотрётся и капут... А как всё таки не потерять её значение при программировании МК? Изменено 1 февраля, 2011 пользователем bolt_2.0 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>> Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161
my504 Опубликовано 1 февраля, 2011 Поделиться Опубликовано 1 февраля, 2011 Нормальный софт программатора не стирает константу. А всякая левота стирает на раз или задает глупый вопрос "стирать?". А ламеры, не зная английского, пишут Йееессс! 0 戦う前に相手のベルトの色に注目 Ссылка на комментарий Поделиться на другие сайты Поделиться
bolt_2.0 Опубликовано 1 февраля, 2011 Автор Поделиться Опубликовано 1 февраля, 2011 А PONYPROG это нормальный софт? 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
my504 Опубликовано 1 февраля, 2011 Поделиться Опубликовано 1 февраля, 2011 (изменено) Понятия не имею. Прочитайте сначала константу, а потом если сотрет, то восстановите вручную Кстати, никакого капута при стертой костанте не будет. Просто запишите в эту последнюю ячейку 3480, а потом подкорректируете по диаграмме. Изменено 1 февраля, 2011 пользователем my504 0 戦う前に相手のベルトの色に注目 Ссылка на комментарий Поделиться на другие сайты Поделиться
bolt_2.0 Опубликовано 1 февраля, 2011 Автор Поделиться Опубликовано 1 февраля, 2011 (изменено) Прочитайте сначала константу Так как её прочитать то если пони прог говорит, что по адресу 0x3FF пусто... Мож другие программы есть? IcProg у меня на 7 не пошла... Просто запишите в эту последнюю ячейку 3480, а потом подкорректируете по диаграмме. По какой диаграмме? Изменено 1 февраля, 2011 пользователем bolt_2.0 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
bolt_2.0 Опубликовано 1 февраля, 2011 Автор Поделиться Опубликовано 1 февраля, 2011 Может забить на эту константу и тупо кварц воткнуть? 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
my504 Опубликовано 1 февраля, 2011 Поделиться Опубликовано 1 февраля, 2011 Внутренний осциллятор может работать и без константы. Для этого достаточно удалить две строки упомянутого выше кода (вызов и запись в регистр калибровки). Соответственно частота будет выставлена хуже чем 1 %. А с константой не более 1 %. Кварц дает на много порядков более точное значение и главное с высокой стабильностью. У внутреннего стабильность очень низкая и зависит и от питания и от температуры. 0 戦う前に相手のベルトの色に注目 Ссылка на комментарий Поделиться на другие сайты Поделиться
bolt_2.0 Опубликовано 1 февраля, 2011 Автор Поделиться Опубликовано 1 февраля, 2011 (изменено) Мне кажется что без калибровки разброс будет от 3-6 МГц... Да, наверное кварц лучше будет, да и тем более ножек свободных куча... А какой вывод у 12F509 с открытым стоком как RA4 на 84-м? Изменено 1 февраля, 2011 пользователем bolt_2.0 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
my504 Опубликовано 1 февраля, 2011 Поделиться Опубликовано 1 февраля, 2011 Мне кажется что без калибровки разброс будет от 3-6 МГц... Да, наверное кварц лучше будет, да и тем более ножек свободных куча... А какой вывод у 12F509 с открытым стоком как RA4 на 84-м? Когда кажется - нужно креститься... Перестройка частоты с помощью регистра калибровки возможна только в пределах 3,8...4,2 МГц Вывода с открытым стоком у этого МК нет. Зачем вам нужен "оупен дрейн"? 0 戦う前に相手のベルトの色に注目 Ссылка на комментарий Поделиться на другие сайты Поделиться
bolt_2.0 Опубликовано 1 февраля, 2011 Автор Поделиться Опубликовано 1 февраля, 2011 (изменено) RA4 мне нужен как вывод датчика в сенсорном выключателе, на простых портах сенсор работает нестабильно, вероятно у RA4 сопротивление огромное... Изменено 1 февраля, 2011 пользователем bolt_2.0 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
my504 Опубликовано 1 февраля, 2011 Поделиться Опубликовано 1 февраля, 2011 Ничего не понял. Если нужен вход, то причем тут открытый сток? При работе пина как входа - ОБА транзистора выхода закрыты. Если все таки нужен ВЫХОД с открытым стоком, то его можно эмулировать с помощью регистра TRIS соответствующего порта. Для этого управление необходимым пином переводят на TRIS, а в выходную защелку порта в этом разряде ставят постоянный ноль. Получается либо ноль, либо обрыв. Т.е. тот самый открытый сток. Однако к этому открытому стоку нельзя присоединять резистор нагрузки с потенциала выше, чем питание контроллера. Иначе откроется диод верхнего мосфета выходной защелки и этот потенциал попадет на линию питания МК. Это называется паразитное питание. 0 戦う前に相手のベルトの色に注目 Ссылка на комментарий Поделиться на другие сайты Поделиться
bolt_2.0 Опубликовано 1 февраля, 2011 Автор Поделиться Опубликовано 1 февраля, 2011 (изменено) Если все таки нужен ВЫХОД с открытым стоком, то его можно эмулировать с помощью регистра TRIS соответствующего порта. Для этого управление необходимым пином переводят на TRIS, а в выходную защелку порта в этом разряде ставят постоянный ноль.Получается либо ноль, либо обрыв Не до конца понял задумку... Я делал по другому - написал программку, которая выводит на дисплей время заряда цепи сенсора до напряжения переключения триггера порта. При касании пальцем емкость увеличивается и значит время заряда этой цепи так же уваличивается. Схема простая - напряжение +5V поступает на вывод RA4 через резистор 1,5 МОм, и сам вывод RA4 подключен к сенсору через защитную цепочку - резистор и конденсатор. К тому же вывод RA4 универсален тем, что может измерять уровень на себе даже тогда, когда включён на выход Экспериментально вывод RA4 показал 22 мкс в дежурном режиме и 40-50 мкс при касании сенсора. Если вместо RA4 указать любой другой вывод порта А или Б, переключить его на вход и подключить к нему эту сенсорную цепочку, то время зарада цепи падает до 1 мкс и при касании еле-еле очень редко увеличивается до 2 мкс, т.е. время заряда падает в 22 раза!!! Чем это можно объяснить??? Изменено 1 февраля, 2011 пользователем bolt_2.0 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
my504 Опубликовано 1 февраля, 2011 Поделиться Опубликовано 1 февраля, 2011 Чтобы хоть что нибудь понять, нужно сначала ознакомиться со схемотехникой выходного порта. КМОП технология имеет на выходе ДВА комплементарных транзистора. Один N-типа с земли на пин, а второй P-типа с питания на пин. У пина с открытым стоком нет верхнего транзистора(P-типа ). Но если управлять пином не через PORT, а через TRIS (единица в соответствующем разряде делает закрытыми ОБА транзистора), то получится тот же самый открытый сток. Только в PORT должен постоянно сидеть ноль. Вы так не делали. Вы просто управляли портом. А в таком случае конденсатор быстро перезаряжается через верхний транзистор. Резистор с питания им попросту шунтирован. 0 戦う前に相手のベルトの色に注目 Ссылка на комментарий Поделиться на другие сайты Поделиться
bolt_2.0 Опубликовано 2 февраля, 2011 Автор Поделиться Опубликовано 2 февраля, 2011 (изменено) Но если управлять пином не через PORT, а через TRIS (единица в соответствующем разряде делает закрытыми ОБА транзистора), то получится тот же самый открытый сток. Только в PORT должен постоянно сидеть ноль. То биш Вы хотите сказать что бы получить результаты контакта RA4 нужно перевести другой пин в высокое состояние и анализировать его уровень....? Изменено 2 февраля, 2011 пользователем bolt_2.0 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
my504 Опубликовано 2 февраля, 2011 Поделиться Опубликовано 2 февраля, 2011 Именно это я и хотел сказать... 0 戦う前に相手のベルトの色に注目 Ссылка на комментарий Поделиться на другие сайты Поделиться
bolt_2.0 Опубликовано 3 февраля, 2011 Автор Поделиться Опубликовано 3 февраля, 2011 (изменено) Делаю именно так - перевожу пин ны выход и далее подпрограммой 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, то всё начинает работать... Изменено 3 февраля, 2011 пользователем bolt_2.0 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
my504 Опубликовано 3 февраля, 2011 Поделиться Опубликовано 3 февраля, 2011 (изменено) т.е. перевожу пин RA0 в высокое ВЫСОКОИМПЕДАНСНОЕ состояние и жду ... Где у меня ошибка? Вот тут и ошибка. Перевод пина RA0 в высокоимпедансное состояние: bsf STATUS, RP0 bsf TRISA, RA0 bcf STATUS, RP0 Изменено 3 февраля, 2011 пользователем my504 0 戦う前に相手のベルトの色に注目 Ссылка на комментарий Поделиться на другие сайты Поделиться
bolt_2.0 Опубликовано 3 февраля, 2011 Автор Поделиться Опубликовано 3 февраля, 2011 (изменено) Заработало... Только вот заметил один момент: в прошлых версиях MPLab-а строки: bsf STATUS, RP0 bsf TRISA, RA0 bcf STATUS, RP0 Можно было бы заменить кодом: bsf TRISA^80h, RA0 На MPLab 8.63 так уже не зделаеш... неработает почему то такое выражение... Так же заметил, что на иных портах полное время заряда заниженно - на RA4 ~ 40-110 мкс, а на RA0, RA3 и RB0 на поднимается выше 50 мкс... Изменено 3 февраля, 2011 пользователем bolt_2.0 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
my504 Опубликовано 3 февраля, 2011 Поделиться Опубликовано 3 февраля, 2011 Никогда не применяйте макросы и разного рода синтаксические замены. Всегда явно указывайте переключение банков. TRISx находятся в первом банке по адресам соответствующим PORTx. 0 戦う前に相手のベルトの色に注目 Ссылка на комментарий Поделиться на другие сайты Поделиться
bolt_2.0 Опубликовано 3 февраля, 2011 Автор Поделиться Опубликовано 3 февраля, 2011 (изменено) Помогите разобраться с командами 12F509. Например для того, что бы перевести вывод на вход я пишу bsf TRIS, GP0 А компиллятор в этом месте выдаёт ошибку... как это зделать правильно? Изменено 3 февраля, 2011 пользователем bolt_2.0 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Alex Опубликовано 3 февраля, 2011 Поделиться Опубликовано 3 февраля, 2011 Может всё-таки так bsf TRIS, 0 ? Что за бит такой GP0 ? 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
bolt_2.0 Опубликовано 3 февраля, 2011 Автор Поделиться Опубликовано 3 февраля, 2011 (изменено) Что за бит такой GP0 ? Это бит контакта GP0, он же в прикреплённом файле прописанн... то же самое что и 0, зато понятнее Изменено 3 февраля, 2011 пользователем bolt_2.0 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Alex Опубликовано 3 февраля, 2011 Поделиться Опубликовано 3 февраля, 2011 А что за ошибку компиль выдаёт ? 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.