При разработке переключателя линейного входа, я руководствовался двумя аспектами.

Первое – в этой разработке изучал способ записи и чтения информации из энергонезависимой памяти контроллера.

Второе – в то время я собирал аудио усилитель и была необходимость сделать устройство управления линейными входами усилителя.

   В схеме не указано исполняющее устройство (устройство разрабатывалось и собиралось в спешке), я использовал 3 реле, катушки которых подключены через транзисторы к портам RB0, RB1, RB2 пины 6, 7, 8 соответственно. Реле с двумя группами контактов (при использовании стерео-режима). Порты OSC1, OSC2, MCLR пины 16, 15, 4 подключены штатным способом (подсмотреть можно на схеме переключателя световых эффектов).

   Использование схемы простое. При нажатии на кнопку включается второй вход, а первый и третий отключается, при последующем нажатии включится третий, отключаться первый и второй, третье нажатие на кнопку приведёт к включению первого и отключения второго и третьего входов. Действующий вход индицируется светодиодом. При каждом нажатии в память контроллера записывается состояние портов RB0, RB1, RB2, RB5, RB6, RB7. При отключении питания контроллера информация в памяти остаётся. При новом включении контроллер возьмёт информацию с памяти и запишет в соответствующие порты.

   На деле, в моём случае, если усилитель работал от второго входа до выключения, то при включении он подключиться ко второму входу. Удобно ненужно лишний раз тыкать кнопку :-) .     

Имя  
Эл. почта  
Сообщение  
  

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

  1             LIST        P=PIC16F84A
  2             __CONFIG    03FF1H
  3             
  4 STATUS      equ         03h
  5 PORTA       equ         05h
  6 TRISA       equ         05h
  7 PORTB       equ         06h
  8 TRISB       equ         06h
  9             
 10 INTCON      equ         0Bh     ; регистр запрета прерывания
 11 ; Константы -------------------------------------------------
 12 W           equ         0
 13 F           equ         1
 14 C           equ         0
 15 Z           equ         2
 16             
 17 PCL         equ         02h
 18             
 19 ; определение регистров для работы с памятью
 20 EEData      equ         08h      ; EEPROM - данные
 21 EECon1      equ         08h      ; EECON1 - банк 1
 22 EEAdr       equ         09h      ; EEPROM - адрес
 23 EECon2      equ         09h      ; EECON2 - банк 2
 24 ;------------------------------------------------------------
 25 Reg_1       equ         0Ch
 26 Reg_2       equ         0Dh      
 27 Reg_3       equ         0Eh
 28 Reg_4       equ         0Fh
 29             
 30 ; ====================================================================
 31             org         2100h       ; обращение к EEPROM памяти
 32             DE          1           ; предварительная запись
 33 ; --------------------------------------------------------------------
 34             
 35             org         0           ; начало программы
 36 ; подготовка ---------------------------------------------------------
 37             bsf         STATUS,5    ; переход в банк 1
 38             movlw       1Fh         ; запись в аккумулятор W
 39             movwf       TRISA       ; порт А вход
 40             clrf        TRISB       ; порт В выход
 41             bcf         STATUS,5    ; переход в банк 0
 42 ; чтение из памяти и вывод в порт В ----------------------------------
 43             call        Read        ; чтение числа(подпрограмма Read)
 44             movf        Reg_4,W     ; запись Reg_4 в аккумулятор W
 45             call        TABLE       ; переход к подпрограмме TABLE
 46             movwf       PORTB       ; запись в порт В из W
 47 ; отслеживание нажатия кнопки (нажатие с защелкой) -------------------
 48 mk1         btfsc       PORTA,4     ; бит-проверка на 0
 49             goto        mk1
 50 mk2         btfss       PORTA,4     ; бит-проверка на 1
 51             goto        mk2
 52             call        Pause       ; пауза 200 мС (200000 циклов)
 53 ; проверка на 3 (крайнее значение), увелечение значения регистра
 54             bcf         STATUS,C    ; опускаем флаг С в ноль
 55             movlw       .253        ; (255-3)+1=253 __> W
 56             addwf       Reg_4,W     ; (Reg_4)+W (значение остаётся в W)
 57             btfss       STATUS,C    ; делаем проверку С-флага
 58             ; если бит С=0 то выполняется следующая инструкция
 59             ; если бит С=1 то следующая инструкция пропускается
 60             goto        mk4
 61             goto        mk3
 62 mk4         incf        Reg_4,F     ; увеличить значение на 1 и сохранить
 63             goto        mk5
 64 mk3         movlw       .1
 65             movwf       Reg_4
 66 mk5         movf        Reg_4,W     ; копирование Reg_4 в W
 67             call        TABLE
 68             movwf       PORTB
 69             call        Pause
 70             call        Write       ; запись числа
 71             goto        mk1
 72             
 73 ; =========================================================================
 74             ;delay = 200'000 machine cycles
 75 Pause       movlw       .186
 76             movwf       Reg_1
 77             movlw       .4
 78             movwf       Reg_2
 79             movlw       .2
 80             movwf       Reg_3
 81 wr          decfsz      Reg_1, F
 82             goto        wr
 83             decfsz      Reg_2, F
 84             goto        wr
 85             decfsz      Reg_3, F
 86             goto        wr
 87             nop
 88 
 89 ; =========================================================================
 90 TABLE       addwf       PCL,F       ; содержимое счётчика PCL=PCL+W
 91             retlw       0h          ; 0
 92             retlw       21h         ; 1
 93             retlw       42h         ; 2
 94             retlw       84h         ; 3
 95             
 96 ; =========================================================================
 97 ; запись данных в энергонезависимую память EEPROM (ПЗУ)
 98 Write       clrf       INTCON      ; Глобальный запрет прерываний
 99             clrw                   ; обнулить W, т.е. установить адрес "0"
100             movwf      EEAdr       ; Скопировать W в регистр EEAdr
101             movf       Reg_4,W     ; Скопировать данные из Reg_4 в регистр W
102             movwf      EEData      ; Скопировать W в EEPROM
103             bsf        STATUS,5    ; Переход в первый банк.
104             bsf        EECon1,2    ; Разрешить запись. 
105             movlw      55h         ; Обязательная
106             movwf      EECon2      ; процедура
107             movlw      .170         ; при записи.
108             movwf      EECon2      ; ----"----
109             bsf        EECon1,1    ; ----"----
110             bcf        EECon1,4    ; Сбросить флаг прерывания по окончании
111             bcf        STATUS,5    ; Переход в нулевой банк.
112             return
113             
114 ;==========================================================================
115 ; чтение данных из энергонезависимой памяти EEPROM (ПЗУ)
116 Read        bcf        STATUS,5    ; Переход в нулевой банк.
117             clrw                   ; обнулить W, т.е. установить адрес "0"
118             movwf      EEAdr       ; Скопировать W в регистр EEAdr
119             bsf        STATUS,5    ; Переход в первый банк.
120             bsf        EECon1,0    ; Инициализировать чтение.
121             bcf        STATUS,5    ; Переход в нулевой банк.
122             movf       EEData,W    ; Скопировать в W из EEPROM
123             movwf      Reg_4       ; Скопировать из W в регистр Reg_4
124             return
125             
126             end                     ; конец программы

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

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

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

Схема переключателя

Переключатель линейного входа с функцией памяти для усилителя.