пробуем собрать устройство на контроллере и запускаем на нем тестовую программку
Начнем с того, что в отличии от программирования под PC, при программировании под контроллеры, нам необходимо создать то что мы будем программировать. То есть роль Гуев выполняет электронное устройство. Начнем с простого, например попробуем сделать будильник.
Для будильника нам понадобятся:
1) PIC16F873 (можно было взять и более простого представителя, но мы уже выбрали объект изучения, и кроме того, наличие различной периферии позволит нам улучшить наш будильник в дальнейшем, простым изменением программного обеспечения. )
2) Четырехразрядный семи сегментный индикатор, с общим катодом.
3) Микросхема К514ИД1(КР514ИД1) Имейте ввиду К и КР в разных корпусах, потому распиновку ищите под ваш экземпляр.
Прим 2.1 Можно использовать также 514ИД2, но тогда придется менять индикатор на соответствующий с другой полярностью.
Прим 2.2 Можно вообще обойтись без дешифратора, заменив его программным аналогом, тогда сегменты a,b,c,d,e,f,g и h подключаем к порту В, линии управления разрядами переносим на порт C, и исключаем два транзистора Т6, Т7 и два резистора R9, R10 т.к. сегмент h будет включаться одной из линий порта В. Но следует учитывать, что нагрузочная способность портов PIC несколько ниже чем у дешифратора, и надо исключить одновременное включение двух линий управления разрядами, иначе порт B PICа может выйти из строя. ( предупреждение взято из документации, на практике, у меня, ничего из строя не выходило) Но этот вариант программы мы здесь рассматривать не будем, тот кто решит сэкономить на ИД1 получит возможность попрактиковаться в программировании.
4) 3 Кнопки, З резистора 10 кОм, 8 резисторов 2,2 кОм, 6 резисторов сопротивлением 4,7 кОм; 5 транзисторов КТ503, один КТ502, 4 конденсатора от 15pF до 0,1uF и два кварцевых резонатора, 4 MHz для самого PIC и 32768Hz( или 32.768 kHz ) для таймера часов, а так же спикер для сигнала будильника.
Прим 2.1 Существуют кварцевые резонаторы со встроенными конденсаторами, они имеют не два, а три контакта, средний просто подключается на землю. в таком случае два конденсатора прилагающихся к нему на схеме, будут не нужны.
5) Если вы планируете собирать еще и программатор ( или у вас есть таковой для внутрисхемного программирования ) то понадобится еще диод и пяти контактный разъем. В противном случае, можно купить сокету под PIC и впаять ее вместо PICа, а уже PIC вставлять в нее. Тогда вы можете воспользоваться внешним универсальным программатором.
Ели вас не интересует будильник, как таковой, а данная схема как макет для изучения PIC, то для простоты рекомендую купить макетку ( кусок текстолита, с просверленными и металлизированными отверстиями в виде матрицы) на которой будет удобно спаять и соединить проводками все компоненты.
Также можно уговорить ближайшего знакомого ( или не знакомого, но работающего по близости ) электронщика спаять для вас это чудо природы, если вам самому это процесс не интересен.
Ну вот. Плата уже готова и можно подать питание, жаль только что ничего не работает. Ведь в PICе программы нет.
для теста воспользуемся следующей программкой( привожу пока просто без объяснений ):
highlight:picasm
0 : list p=16f873
1 : #include "c:program filesMicrochipMpasm suitep16f873.inc"
2 : digCnt equ 0x30
3 : digPosMask equ 0x31
4 : pauseCnt equ 0x32
5 : org 0
6 : bcf INTCON, GIE
7 : goto start
8 : org 4
9 : retfie
10 : start:
11 : clrf digCnt
12 : movlw 1
13 : movwf digPosMask
14 : mainLoop:
15 : call display
16 : call pause
17 : call nextPos
18 : call nextDig
19 : goto mainLoop
20 : display:
21 : swapf digCnt,w
22 : iorwf digPosMask,w
23 : movwf PORTB
24 : return
25 : pause:
26 : movlw 0xFF
27 : movwf pauseCnt
28 : nop
29 : decfsz pauseCnt,f
30 : goto $-2
31 : addlw -1
32 : btfss STATUS,Z
33 : goto $-5
34 : return
35 : nextPos:
36 : bcf STATUS,C
37 : rlf digPosMask,f
38 : btfss digPosMask,4
39 : return
40 : movlw 1
41 : movwf digPosMask
42 : return
43 : nextDig:
44 : incf digCnt,f
45 : btfss digCnt,4
46 : return
47 : clrf digCnt
48 : return
49 : end
50 : ;
сохраняем (или набираем) ее в файл и скармливаем MPASM'у:
"c:\program files\microchip\mpasm suite\mpasmwin.exe" testprog.asm
в результате получится несколько файлов в частности testprog.hex это и есть прошивка для нашего контроллера.
вот содержимое этого файла:
:020000040000FA
:040000008B13052831
:080008000900B0010130B10054
:100010000D2011201A2021200828300E31048600DE
:100020000800FF30B2000000B20B1328FF3E031D92
:10003000132808000310B10D311E08000130B10073
:0C0040000800B00A301E0800B0010800E3
:00000001FF
открываем его в программаторе, выбираем девайс pic16f873 и жмем программировать.
но это еще не все. у PIC контроллеров есть такая штука, называется биты конфигурации,
если их не правильно выставить - ничего работать не будет.
Нас интересует следующая конфигурация:
WDT - отключен ( отключаем Watch Dog Timer, чтоб не париться с его сбросом)
PWRTE - включен ( схема внутреннего RESET по включении питания, иначе придется собирать свою )
OSC - выбираем типа XT или HS оба эти типа подходят к 4 МГц.
Остальные настройки нас мало интересуют, однако рекомендовал бы на первых порах не включать бит низковольтного программирования, можно случайно стереть содержимое контроллера, если будут ошибки в схеме. Не смертельно, но не приятно. Кроме того это отнимет у нас вывод 3 порта B, а мы его активно юзаем. Для тех же кто знает что делает, эта рекомендация абсолютно не нужна. Они сами знают, нужно им это включать или нет, все зависит от ситуации.
Некоторые программаторы не имеют интерактивной настройки битов конфигурации, а просто предлагают прописать слово конфигурации. Для таких вариантов даю это самое слово: 0x3F31