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

PIC12F629 & MPLAB на симуляторе работает, а при

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

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

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

__CONFIG(WDTDIS & UNPROTECT & INTIO & MCLRDIS & 0x31ff);

 

Да, если не будет в конце памяти программ инструкции "retlw" с константой, а она в данном случае не причем, то код будет циклиться в начале стартапа. Обойти это - поможет не вызывать функцию 0x3ff. Я перекомпилил код выше без вызова функции. Естественно генератор будет уже некалиброванным, что на самом деле не страшно. :rolleyes:

 

В догонку вот что получилось при компилировании:

    list      p=12F629           ; list directive to define processor
    #include <p12F629.inc>       ; processor specific variable definitions

    errorlevel  -302             ; suppress message 302 from list file

    __CONFIG   _CP_OFF & _CPD_OFF & _BODEN_OFF & _MCLRE_OFF & _WDT_OFF & _PWRTE_ON & _INTRC_OSC_NOCLKOUT

       org    0
       GOTO   L00F


       org    4
       MOVWF  0x5e             ; save W
       MOVF   STATUS,W
       BCF    STATUS,RP0
       MOVWF  0x20             ; save STATUS
       MOVF   FSR,W
       MOVWF  0x21             ; save FSR
       MOVF   PCLATH,W
       MOVWF  0x22             ; save PCLATH
       MOVF   0x5f,W
       MOVWF  0x23
       GOTO   L034              ; jump to int overlay
L00F
       BSF    STATUS,RP0
;       CALL   0x3ff            ; get calibration value
;       MOVWF  OSCCAL           ; save
       CLRF   STATUS
       GOTO   L050
L014
       MOVLW  0xc              ; GPPU<<1|INTEDG<<1
       BSF    STATUS,RP0
       MOVWF  OPTION_REG
       MOVLW  0x20
       MOVWF  INTCON           ; T0IE<<1
       MOVLW  0x8
       MOVWF  TRISIO           ; xx00 1000
       MOVLW  0x7
       BCF    STATUS,RP0
       MOVWF  CMCON            ; set 0..2 pin as digio
       MOVLW  0xff
       MOVWF  GPIO             ; xx11 1111
       BSF    INTCON,GIE         ; sei
L021
       MOVLW  0x2
       BCF    STATUS,RP0
       MOVWF  0x26
       MOVLW  0x03
       MOVWF  0x25
       MOVLW  0xba
       MOVWF  0x24
L028                        ; delay overlay  init 0x0203ba
       DECFSZ 0x24,F
       GOTO   L028
       DECFSZ 0x25,F
       GOTO   L028
       DECFSZ 0x26,F
       GOTO   L028
       BCF    STATUS,RP0
       COMF   GPIO,F        ; toggle pins
       NOP
       GOTO   L021
       GOTO   L021
       GOTO   L00F
L034
       BTFSS  INTCON,T0IE   ; TMR0 enabled ?
       GOTO   L037          ;
       GOTO   L038          ; TMR0 Int enabled
L037
       GOTO   L045          ; no, resume int
L038
       BTFSS  INTCON,T0IF   ; int req from TMR0 overflow ?
       GOTO   L03B          ; no, resume int
       GOTO   L03C
L03B
       GOTO   L045          ; restore content
L03C
       BCF    INTCON,T0IF   ; clear flag
       MOVLW  0x1
       ADDWF  0x27,F        ; low tick_count
       BTFSC  STATUS,C
       INCF   0x28,F
       MOVLW  0
       ADDWF  0x28,F        ; high tick_count
       GOTO   L045
       GOTO   L045
L045
       MOVF   0x23,W
       MOVWF  0x5f
       MOVF   0x22,W        ; restore PCLATH
       MOVWF  PCLATH
       MOVF   0x21,W
       MOVWF  FSR           ; restore FSR
       MOVF   0x20,W
       MOVWF  STATUS        ; restore STATUS
       SWAPF  0x5e,F
       SWAPF  0x5e,W        ; restore W
       RETFIE
L050
       CLRF   0x29
       CLRF   0x27
       CLRF   0x28
       CLRF   STATUS
       GOTO   L014

       end

test12.zip

Изменено пользователем Дмитрий Ветра

Поделиться сообщением


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

Гость DL36
- взять новый контроллер, а запиленный прибить гвоздём на видном месте.
Неа проще взять PciKit2 и восстановить константу.

 

Поделиться сообщением


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

Вот такая вот ошибка в т.ч. и в случае с перекомпиленным. Что бы это значило?

Да что угодно - хардварные проблемы в программаторе (н-р, Vpp не держится), софтовые от и до. Если есть время и желание - разбирайтесь.

А лучше закажите PicKit2'образное (я и забыл про него, спасибо DL36).

Поделиться сообщением


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

http://www.qrz.ru/schemes/contribute/constr/extra-pic/ Вот этим пользуюсь. 12 В держится, но в процессе светодиод помигивает. Это должно так быть? Пробовал шить - проблемы с нулевым адресом на всех файлах и двух платах.

 

А лучше закажите PicKit2'образное

Да вот хочу на PIC18F2550 PicKit2-образное собрать, но тотже PIC надо чем-то шить

 

Поделиться сообщением


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

хардварные проблемы в программаторе
Ну вобщем так и вышло. Только проблема не в программаторе была, а в целевом устройстве. К выв. 6 и 7 были подключены входы микросхемы ULN2003. Выпаял и все заработало как по маслу. Собственно в связи с этим вопрос. В даташите есть упоминание о резисторах между выводами программирования и остальной схемой, но нет упоминания про их номинал (или смотрел плохо). В ULN2003 стоит 2,7 кОм. Это мало?

Поделиться сообщением


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

Ну вобщем так и вышло. Только проблема не в программаторе была, а в целевом устройстве. К выв. 6 и 7 были подключены входы микросхемы ULN2003. Выпаял и все заработало как по маслу. Собственно в связи с этим вопрос. В даташите есть упоминание о резисторах между выводами программирования и остальной схемой, но нет упоминания про их номинал (или смотрел плохо). В ULN2003 стоит 2,7 кОм. Это мало?

Странно это. 2.7 кОм по PGD, PGC было достаточно любому программатору/отладчику, которыми мне доводилось пользоваться.

Могу предположить только, что 1533ЛА3 на 2.7 кОм не обеспечивает VIH1 (CLOCK, DATA) input high level >= 0.8 VDD (при программировании PGD, PGC на вход работают триггерами Шмитта с порогами 0.2 и 0.8 VDD).

Если есть возможность, попробуйте заменить её на КМОП аналог типа 74AC(T)00.

 

Кста, в списке поддерживаемых этим программатором PIC18F2550/4550 отсутствуют (это я про сборку пиккит2).

И не нравится мне неотключаемое Vcc, но, наверное, это фича всех подобных программаторов.

Поделиться сообщением


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

Импортный аналог там и стоит. Не разглядел, но похоже на то, что Вы пишите. Всеравно прийдется какой-то буфер делать. SN74HC14 есть под рукой. Если пользовать WinPic800, то PIC18F2550 поддерживается, уже залил. Спасибо за консультации. Посмотрим как заработает а-ля PicKit2. Может еще какие вопросы по ходу будут. Спасибо.

Поделиться сообщением


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

Калибровочное слово я знаю уже. Дело действительно именно в нем. по совету сменить программатор собрал PicKit2 Если я записываю им hex из MPLAB, то калибровочное слово теряется и контроллер не работает (не тактируется? или с чем это связано?). Если я в программе PicKit2 v2.52 с помощью нового программатора сначала определяю это калибровочное слово, а потом прошиваю hex то все работает. При повторном программировании из MPLAB опять не работает. Кстати последний раз не удалось восстановить калибровочное слово программатором. Попыток было несколько. Хорошо, что записал на бумажке.Ввел вручную - заработало. Как сделать так чтобы MPLAB не сносила єто слово и можно было программировать из нее. Для чего нужна строка OSCCAL = _READ_OSCCAL_DATA(); и в каком месте программы она должна быть? Спасибо.

Поделиться сообщением


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

Калибровочное слово я знаю уже. Дело действительно именно в нем. по совету сменить программатор собрал PicKit2 Если я записываю им hex из MPLAB, то калибровочное слово теряется и контроллер не работает (не тактируется? или с чем это связано?). Если я в программе PicKit2 v2.52 с помощью нового программатора сначала определяю это калибровочное слово, а потом прошиваю hex то все работает. При повторном программировании из MPLAB опять не работает. Кстати последний раз не удалось восстановить калибровочное слово программатором. Попыток было несколько. Хорошо, что записал на бумажке.Ввел вручную - заработало. Как сделать так чтобы MPLAB не сносила єто слово и можно было программировать из нее. Для чего нужна строка OSCCAL = _READ_OSCCAL_DATA(); и в каком месте программы она должна быть? Спасибо.

Эта строка (функция) как раз то и читает калибровочное слово из памяти PIC. Если по адресу нахожднения калибровочного слова не будет инструкции RETLW, то не будет возврата из функции _READ_OSCCAL_DATA(), а это означает, что программа будет крутитьтся в начале инициализации вечно. :wacko: Когда MPLAB сносит (стирает) константу, вместо RETLW там будет пустая ячейка, что интерпретируется как инструкция ADDWF.

 

   CALL   0x3ff                  ; get calibration value
             MOVWF  OSCCAL          ; save

Поделиться сообщением


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

Калибровочное слово я знаю уже. Дело действительно именно в нем. по совету сменить программатор собрал PicKit2 Если я записываю им hex из MPLAB, то калибровочное слово теряется и контроллер не работает (не тактируется? или с чем это связано?). Если я в программе PicKit2 v2.52 с помощью нового программатора сначала определяю это калибровочное слово, а потом прошиваю hex то все работает. При повторном программировании из MPLAB опять не работает. Кстати последний раз не удалось восстановить калибровочное слово программатором. Попыток было несколько. Хорошо, что записал на бумажке.Ввел вручную - заработало. Как сделать так чтобы MPLAB не сносила єто слово и можно было программировать из нее.

Programmer->Settings->Calibration memory

Чтобы использовалась заводская калибровка (или то, что уже записано), снимите галку "Allow to program Calibration memory"

Чтобы записать своё значение, поставьте галку и задайте "New Value". 0x80 соответствует середине калибровочного интервала.

Для чего нужна строка OSCCAL = _READ_OSCCAL_DATA(); и в каком месте программы она должна быть? Спасибо.

Project->Build Options->Project->Linker

Установленная галка "Calibrate oscillator" всё сделает за Вас (в прологе, до старта main(); см. startup.lst в папке проекта).

Можете задать своё значение в поле "Alternate oscillator calibration value".

Для использования заводской калибровки поле нужно очистить.

Если же хочется всё сделать самому, снимите галку и вставьте OSCCAL = _READ_OSCCAL_DATA(); в прогу там, где хочется.

Если такой галки нет, обновите UniversalToolSuite.

 

Можно ещё почитать .chm к MPLab'у и программатору, manual.pdf к компилятору и помедитировать в симуляторе.

Поделиться сообщением


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

Programmer->Settings->Calibration memory
post-3446-1296834725_thumb.jpgВот такого у меня нет.

Project->Build Options->Project->Linker

Установленная галка "Calibrate oscillator" всё сделает за Вас

post-3446-1296834756_thumb.jpgТакая галка есть, но она установлена и поле пустое. Почему ничего не происходит?

Поделиться сообщением


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

Почемуто всякий раз после заливки из MPLAB последний байт оказывается нулевым (ну в смысле значение в последней ячейке 0000). Даже если вписать конкретное значение в ту ячейку. Даже если он там был. Почему так и что делать с этим?pic2.rarФайл сгенерированный MPLAB.

Поделиться сообщением


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

Вот такого у меня нет.

Версия MPLab какая?

UPD сейчас добавил поддержку PICKit2 (ну нет у меня его) - действительно в настройках программатора в MPLab никаких упоминаний об OSCCAL.

Посмотрите "\Program Files\Microchip\MPLAB IDE\PICkit 2\hlpPICkit2.chm" - там описывается какая-то оболочка для PICKit2, и в её опциях поминается OSCCAL.

Такая галка есть, но она установлена и поле пустое. Почему ничего не происходит?

Значит на компилятор можно не грешить. Проверьте на всякий случай:

- на закладке Linker поле Debugger установлено в Auto;

- при компиляции с включённым симулятором последнее слово в памяти программ должно получаться 0x3400, с выключенной отладкой - 0x3fff.

Поделиться сообщением


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

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

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

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

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

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

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

×
×
  • Создать...