Микроконтроллеры, Часть 2. Проба пера. ;)

Aug 31, 2007 00:49

пробуем собрать устройство на контроллере и запускаем на нем тестовую программку

Начнем с того, что в отличии от программирования под 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
Previous post Next post
Up