Все, что нельзя запрограммировать на ассемблере, приходится паять.
Этот сайт посвящен моим проектам на PIC контроллерах, доступных для публичного освещения. Все приведенные схемы реализованы в железе и работают в настоящее время в быту или производстве.
Для написания программ использован пакет MPLAB/х , свободно распространяемый фирмой MICROCHIP.
Используется программатор PICKIT2/3, ICD2/3.
Любую конструкцию можно собрать самому, даже если она платная и получить бесплатно код разблокировки.
Также можно приобрести в качестве набора для сборки или готового изделия.
Принимаются заказы на разработку аналогово-цифровой или цифровой электроники, систем управления и электроники для производства с применением контроллеров.
Вопросы и предложения писать на почту Gennadiy.V@gmail.com
Если у Вас есть интересные предложения, закакзы или вопросы и форум Вам не помог - адрес тот же.
Часы, термометр, вольтметр, тахометр.
Данное устройство предназначено для контроля напряжения в бортовой сети с точностью 0.1в, измерения температуры в диапазоне от -50 до +125 градусов, измерения частоты вращения коленчатого вала от 0 до 9990 об/мин с точностью 100 об/мин в первом режиме и 10 об/мин во втором ( четырех цилиндровый двигатель), и имеет часы с питанием от встроеной литиевой батарейки. Предусмотрено изменение яркости индикатора - 10 уровней, режим корректировки часов, звуковая сигнализация при частоте вращения двигателя более 4000 об/мин, и напряжении более 14,9 вольт или менее 12 вольт.
Схема
Устройство имеет
- входы питания - от замка зажигания
- измерительный вход напряжения - к аккумулятору
- вход датчика цифрового термометра DS18b20
- вход датчика тахометра - подключается к клеме катушки зажигания , куда подходит провод от электронного коммутатора
- две кнопки управления
Питание осуществляется от бортсети автомобиля.Есть встроенная защита от переполюсовки.
Одной кнопкой осуществляется короткий выбор режимов - часы, термометр, вольтметр, тахометр.
Второй кнопкой осуществляется выбор всех режимов -часы, термометр, вольтметр, тахометр, регулировка яркости, коррекция минут, коррекция часов, тахометр с точностью 10 об/мин. При этом в режимах регулировка яркости, коррекция минут, коррекция часов - первой осуществляются изменения.
При включении зажигания прибор устанвливается в режим отображения времени, звуковая индикая отключена.
Кварц установить 4 МГц. Если есть проблема с вольтметром, то подключить 5 ногу процессора к +5 вольт.
ПО распространяется под лицензией Freeware. Вы можете скачать с сайта схемы, инструкции, прошивки бесплатно.
Даташит на индикатор (в приборе установлен вверх ногами для удобства)
Комплект файлов: прошивка, схема, разводка, исходный текст для разных типов индикаторов
Фото(1),
Фото(2),
Фото(3),
Фото(4),
Фото(5),
Фото(6),
Обсудить на форуме
Купить
PIC16F628 ASM
;PIC16F628 ;===================================================== ; Сохранение в еепром ;===================================================== eewrite ; Write to EEPROM movlw .10 ; попытка записи максимум 10 циклов movwf TEMP2 write_2 bcf STATUS, RP1 movf ee_data, 0 bsf STATUS, RP0 movwf EEDATA bcf STATUS, RP0 movf ee_addr, 0 bsf STATUS, RP0 movwf EEADR ; bcf INTCON, GIE ; Запретить прерывания bsf EECON1, WREN ; Разрешить запись movlw 55h movwf EECON2 movlw 0AAh movwf EECON2 bsf EECON1, WR ; Начать запись ! W_1 clrwdt btfsc EECON1, WR goto W_1 bcf EECON1, WREN ; Запретить запись ; bsf INTCON, GIE ; Проверка записи bcf STATUS, RP0 movf ee_data, 0 bsf STATUS, RP0 bsf EECON1, RD nop ; subwf EEDATA, 0 ; Проверка окончания записи bcf STATUS, RP0 btfsc STATUS, Z retlw 0 ; Ok ! Запись произведена ! decfsz TEMP2, f incf errors goto write_2 retlw 1 ; Error ! Запись НЕ произведена ! ;===================================================== ; Сохранение в еепром конец ; ПРИМЕР SAVE clrf errors MOVLW 00H ; MOVWF ee_addr ; Address to write MOVF RC0,0 ; data to write MOVWF ee_data ; Data to save CALL eewrite MOVLW 11H ; MOVWF ee_addr ; Address to write MOVf CRC_RCOLD,0 ; data to write MOVWF ee_data ; Data to save CALL eewrite bsf INTCON, GIE RETURN ;;===================================================== ;===================================================== ; Восстановление из еепрома счетчика ;===================================================== ; ПРИМЕР LOAD BANK1 MOVLW 00H ; MOVWF EEADR ; Address to read BSF EECON1, RD ; EE Read MOVF EEDATA^80h, W ; W = EEDATA BCF STATUS, RP0 ; Bank 0 MOWWF TEMP1 RETURN ;**************************************************************************** |
ПО распространяется под лицензией Freeware. Вы можете скачать с сайта схемы, инструкции, прошивки бесплатно.
Обсудить на форуме
PIC16F628 ASM
; ********************************************************************* ;Подпрограммы для работы с шиной I2C 24LC256. 100 kHz ДЛЯ 20 мГц ; 400 Кгц - delay 4 заменить nop,nop ; ********************************************************************* ;/*--------- начало примера----------- ; Требуется 2 байта ОЗУ - i2c_byte - в него помещается байт, ; который необходимо вывести на шину, в нем оказывается байт, ; считанный с шины; tmp - счетчик, используемый в цикле. */ ; ********************************************************************* ;char i2c_byte; /* рабочий регистр */ ;char tmp; /* счетчик */ i2c_start BANK1 bcf TRIS_SDA ; SDA - вывод bcf TRIS_SCL ; SCL - вывод BANK0 bsf SCL ; SCL - 1 CALL delay4 bsf SDA ; SDA - 1 CALL delay4 bcf SDA ; SDA - 0 CALL delay4 bcf SCL ; SCL - 0 RETURN ; *********** i2c_stop BANK0 bcf SDA ; SDA - 0 CALL delay4 bsf SCL ; SCL - 1 CALL delay4 bsf SDA ; SDA - 1 RETURN ; *********** i2c_write movlw 0x08 movwf _tmp BANK1 bcf TRIS_SDA ; SDA - вывод bcf TRIS_SCL ; SCL - вывод BANK0 bcf SCL ; SCL - 0 CALL delay4 send_bit bsf SDA ; SDA - 1 выводим 1 на SDA CALL delay4 btfss _i2c_byte, 7 ; бит данных - 1 ? bcf SDA ; нет - выводим 0 на SDA CALL delay4 bsf SCL ; SCL - 1 CALL delay4 rlf _i2c_byte, F ; сдвигаем влево байт данных bcf SCL ; SCL - 0 CALL delay4 decfsz _tmp, F ; конец цикла ? goto send_bit ; нет - переход bsf SDA ; осв. SDA SDA - 1 CALL delay4 bsf SCL ; SCL - 1, получаем ACK-бит и игнорируем его (!) CALL delay4 bcf SCL ; SCL - 0 RETURN ; *********** i2c_read movlw 0x08 movwf _tmp BANK1 bsf TRIS_SDA ; SDA - на ввод bcf TRIS_SCL ; SCL - вывод BANK0 bcf SCL ; SCL - на 0 CALL delay4 read_bit rlf _i2c_byte, F ; сдвигаем байт влево bsf SCL ; SCL - 1 CALL delay4 bsf _i2c_byte, 0 ; устанавливаем бит в 1 ; -NOP NOP btfss SDA ; SDA - 1? bcf _i2c_byte, 0 ; нет - устанавливаем бит в 0 bcf SCL ; SCL - 0 CALL delay4 decfsz _tmp, F ; конец цикла ? goto read_bit ; нет - переход BANK1 bcf TRIS_SDA ; SDA - вывод BANK0 RETURN ; *********** ; ********************************************************************* ;Примеры использования процедур I2C ; ********************************************************************* ; ********************************************************************* ;Примеры использования процедур I2C ; ********************************************************************* EEPROM_READ_BYTE CALL i2c_start MOVLW 0xA2 MOVWF _i2c_byte ; // control байт с битом WR CALL i2c_write MOVF EE_ADR_ST,W MOVWF _i2c_byte ; старший байт адреса памяти CALL i2c_write ; MOVF EE_ADR_ML,W MOVWF _i2c_byte ; младший байт адреса памяти CALL i2c_write; CALL i2c_start; MOVLW 0xA3 MOVWF _i2c_byte ;// control байт с битом RD CALL i2c_write CALL i2c_read CALL i2c_stop MOVF _i2c_byte,W MOVWF EE_DATA RETURN ; ********************************************************************* EEPROM_SAVE_BYTE CALL i2c_start MOVLW 0xA2 MOVWF _i2c_byte; ; //control байт с битом WR CALL i2c_write MOVF EE_ADR_ST,W MOVWF _i2c_byte ; // старший байт адреса памяти CALL i2c_write MOVF EE_ADR_ML,W MOVWF _i2c_byte ;// младший байт адреса памяти CALL i2c_write MOVF EE_DATA,W MOVWF _i2c_byte ;// записываемые данные CALL i2c_write CALL i2c_stop MOVLW .64 ; 10mS (2.5-5V) ; MOVLW .90 ; 14mS (2.5-5V) GOTO Big_delay ; RETURN ;********************************************************************** ;DS1307 DSTIME_READ_BYTE CALL i2c_start MOVLW 0xD0 MOVWF _i2c_byte ; // control байт с битом WR CALL i2c_write MOVF EE_ADR_ML,W MOVWF _i2c_byte ; младший байт адреса памяти CALL i2c_write; CALL i2c_start; MOVLW 0xD1 MOVWF _i2c_byte ;// control байт с битом RD CALL i2c_write CALL i2c_read CALL i2c_stop MOVF _i2c_byte,W MOVWF EE_DATA RETURN ; ********************************************************************* DSTIME_SAVE_BYTE CALL i2c_start MOVLW 0xD0 MOVWF _i2c_byte; ; //control байт с битом WR CALL i2c_write MOVF EE_ADR_ML,W MOVWF _i2c_byte ;// младший байт адреса памяти CALL i2c_write MOVF EE_DATA,W MOVWF _i2c_byte ;// записываемые данные CALL i2c_write GOTO i2c_stop ; RETURN ;********************************************************************** ######################################################################## ПРИМЕР 2 ######################################################################## ;******* 20 mHz ; ; Подпрограммы работы с микросхемами 24с512 (16 шт) ; чтение и запись прозводится блоками. размер блока от 1 до 128 байт ; Скорость шины 1 mHz позволяет хранить звук 22 кHz 8 бит для вывода на ЦАП ; Весь массив сгруппирован в 2 строки по 8 шт.В первой линейке А0 подтянут на плюс питания, ; а во второй на землю.В кадом столбще А1 соеденены вместе и идут на выходы. ; код оптимизировался по скорости ; ;************** I2C *************** #define SDA PORTC,4 #define SCL PORTC,3 #define TRIS_SCL TRISC^80,3 ; I2C SCL PIN #define TRIS_SDA TRISC^80,4 ; I2C SDA PIN _i2c_byte EQU 0x2E _tmp EQU 0x2F EE_DATA EQU 0x30 EE_ADR_32 EQU 0x31 EE_ADR_ST EQU 0x32 EE_ADR_ML EQU 0x33 ;***************************************************************************** ; МЕСТНЫЕ ПОДПРОГРАММЫ ;***************************************************************************** SET_BANK ; УСТАНОВКА ЕСЛИ ОН ПОМЕНЯЛСЯ BCF FLAG_CHANGE_BANK MOVLW b'00011111' ANDWF EE_ADR_32,W MOVWF EE_ADR_ML SWAPF ML_ADR_RAM,W; ПЕРЕМЕСТИМ 3 БИТА ИЗ КОНЦА В НАЧАЛО MOVWF TEMP4 RLF TEMP4,W ANDLW b'11100000' IORWF EE_ADR_ML,F MOVF ML_ADR_RAM,W MOVWF TEMP4 RRF TEMP4,F RRF TEMP4,F RRF TEMP4,W ANDLW b'00011111' MOVWF EE_ADR_ST SWAPF ST_ADR_RAM,W MOVWF TEMP4 RLF TEMP4,W ANDLW b'11100000' IORWF EE_ADR_ST,F ; ТУТ НАДА ВЫВЕСТИ БАНК MOVLW b'01111000'; ANDWF ST_ADR_RAM,W MOVWF TEMP4 ;CMP BANK XORWF OLD_BANK,W BTFSC STATUS,Z RETURN ;ЕСЛИ БАНКИ СОВПАДАЮТ - ВЫХОДИМ ;ЕСЛИ НЕТ - ВЫСТАВИМ BSF FLAG_CHANGE_BANK SET_BANK_1 MOVLW .255 ; ЭТО ОЧИСТКА БАНКОВ MOVWF PORTA BSF PORTC,0 BSF PORTC,1 MOVF TEMP4,W MOVWF OLD_BANK BCF TEMP4,3 MOVLW .0 XORWF TEMP4,W BTFSC STATUS,Z BCF RAM_BANK0 MOVLW b'00010000' XORWF TEMP4,W BTFSC STATUS,Z BCF RAM_BANK1 MOVLW b'00100000' XORWF TEMP4,W BTFSC STATUS,Z BCF RAM_BANK2 MOVLW b'00110000' XORWF TEMP4,W BTFSC STATUS,Z BCF RAM_BANK3 MOVLW b'01000000' XORWF TEMP4,W BTFSC STATUS,Z BCF RAM_BANK4 MOVLW b'01010000' XORWF TEMP4,W BTFSC STATUS,Z BCF RAM_BANK5 MOVLW b'01100000' XORWF TEMP4,W BTFSC STATUS,Z BCF RAM_BANK6 MOVLW b'01110000' XORWF TEMP4,W BTFSC STATUS,Z BCF RAM_BANK7 RETURN ;******************************************************** EEPROM_READ_BYTE BCF INTCON,7 ; IRQ off BTFSS ST_ADR_RAM,3 GOTO EEPROM_READ_BYTE_ML EEPROM_READ_BYTE_ST CALL i2c_start MOVLW 0xA2 MOVWF _i2c_byte ; // control байт с битом WR CALL i2c_write MOVF EE_ADR_ST,W MOVWF _i2c_byte ; старший байт адреса памяти CALL i2c_write ; MOVF EE_ADR_ML,W MOVWF _i2c_byte ; младший байт адреса памяти CALL i2c_write; CALL i2c_start; MOVLW 0xA3 MOVWF _i2c_byte ;// control байт с битом RD CALL i2c_write CALL i2c_read MOVF _i2c_byte,W MOVWF EE_DATA CALL i2c_stop BSF INTCON,7 ; IRQ on RETURN ;********************************************************************** EEPROM_READ_BYTE_ADDR BCF INTCON,7 ; IRQ off ; BSF INTCON,7 ; IRQ on BTFSS ST_ADR_RAM,3 GOTO EEPROM_READ_BYTE_ML_ADDR EEPROM_READ_BYTE_ST_ADDR CALL i2c_start MOVLW 0xA2 MOVWF _i2c_byte ; // control байт с битом WR CALL i2c_write MOVF EE_ADR_ST,W MOVWF _i2c_byte ; старший байт адреса памяти CALL i2c_write ; MOVF EE_ADR_ML,W MOVWF _i2c_byte ; младший байт адреса памяти CALL i2c_write; CALL i2c_start; MOVLW 0xA3 MOVWF _i2c_byte ;// control байт с битом RD CALL i2c_write ; BCF INTCON,7 ; IRQ off BSF INTCON,7 ; IRQ on RETURN ;********************************************************************** EEPROM_READ_BYTE_DATA BCF INTCON,7 ; IRQ off CALL i2c_read MOVF _i2c_byte,W MOVWF EE_DATA BSF INTCON,7 ; IRQ on RETURN ;********************************************************************** EEPROM_READ_BYTE_ML BCF INTCON,7 ; IRQ off CALL i2c_start MOVLW 0xA0 MOVWF _i2c_byte ; // control байт с битом WR CALL i2c_write MOVF EE_ADR_ST,W MOVWF _i2c_byte ; старший байт адреса памяти CALL i2c_write ; MOVF EE_ADR_ML,W MOVWF _i2c_byte ; младший байт адреса памяти CALL i2c_write; CALL i2c_start; MOVLW 0xA1 MOVWF _i2c_byte ;// control байт с битом RD CALL i2c_write CALL i2c_read CALL i2c_stop MOVF _i2c_byte,W MOVWF EE_DATA BSF INTCON,7 ; IRQ on RETURN ;********************************************************************** EEPROM_READ_BYTE_ML_ADDR CALL i2c_start MOVLW 0xA0 MOVWF _i2c_byte ; // control байт с битом WR CALL i2c_write MOVF EE_ADR_ST,W MOVWF _i2c_byte ; старший байт адреса памяти CALL i2c_write ; MOVF EE_ADR_ML,W MOVWF _i2c_byte ; младший байт адреса памяти CALL i2c_write; CALL i2c_start; MOVLW 0xA1 MOVWF _i2c_byte ;// control байт с битом RD CALL i2c_write BSF INTCON,7 ; IRQ on RETURN ;********************************************************************** SAVE_BUTE_IN_RAM_DATA BCF INTCON,7 ; IRQ off MOVF EE_DATA,W MOVWF _i2c_byte ;// записываемые данные CALL i2c_write BSF INTCON,7 ; IRQ on RETURN ;*************************************************** SAVE_BUTE_IN_RAM_ADDR CALL SET_BANK ; УСТАНОВКА ЕСЛИ ОН ПОМЕНЯЛСЯ BTFSC ST_ADR_RAM,3 GOTO EEPROM_SAVE_BYTE_ST EEPROM_SAVE_BYTE_ML BCF INTCON,7 ; IRQ off ; BSF INTCON,7 ; IRQ on CALL i2c_start MOVLW 0xA0 MOVWF _i2c_byte; ; //control байт с битом WR CALL i2c_write MOVF EE_ADR_ST,W MOVWF _i2c_byte ; // старший байт адреса памяти CALL i2c_write MOVF EE_ADR_ML,W MOVWF _i2c_byte ;// младший байт адреса памяти CALL i2c_write EEPROM_SAVE_BYTE_LONG_ML MOVF EE_DATA,W MOVWF _i2c_byte ;// записываемые данные CALL i2c_write BSF INTCON,7 ; IRQ on RETURN ;********************************************************************** EEPROM_SAVE_BYTE_ST BCF INTCON,7 ; IRQ off CALL i2c_start MOVLW 0xA2 MOVWF _i2c_byte; ; //control байт с битом WR CALL i2c_write MOVF EE_ADR_ST,W MOVWF _i2c_byte ; // старший байт адреса памяти CALL i2c_write MOVF EE_ADR_ML,W MOVWF _i2c_byte ;// младший байт адреса памяти CALL i2c_write EEPROM_SAVE_BYTE_LONG MOVF EE_DATA,W MOVWF _i2c_byte ;// записываемые данные CALL i2c_write BSF INTCON,7 ; IRQ on RETURN ;*********************************************** ; ********************************************************************* ;char i2c_byte; /* рабочий регистр */ ;char tmp; /* счетчик */ i2c_start BANK1 bcf TRIS_SDA ; SDA - вывод bcf TRIS_SCL ; SCL - вывод BANK0 bsf SCL ; SCL - 1 NOP bsf SDA ; SDA - 1 NOP bcf SDA ; SDA - 0 NOP bcf SCL ; SCL - 0 RETURN ; *********** i2c_stop BANK0 bcf SDA ; SDA - 0 NOP bsf SCL ; SCL - 1 NOP bsf SDA ; SDA - 1 RETURN ; *********** i2c_write movlw 0x08 movwf _tmp BANK1 bcf TRIS_SDA ; SDA - вывод bcf TRIS_SCL ; SCL - вывод BANK0 bcf SCL ; SCL - 0 NOP send_bit bsf SDA ; SDA - 1 выводим 1 на SDA NOP btfss _i2c_byte, 7 ; бит данных - 1 ? bcf SDA ; нет - выводим 0 на SDA NOP bsf SCL ; SCL - 1 NOP rlf _i2c_byte, F ; сдвигаем влево байт данных bcf SCL ; SCL - 0 NOP decfsz _tmp, F ; конец цикла ? goto send_bit ; нет - переход bsf SDA ; осв. SDA SDA - 1 NOP bsf SCL ; SCL - 1, получаем ACK-бит и игнорируем его (!) NOP bcf SCL ; SCL - 0 RETURN ; *********** i2c_read movlw 0x08 movwf _tmp BANK1 bsf TRIS_SDA ; SDA - на ввод bcf TRIS_SCL ; SCL - вывод BANK0 bcf SCL ; SCL - на 0 NOP read_bit rlf _i2c_byte, F ; сдвигаем байт влево bsf SCL ; SCL - 1 NOP bsf _i2c_byte, 0 ; устанавливаем бит в 1 ; -NOP NOP btfss SDA ; SDA - 1? bcf _i2c_byte, 0 ; нет - устанавливаем бит в 0 bcf SCL ; SCL - 0 NOP decfsz _tmp, F ; конец цикла ? goto read_bit ; нет - переход BANK1 bcf TRIS_SDA ; SDA - вывод BANK0 RETURN ; *********** i2c_read_ask movlw 0x08 movwf _tmp BANK1 bsf TRIS_SDA ; SDA - на ввод bcf TRIS_SCL ; SCL - вывод BANK0 bcf SCL ; SCL - на 0 NOP read_bit_ask rlf _i2c_byte, F ; сдвигаем байт влево bsf SCL ; SCL - 1 NOP bsf _i2c_byte, 0 ; устанавливаем бит в 1 ; -NOP NOP btfss SDA ; SDA - 1? bcf _i2c_byte, 0 ; нет - устанавливаем бит в 0 bcf SCL ; SCL - 0 NOP decfsz _tmp, F ; конец цикла ? goto read_bit_ask ; нет - переход BANK1 bcf TRIS_SDA ; SDA - вывод BANK0 bcf SDA ; осв. SDA SDA - 0 NOP bsf SCL ; SCL - 1, получаем ACK-бит и игнорируем его (!) NOP bcf SCL ; SCL - 0 bsf SDA ; осв. SDA SDA - 1 RETURN ; *********** ask_0 bcf SDA ; осв. SDA SDA - 0 NOP bsf SCL ; SCL - 1, получаем ACK-бит и игнорируем его (!) NOP bcf SCL ; SCL - 0 bsf SDA ; осв. SDA SDA - 1 RETURN ask_1 bsf SDA ; осв. SDA SDA - 1 NOP bsf SCL ; SCL - 1, получаем ACK-бит и игнорируем его (!) NOP bcf SCL ; SCL - 0 ; bsf SDA ; осв. SDA SDA - 1 RETURN ;************************************** ; Блочное чтение KODE_37_1 ;ПОЛУЧИМ ДАННЫЕ CALL SET_BANK ; УСТАНОВКА ЕСЛИ ОН ПОМЕНЯЛСЯ BTFSC FLAG_CHANGE_BANK GOTO KODE_37_1_FULL CALL ask_0 CALL EEPROM_READ_BYTE_DATA GOTO KODE_37_1_END KODE_37_1_FULL BCF INTCON,7 ; IRQ off CALL ask_1 CALL i2c_stop BSF INTCON,7 ; IRQ on NOP NOP CALL EEPROM_READ_BYTE_ADDR CALL EEPROM_READ_BYTE_DATA KODE_37_1_END MOVF EE_DATA,W MOVWF TEMP3 INCF EE_ADR_32,F ; СДВИГ ПО АДРЕСУ БЛОКА CLRWDT KODE_37_2 ; ПРОВЕРИМ ГРАНИЦУ БЛОКА MOVLW .32 XORWF EE_ADR_32,W BTFSS STATUS,Z GOTO KODE_37_1 CLRF EE_ADR_32; НА НАЧАЛО БЛОКА INCFSZ ML_ADR_RAM,F; УВЕЛИЧИМ СЧЕТ БЛОКОВ АДРЕСА GOTO KODE_37_3 INCF ST_ADR_RAM,F BCF ST_ADR_RAM,7 KODE_37_3 DECFSZ ML_LEN_RAM,F ; УМЕНЬШИМ СЧЕТ БЛОКОВ ДЛЯ ЧТЕНИЯ GOTO KODE_37_1 MOVF ST_LEN_RAM,W BTFSC STATUS,Z GOTO KODE_37_5 DECFSZ ST_LEN_RAM,F GOTO KODE_37_1 ;ТУТ СТОП НА И2С KODE_37_5 CALL ask_1 CALL i2c_stop KODE_37_4 return ; *************************************** ; Запись блоками ;********************** KODE_37 ; WRITE BLOCK MOVF TEMP3,W ;ZAPOLNIT ADRES MOVWF ST_ADR_RAM ; СТАРШИЙ АДРЕС БЛОКА ... ... MOVF TEMP3,W ;ZAPOLNIT ADRES MOVWF ML_ADR_RAM ; МЛАДШИЙ АДРЕС БЛОКА KODE_36_2 MOVWF EE_DATA ;(DATA IN w) CALL SAVE_BUTE_IN_RAM_ADDR INCF EE_ADR_32,F ; СДВИГ ПО АДРЕСУ БЛОКА GOTO KODE_36_22 KODE_36_22 CALL LOAD_VECTOR_OUT ; ПОЛУЧИМ НОВЫЙ байт для записи BTFSS STATUS,Z GOTO KODE_36_11 CALL i2c_stop CALL delay_5ms ; RETURN KODE_36_11 MOVF TEMP3,W MOVWF EE_DATA ;(DATA IN w) CALL SAVE_BUTE_IN_RAM_DATA INCF EE_ADR_32,F ; СДВИГ ПО АДРЕСУ БЛОКА GOTO KODE_36_22 |
ПО распространяется под лицензией Freeware. Вы можете скачать с сайта схемы, инструкции, прошивки бесплатно.
Обсудить на форуме
PIC16F628 ASM
;********************************************************************** INIT_LCD ;******************************** init LCD ******** MOVLW B'00110000' ; в регистр W $30 CALL WR_COMMAND_LCD ; MOVLW .32 ; 5mS CALL Big_delay5 MOVLW B'00110000' ; в регистр W $30 CALL WR_COMMAND_LCD MOVLW .175 ; 100mkS CALL delay MOVLW B'00110000' ; в регистр W $30 CALL WR_COMMAND_LCD ; думаем что жки сбросился и находится в 8 битном режиме CALL Big_delay5 MOVLW B'00111000' ; в регистр W $38 2 СТРОКИ 5*8 ТОЧЕК 8БИТ CALL WR_COMMAND_LCD CALL Big_delay5 MOVLW B'00001110' ; в регистр W $0E LCD - ON , CURSOR - ON "_" CALL WR_COMMAND_LCD CALL Big_delay5 MOVLW B'00000110' ; в регистр W $06 CURSOR AUTO INC CALL WR_COMMAND_LCD CALL Big_delay5 MOVLW B'00000011' ; в регистр W $03 CURSOR START POSITION goto WR_COMMAND_LCD ;***************************** END init LCD ******** ;RETURN ;********************************************************************** ;********************************************************************** LCD_READ_BUTE ; ВВОД ОДНОГО СИМВОЛА, КУРСОР +1, КОД В W CALL Big_delay5 BCF LCD_E BANK1 MOVLW B'11111111' ; PORTD ; MOVWF TRISD^80 BANK0 BSF LCD_RW BSF LCD_RS ; DATA BSF LCD_E NOP NOP MOVF LCD_DAT,W MOVWF TEMP BCF LCD_E BCF LCD_RW BANK1 MOVLW B'00000000' ; PORTD ; MOVWF TRISD^80 BANK0 MOVF TEMP,W RETURN ; ********************************************************************* WR_COMMAND_LCD ; DATA IN W BCF LCD_RW BCF LCD_E BCF LCD_RS ; COMMAND MOVWF LCD_DAT BSF LCD_E NOP NOP BCF LCD_E BSF LCD_RS ; DATA RETURN ;********************************************************************** ;********************************************************************** LCD_BUTE ; ВЫВОД ОДНОГО СИМВОЛА, КУРСОР +1, КОД В W MOVWF TEMP ; CALL BUSY CALL Big_delay5 MOVF TEMP,W WR_DATA_LCD ; DATA IN W MOVWF TEMP BTFSS FLAG_MOVE_CURSOR GOTO G3ST CALL LCD_INC_CURSOR CALL Big_delay5 G3ST ; ОБРАБОТКА ФЛАГОВ РЕДАКТИРОВАНИЯ ;BCF FLAG_EDIT_NUMBER ;BCF FLAG_EDIT_DATAIN ; ЕСЛИ УСТАНОВЛЕН НУЖНЫЙ ФЛАГ И ; КУРСОР НА ЕТОМ МЕСТЕ ТО СИМВОЛ НЕ ВЫВОДИМ BTFSS FLAG_EDIT_NUMBER GOTO G3ST_PRN1 ; NE USTANOWLEN ;ПРОВЕРКА КУРСОРА MOVLW 0x46 XORWF CURSOR,W BTFSS STATUS,Z GOTO G3ST_PRN2 GOTO G3ST_END G3ST_PRN1 BTFSS FLAG_EDIT_DATAIN GOTO G3ST_PRN2 ; NE USTANOWLEN ;ПРОВЕРКА КУРСОРА MOVLW 0x42 XORWF CURSOR,W BTFSC STATUS,Z GOTO G3ST_END MOVLW 0x45 XORWF CURSOR,W BTFSC STATUS,Z GOTO G3ST_END MOVLW 0x48 XORWF CURSOR,W BTFSC STATUS,Z GOTO G3ST_END G3ST_PRN2 BCF LCD_RW BCF LCD_E BSF LCD_RS ; DATA MOVF TEMP,W MOVWF LCD_DAT BSF LCD_E NOP NOP BCF LCD_E G3ST_END GOTO SET_CURSOR ;********************************************************************** LCD_CLR ; ОЧИСТКА ЭКРА КУРСОР НА 1 ПОЗИЦИЮ ; CALL BUSY ; РАБОТА С РЕГИСТРОМ УПРАВЛЕНИЯ CALL Big_delay5 CLRF CURSOR MOVLW B'00000001' ; в регистр W $01 CURSOR START POSITION GOTO WR_COMMAND_LCD ; ********************************************************************* SET_CURSOR ; УСТОНОВИТЬ КУРСОР В МЕСTO N CURSOR ; CALL BUSY ; РАБОТА С РЕГИСТРОМ УПРАВЛЕНИЯ CALL Big_delay5 MOVLW B'10000000' ; установить ТИП КОМАНДЫ IORWF CURSOR,0 GOTO WR_COMMAND_LCD ;********************************************************************** LCD_DEC_CURSOR DECF CURSOR,1 MOVLW 0xFF XORWF CURSOR,0 BTFSC STATUS,Z GOTO G4ST MOVLW 0x3F XORWF CURSOR,0 BTFSC STATUS,Z GOTO G5ST GOTO SET_CURSOR G4ST MOVLW 0x4F MOVWF CURSOR GOTO SET_CURSOR G5ST MOVLW 0x0F MOVWF CURSOR GOTO SET_CURSOR ;********************************************************************** LCD_INC_CURSOR INCF CURSOR,1 MOVLW D'16' XORWF CURSOR,0 BTFSC STATUS,Z GOTO G2ST MOVLW D'80' XORWF CURSOR,0 BTFSC STATUS,Z GOTO G1ST GOTO SET_CURSOR G2ST MOVLW D'64' MOVWF CURSOR GOTO SET_CURSOR G1ST MOVLW D'0' MOVWF CURSOR GOTO SET_CURSOR ;********************************************************************** TABLE ; ДЛЯ ВЫВОДА ЧИСЕЛ В HEX ФОРМАТЕ ADDWF PCL,1 RETLW 30H RETLW 31H RETLW 32H RETLW 33H RETLW 34H RETLW 35H RETLW 36H RETLW 37H RETLW 38H RETLW 39H RETLW 41H RETLW 42H RETLW 43H RETLW 44H RETLW 45H RETLW 46H ;************************************ LCD_NUM ; ВЫВОД ЧИСЛА 0-F КОД В W MOVWF TEMP1 movlw HIGH TABLE ;load high 8-bit;address of Table movwf PCLATH ;into PCLATH MOVF TEMP1,0 LCD_NUM1 ANDLW B'00001111' CALL TABLE BSF FLAG_MOVE_CURSOR GOTO LCD_BUTE ;************************************ LCD_NUM_D ; ВЫВОД ЧИСЛА 0-FF КОД В W MOVWF TEMP1 movlw HIGH TABLE ;load high 8-bit;address of Table movwf PCLATH ;into PCLATH SWAPF TEMP1,0 CALL LCD_NUM1 MOVF TEMP1,0 GOTO LCD_NUM1 ; ********************************************************************* |
ПО распространяется под лицензией Freeware. Вы можете скачать с сайта схемы, инструкции, прошивки бесплатно.
Обсудить на форуме
PIC16F628 ASM
BEGIN ; УНИВЕРСАЛЬНЫЙ МОДУЛЬ ДИНАМИЧЕСКОЙ ИНДИКАЦИИ ;ИСПОЛЬЗУЕТСЯ 555ИД4 ДЛЯ ДЕШИФРАЦИИ РАЗРЯДА И 176ИД2 ДЛЯ ДЕШИФРАЦИИ ЦИФРЫ ; покажем индикатор полностью за 4 проходa ; ПОТУШИМ BSF PORTB,1 BSF PORTB,2 BSF PORTB,3 BSF PORTB,4 ; узнаем номер прохода MOVF CIKLE,0 ; в W номер прохода ; табличное ветвление btfsc STATUS,Z GOTO MCICLE0 movwf TEMP1 decf TEMP1,1 btfsc STATUS,Z GOTO MCICLE1 decf TEMP1,1 btfsc STATUS,Z GOTO MCICLE2 decf TEMP1,1 btfsc STATUS,Z GOTO MCICLE3 MCICLE3: BSF PORTA,0 BSF PORTA,1 ; ВЫБРАЛИ РАЗРЯД (СТАРШИЙ) BTFSS IND_3,0 BCF PORTB,3 BTFSS IND_3,1 BCF PORTB,1 BTFSS IND_3,2 BCF PORTB,4 BTFSS IND_3,3 BCF PORTB,2 ; зажжем этот разряд goto ENDIND MCICLE2: BCF PORTA,0 BCF PORTA,1 ; ВЫБРАЛИ РАЗРЯД BTFSS IND_3,0 BCF PORTB,3 BTFSS IND_3,1 BCF PORTB,1 BTFSS IND_3,2 BCF PORTB,4 BTFSS IND_3,3 BCF PORTB,2 ; зажжем этот разряд goto ENDIND MCICLE1: BSF PORTA,0 BCF PORTA,1 ; ВЫБРАЛИ РАЗРЯД BTFSS IND_2,0 BCF PORTB,3 BTFSS IND_2,1 BCF PORTB,1 BTFSS IND_2,2 BCF PORTB,4 BTFSS IND_2,3 BCF PORTB,2 ; зажжем этот разряд goto ENDIND MCICLE0: BCF PORTA,0 BSF PORTA,1 ; ВЫБРАЛИ РАЗРЯД (ML) BTFSS IND_1,0 BCF PORTB,3 BTFSS IND_1,1 BCF PORTB,1 BTFSS IND_1,2 BCF PORTB,4 BTFSS IND_1,3 BCF PORTB,2 ; зажжем этот разряд goto ENDIND ENDIND INCF CIKLE,1 ; Счетчик проходов увеличим MOVLW .4 XORWF CIKLE,0 BTFSC STATUS,Z CLRF CIKLE MOVLW .3 ; ЗАДЕРЖКА ДЛЯ НЕ СИЛЬНО ЧАСТОЙ ИНДИКАЦИИ MOVWF TEMP1 CALL WAIT_1 ; На индикаторе состояние рама IND_1 - IND_3 STATRT_CIKLE ; УНИВЕРСАЛЬНЫЙ МОДУЛЬ ОПРОСА КЛАВЫ ПРИ ДИНАМИЧЕСКОЙ ИНДИКАЦИИ С ПОДАВЛЕНИЕ ДРЕБЕЗГА И АВТОПОВТОРОМ ; DECFSZ KEY_CICLE ; GOTO DALEE_1 START_IN_KEY ; MOVLW .21 ; MOVWF KEY_CICLE BTFSC PORTA,5 GOTO NO_KEY movf KEY_RETRY,1 BTFSS STATUS,Z DECF KEY_RETRY,1 MOVF CIKLE,0 MOVWF KEY_TMP GOTO CODE_KEY NO_KEY CLRF KEY_TMP DECF KEY_TMP,1 MOVLW .255 XORWF KEY_OLD,0 BTFSC STATUS,Z GOTO CODE_KEY MOVF CIKLE,0 XORWF KEY_OLD,0 BTFSC STATUS,Z GOTO KEY_DREBEZG GOTO DALEE CODE_KEY ; ЗДЕСЬ В РЕГИСТРЕ KEY_TMP НОМЕР КЛАВИШИ НАЖАТОЙ ИЛИ 255 ЕСЛИ НЕ НАЖАТА MOVF KEY_OLD,0 XORWF KEY_TMP,0 BTFSS STATUS,Z GOTO KEY_DREBEZG GOTO KEY_OK KEY_DREBEZG MOVF KEY_TMP,0 MOVWF KEY_OLD GOTO DALEE KEY_OK MOVF KEY_TMP,0 MOVWF KEY_OLD MOVF KEY_OLD,0 XORWF KEY,0 BTFSS STATUS,Z GOTO KEY_NEW GOTO DALEE ;СОСТОЯНИЕ КЛАВЫ НЕ ИЗМЕНИЛОСЬ KEY_NEW MOVF KEY_OLD,0 MOVWF KEY ; ТЕКУЩЕЕ НАЖАТИЕ КОД КЛАВИШИ INCFSZ KEY,0 GOTO KEY_PRESS_NEW GOTO DALEE ;ОТПУСТИЛИ КНОПКУ KEY_PRESS_NEW BSF FLAG_PRESS_KEY,0 CLRF KEY_RETRY DECF KEY_RETRY,1 DALEE movf KEY_RETRY,1 BTFSS STATUS,Z GOTO DALEE_1 BSF FLAG_PRESS_KEY,0 MOVLW .64 MOVWF KEY_RETRY DALEE_1 ;**********РАЗОБРАЛИСЬ С КЛАВОЙ И ИНДИКАЦИЕЙ ПОДАВЛЕНИЕ ДРЕБЕЗГА И АВТОПОВТОР ;ЕСЛИ ФЛАГ FLAG_PRESS_KEY УСТАНОВЛЕН НАЖАТО НОВАЯ КНОПКА - ОБРАБОТАТЬ И ФЛАГ СБРОСИТЬ ; КОД КОПКИ В KEY |
ПО распространяется под лицензией Freeware. Вы можете скачать с сайта схемы, инструкции, прошивки бесплатно.
Обсудить на форуме
PIC16F628 ASM
Декодирование кода подобного RC5 в прерывании ORG 0x004 ; Сюда попадем если прерывание movwf w_temp ; сохраним содержание регистра W movf STATUS,w ; Переместите регистр статуса в регистр W movwf status_temp ; сохраним содержание регистра СТАТУСА ; тут программа обработки прерываний ;прерывания по таймеру BCF INTCON,2 ; RESET FLAG TIMER ;*************20 mgz MOVLW (.256-.7) ;.16) ; таймер считает +1 от загруженного значения при переполнении - INT MOVWF TMR0 ; ЗДЕСЬ МЫ 25.6MKS*2 ; ЗДЕСЬ МЫ КАЖДЫЕ 53 МИКРОСЕКУНДЫ ; ПРЕРЫВАНИЕ ДОЛЖНОБЫТЬ КОРОЧЕ 50 МИКРОСЕКУНД ;ИСПОЛЬЗУЕМАЯ ГЛУБИНА СТЕКА = INCFSZ _TIMER2,1 ; УВЕЛИЧИМ ДО 255 GOTO _INCNEXT DECF _TIMER2,1 ; накопительный счетчик при возникновениии фронта абнуляем _INCNEXT ;---------------- MOVF PORTA,0 ANDLW b'00100000'; и чо у нас на входе? MOVWF FLAG_IN1; временная переменная состояние входа XORWF FLAG_IN,0 BTFSC STATUS,Z GOTO ENDIRQ MOVF FLAG_IN1,0 MOVWF FLAG_IN ; СОСТОЯНИЕ ВХОДА ИЗМЕНИЛОСЬ CLRF FLAG_TIME MOVF _TIMER2,0 MOVWF TMP_TIME CLRF _TIMER2 ; обнулим счетчик прерываний MOVLW .10;.13 ; BAD SUBWF TMP_TIME,1 BTFSS STATUS,C GOTO _BAD MOVLW .16;.12 ; 25*53 =1325 = 0,89 MC *1,5 SUBWF TMP_TIME,1 BTFSS STATUS,C GOTO OK35 ; 1 PERIOD MOVLW .22;.17 ; (25+17)*53 = 2226 = 1.778+0.89/2 SUBWF TMP_TIME,1 BTFSS STATUS,C GOTO OK69; 2 PERIODA MOVLW .45 ; BAD SUBWF TMP_TIME,1 BTFSS STATUS,C GOTO _BAD GOTO MAX125 ; УСТАНОВИМ БИТЫ СООТВЕТСТВУЮЩИЕ ВРЕМЕНИ МЕЖДУ ФРОНТАМИ OK35 BSF FLAG_TIME,1 GOTO _DECODE OK69 BSF FLAG_TIME,2 GOTO _DECODE MAX125 BSF FLAG_TIME,4 GOTO _DECODE _BAD CLRF COUNT_BIT GOTO ENDIRQ ; 50 КОМАНД ИЗ 256 ИЛИ 10 МИКРОСЕКУНД ; СТЕКНЕ ИСПОЛЬЗОВАЛИ ; ТУТ НАДО СОБСТВЕННО ДЕКОДЕР ;ФРОНТ ПРОИЗОШЕЛ ;FLAG_IN БИТ5 - ТЕКУЩИЙ ЛОГИЧЕСКИЙ УРОВЕНЬ ПОСЛЕ ФРОНТА ; ;ВРЕМЯ УЖЕ ПОСЧИТАНО И ВЫБРАН ДИАПАЗОН ;FLAG_TIME, ;БИТ0 - ОЧЕНЬ МАЛО ;БИТ1 -1 ПОЛУПЕРИОД ;БИТ2 - 2 ПОЛУПЕРИОДА ;БИТ 3 -3 ПОЛУПЕРИОДА ;БИТ 4 -ОЧЕНЬ МНОГО ; ;ЕСЛИ ПРОДЦЕДУРА НЕ НАЧАТА ТО FLAG_START РАВЕН 0 _DECODE BTFSS FLAG_TIME,2 ; ВРЕМЯ = 2 ТАКТА GOTO _NEXT1 RLF ML_BYTE ;СДВИГ ВЛЕВО RLF ST_BYTE RLF ST1_BYTE BCF ML_BYTE,0 ;КОПИРОВАНИЕ БИТА С ИНВЕРСИЕЙ BTFSS ML_BYTE,1 BSF ML_BYTE,0 INCF COUNT_BIT,1 ; УВЕЛИЧИМ СЧЕТ БИТ GOTO _CRC _NEXT1 BTFSS FLAG_TIME,4 ; START BIT НАЧАЛО GOTO _NEXT2 BTFSC FLAG_IN,5 GOTO _END_DECODE ; ОШИБКА СТАРТ БИТА CLRF COUNT_BIT INCF COUNT_BIT,1 ; УВЕЛИЧИМ СЧЕТ БИТ CLRF ML_BYTE ; ОЧИСТИМ ВСЕ CLRF ST_BYTE BSF ML_BYTE,0 ; ЭТО ПЕВЫЙ СТАРТ БИТ GOTO _CRC _NEXT2 BTFSC FLAG_TIME_OLD,4 GOTO _CRC BTFSS FLAG_TIME_OLD,1 GOTO _CRC RLF ML_BYTE ;СДВИГ ВЛЕВО RLF ST_BYTE RLF ST1_BYTE BCF ML_BYTE,0 ;КОПИРОВАНИЕ БИТА BTFSC ML_BYTE,1 BSF ML_BYTE,0 INCF COUNT_BIT,1 ; УВЕЛИЧИМ СЧЕТ БИТ CLRF FLAG_TIME GOTO _CRC _CRC BSF FLAG_START,0;УСТАНОВЛЕН ФЛАГ ПРИЕМА MOVLW .14 SUBWF COUNT_BIT,0 BTFSS STATUS,Z GOTO _END_DECODE ; ТУТ ПРОВЕРИТЬ СРС CLRF COUNT_BIT CLRF CRC_DATA ; BTFSC ST1_BYTE,2 ; INCF CRC_DATA,1 ; ; BTFSC ST1_BYTE,1 ; INCF CRC_DATA,1 ; ; BTFSC ST1_BYTE,0 ; INCF CRC_DATA,1 ; ; BTFSC ST_BYTE,7 ; INCF CRC_DATA,1 ; ; BTFSC ST_BYTE,6 ; INCF CRC_DATA,1 ; BTFSC ST_BYTE,5 INCF CRC_DATA,1 BTFSC ST_BYTE,4 INCF CRC_DATA,1 BTFSC ST_BYTE,3 INCF CRC_DATA,1 BTFSC ST_BYTE,2 INCF CRC_DATA,1 BTFSC ST_BYTE,1 INCF CRC_DATA,1 BTFSC ST_BYTE,0 INCF CRC_DATA,1 BTFSC ML_BYTE,7 INCF CRC_DATA,1 BTFSC ML_BYTE,6 INCF CRC_DATA,1 BTFSC ML_BYTE,5 INCF CRC_DATA,1 BTFSC ML_BYTE,4 INCF CRC_DATA,1 BTFSC ML_BYTE,3 INCF CRC_DATA,1 BTFSC ML_BYTE,2 INCF CRC_DATA,1 BTFSC ML_BYTE,1 INCF CRC_DATA,1 ; НАКОПЛИ БИТЫ CLRF FLAG_ERROR_CRC ; СБРОСИЛИ ФЛАГ ОШИБКИ MOVLW .1 ; ANDWF CRC_DATA,1 ;ВЫДЕЛИЛИ МЛ БИТ ANDWF ML_BYTE,0 ; И ИЗ ПОСЫЛКИ XORWF CRC_DATA,0 ; СРАВНИЛИ BTFSS STATUS,Z INCF FLAG_ERROR_CRC,1 ; УСТАНОВИМ ФЛАГ ЕСЛИ СРС НЕ СОВПАЛА CLRF FLAG_START ;СБРОШЕН ФЛАГ ПРИЕМА BSF FLAG_DATA,0 ;УСТАНОВЛЕН ФЛАГ НАЛИЧИЯ ДАННЫХ ; RRF ST1_BYTE ; RRF ST_BYTE ; RRF ML_BYTE _END_DECODE MOVF FLAG_TIME,0 MOVWF FLAG_TIME_OLD ;********* ENDIRQ movf status_temp,w ; ВОССТАНОВИМ ВСЕ movwf STATUS ; register contents swapf w_temp,f swapf w_temp,w ; restore pre-isr W register contents retfie ; Bозврат из обработчика прерываний ; ВСЕГО 110 КОМАНД ИЛИ 22 МИКРОСЕКУНДЫ СТЕК НЕ ИСПОЛЬЗОВАЛИ ;FLAG_ERROR_CRC = 1 ;УСТАНОВЛЕН ФЛАГ ЕСЛИ СРС НЕ СОВПАЛА ;FLAG_START =1 ;ФЛАГ ПРИЕМА - ИДЕТ ПРИЕМ ДАННЫХ ;FLAG_DATA =1 ;ФЛАГ НАЛИЧИЯ ДАННЫХ ;********************************************************************** |
ПО распространяется под лицензией Freeware. Вы можете скачать с сайта схемы, инструкции, прошивки бесплатно.
Обсудить на форуме
Схема бытового термометра с диапазоном от -55 до +99 градусов с точностью 1
градус , и точностью 0,1 градус в интервале от -10 до +10
При нажатии на кнопку схема автоматически включается и показывает текущую
температуру в течении 5 секунд а затем отключается. Как показала практика элементов
питания хватает на 2 года и более . Для подключения датчика был использован плоский
телефонный четырех-жильный провод длинной три метра. Сам датчик и место припайки к
кабелю защищено от внешней среды термоусадочной трубкой. Термометр смонтирован в миниатюрной коробочке размером 6x3x1 см
и закреплен в удобном месте. Для стабильной работы в холодных помещениях необходимо исключить диод в цепи питания.
Схема
ПО распространяется под лицензией Freeware. Вы можете скачать с сайта схемы, инструкции, прошивки бесплатно.
Прошивка
Исходный код
Обсудить на форуме
Блок питания имеет два независимых канала со стабилизацией тока и напряжения, и третий независимый канал с фиксированными напряжениями
Устройство имеет
- два источника с регулируемым выходом 0-30вольт и регулируемым ограничением по току 0,02 - 3 ампера.
- источник с фиксированными напряжениями 5 и 12 вольт с ограничением по току 1,5 ампера.
- регулируемые источники имеют цифровую индикацию напряжения, установленного тока ограничения , текущего потребляемого тока нагрузкой, индикатор перехода в режим стабилизации тока.
- для каждого регулируемого источника есть внешний вход отключения, и таймер программатор
- таймер программатор в обычном режиме показывает минуты и секунды включенного состояния,с возможностью сброса.
- в режиме таймер можно установить время до 23час 59 мин и запустить обратный отчсчет, по окончанию которого источник отключится. Можно выйти из этого режима вручную до отключения или изменить индикацию обратного отсчета - ЧЧ:ММ или ММ:СС.
За основу схемы регулируемых источников была взята хорошо зарекомендовашая себя схема лабораторного блока питания, опубликованная здесь :http://www.electronics-lab.com/projects/power/003/index.html
Индикация и управление. Для повышения точности использован отдельный источник опорного напряжения для АЦП и делается 4 замера с нахождением среднего значения. Предлы измерения напряжения 0-51 вольт с шагом 0,05 вольт, тока 0-5,1 ампера с шагом 0,01 ампер.
Резистор Р8 - установка тока , свыше которого переходит в режим стабилизации
тока , Р9 - установка напряжения
Правильно собранный из исправных элементов блок питания в настройке не нуждается.
переменным резистором Р2 выставить опорное напряжение АЦП в пределах 4,5- 4,6 вольт и провести резистором Р5, Р6, Р7 калибровку показаний индикаторов по образцовым приборам.
Устройство размещается в подходящем по размерам корпусе , рекомендуется использовать принудительную вентиляцию при долговременной работе на больших токах, так как выделяемая тепловая мощность может достигать 100Вт.
Схема
Разводка печатной платы ( без схемы внешнего отключения)
ПО распространяется под лицензией Freeware. Вы можете скачать с сайта схемы, инструкции, прошивки бесплатно.
Разводка
Прошивка
Исходный код
Обсудить на форуме