Данный проект объединяет в себе несколько разработок  на основе PIC контроллера (PIC16F84).  Цель разработок изучение архитектуры микроконтроллера и языка программирования ассемблер. В принципе я и начинал изучение контроллера с этих разработок (пока сам руками не сделаешь, ничего не поймёшь и не запомнишь).

В проект входят три разработки, две из них реализованы в железе, но последнюю в железе так и не реализовал (только прогнал в эмуляторе).

  1. Переключатель световых эффектов для новогодней звезды.
  2. Переключатель линейного входа с функцией памяти для усилителя.
  3. Генератор фиксированных звуковых частот.

В проекте использовалось следующие среды разработок:

  • ISIS Professional – среда для разработки схем с эмуляции работы.
  • MPLAB X IDE - интегрированная среда разработки ПО для микроконтроллеров PIС.  

 

Схема переключателя световых эффектов.

Прошивка для PIC контроллера написана на ассемблере в среде разработки MPLAB X IDE.

Имя  
Эл. почта  
Сообщение  
  
  1            LIST        P=PIC16F84A
  2             __CONFIG    03FF1H
  3 STATUS      equ         03h
  4 PORTB       equ         06h
  5 TRISB       equ         06h         
  6 KNOPS       equ         0Fh        ; Скорость переключения
  7 KNREZH      equ         1Fh        ; Режим работы (счётчик)
  8 Schet1      equ         1Ch        ; Счётчик на переполнение
  9 Schet2      equ         1Dh        ; Счётчик на 0
 10 Rezhim      equ         1Eh        ; Режим работы (опред. по битам)         
 11 F           equ         0x1
 12 Reg_1       equ         0Ch
 13 Reg_2       equ         0Dh
 14 Reg_3       equ         0Eh     
 15             org         0
 16             bsf         STATUS,5
 17             bcf         TRISB,1
 18             bcf         TRISB,2
 19             bcf         TRISB,3
 20             bcf         TRISB,4
 21             bsf         TRISB,0
 22             bcf         STATUS,5
 23             clrf        PORTB
 24             clrf        KNOPS
 25             bsf         KNOPS,0 
 26             movlw       .194
 27             movwf       Schet2
 28             clrf        Schet1
 29             clrf        Rezhim
 30             movlw       .1
 31             movwf       KNREZH
 32 wwww        btfss       KNOPS,2       ; бит-проверка, сброс на 0 "Скорость"
 33             goto        m1
 34             clrf        KNOPS
 35 m1          btfsc       Rezhim,3      ; бит проверка, день/ночь
 36             goto        vx
 37             btfsc       Rezhim,2      ; бит-проверка, переключ. свет/тень ***
 38             goto        ten
 39             btfsc       Rezhim,1      ; бит-проверка, переключ. вперёд/назад
 40             goto        rev1        
 41             goto        re1
 42 vx          call        den
 43             goto        osn1
 44 re1         bsf         PORTB,1
 45             bcf         PORTB,2
 46             bcf         PORTB,3
 47             bcf         PORTB,4
 48             goto        osn1
 49 rev1        bsf         PORTB,4
 50             bcf         PORTB,3
 51             bcf         PORTB,2
 52             bcf         PORTB,1
 53             goto        osn1
 54 ten         btfsc       Rezhim,1      ; бит-проверка, переключ. вперёд/назад
 55             goto        ruv1
 56             goto        ru1
 57 ru1         bcf         PORTB,1
 58             bsf         PORTB,2
 59             bsf         PORTB,3
 60             bsf         PORTB,4
 61             goto        osn1
 62 ruv1        bcf         PORTB,4
 63             bsf         PORTB,3
 64             bsf         PORTB,2
 65             bsf         PORTB,1
 66             goto        osn1
 67 osn1        btfss       KNOPS,0
 68             goto        m2
 69             btfss       KNOPS,1
 70             goto        k1
 71             call        mks800       ; 11 - пауза 800 мкС
 72             goto        ms1 
 73 k1          call        mks200        ;01 - пауза 100 мкС           
 74 m2          btfss       KNOPS,1
 75             goto        m3
 76             call        mks400        ;10 - пауза 400 мкС   
 77 m3          btfsc       KNOPS,0
 78             goto        ms1
 79             btfsc       KNOPS,1
 80             goto        ms1
 81             call        sek10           ;00 - пауза 10 С
 82 ms1         btfsc       Rezhim,3      ; бит проверка, день/ночь
 83             goto        vx1
 84             btfsc       Rezhim,2      ; бит-проверка, переключ. свет/тень ***
 85             goto        ten1
 86             btfsc       Rezhim,1      ; бит-проверка, переключ. вперёд/назад
 87             goto        rev2        
 88             goto        re2
 89 vx1         call        den
 90             goto        osn2        
 91 re2         bcf         PORTB,1
 92             bsf         PORTB,2
 93             bcf         PORTB,3
 94             bcf         PORTB,4
 95             goto        osn2
 96 rev2        bcf         PORTB,4
 97             bsf         PORTB,3
 98             bcf         PORTB,2
 99             bcf         PORTB,1
100             goto        osn2
101 ten1        btfsc       Rezhim,1      ; бит-проверка, переключ. вперёд/назад
102             goto        ruv2
103             goto        ru2
104 ru2         bsf         PORTB,1
105             bcf         PORTB,2
106             bsf         PORTB,3
107             bsf         PORTB,4
108             goto        osn2
109 ruv2        bsf         PORTB,4
110             bcf         PORTB,3
111             bsf         PORTB,2
112             bsf         PORTB,1
113             goto        osn2
114 osn2        btfss       KNOPS,0     
115             goto        m4
116             btfss       KNOPS,1
117             goto        k2
118             call        mks800       ; 11 - пауза 800 мкС
119             goto        ms2
120 k2          call        mks200     
121 m4          btfss       KNOPS,1
122             goto        m5
123             call        mks400
124 m5          btfsc       KNOPS,0
125             goto        ms2
126             btfsc       KNOPS,1
127             goto        ms2
128             call        sek10
129 ms2         btfsc       Rezhim,3      ; бит проверка, день/ночь
130             goto        vx2
131             btfsc       Rezhim,2      ; бит-проверка, переключ. свет/тень ***
132             goto        ten2
133             btfsc       Rezhim,1      ; бит-проверка, переключ. вперёд/назад
134             goto        rev3
135             goto        re3
136 vx2         call        den
137             goto        osn3
138 re3         bcf         PORTB,1
139             bcf         PORTB,2
140             bsf         PORTB,3
141             bcf         PORTB,4
142             goto        osn3
143 rev3        bcf         PORTB,4
144             bcf         PORTB,3
145             bsf         PORTB,2
146             bcf         PORTB,1
147             goto        osn3
148 ten2        btfsc       Rezhim,1      ; бит-проверка, переключ. вперёд/назад
149             goto        ruv3
150             goto        ru3
151 ru3         bsf         PORTB,1
152             bsf         PORTB,2
153             bcf         PORTB,3
154             bsf         PORTB,4
155             goto        osn3
156 ruv3        bsf         PORTB,4
157             bsf         PORTB,3
158             bcf         PORTB,2
159             bsf         PORTB,1
160             goto        osn3
161 osn3        btfss       KNOPS,0
162             goto        m6
163             btfss       KNOPS,1
164             goto        k3
165             call        mks800       ; 11 - пауза 800 мкС
166             goto        ms3
167 k3          call        mks200
168 m6          btfss       KNOPS,1
169             goto        m7
170             call        mks400
171 m7          btfsc       KNOPS,0
172             goto        ms3
173             btfsc       KNOPS,1
174             goto        ms3
175             call        sek10
176 ms3         btfsc       Rezhim,3      ; бит проверка, день/ночь
177             goto        vx3
178             btfsc       Rezhim,2      ; бит-проверка, переключ. свет/тень ***
179             goto        ten3
180             btfsc       Rezhim,1      ; бит-проверка, переключ. вперёд/назад
181             goto        rev4        
182             goto        re4
183 vx3         call        den
184             goto        osn4
185 re4         bcf         PORTB,1
186             bcf         PORTB,2
187             bcf         PORTB,3
188             bsf         PORTB,4
189             goto        osn4
190 rev4        bcf         PORTB,4
191             bcf         PORTB,3
192             bcf         PORTB,2
193             bsf         PORTB,1
194             goto        osn4
195 ten3        btfsc       Rezhim,1      ; бит-проверка, переключ. вперёд/назад
196             goto        ruv4
197             goto        ru4
198 ru4         bsf         PORTB,1
199             bsf         PORTB,2
200             bsf         PORTB,3
201             bcf         PORTB,4
202             goto        osn4
203 ruv4        bsf         PORTB,4
204             bsf         PORTB,3
205             bsf         PORTB,2
206             bcf         PORTB,1
207             goto        osn4
208 osn4        btfss       KNOPS,0
209             goto        m8
210             btfss       KNOPS,1
211             goto        k4
212             call        mks800       ; 11 - пауза 800 мкС
213             goto        wwww
214 k4          call        mks200
215 m8          btfss       KNOPS,1
216             goto        m9
217             call        mks400
218 m9          btfsc       KNOPS,0
219             goto        wwww
220             btfsc       KNOPS,1
221             goto        wwww
222             call        sek10
223             goto        wwww
224             ; Нажатие кнопки Режим
225 kn_rezh     btfsc       PORTB,7     
226             goto        wra
227 rk1         btfss       PORTB,7
228             goto        rk1
229             incf        KNREZH,1
230             btfss       KNREZH,2
231             goto        sche
232             movlw       .1
233             movwf       KNREZH
234 sche        btfss       KNREZH,0
235             goto        rq2
236             btfss       KNREZH,1
237             goto        rq2
238             bsf         Rezhim,3
239             goto        wra
240 rq2         btfsc       KNREZH,0
241             btfsc       KNREZH,1
242             goto        r1
243             goto        rq1                 
244 rq1         bcf         Rezhim,3
245             bcf         Rezhim,2            
246             goto        wra
247 r1          bcf         Rezhim,3
248             bsf         Rezhim,2
249 wra         return          
250             ;delay = 100'000 machine cycles
251 mks200      movlw       .221
252             movwf       Reg_1
253             movlw       .130
254             movwf       Reg_2
255             btfsc       PORTB,0    ; Нажатие кнопки Скорость
256             goto        wr
257 s1          btfss       PORTB,0
258             goto        s1
259             incf        KNOPS,1             
260             btfss       KNOPS,2
261             goto        mm1
262             clrf        KNOPS
263 mm1         movlw       .97
264             movwf       Schet2      
265             goto        ssss
266 wr          call        kn_rezh   ; Нажатие кнопки Режим
267             decfsz      Reg_1, F
268             goto        wr
269             decfsz      Reg_2, F
270             goto        wr
271             decfsz      Schet2,1
272             goto        ssss
273             btfss       Rezhim,1
274             goto        Rez1
275             bcf         Rezhim,1
276             goto        Rez2
277 Rez1        bsf         Rezhim,1
278 Rez2        movlw       .194
279             movwf       Schet2
280 ssss        return
281             ;delay = 400'000 machine cycles
282 mks400      movlw       .119
283             movwf       Reg_1
284             movlw       .8
285             movwf       Reg_2
286             movlw       .3
287             movwf       Reg_3
288             btfsc       PORTB,0
289             goto        wrs
290 ft          btfss       PORTB,0
291             goto        ft
292             incf        KNOPS,1 
293             btfss       KNOPS,2
294             goto        mm2
295             clrf        KNOPS
296 mm2         movlw       .48
297             movwf       Schet2
298             clrf        Schet1
299             goto        ft2
300 wrs         call        kn_rezh   ; Нажатие кнопки Режим
301             decfsz      Reg_1, F
302             goto        wrs
303             decfsz      Reg_2, F
304             goto        wrs
305             decfsz      Reg_3, F
306             goto        wrs
307             decfsz      Schet2,1
308             goto        ft2
309             btfss       Rezhim,1
310             goto        Rez3
311             bcf         Rezhim,1
312             goto        Rez4
313 Rez3        bsf         Rezhim,1
314 Rez4        movlw       .97
315             movwf       Schet2
316 ft2         return
317             ;delay = 800'000 machine cycles
318 mks800      movlw       .241
319             movwf       Reg_1
320             movlw       .15
321             movwf       Reg_2
322             movlw       .5
323             movwf       Reg_3
324             btfsc       PORTB,0
325             goto        wr9
326 ww1         btfss       PORTB,0
327             goto        ww1
328             incf        KNOPS,1 
329             btfss       KNOPS,2
330             goto        mm3
331             clrf        KNOPS
332 mm3         movlw       .4
333             movwf       Schet2
334             goto        df1
335 wr9         call        kn_rezh   ; Нажатие кнопки Режим
336             decfsz      Reg_1, F
337             goto        wr
338             decfsz      Reg_2, F
339             goto        wr9
340             decfsz      Reg_3, F
341             goto        wr9
342             decfsz      Schet2,1
343             goto        df1
344             btfss       Rezhim,1
345             goto        Rez5
346             bcf         Rezhim,1
347             goto        Rez6
348 Rez5        bsf         Rezhim,1
349 Rez6        movlw       .48
350             movwf       Schet2
351 df1         return
352             ;delay = 10'000'000 machine cycles
353 sek10       movlw       .223
354             movwf       Reg_1
355             movlw       .187
356             movwf       Reg_2
357             movlw       .51
358             movwf       Reg_3       
359 wr6         decfsz      Reg_1, F
360             goto        wr6
361             btfsc       PORTB,0
362             goto        wr7
363 ww          btfss       PORTB,0
364             goto        ww
365             incf        KNOPS,1     
366             movlw       .194
367             movwf       Schet2      
368             goto        wr8
369 wr7         call        kn_rezh   ; Нажатие кнопки Режим
370             decfsz      Reg_2, F
371             goto        wr6
372             decfsz      Reg_3, F
373             goto        wr6         
374             decfsz      Schet2,1
375             goto        wr8
376             btfss       Rezhim,1
377             goto        Rez7
378             bcf         Rezhim,1
379             goto        Rez8
380 Rez7        bsf         Rezhim,1
381 Rez8        movlw       .4
382             movwf       Schet2
383 wr8         return
384 ; ========================================
385 den         btfss       Rezhim,1
386             goto        noch
387             bcf         PORTB,1
388             bsf         PORTB,2
389             bcf         PORTB,3
390             bsf         PORTB,4
391             goto        noch1       
392 noch        bsf         PORTB,1
393             bcf         PORTB,2
394             bsf         PORTB,3
395             bcf         PORTB,4
396 noch1       return
397             end
398 

  Прошивка проводиться через программатор Mini Pro TL866A с помощью программы WizardProg87.

  Файлы со схемой, разводкой платы и кодом прошивки можно скачать с яндекса.

Напишите отзыв.

Переключатель световых эффектов для новогодней звезды

Схема создана в ISIS и затем переносилась в ARES (редактор печатных плат, оснащенный автотрассировщиком Electra), поэтому схема немного отличается от обычной. В схеме добавлены разъёмы (для последующей установки на плате). Светодиоды изображены по одному, это сделано для того чтобы на плате ненужно было добавлять дополнительный разъём, параллельно каждому светодиоду устанавливаются ещё четыре светодиода (по одному в каждый луч звезды). Питание схемы от зарядного бока сотового телефона (или от другого источника напряжения 5 В).

Прошивка производиться через программатор Mini Pro TL866A с помощью программы WizardProg87.

Разработки на основе PIC контроллера (PIC16F84)