-

Домашняя страничка Александра Зайцева

   

Ошибки микроконтроллеров PIC18F1220/1320

(На основе документа PIC18F1220/1320 Rev. B1 Silicon/Data Sheet Errata)

1. EEPROM память данных

При чтении данных из EEPROM значение в регистре EEDATA может быть искажено во время выполнения второй команды, после установки бита RD в 1 (EECON1 бит 0). Содержимое в прочитанной ячейке EEPROM не искажается.

Решение

Чтобы гарантировать достоверность данных в регистре EEDATA, необходимо прочитать содержимое регистра EEDATA сразу после установки бита RD. Чтение EEDATA может быть выполнено командами MOVF и MOVFF (смотрите пример). Кроме того, при выполнении чтения необходимо запрещать прерывания, поскольку переход на обработку прерываний может тоже исказить данные в регистре EEDATA.

Пример

BCF      INTCON,GIEH 
BSF      EECON1,RD 
MOVF  EEDATA,W 
BSF      INTCON,GIEH
 

2. EEPROM память данных

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

Решение

Не выполняйте установку бита RD следующей командой за записью адреса в регистр EEADR. Выполните хотя бы одну любую команду перед инициализацией чтения из EEPROM (Вставьте, например, команду NOP). 
 

3. Ядро (команда DAW)

При выполнении команды DAW может неправильно сброситься в нуль бит переноса CARRY (STATUS бит 0).

Решение

Проверьте состояние бита CARRY перед выполнением команды DAW. Если бит CARRY = 1, добавьте инкремент следующего старшего байта, используя команду INCFSZ (эта команда не влияет на флаги регистра STATUS и не вызовет переполнение математики BCD). После выполнения команды DAW состояние бита CARRY будет соответствовать документации.

Пример

MOVLW 0x80 
ADDLW  0x80 
BTFSC    STATUS,C 
INCFSZ   byte2 
DAW
BTFSC     STATUS,C 
INCFSZ    byte2
Эту последовательность необходимо повторять для каждой команды DAW.
 

4. Тактовый генератор (режим INTOSC)

Инкремент или декремент значения в регистре OSCTUNE не вызывает ожидаемого эффекта на частоту тактового генератора в режиме INTRC, INTOSC. Значение в регистре OSCTUNE начинает влиять при температуре выше 70гр.С.

Решение

Нет
 

5. Блок внутреннего тактового генератора

При высокой температуре (выше 85гр.С) или низком напряжении питания (ниже 2.5В) бит IOFS (OSCCON бит 2) не может быть установлен в 1, кода внутренний генератор выбран как источник тактового сигнала с любой частотой более 31кГц. Вывод INTOSC стабилизируется и с частотой 8МГц, но бит IOFS не может быть установлен.

Решение

Если необходимо выполнить операцию критическую по времени, нужно выдержать паузу в 1мс, после включения режима 8МГц внутреннего тактового генератора.
 

6. Блок внутреннего тактового генератора

Если генератор INTRC не начел формировать тактовый сигнал при сбросе POR (при любом Vdd) и напряжении питания более 4.5В, то тактовый генератор может вовсе не запуститься или может потребоваться продолжительная пауза перед стартом. Генератор INTRC не начнет работать при снижении напряжения Vdd ниже 4.5В.

Функции, которые зависят от работы генератора INTRC: вывод INTOSC при выходе из режима SLEEP; сторожевой таймер WDT, если его работа разрешена в регистре WDTCON; старт с двумя скоростями после сброса или выхода из режима SLEEP; монитор тактового сигнала (FSCM) при переходе в режим SLEEP.

Частота  INTOSC может быть очень высокой (например, 9.5МГц). Модули WDT и FSCM могут просто не работать. Запуск в двухскоростном режиме не возможен, но выполнение программы начнется после старта основного генератора.

Решение

Несколько вариантов решения этой проблемы:

1. Разрешить работу сторожевого таймера WDT в слове конфигурации CONFIS2H, разместить команду CLRWD в основном цикле программы.
2. Использовать внутренний генератор как основной источник тактового сигнала (регистр конфигурации CONFIG1H).
3. Любой способ запуска INTRC при сбросе микроконтроллера может использоваться, если в дальнейшем INTRC не выключается.
4. Гарантировать, что при запуске генератора INTRC напряжение питания ниже 4.5В.

 

Rambler's Top100

Страничка только разрабатывается, поэтому, 
если что не так, то пишите alex-uc@narod.ru

Hosted by uCoz