реклама на сайте
подробности

 
 
3 страниц V  < 1 2 3 >  
Reply to this topicStart new topic
> PIC12F629 & MPLAB на симуляторе работает, а при, прошивке не работает
Дмитрий Ветра
сообщение Jan 7 2011, 17:28
Сообщение #16


Участник
*

Группа: Участник
Сообщений: 20
Регистрация: 6-12-07
Из: Рига, Латвия
Пользователь №: 33 036



Цитата(xemul @ Jan 5 2011, 20:44) *
Проверьте, не затерся ли байт калибровки внутреннего генератора. Прочитайте память контроллера, по адресу 0x3fe должно быть 0x34xx.
Чтобы исключить проказы компилятора, которым Вы пользуетесь, в аттаче два хекса, собранных по последнему сорцу разными версиями.
Чтобы исключить предупреждения программатора, в конфиге замаскированы неиспользуемые биты.
Код
__CONFIG(WDTDIS & UNPROTECT & INTIO & MCLRDIS & 0x31ff);

[attachment=51778:test.zip]


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

В догонку вот что получилось при компилировании:
Код
    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


Сообщение отредактировал Дмитрий Ветра - Jan 7 2011, 17:21
Прикрепленные файлы
Прикрепленный файл  test12.zip ( 366 байт ) Кол-во скачиваний: 14
 
Go to the top of the page
 
+Quote Post
DL36
сообщение Jan 9 2011, 05:01
Сообщение #17


Местный
***

Группа: Свой
Сообщений: 460
Регистрация: 5-10-06
Из: Херсон
Пользователь №: 21 006



Цитата(xemul @ Jan 6 2011, 16:28) *
- взять новый контроллер, а запиленный прибить гвоздём на видном месте.
Неа проще взять PciKit2 и восстановить константу.
Go to the top of the page
 
+Quote Post
skyled
сообщение Jan 11 2011, 06:20
Сообщение #18


Местный
***

Группа: Участник
Сообщений: 217
Регистрация: 11-06-10
Пользователь №: 57 868



Вот такая вот ошибка в т.ч. и в случае с перекомпиленным. Что бы это значило?
Прикрепленное изображение
Go to the top of the page
 
+Quote Post
skyled
сообщение Jan 11 2011, 08:26
Сообщение #19


Местный
***

Группа: Участник
Сообщений: 217
Регистрация: 11-06-10
Пользователь №: 57 868



Файлы, кстати, заливались в новый МК.
Go to the top of the page
 
+Quote Post
xemul
сообщение Jan 11 2011, 09:42
Сообщение #20



*****

Группа: Свой
Сообщений: 1 928
Регистрация: 11-07-06
Пользователь №: 18 731



Цитата(skyled @ Jan 11 2011, 12:20) *
Вот такая вот ошибка в т.ч. и в случае с перекомпиленным. Что бы это значило?

Да что угодно - хардварные проблемы в программаторе (н-р, Vpp не держится), софтовые от и до. Если есть время и желание - разбирайтесь.
А лучше закажите PicKit2'образное (я и забыл про него, спасибо DL36).
Go to the top of the page
 
+Quote Post
skyled
сообщение Jan 11 2011, 12:36
Сообщение #21


Местный
***

Группа: Участник
Сообщений: 217
Регистрация: 11-06-10
Пользователь №: 57 868



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

Код
А лучше закажите PicKit2'образное
Да вот хочу на PIC18F2550 PicKit2-образное собрать, но тотже PIC надо чем-то шить
Go to the top of the page
 
+Quote Post
skyled
сообщение Jan 12 2011, 05:27
Сообщение #22


Местный
***

Группа: Участник
Сообщений: 217
Регистрация: 11-06-10
Пользователь №: 57 868



Цитата
хардварные проблемы в программаторе
Ну вобщем так и вышло. Только проблема не в программаторе была, а в целевом устройстве. К выв. 6 и 7 были подключены входы микросхемы ULN2003. Выпаял и все заработало как по маслу. Собственно в связи с этим вопрос. В даташите есть упоминание о резисторах между выводами программирования и остальной схемой, но нет упоминания про их номинал (или смотрел плохо). В ULN2003 стоит 2,7 кОм. Это мало?
Go to the top of the page
 
+Quote Post
xemul
сообщение Jan 12 2011, 09:33
Сообщение #23



*****

Группа: Свой
Сообщений: 1 928
Регистрация: 11-07-06
Пользователь №: 18 731



Цитата(skyled @ Jan 12 2011, 11:27) *
Ну вобщем так и вышло. Только проблема не в программаторе была, а в целевом устройстве. К выв. 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, но, наверное, это фича всех подобных программаторов.
Go to the top of the page
 
+Quote Post
skyled
сообщение Jan 12 2011, 10:14
Сообщение #24


Местный
***

Группа: Участник
Сообщений: 217
Регистрация: 11-06-10
Пользователь №: 57 868



Импортный аналог там и стоит. Не разглядел, но похоже на то, что Вы пишите. Всеравно прийдется какой-то буфер делать. SN74HC14 есть под рукой. Если пользовать WinPic800, то PIC18F2550 поддерживается, уже залил. Спасибо за консультации. Посмотрим как заработает а-ля PicKit2. Может еще какие вопросы по ходу будут. Спасибо.
Go to the top of the page
 
+Quote Post
smk
сообщение Feb 3 2011, 20:30
Сообщение #25


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



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


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post
Дмитрий Ветра
сообщение Feb 4 2011, 10:10
Сообщение #26


Участник
*

Группа: Участник
Сообщений: 20
Регистрация: 6-12-07
Из: Рига, Латвия
Пользователь №: 33 036



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

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

Код
   CALL   0x3ff                  ; get calibration value
             MOVWF  OSCCAL          ; save
Go to the top of the page
 
+Quote Post
xemul
сообщение Feb 4 2011, 11:41
Сообщение #27



*****

Группа: Свой
Сообщений: 1 928
Регистрация: 11-07-06
Пользователь №: 18 731



Цитата(smk @ Feb 3 2011, 23:30) *
Калибровочное слово я знаю уже. Дело действительно именно в нем. по совету сменить программатор собрал 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 к компилятору и помедитировать в симуляторе.
Go to the top of the page
 
+Quote Post
smk
сообщение Feb 4 2011, 15:46
Сообщение #28


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



Цитата
Programmer->Settings->Calibration memory
Прикрепленное изображение
Вот такого у меня нет.
Цитата
Project->Build Options->Project->Linker
Установленная галка "Calibrate oscillator" всё сделает за Вас
Прикрепленное изображение
Такая галка есть, но она установлена и поле пустое. Почему ничего не происходит?


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post
smk
сообщение Feb 4 2011, 17:52
Сообщение #29


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



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


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post
xemul
сообщение Feb 4 2011, 18:05
Сообщение #30



*****

Группа: Свой
Сообщений: 1 928
Регистрация: 11-07-06
Пользователь №: 18 731



Цитата(smk @ Feb 4 2011, 18:46) *
Вот такого у меня нет.

Версия MPLab какая?
UPD сейчас добавил поддержку PICKit2 (ну нет у меня его) - действительно в настройках программатора в MPLab никаких упоминаний об OSCCAL.
Посмотрите "\Program Files\Microchip\MPLAB IDE\PICkit 2\hlpPICkit2.chm" - там описывается какая-то оболочка для PICKit2, и в её опциях поминается OSCCAL.
Цитата
Такая галка есть, но она установлена и поле пустое. Почему ничего не происходит?

Значит на компилятор можно не грешить. Проверьте на всякий случай:
- на закладке Linker поле Debugger установлено в Auto;
- при компиляции с включённым симулятором последнее слово в памяти программ должно получаться 0x3400, с выключенной отладкой - 0x3fff.
Go to the top of the page
 
+Quote Post

3 страниц V  < 1 2 3 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th June 2025 - 09:27
Рейтинг@Mail.ru


Страница сгенерированна за 0.01508 секунд с 7
ELECTRONIX ©2004-2016