Rambler's Top100

Реклама на сайте | Реклама в Интернет | "Все Кулички"


Главная страница
Все о компьютерном "железе"
Вся полезная информация
Эрудиту
Гарантированная продажа рекламных мест
Цены магазинов Москвы на ноутбуки и мобильные компьютеры
Мои разработки и переводы
Микроконтроллеры >>
Мои разработки
Полезные конструкции
Программаторы
FAQ по ПИКам
"Глюки" ПИКов
Ссылки
Железо и драйвера >>
Статьи и FAQ
Ссылки на статьи
Определение конфигурации
Настройка компонентов ПК
Утилиты для накопителей информации
Ремонт "железа"
Восстановление информации
Полезный софт
Операционные системы
Безопасность и защита информации
Радиоэлектроника
Программирование >>
Техдокументация
Разработчику программ
Мобильники
Вебмастеру
Поиск информации
On-Line перевод
Обмен ссылками, сотрудничество
Немного о себе
Контакты
Гостевая книга
Форум

Поиск на сайте
Поиск на Куличках:

Сделать стартовой страницей

Реклама:

(!) MP3 плееры всех видов. Возьми с собой 6 обычных Audio-CD на одном(!!!) MP3-CD
Телевизоры, DVD-плееры, видеомагнитофоны, видео-плееры. Аппаратура Hi-End класса


rax.ru: показано число посетителей за сегодня

Рейтинг@Mail.ru

RadioTOP-рейтинг радиотехнических сайтов
PROext: Top 1000
ENGLISH version
Доброй ночи! Пятница, 29 марта 2024

статьи и документация | программаторы | "глюки" | FAQ | полезные конструкции | мои разработки | ссылки

FAQ ПО PIC МИКРОКОНТРОЛЛЕРАМ

Автор: Дмитрий Саликов

КРАТКОЕ СОДЕРЖАНИЕ

   В чем отличие новых версий кристаллов PICmicro (с буквами A, B, C) от аналогичных с другой буквой или вообще без буквы?

   Можно ли «прошивать» новые версии PICmicro (A, B, C) программатором, поддерживающим только ранние версии кристаллов?

   Чем отличаются микроконтроллеры «С» от «LC» («F» от «LF»)?

   Можно ли стереть «бит защиты»?

   Каково количество циклов перезаписи для JW/FLASH-кристаллов?

   Какие программаторы следует использовать для программирования микроконтроллеров Microchip?

   Каким образом можно быстро написать и отладить программу для PICmicro?

   Я слышал, что Microchip предоставляет разработчиком образцы своих изделий. Как их можно заказать?

    Как эмулировать внешние сигналы при отладке программ в MPLAB?

   Как определить один бит для обращения и модификации  в тексте исходного файла?

   Как можно питать устройство на PICах от сети ~220 вольт без понижающего трансформатора?

    Почему происходят сбои информации в EEPROM и как от них избавиться?

   Как получить напряжение отрицательной полярности?

    Как сделать сенсорную кнопку в устройстве на PICе?

     Как сделать простой цифро-аналоговый преобразователь (ЦАП, DAC)?

    Как упростить работу с отладочным кристаллом и продлить срок службы?

     Можно ли согласовать разные логические уровни?

    Как использовать калибровочную константу?


Отличие новых версий

В связи с переходом на субмикронные технологии уменьшаются размеры кристаллов, повышается процент выхода годных, эффективность производства и, следовательно, снижается цена продукции. Новые версии PICmicro будут постепенно вытеснять предшествующие ценой при сохранении полной pin-to-pin и программной совместимости. Общие рекомендации таковы: для кристаллов, выполненных по субмикронной технологии, уменьшились емкости аналоговых входов. Поэтому, возможно, потребуется соответственно увеличить емкость блокировочных конденсаторов при кварцевом резонаторе с 20 до 50 пФ. Для новых кристаллов, имеющих в своем составе АЦП, желательна минимизация времени преобразования и установка конденсатора 100 пФ и более на каждый аналоговый вход. И последнее: необходимо помнить, что во всех последних версиях кристаллов максимальное рабочее напряжение составляет 5,5 В вместо 6 В. Подробное описание отличий кристаллов при переходе с одной модификации на другую можно найти на сайте www.microchip.com или на компакт-диске в разделе Literature>Migration documents. Этот раздел постоянно обновляется.

 К содержанию


Можно ли «прошивать» новые версии PICmicro (A, B, C) программатором, поддерживающим только ранние версии кристаллов?

Нет. В новых версиях кристаллов могут различаться регистры конфигурации и параметры программирования. Всегда пользуйтесь самой последней версией матобеспечения программатора.

 К содержанию


Чем отличаются микроконтроллеры «С» от «LC» («F» от «LF»)?

Напряжениями питания и максимальными тактовыми частотами. Кристаллы с индексом «С» рассчитаны на напряжение 4,5…5,5 В, «LC» — 2,.5…5,5 В. Для FLASH-кристаллов: «F» — 4,5…5,5 В, «LF» — 2,0…5,5 В. Эти значения могут отличаться от приведенных здесь, поэтому всегда необходимо сверяться с документацией для каждого конкретного случая, исходя из необходимой тактовой частоты.

 К содержанию


Можно ли стереть «бит защиты»?

Нет. Поэтому установка бита защиты в отладочном кристалле JW лишает его возможности быть перепрограммированным и превращает в однократный. Это не относится к FLASH-кристаллам (буква «F» в названии микросхемы). У них можно стереть бит защиты, но при этом автоматически стирается вся программная память.

 К содержанию


Каково количество циклов перезаписи для JW/FLASH-кристаллов?

Обычно JW-кристалл выдерживает более 100 циклов стирания/записи. Причиной раннего выхода из строя часто является перегрев кристалла при стирании, завышенное (или имеющее «всплески») напряжение программирования или другие неисправности программатора. К концу срока службы время стирания увеличивается с 20…30 минут до 40 минут и более, но снижается минимальное рабочее напряжение. Испортить микросхему сколь угодно долгой экспозицией под ультрафиолетом невозможно. Электрически стираемые FLASH-кристаллы выдерживают не менее 1000 циклов перезаписи программной памяти и не менее 1 000 000 циклов для EEPROM данных при неограниченных количествах чтений. Для FLASH-кристаллов серии PIC16F73/74/76/77 количество перезаписей программной памяти — около 100.

 К содержанию


Какие программаторы следует использовать для программирования микроконтроллеров Microchip?

В первую очередь, это программаторы от Microchip для разработчиков — PICSTART Plus (около 200 $) и для производства — PROMATE II (около 750 $). Оба они поддерживают все микроконтроллеры Microchip, причем PROMATE II также может программировать микросхемы памяти и кодеры/декодеры KeeLoq. Для них регулярно обновляется программное обеспечение для поддержки появляющихся новых микросхем. Кроме того, существует огромное количество программаторов отечественного и зарубежного производства, работающих с микроконтроллерами PICmicro. Предостережение: все новые микроконтроллеры очень требовательны к режимам программирования, поэтому использование дешевых программаторов неизвестных фирм может значительно снизить ресурс микросхем и даже привести к выходу их из строя. Для увеличения срока службы микросхем в готовых изделиях рекомендуется использовать программаторы, соответствующие классификации Microchip, как промышленные и обеспечивающие возможность подстройки (изменения) напряжений питания и записи.

 К содержанию


Каким образом можно быстро написать и отладить программу для PICmicro?

Фирма Microchip предлагает бесплатную программную среду для написания и отладки программ — MPLAB-IDE. В комплект входит программа-оболочка, текстовый редактор, ассемблер-компилятор и программный отладчик. Так же поддерживается подключение компиляторов Си производства Microchip и других фирм, поддерживаются программаторы PICSTART Plus и PROMATE II, отладчик MPLABICD и внутрисхемные эмуляторы. Эту программу можно найти на сайте www.microchip.com или на компакт-диске. Также существуют альтернативные компиляторы отечественных и зарубежных фирм. Для микроконтроллеров большого объема удобно писать программы на языке Си. Демо-версии доступны бесплатно на сайте www.microchip.com или компакт-диске. Большую часть (3/4) работы по отладке удается выполнить в программном симуляторе пакета MPLAB. Особое внимание следует уделить правильности слова конфигурации, инициализации регистров и оценке времени выполнения программы на критических участках. Несколько рекомендаций для аппаратной отладки:  Обратите внимание на качество и температурный диапазон кварцевого резонатора, скорости нарастания напряжения питания и сброса. На начальных стадиях отладки рекомендуется применение супервизора питания. Wathdog-таймер лучше включать в конце отладки. Для ускорения отладки рекомендуем вместо JW-кристаллов использовать FLASH-кристаллы. Так же рекомендуем ознакомится с документом TB033 на сайте или компакт-диске в разделе Application Notes, в котором подробно описано о приемах написания и отладки программ для семейства PIC16CXXX при помощи кристалла PIC16F877. Для отладки семейства PIC17CXXX рекомендуется использовать внешнюю FLASH- программную память. Программа в ней может быть легко обновлена любым программатором либо перезагружена через RS232 самим микроконтроллером. Готовые программные и схемные решения можно найти в разделе Application Notes на www.microchip.com или на компакт-диске. Если вы решили использовать JW-кристалл с УФ-стиранием, приобретать следует модель с максимальным объемом программной памяти. Нет необходимости каждый раз стирать кристалл, поскольку реальная программа обычно многократно помещается в его объеме. Дописывайте новые версии программы в старшие адреса, до заполнения ПЗУ. Команды перехода к новой версии записываются друг за другом, начиная с адреса сброса. Предыдущие команды замещаются командой NOP. Таким образом, вы сможете ускорить работу, стирая JW лишь изредка. Очень удобно проводить внутрисхемную отладку с помощью 28/40-pin кристаллов семейства PIC16F87X и недорогого внутрисхемного отладчика-эмулятора MPLAB-ICD (около 175 $).

 К содержанию


Я слышал, что Microchip предоставляет разработчиком образцы своих изделий. Как их можно заказать?

Для того чтобы получить образцы, Вы должны сделать заказ, в котором ОБЯЗАТЕЛЬНО следует указать:

1. Название фирмы, адрес, телефон, E-mail, ФИО контактного лица.

2. Название проекта и краткое его описание (в нескольких предложениях).

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

4. Потенциальное количество в год (месяц).

5. Планируемые сроки начала производства.

6. Планируемые сроки начала разработки и дата, к которой нужны образцы.

7. Для кристаллов радиочастотной идентификации MCRFXXX необходимо указать, есть ли у вас оборудование для того, чтобы разрезать пластину и разварить кристаллы. Что планируется делать с кристаллами (куда устанавливать, упаковывать, есть ли для этого оборудование). Как вы планируете записывать информацию на кристалл? (Если вы хотите, чтобы вам запрограммировали эти кристаллы, то следует прислать файл с данными для прошивки, а для этого нужно внимательно ознакомиться с документацией на этот кристалл.)

 К содержанию


Как эмулировать внешние сигналы при отладке программ в MPLAB?

Невозможность менять значение порта как переменную в окне просмотра можно отнести к минусу разработчиков MPLABа. Однако, эмулировать внешние сигналы можно несколькими способами: переключать из одного состояния в другое  заранее выбранный разряд порта,  задавать периодический сигнал или определять форму сигнала в специальном текстовом файле.

В первом случае выберите меню Debug, а в нем пункт Simulator stimuls и Asynchronius stimuls. Появится окно с 12-тью кнопками для изменения состояния. Выберите любую кнопку и щелкните по ней правой кнопкой мыши, выберите Assign pin., чтобы назначить нужный вам разряд нужного порта двойным щелчком левой кнопки в открывшемся меню. Затем опять щелкните правой кнопкой, чтобы выбрать действие: Pulse - изменить состояние на противоположное и опять вернуть в прежнее,  Low - установить в низкое состояние, High - установить в высокое состояние, Toggle - изменить на противоположное. Нажав в нужное время соответствующую кнопку, вы измените состояние выбранного разряда порта.

Так выглядит окно  для изменения состояния разрядов портов. В частности левая верхняя кнопка запрограммирована для изменения 0 разряда порта RB в низкое состояние.
 
 

Во втором случае можно задать периодический сигнал. Откройте пункт меню Debug, а в нем пункт Simulator stimuls и Clock stimuls. В открывшемся окне выберите разряд порта и задайте длительности высокого и низкого  состояний в циклах микроконтроллера (один цикл - 4 тактовых импульса Fosc). Затем нажмите кнопку ADD. Выберите появившуюся строку с параметрами и нажмите APPLY. MPLAB поменяет значение в заданное время не зависимо от того в каком режиме вы отлаживаете: в пошаговом или непрерывном.

И еще, можно заранее описать форму входного сигнала в специальном файле и подключить его, выбрав в меню Debug>Simulator Stimuls>Pin Stimuls>Enable... Откроется окно для вызова Вашего файла с расширением .sti.
Создать текстовый файл можно таким образом: выбрать в меню File>New и, в появившемся окне файла, описать входные сигналы. После создания файла сохраните его в папке Вашего проекта, задав ему имя, что-то типа  <my prog>.sti. Вот пример файла описывающего некоторые входные сигналы для двух входов RB0 и RB1:
CYCLE  RB1 RB0
20     0   0
41     1   0    ; установить в лог. "1" бит 1 порта PORTB
52     0   1    ; сбросить бит 1 порта PORTB и установить в лог. "1" бит 0
55     1   1
60     0   0
65     1   0
76     0   1    ; и так далее....

Первая строка файла должна обязательно начинаться со слова CYCLE или STEP. Подробнее об этом можно прочитать, вызвав Help MPLAB.

 К содержанию


Как определить один бит для обращения и модификации в тексте исходного файла?

При написании исходного текста программы на ассемблере в командах, оперирующих отдельными битами (bcf, bsf, btfsc, btfss и др.) приходится указывать не только имя регистра или переменной, но и, через запятую, номер бита, например: btfsc PORTA, 3 или btfsc PORTA,Snd (определив заранее как: Snd equ 3).

Однако, написание таких команд можно упростить, воспользовавшись директивой ассемблера замены текстовой последовательности #DEFINE. Вот пример ее использования:

; определение переменных, констант, регистров
PortSnd    equ 0x05        ; определим порт вывода звука
 #define Snd PortSnd, 3    ; определим Snd как третий бит PortSnd

; непосредственно текст программы
        bsf Snd            ; установим 3-й бит PortSnd в лог. "1"
        movlw 0xF0         ; одна из многих команд
        bcf Snd            ; а теперь сбросим 3-й бит PortSnd

Синтаксис этой директивы: #define <name> [<string>]
Везде, где в тексте программы встретится надпись <name>, она будет заменена на <string>. Применение этой директивы без <string>,  определит <name> для внутреннего использования при проверке директивой #IFDEF. Надо заметить, что просмотр в окне Watch Window, определенной таким образом переменной невозможен. В окне придется указывать имя регистра и номер бита.
И последнее, директива #DEFINE может начинаться с любой позиции в строке, кроме первой. Все, что начинается с первой позиции воспринимается при компилировании как метка. Если это команда, то выдается предупреждающее сообщение: найдена команда в первой позиции строки.

К содержанию


Как можно питать устройство на PICах от сети ~220 вольт без понижающего трансформатора?

Можно посоветовать достаточно простую схему питания устройства от сети ~220 воль, которая обеспечивает ток нагрузки при указанных номиналах элементов до 100 мА, что бывает достаточно во многих случаях.

Резистор R2 должен быть рассчитан на рассеиваемую мощность не менее 0,5 Вт, R3 может быть любой. Конденсатор C1 обязательно должен быть рассчитан на напряжение не менее 250 В. Выходное напряжение определяется стабилитроном VS1. Диод VD1 средней мощности можно заменить, например, на 1N4007 (распространенный импортный аналог).

 
ВНИМАНИЕ: приведенная схема имеет гальваническую связь с сетью ~220 В, поэтому при наладке и установке устройства соблюдайте правила электробезопасности.



К содержанию

Почему происходят сбои информации в EEPROM и как от них избавиться?

При использовании внутренней или внешней EEPROM иногда наблюдаются случаи самопроизвольного изменения содержимого ячеек памяти. Происходит это, в основном, в моменты включения/выключения напряжения питания. Возможно, причина в случайном ходе выполнения программы во время переходных процессов. Кстати, данная проблема актуальная и для микроконтроллеров других производителей, например ATMEL.

 Если выключение питания происходит в моменты обращения к EEPROM, как внутренней (в микросхемах 16F84), так и внешней (типа 24CXX и т. п.) с шиной управления I2C,  то тоже существует вероятность нарушения хранимой информации.  Сбои могут происходить при проникновении импульсных помех через питающие цепи в процессе работы. Могу предложить несколько способов увеличения надежности сохранности данных: программный и схемотехнические.

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

- При схемотехническом способе решения проблемы можно добавить несколько элементов, как показано синим цветом на рисунке ниже, для контроля момента выключения или аварии напряжения питания для того, чтобы не производить чтение или запись в EEPROM. В принципе схемотехническое решение может быть любым, выполненным как по приведенной схеме, так и с использованием специализированных микросхем мониторов напряжения или другим способом.
Элементы нужно подобрать таким образом, чтобы при уменьшении питающего напряжения ниже порогового уровня на выводе PORTn микроконтроллера появлялся лог "0". А в подпрограммах обращения к EEPROM прежде чем начать цикл записи или чтения опрашивать этот вывод.

Еще одно возможное решение этой проблемы, предложенное Ждановым Михаилом из Великого Новгорода, практически полностью исключает сбои. Это решение основано на дешевой микросхеме LP2951. Сигнал сброса поступает на PIC когда напряжение питания достигнет 5,7 вольта, а также и при выключении (задаётся диодом). Конденсатор на VCC PICа поддерживает питание некоторое время, срезая переходные процессы.

Для надежного сброса микроконтроллера можно использовать схему на м/с DS1233 фирмы Dallas, приведенную ниже. Она надежно отслеживает питание, и запускает микроконтроллер PIC через 0,1 сек после установки номинального. Чтобы помехи по питанию не вызывали ложные сбросы  м/с DS1233 включается через цепочку R1C1C2.

Для уменьшения влияния внешних воздействий желательно неиспользуемые выводы микроконтроллера программировать как входы и подключать к шине питания или земли (это уменьшает и энергопотребление за счет отсутствия случайных переключений входных ключей портов). Еще можно оставить неиспользуемые выводы свободными, но при этом запрограммировать их как выходы. А при разводке печатной платы желательно разместить фильтрующий керамический конденсатор, емкостью 0,01-0,1 мкф, между выводами питания микроконтроллера. Обычно эти выводы расположены напротив друг друга. Цепи генератора тактовых импульсов (кварцевый резонатор, RC цепочка) и цепи сброса микроконтроллера лучше делать как можно короче. Вокруг печатной платы по периметру желательно провести шину земли. При такой конфигурации ни включение/выключение рядом силовых приборов, ни подключение осциллографа не вызовет ложных срабатываний или пересбросов процессора.
При разводке печатной платы следует учитывать некоторые моменты. Во-первых, входные сигналы следует вести "к" микроконтроллеру, а не "сквозь" него. Не доводя сигнал до ножки желательно поставить небольшой керамический фильтрующий конденсатор, чтобы короткая импульсная помеха уходила в землю. Затем, для ограничения тока можно поставить сопротивление. Во-вторых, не плохо обвести "землю" вокруг микроконтроллера.

К содержанию


Как получить напряжение отрицательной полярности?

Иногда для питания операционных усилителей или компараторов требуется напряжение отрицательной полярности. Получить его можно просто, используя один из портов микроконтроллера PIC, выдавая непрерывно последовательность импульсов. Схема представлена на рисунке ниже:

Вот еще одна схема получения напряжения отрицательной полярности, предложенная Георгием. Она проще, в ней отсутствует индуктивность. Выходное напряжение составляет примерно -3,5 Вольт при использовании кремниевых диодов. Данную схему можно применять там, где не требуется стабилизированное напряжение, например, для питания некоторых операционных усилителей или компараторов, или для подачи напряжения регулирования контрастности ЖКИ модулей. Иногда это требуется в моделях ЖКИ, рассчитанных на работу при отрицательных температурах.

К содержанию


Как сделать сенсорную кнопку в устройстве на PICе?

Можно заменить в устройствах на PIC микроконтроллерах механическую кнопку на емкостную сенсорную. Схема подключения на рисунки ниже:

ВАРИАНТ 1: сенсорная площадка - любая металлическая пластина небольших размеров (1-2 кв. см.). Идея заключается в том, что при прикосновении к датчику увеличивается суммарная емкость и изменяется время заряда конденсатора C1. Это видно из представленных диаграмм:

При программировании можно поступить таким образом: при включении устройства запрограммировать верхний по схеме вывод как выход и установить его в лог. "0", а нижний как вход. Через небольшую задержку установить на выводе, запрограммированном как выход лог. "1" и запустить таймер. Когда лог. "1" появится на нижнем выводе, запомнить показание таймера. Это будет константа для свободного сенсора. При опросе в процессе работы программы поступать таким же образом и сравнивать полученное значение с запомненным. Если полученное значение превышает константу, то считать, что есть прикосновение к датчику. Разница задержек установления лог. "1" на входе между свободным сенсором и нажатым составляет примерно 1-2 мкс.

ВАРИАНТ 2: схема работает аналогичным образом, только вместо двух портов используется один, который переключается с вывода на ввод. С состоянии ожидания вывод порта запрограммирован как выход и установлен в лог. "0". Конденсатор С2 разряжен. Конденсатор С1 служит для развязки потенциала тела человека и потенциала вывода микроконтроллера. При опросе вывод PICа переключается на ввод и измеряется время появления лог. "1" на этом выводе. Временная диаграмма соответствует той, что описывает в верхней схеме (вариант 1) вывод вход. После этого сравнивается измеренная величина и константа, запомненная и измеренная при инициализации (включении устройства) как в первом случае. Успеха!

К содержанию


Как сделать простой цифро-аналоговый преобразователь (ЦАП, DAC)?

 

Если большая точность ЦАП не требуется, то можно обойтись более дешевым способом, без использования специализированных дополнительных микросхем микросхем. Приведем способ 8-ми битного ЦАП с использованием матрицы резисторов R-2R. К недостаткам можно отнести то, что для реализации требуется 8 портов I/O. Ошибка составляет 1 младший разряд.
К содержанию

Как упростить работу с отладочным кристаллом и продлить срок службы?

При использовании отладочных JW кристаллов большая часть времени уходит на его стирание. Да и каждое стирание уменьшает срок службы кристалла. На самом, деле стирать каждый раз кристалл нет необходимости, поскольку реальная программа обычно многократно помещается в его объеме. Нужно просто дописывать новые версии программы в старшие адреса, до заполнения ПЗУ. Команды перехода к новой версии записываются друг за другом, начиная с адреса сброса. Предыдущие команды замещаются командой NOP. Таким образом можно не только сократить время на отладку программы но и увеличить срок службы кристалла. Проверено!

Следует заметить, что некоторые кристаллы имеют страничную организацию памяти. Например, в 16С505 подпрограммы могут располагаться в первых 256 ячейках памяти программ (0x000 - 0x100). Связано это с тем, что в команде перехода к подпрограмме call присутствует только 8 бит адреса ячейки памяти начала подпрограммы, девятый бит теряется (устанавливается в "0"), а десятый берется из бита PA0 регистра STATUS. Правда замечено, что возможно вызывать подпрограммы из второй половины области памяти программ, расположенные в первых 256 ячейках этой половины. Тоесть, из области 0x200 - 0x3FF можно вызывать подпрограммы из области 0x200 - 0x2FF. Только при этом должен быть установлен в "1" бит PA0 регистра STATUS для правильного возврата из подпрограммы.

К содержанию


Есть PIC(+5В) и есть 561ИД1(Дешифратор +12В). Как согласовать логические уровни? Не сгорит ли PIC если попытаться подтянуть выходные линии PIC до 12В через резисторы?

Подтянуть не удастся потому, что практически все порты имеют полный КМОП драйвер при использовании портов как выходы. И еще, порты имеют защитные диоды на  землю и питание.

В некоторых контроллерах есть порт (например в 16F84 это RA4), выполненный по схеме "открытый сток". Его можно подтянуть до 12В, но такой порт только один.

К содержанию


Нужно запрограммировать контроллер 12С508 некой программой и при этом использовать внутренний генератор. Загвоздка в константе калибровки. Порывшись в интернете и найдя там примеры программ окончательно запутался. В одном месте сказано, что это выполняется командой MOVWF OSCCAL, а в описании 12СХХХ вообще сказано MOVLW XX где ХХ - значение калибровки. Помогите пожалуйста прояснить ситуацию.

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

При программировании однократных кристаллов в последнюю ячейку недолжно ничего записываться, чтобы не нарушить команду и константу. Прииспользовании отладочных кристаллов (с ультрафиолетовым стиранием)обязательно надо прочитать содержимое памяти и записать где-нибудь(лучше на самом корпусе) калибровочную константу. Потому, что пристирании сотрется и сама константа тоже. И в программе для отладочного кристалла должна быть записана команда MOVLW XX в последней ячейке. Например, так:
    ORG 0x1FF   ; это для 508, для 509 будет 0x3FF
    MOVLW XX    ; где ХХ - и есть прочитанная константа
Потом, при подготовки программы для однократного (OTP) кристалла эти строчки надо будет убрать (закомментировать).



Полное или частичное воспроизведение любых материалов, содержащихся на этом сайте, допускается только с письменного разрешения администрации. Авторские права на опубликованные на сайте материалы принадлежат их владельцам.
Замечания? Предложения? "Мертвые" ссылки? Проблемы с загрузкой страниц? Пишите вебмастеру или в гостевую книгу
Designed by Эfir studio | © 2002-03 Yuri Lysenkov