Все, что нельзя запрограммировать на ассемблере, приходится паять.
Этот сайт посвящен моим проектам на 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. Вы можете скачать с сайта схемы, инструкции, прошивки бесплатно.
Разводка
Прошивка
Исходный код
Обсудить на форуме
USB PICµBASIC Mid Hardware
USB PICµBASIC LOGIC CONTROLLER
DDS генератор сигналов "OSKAR-DDS"
Термостол для оплавления паяльной пасты
Осциллограф Карманный "OSKAR" V3.1
Электроника и механика 3-х координатного станка ЧПУ (Hobby CNC)
Простой счетчик
Измеритель ESR и емкости конденсаторов
Самодельный установщик SMD компонентов - раскладочный станок "SMD PLACER V2"
Прибор для измерения частоты, емкости, индуктивности, сопротивления
Выключатель /диммер светодиодных лент с ДУ.
Светомузыка «СЕМИЦВЕТИК» + автомат световых эффектов.
Универсальный прибор для автомобиля. Часы, термометр, вольтметр, тахометр.