Недавно решил освоить для себя новую область - микроконтроллеры. Раньше остерегался этой темы, но всё-таки захотелось изучить.
Поискал варианты программаторов, наткнулся на простейшую конструкцию на котроллере - светодиодная моргалка. Сложность пайки светодиода к контроллеру практически никакая, и я взялся повторить схему.
Контроллер PIC12F675 купил в магазине, детали для программатора брать не стал - предположил, что найти в моих разборках не проблема. Пока искал детали, нашел программатор для SIM с возможностью программирования пиков. Схема программатора примерно такая
Для прошивки использовал IC-PROG 1.05D - на виндовс 7 запустилась с ошибкой privileged instruction. Поменял в настройках работу с ком портом на виндовс апи.
На форумах прочитал о том, что нужно сохранить калибровочную константу, и собственно, подсоединив пик к программатору попытался его считать. Получил все нули.
Как ни пытался, считать с него не удалось. С WinPic аналогичная ситуация - не считывает.
Делать нечего, взял хекс файл с сайта, открыл винпиком, нажал прошить, программатор заморгал, программа руганулась на проблему считывания калибровочной константы и всё.
Нажал опять "прочитать прошивку", программатор почитал что-то и всёравно вернул нули, т.е. ситуация после попытки прошить не изменилась.
На всякий случай припаял светодиод по схеме, подключил питание, и (чудо!?) он заморгал.
Значит на запись всё-таки программатор сработал, на чтение нет.
С чтением не стал больше разбираться, взялся за програмную часть - усовершенствовать программу так, чтобы светодиот моргал с другой частотой.
На этом пункте и встал. Почитал немного про пиковский ассемблер, запустил MPLAB 8.50 и обнаружил там ничего понятного. Кроме текстового редактора, никакими функциями воспользоваться не удалось.
Читал, что им можно дизассемблировать уже готовую прошивку (что и собирался сделать), как её там открыть так и не понял. Как запускать и тестировать уже написанные программы тоже не нашел.
Далее. PIC SIMULATOR IDE.
Открыл в нём хекс файл, запустил на выполнение. Нога, на которую подключен светодиот получает высокий уровень и остаётся так не моргая. Сильно разбираться в дизассеблированной программе не стал, ибо мало что еще понимаю в ней.
Proteus 7 Professional. Программы многие хвалят и рекомендуют. И по возможностям она очень хороша, удалось запустить схемы из примеров.
Но стоит кликнуть мышкой в рабочей области, как вся схема пропадает и остаётся пустое место. Соответственно ни отредактировать проетк, ни новый создать возможности не представляется (может быть из-за русификатора?).
На дворе глубокая ночь, чтение интернета и мануалов результатов не приносит после дневного перегруза пиками. Посему, оставляю возникшие вопросы профессионалам, в надежде утром на свежую голову прочитать что-нибудь, избавляющее от танцев с бубном вокруг компиляторов.
1 Почему не читается новый микроконтроллер (PIC12675)?
2 Как открыть hex файл в MPLAB для изменения кода (дизассемблировать и потом обратно собрать хекс)?
3 В чём может быть проблема с протеусом (из вариантов пока только русификатор и седьмая винда)?
4 Чем всё-таки можно просто откомпилировать программу для заливки в контроллер?
5 Поидее, если контроллер не читается, но пишется, можно просто залить новую прошивку поверх старой, верно?
6 Можете ли немного прокоментировать код для мигалки (немного запутался в банках и регистрах, читая пример для одного контроллера и интерптритируя к своему):
Код: Выделить всё
processor 12F675
#include <P12F675.INC>
__config 0x3F84
; _CPD_OFF & _CP_OFF & _BODEN_OFF & _MCLRE_OFF & _PWRTE_ON & _WDT_OFF
; & _INTRC_OSC_NOCLKOUT
; RAM-Variable
LRAM_0x20 equ 0x20
LRAM_0x21 equ 0x21
LRAM_0x22 equ 0x22
LRAM_0x23 equ 0x23
; Program
Org 0x0000
; Reset-Vector
GOTO LADR_0x0028
LADR_0x0001
CLRF LRAM_0x23
MOVWF LRAM_0x22
LADR_0x0003
MOVLW 0xFF ; b'11111111' d'255'
; Interrupt-Vector
ADDWF LRAM_0x22,F
BTFSS STATUS,C
ADDWF LRAM_0x23,F
BTFSS STATUS,C
GOTO LADR_0x0023
MOVLW 0x03 ; b'00000011' d'003'
MOVWF LRAM_0x21
MOVLW 0xDF ; b'11011111' d'223'
CALL LADR_0x000F
GOTO LADR_0x0003
CLRF LRAM_0x21
LADR_0x000F
ADDLW 0xE8 ; b'11101000' d'232'
MOVWF LRAM_0x20
COMF LRAM_0x21,F
MOVLW 0xFC ; b'11111100' d'252'
BTFSS STATUS,C
GOTO LADR_0x0018
LADR_0x0015
ADDWF LRAM_0x20,F
BTFSC STATUS,C
GOTO LADR_0x0015
LADR_0x0018
ADDWF LRAM_0x20,F
NOP
INCFSZ LRAM_0x21,F
GOTO LADR_0x0015
BTFSC LRAM_0x20,0
GOTO LADR_0x001E
LADR_0x001E
BTFSS LRAM_0x20,1
GOTO LADR_0x0022
NOP
GOTO LADR_0x0022
LADR_0x0022
RETURN
LADR_0x0023
BCF STATUS,IRP
BCF STATUS,RP0 ; !!Bank Register-Bank(0/1)-Select
BCF STATUS,RP1 ; !!Bank Register-Bank(2/3)-Select
NOP
RETURN
LADR_0x0028
BSF STATUS,RP0 ; !!Bank Register-Bank(0/1)-Select
CLRF ADCON0 ; !!Bank!! ADCON0 - ANSEL
MOVLW 0x07 ; b'00000111' d'007'
BCF STATUS,RP0 ; !!Bank Register-Bank(0/1)-Select
MOVWF CMCON ; !!Bank!! CMCON - VRCON
BSF STATUS,RP0 ; !!Bank Register-Bank(0/1)-Select
BCF GPIO,2 ; !!Bank!! GPIO - TRISIO
LADR_0x002F
BCF STATUS,RP0 ; !!Bank Register-Bank(0/1)-Select
BSF GPIO,2 ; !!Bank!! GPIO - TRISIO
MOVLW 0x7D ; b'01111101' d'125' "}"
CALL LADR_0x0001
BCF GPIO,2 ; !!Bank!! GPIO - TRISIO
MOVLW 0x7D ; b'01111101' d'125' "}"
CALL LADR_0x0001
GOTO LADR_0x002F
LADR_0x0037
SLEEP
GOTO LADR_0x0037
End
Заранее спасибо.
PS пока писал, нашел хороший дизассемблер в одной из соседних тем - PICDisasm.