ХНСК

[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 2 из 2
  • «
  • 1
  • 2
Модератор форума: Goblin, Master_V, Predator  
Общение » Технический раздел » Стайлинг/Электрооборудование » Измерительные приборы (Разновидность и использование измерительных приборов в скуте)
Измерительные приборы
PredatorДата: Пн, 31.08.2009, 13:24 | Сообщение # 21
Полковник
 Модератор

Сообщений: 1347
Репутация: 51
Статус: Оффлайн
Скутер: SpeedGear 50QT ; & ; Zip R3
Цифровой одометр

Схема

Прототипом послужила найденная в интернете схема .

Первым решил оснастить свой Москвич цифровым одометром Михаил Белоусов (ник BMA в клубе WWW.CLUB.AZLK.RU, на его клубной страничке есть и другие схемы). Будучи человеком упорным, он получил из прототипа такой работоспособный результат .

Я решил сделать несколько по-другому. Вот так:

Для отображения информации использовано три 4-разрядных 7-сегментных светодиодных индикатора. В каждом разряде все сегменты имеют общий анод. Кроме того одноименные катоды всех 4х разрядов соединены внутри корпуса индикатора. Т.е. это индикаторы, рассчитанные на использование в режиме динамической индикации.

Управление питанием анодов осуществляется сборкой транзисторных ключей DA8. Питание +5В осуществляется от стабилизатора DA6, который установлен на радиаторе и вынесен на заднюю стенку корпуса комбинации приборов.

Из 12 разрядов используются левые 6 для отображения полного пробега в формате 999999 км, правые 4 для суточного 999,9 км.

Кнопка S2 служит для сброса суточного пробега.

Источником сигнала служит ИЖевский датчик скорости ДСА001-05. К нему же подключен спидометр (там же подробности о датчике).

Схема должна быть подключена к +12, например, отдельным проводом с предохранителем к аккумуляторной батарее или проводу прикуривателя, а также к контакту 15/1 замка зажигания. Это нужно для того, чтобы микропроцессор мог записать пробег в память после выключения зажигания.

Файл прошивки для PIC16F84A

Текст между строчками ------- нужно скопировать в текстовый редактор и сохранить в файле с расширенем HEX, который можно заливать в микропроцессор с помощью программатора.
-----------------------------------------------------------------
:020000040000FA
:10000000850186018B0181016400AF019801981 57B
:10001000990119159A019A149B011B148316FF303C
:10002000850051308600433081008312B10186166D
:100030002E21E620AB01AC01AD01AE01AC204F207A
: 100040002D082E06031DAC20882081010B11061EF1
:1000500007298B187320061F49284C280B1D2728B9
:100060001F280A3C0F398207773424341F343D346B
:10007 0006C3479347B3434347F347D348034403490
:10008000203410340834043481010B110B1D462830
:100090000800AB0D2B142E28AB0CAB132E282D080B
:1000A00003 39AE00820757285A2861286728AB1BFE
:1000B0002D140800AD01AB1F0800AD14A030AC003A
:1000C0000800AB1F5A28AC0B08002D1408002B1891
:1000D0000800AD0 13C30A5000A30A600A700A8002A
:1000E000A900AA0008000930B3001B307E200630AA
:1000F000B30024307E20AC208B10080084003C30FC
:10010000840A800B0800 80000A30B30B80280800A6
:100110000430B4002F0A0339AF00183E84000008F1
:100120009A200408FC3EB40B8E288614000086102A
:1001300000000800B0000830B 200B00D031CA12878
:10014000A3288611A52886150000061500000611B3
:100150000000B20B9D280800240831208C002308E1
:1001600031208D00220831208E0021 0831208F009F
:100170002008312090001F083120910092012D08A5
:1001800003398207C628C628D528E02893012A0803
:10019000312094002908312095002808312 096004C
:1001A00096172708312097000800533093007B30C2
:1001B00094005E3095007730960053309700080029
:1001C0009301940195019601970108003D308C00 40
:1001D0007E308D0052308E005E308F006D3090008A
:1001E0003D3091004F3092007E30930000309400FB
:1001F0000030950000309600003097003114FF3039
: 10020000B30088204420B30B0129311008003F219E
:1002100031143D308C007E308D0076308E0067309A
:100220008F00533090006B3091000030920000300E
:10023 00093000030940000309500003096000030AC
:100240009700FF30B30088204420B30B2329061AFF
:100250002B2986122129AC20861629280F30B300BD
:100260001C 3084000408E43E8312890083160814BD
:10027000831208088000840AB30B322908000F306B
:10028000B3001C3084000408E43E890000088800A4
:100290008316081 555308900AA30890088148818FB
:0C02A0004F298312840AB30B4329080085
:02400E00F13F80
:104200003C000A000A000100010001000600050050
:0E4210000A0 03C000A000A000A000A000A0028
:00000001FF
-----------------------------------------------------------------

Исходник программы

Quote

;****************************
;* ОДОМЕТР *
;****************************
;=====================================================================================

list p=16F84A
#include
__config _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC

; Константы
bitRST equ 6 ; кнопка сброса суточного пробега
bitPWR equ 5 ; вывод управления питанием
bitIGN equ 4 ; сенсор падения напряжения
bitSDI equ 3 ; вывод данных индикации
bitCLK equ 2 ; синхроимпульмы индикации
bitLAT equ 1 ; команда индикации

; Переменные

; буфер индикации хранит выводимые 7-сегментные коды
buf00 equ 0x0C ; начало буфера
buf01 equ 0x0C ; метки для всех разрядов
buf02 equ 0x0D
buf03 equ 0x0E
buf04 equ 0x0F
buf05 equ 0x10
buf06 equ 0x11
buf07 equ 0x12
buf08 equ 0x13
buf09 equ 0x14
buf10 equ 0x15
buf11 equ 0x16
buf12 equ 0x17
AMsk3 equ 0x18
AMsk2 equ 0x19
AMsk1 equ 0x1A
AMsk0 equ 0x1B

; основной счетчик полного пробега
tot_prev equ 0x1C
tot_k010 equ 0x1D
tot_k100 equ 0x1E
tot_001k equ 0x1F
tot_010k equ 0x20
tot_100k equ 0x21
tot_001t equ 0x22
tot_010t equ 0x23
tot_100t equ 0x24

; дополнительный счетчик суточного пробега
aux_prev equ 0x25
aux_k010 equ 0x26
aux_k100 equ 0x27
aux_001k equ 0x28
aux_010k equ 0x29
aux_100k equ 0x2A

rstUD equ 0x2B
rstCN equ 0x2C
rstMD equ 0x2D
rstLM equ 0x2E
kAnod equ 0x2F
btout equ 0x30 ; выводимый байт
flpwr equ 0x31 ; флажок 0-напряжения питания, 1-сброс суточного пробега
cntr1 equ 0x32 ; рабочий счетчик
cntr2 equ 0x33
cntr3 equ 0x34

; программа
org 0x000

clrf PORTA
clrf PORTB
clrf INTCON ; прерывания запрещены, будем проверять флажки
clrf TMR0
clrWDT
clrf kAnod
clrf AMsk3
bsf AMsk3,3
clrf AMsk2
bsf AMsk2,2
clrf AMsk1
bsf AMsk1,1
clrf AMsk0
bsf AMsk0,0

bsf STATUS,RP0
movlw b'00000000' ; все биты RA на ввод
movwf PORTA
movlw b'01010001' ; для порта B биты RB0,RB4,RB6 на ввод, остальные на вывод
movwf PORTB
; включаем подтягивающие резисторы, TMR0 на внутренний такт с предделителем 16 (4 ms на цифру)
movlw b'01000011'
movwf OPTION_REG
bcf STATUS,RP0

; включили питание через транзистор
clrf flpwr
bsf PORTB,bitPWR
call READ_EEPROM
call StartMsg

clrf rstUD
clrf rstCN
clrf rstMD
clrf rstLM

call FILL_VB

MainLoop
call SetMode
movfw rstMD
xorwf rstLM,w
btfss STATUS,Z
call FILL_VB

call SendStr

clrf TMR0
bcf INTCON,T0IF
ExpoLoop
btfss PORTB,bitIGN ; обходим отключение, если 1
goto PowerDown
PowerRise
btfsc INTCON,INTF ; если 0, от обход
call DO_INCR ; а если 1, то идем увеличивать счетчики
btfss PORTB,bitRST
goto RST_DOWN ; 0 - нажата кнопка сброса суточного пробега
goto RST_UP ; 1 - кнопка сброса отпущена
RST_RET btfss INTCON,T0IF ; обходим повтор, если 1
goto ExpoLoop ; повторяем маленький цикл, если 0

goto MainLoop

SEG7
sublw d'010'
andlw 0x0F ;на всякий случай
addwf PCL,f
; pfcagbed
retlw b'01110111' ; 0
retlw b'00100100' ; 1
retlw b'00011111' ; 2
retlw b'00111101' ; 3
retlw b'01101100' ; 4
retlw b'01111001' ; 5
retlw b'01111011' ; 6
retlw b'00110100' ; 7
retlw b'01111111' ; 8
retlw b'01111101' ; 9
retlw b'10000000' ; 10
retlw b'01000000' ; 11
retlw b'00100000' ; 12
retlw b'00010000' ; 13
retlw b'00001000' ; 14
retlw b'00000100' ; 15

LEDDelay
clrf TMR0
bcf INTCON,T0IF
DownLoop
btfss INTCON,T0IF ; обходим повтор, если 1
goto DownLoop ; повторяем маленький цикл, если 0
return

RST_DOWN ; при нажатой кнопке заполняем rstUD единицами справа-налево
rlf rstUD,f
bsf rstUD,0
goto RST_RET

RST_UP ; при отжатой кнопке заполняем rstUD нулями слева-направо
rrf rstUD,f
bcf rstUD,7
goto RST_RET

SetMode
movfw rstMD
andlw h'03'
movwf rstLM
addwf PCL,f
goto CurMode_0
goto CurMode_1
goto CurMode_2
goto CurMode_3
CurMode_0 ; все три бита нули, значит это режим 0
btfsc rstUD,7 ; если в страшем бите 0, то идем на выход
bsf rstMD,0 ; иначе устанавливаем новый режим 1
return
CurMode_1
clrf rstMD
btfss rstUD,7 ; если в старшем бите 1, то обходим выход
return ; если же 0, то новый режим 0 и выходим
bsf rstMD,1 ; устанавливаем новый режим 2
movlw d'160' ; начинаем отсчет 160 циклов удержания кнопки (~1сек)
movwf rstCN
return
CurMode_2
btfss rstUD,7 ; если в старшем бите 1, то обходим следующий оператор
goto CurMode_1 ; если же 0, то идем устанавливать новый режим 0
decfsz rstCN,f ; если цикл удержания кнопки не кончился,
return ; то выходим
bsf rstMD,0 ; устанавливаем новый режим 3 (ожидания отпускания кнопки)
return
CurMode_3
btfsc rstUD,0
return ; если кнопка прижата, то отстаемся в том же режиме
clrf rstMD ; отпустили кнопку - переходим в нормальный режим 0
; сброс суточного счетчика
movlw d'60'
movwf aux_prev
movlw d'10'
movwf aux_k010
movwf aux_k100
movwf aux_001k
movwf aux_010k
movwf aux_100k
return

DO_INCR ; штатно отладка
movlw 9 ; 9 7
movwf cntr2
movlw tot_prev-1 ; tot_prev-1 tot_k100-1
call CH_CNTR
movlw 6 ; 6 4
movwf cntr2
movlw aux_prev-1 ; aux_prev-1 aux_k100-1
call CH_CNTR
call FILL_VB
bcf INTCON,INTF ; сбросили флаг внешнего прерывания
return

CH_CNTR
movwf FSR
movlw d'60' ; для предварительного счетчика десятков метров штатно 60 отладка 10
CH_LOOP
incf FSR,f
decfsz INDF,f
return
movwf INDF
movlw d'10' ; для всех остальных разрядов счетчика
decfsz cntr2,f
goto CH_LOOP
return

SendStr
movlw 4
movwf cntr3
incf kAnod,w
andlw 3
movwf kAnod
addlw AMsk3
BUF_LOOP
movwf FSR
movfw INDF
call SendByte
movfw FSR
addlw -4
decfsz cntr3,f
goto BUF_LOOP

Expose
bsf PORTB,bitLAT
nop
bcf PORTB,bitLAT
nop
return

; вывод байта на индикацию
SendByte ; значение байта приходит в регистре W
movwf btout ; переносим его в рабочую переменную
movlw 8
movwf cntr1 ; запускаем цикл по 8 битам
ByteLoop
rlf btout,f ; код сегментов для индикатора проворачиваем через флаг переноса
btfss STATUS,C ; и для каждого бита в цикле выполняем следующее:
goto SendB0
goto SendB1
SendB0 bcf PORTB,bitSDI ; 1) выставляем 0/1 в бите 1 порта B
goto BitReady ; по значению флага переноса
SendB1 bsf PORTB,bitSDI
nop
BitReady
bsf PORTB,bitCLK ; 2) пока в бите 1 порта В выставлен бит,
nop ; на бите 2 формируем тактовый импульс
bcf PORTB,bitCLK
nop
decfsz cntr1,f
goto ByteLoop
return

FILL_VB ; копирование разрядов счетчиков в буфер дисплея
movfw tot_100t
call SEG7
movwf buf01
movfw tot_010t
call SEG7
movwf buf02
movfw tot_001t
call SEG7
movwf buf03
movfw tot_100k
call SEG7
movwf buf04
movfw tot_010k
call SEG7
movwf buf05
movfw tot_001k
call SEG7
movwf buf06
clrf buf07 ; пустышки между счетчиками

movfw rstMD
andlw h'03'
addwf PCL,f
goto FillNORMA
goto FillNORMA
goto FillRESET
goto FillBLANK

FillNORMA
clrf buf08
movfw aux_100k
call SEG7
movwf buf09
movfw aux_010k
call SEG7
movwf buf10
movfw aux_001k
call SEG7
movwf buf11
bsf buf11,7 ; а это поставили запятую
movfw aux_k100
call SEG7
movwf buf12
return

FillRESET
movlw b'01010011' ; C
movwf buf08
movlw b'01111011' ; Б
movwf buf09
movlw b'01011110' ; P
movwf buf10
movlw b'01110111' ; O
movwf buf11
movlw B'01010011' ; C
movwf buf12
return

FillBLANK
clrf buf08
clrf buf09
clrf buf10
clrf buf11
clrf buf12
return

StartMsg

movlw b'00111101' ; 3
movwf buf01
movlw B'01111110' ; A
movwf buf02
movlw B'01010010' ; Г
movwf buf03
movlw b'01011110' ; P
movwf buf04
movlw B'01101101' ; Y
movwf buf05
movlw b'00111101' ; 3
movwf buf06
movlw b'01001111' ; К
movwf buf07
movlw B'01111110' ; A
movwf buf08
movlw B'00000000' ; _
movwf buf09
movlw B'00000000' ; _
movwf buf10
movlw B'00000000' ; _
movwf buf11
movlw B'00000000' ; _
movwf buf12

bsf flpwr,0

movlw d'255'
movwf cntr2
StartLoop
call SendStr
call LEDDelay
decfsz cntr2,f
goto StartLoop

bcf flpwr,0
return

PowerDown

call WRITE_EEPROM ; записываем счетчики в энергонезависимую память

bsf flpwr,0
; pfcagbed
movlw b'00111101' ; 3
movwf buf01
movlw B'01111110' ; A
movwf buf02
movlw b'01110110' ; П
movwf buf03
movlw B'01100111' ; И
movwf buf04
movlw B'01010011' ; C
movwf buf05
movlw b'01101011' ; Ь
movwf buf06
movlw B'00000000' ; _
movwf buf07
movlw B'00000000' ; _
movwf buf08
movlw B'00000000' ; _
movwf buf09
movlw B'00000000' ; _
movwf buf10
movlw B'00000000' ; _
movwf buf11
movlw B'00000000' ; _
movwf buf12

SDeadLoop
movlw D'255'
movwf cntr2
DeadLoop
call SendStr
call LEDDelay
decfsz cntr2,f
goto DeadLoop
btfsc PORTB,bitIGN ; если питание не восстановилось (0), то обход возврата
goto PWRRestoted ; если восстановилось (1), то возвращаемся
; все отключаем питание
bcf PORTB,bitPWR
goto SDeadLoop

PWRRestoted
call FILL_VB
bsf PORTB,bitPWR ; придется опять включить
goto PowerRise

READ_EEPROM ; загрузка счетчиков из энергонезависимой памяти
movlw d'15'
movwf cntr2
movlw tot_prev
movwf FSR
RD_LOOP
movfw FSR
addlw -tot_prev

bcf STATUS,RP0 ; банк 0
movwf EEADR
bsf STATUS,RP0 ; банк 1
bsf EECON1,RD
bcf STATUS,RP0 ; банк 0
movfw EEDATA

movwf INDF
incf FSR,f
decfsz cntr2,f
goto RD_LOOP
return

WRITE_EEPROM ; сохранение счетчиков в энергонезависимой памяти
movlw d'15'
movwf cntr2 ; cntr2 = 15
movlw tot_prev
movwf FSR ; FSR = @tot_prev = адреса регистров RAM
WR_LOOP
movfw FSR
addlw -tot_prev ; W = 0, 1, ... , 14 = адреса регистров EEPROM

; Процедура записи байта в EEPROM

movwf EEADR ; Переносим W в EEADR
movfw INDF ; Заносим в W содержимое регистра RAM
movwf EEDATA ; Из W в EEDATA
bsf STATUS,RP0 ; Выбираем банк 1
bsf EECON1,WREN ; Разрешаем запись
movlw h'55' ; ** Обязательная **
movwf EECON2 ; ** процедура **
movlw h'AA' ; ** без **
movwf EECON2 ; ** комментариев **
bsf EECON1,WR ; Команда начала записи
WR_WAIT ; цикл ожидания завершения записи
btfsc EECON1,WR ; Если запись окончена, то обходим повтор цикла
goto WR_WAIT ; повторяем

bcf STATUS,RP0 ; БАНК 0
incf FSR,f ; FSR = @tot_prev +1, +2, ..., + 15
decfsz cntr2,f
goto WR_LOOP ; повторяем 15 раз

return

org 0x2100

; дальше начальное значение счетчиков в ПЗУ
; чтобы вписать начальный пробег, нужно заменить d'10'-0 на d'10'-НужнаяЦифраПробега

eet_prev de d'60'
eet_k010 de d'10'-0
eet_k100 de d'10'-0
eet_001k de d'10'-0
eet_010k de d'10'-0
eet_100k de d'10'-0
eet_001t de d'10'-0
eet_010t de d'10'-0
eet_100t de d'10'-0

eea_prev de d'60'
eea_k010 de d'10'-0
eea_k100 de d'10'-0
eea_001k de d'10'-0
eea_010k de d'10'-0
eea_100k de d'10'-0

end ;конец программы

Исходник материала взят от сюда


... так мало пройдено дорог, так много сделано ошибок ...
(пробег 54245км)
 
PredatorДата: Пн, 31.08.2009, 13:58 | Сообщение # 22
Полковник
 Модератор

Сообщений: 1347
Репутация: 51
Статус: Оффлайн
Скутер: SpeedGear 50QT ; & ; Zip R3
Тахометр со светодиодной шкалой

Тахометр подключается к стандартным выводам жгута проводки для подключения штатного тахометра. Диапазон измерения 0-8000 об/мин. Показания выводятся в виде светящегося столба на шкале светодиодов с дискретностью 1 светодиод на 100 об/мин.

Тахометр нормально работает с КСЗ и БСЗ на УЗАМ.
Первоначально тахометр был установлен на Москвич с уфимским двигателем и контактной системой зажигания: трамблер 47.3706; катушка Б-115 с резистором. Во входной цепи не было предусмотрено никаких специальных элементов для устранения дребезга контактов,т.к. фильтр дребезга реализован программно. Программа считает, что прошел передний фронт импульса, если высокий сигнал на входе удерживается не менее заданного времени. Эта задержка подбиралась методом научного тыка. При уменьшении задержки показания становятся завышенными из-за подсчета фронтов от дребезга, при увеличении задержки на большой частоте появляются пропуски в подсчете штатных импульсов.
Позже была установленна бесконтактная система зажигания в составе: трамблер 54.06 3706; катушка 27.3705; коммутатор 76.3734. С новой БСЗ тахометр заработал правильно без каких либо переделок.
Будет ли тахометр правильно работать с другими двигателями, обещать не могу.

Схема

Светодиоды подключены к выходам Out1-Out15 типа "открытый коллектор". Это позволило запитать диоды от 12В с последовательным включением по 4 диода. Микросхемы MBI уравнивают ток (и таким образом яркость свечения) при последовательном включении нескольких светодиодов в неполной цепочке. Такое включение также снижает потребляемый ток.

Сопротивления на выводах драйверов светодиодов R-EXT задают яркость свечения светодиодов.

Файл прошивки для PIC16F84A

Можно скопировать текст между строчками --------- в текстовый редактор, подойдет NOTEPAD, и сохранить файл с расширением HEX. Такой файл можно будет использовать для прошивки микропроцессора.
-----------------------
:020000040000FA
:10000000850186018B018101640083160030850023
:1000100001308600C730810083125F2014 308D00CC
:1000200058208D0B1028542010308D000B1D1628E1
:100030000B118D0B16285F20542020203A201D28FC
:100040008C0120308E0005308D008B101630810 021
:100050000B118B1C3328061C30288E0B33288C0A7E
:100060008B1020308E000B1D29288D0B26288C0C20
:100070008C1308005F200C080339013E8D008615A3
: 100080004328502086118D0B41288C0C8C138C0C2E
:100090008C138C0A4C2858208C0B4B2854200800B9
:1000A00006150000061108008614000086100800DE
:1000B 00086155020861150205020502008008611AF
:0C00C00050308D0050208D0B622808008D
:02400E00F13F80
:00000001FF
-----------------------

Текст программы

Далее исходный текст программы для тех, кто может и задумает что-нибудь поправить.

Quote
;тахометр
list p=16F84A
#include
__config _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC

; Константы
bitSDI equ 3
bitCLK equ 2
bitLAT equ 1
iniRPT equ 5
iniTMR equ d'022' ; d'100'
iniDBL equ d'032'

; Переменные
cntIMP equ 0x0C ; счетчик импульсов
cntRPT equ 0x0D ; счетчик повторов
cntDBL equ 0x0E ; счетчик времени дребезга контактов

; программа
org 0x000
clrf PORTA
clrf PORTB
clrf INTCON
clrf TMR0
clrWDT

bsf STATUS,RP0
movlw b'00000000' ; все биты RA на вывод
movwf PORTA
movlw b'00000001' ; RB0 на ввод, остальные биты порта на вывод
movwf PORTB ; выключаем подтягивающие резисторы,
movlw b'11000111' ; TMR0 на внутренний такт с предделителем 256
movwf OPTION_REG ; прерывания запрещены, будем проверять флажки
bcf STATUS,RP0

; пролог
; включить всю шкалу

call SendCLR
movlw d'20'
movwf cntRPT
loopPRE1
call SendQRT
decfsz cntRPT,f
goto loopPRE1
call SendLAT
; подождать 1 с = 16 тиков (1 тик = 64К мкс = 65 мс)
movlw d'16'
movwf cntRPT
loopPRE2
btfss INTCON,T0IF
goto loopPRE2
bcf INTCON,T0IF
decfsz cntRPT,f
goto loopPRE2
; выключить
call SendCLR
call SendLAT

; глобальный цикл
Main_loop
call COUNT_IMP
call SHOW_COUNT
goto Main_loop

COUNT_IMP ; фаза измерения

clrf cntIMP ; обнуляем сквозной счетчик
movlw iniDBL
movwf cntDBL ; инициализируем счетчик блокировки дребезга
movlw iniRPT
movwf cntRPT ; цикл подсчета импульсов (5 раз отсчет таймером по 60мс)
bcf INTCON,INTF
ms300
movlw iniTMR ; при 4Мгц и предделителе 1:256 получается 1 тик таймера 256 мкс
movwf TMR0 ; TMR0 должен отсчитывать от 22 до 256 в течение 59,904 мс
bcf INTCON,T0IF
ms60
btfss INTCON,INTF ; если был фронт импульса датчика, то идем на обработку счетчиков
goto NoINCR ; датчик молчит, идем проверять таймер
DoINCR
btfss PORTB,0
goto ClrINT ; если RB0=0, то сбрасываем прерывание
; если RB0=1, то
decfsz cntDBL,f ; задерживаем дальнейшие действия
goto NoINCR ; до обнуления счетчика дребезга
; закончилась задержка на время дребезга
incf cntIMP,f ; +1 в счечик импульсов
ClrINT
bcf INTCON,INTF ; сбросили флаг внешнего прерывания
movlw iniDBL
movwf cntDBL ; инициализируем счетчик блокировки дребезга
NoINCR
btfss INTCON,T0IF ; повторяем маленький цикл,
goto ms60 ; пока TMR0 не скажет: хватит!
decfsz cntRPT,f ; отсчитали 60 мс, нужно повторить 5 раз,
goto ms300 ; чтобы интервал отсчета получился 0,3 сек
; отсчитали 300 мс
return

SHOW_COUNT ; фаза индикации результатов измерения
; занулить биты индикатора
call SendCLR
; вывод непоного квартета шкалы
movfw cntIMP
andlw 3 ; остаток от деления на 4
addlw 1 ; +1
movwf cntRPT ; в счечик повторений
bsf PORTB,bitSDI
goto loopMOD+2 ; войти в цикл с проверки счетчика
loopMOD
call SendCLK
bcf PORTB,bitSDI
decfsz cntRPT,f
goto loopMOD
; вывод полных квартетов шкалы
rrf cntIMP,f
bcf cntIMP,7
rrf cntIMP,f
bcf cntIMP,7 ; целочисленное деление на 4 счетчика импульсов
incf cntIMP,f ; дает число полных квартетов шкалы
goto loopDIV+1 ; войти в цикл с проверки счетчика
loopDIV
call SendQRT
decfsz cntIMP,f
goto loopDIV
; переключение на индикацию нового замера
call SendLAT
return

; подпрограммы

SendCLK ; формирование тактового импульса CLOCK
bsf PORTB,bitCLK
nop
bcf PORTB,bitCLK
return

SendLAT ; вывод импульса защелки LATCH
bsf PORTB,bitLAT
nop
bcf PORTB,bitLAT
return

SendQRT ; вывод полного квартета
bsf PORTB,bitSDI ; для каждого полного квартета выводим 1000
call SendCLK
bcf PORTB,bitSDI
call SendCLK
call SendCLK
call SendCLK
return

SendCLR ; очистить шкалу
bcf PORTB,bitSDI
movlw d'80'
movwf cntRPT
loopCLR
call SendCLK
decfsz cntRPT,f
goto loopCLR
return

end

Ссылки

Тахометр Михаила Белоусова на его страничке в клубе WWW.CLUB.AZLK.RU. Схема и программа были сделаны под Святогор с двигателем Рено. Сигнал на тахометр снимается с "мозгов", поэтому ни в схеме, ни в программе нет средств защиты от дребезга. К достоинствам этой схемы следует отнести отсутствие редких компонентов. Используемые в ней детали вполне доступны.

Вот еще схема тахометра со шкалой светодиодов без микропроцессора. Ее основной особенностью является использование микросхемы К1003ПП1 или UAA180, которые также достаточно распространены.

Предлагаю посмотреть и ТАКОЙ ВАРИАНТ тахометра без микропроцессора.

Исходник материала взят от сюда


... так мало пройдено дорог, так много сделано ошибок ...
(пробег 54245км)
 
PredatorДата: Пн, 31.08.2009, 14:23 | Сообщение # 23
Полковник
 Модератор

Сообщений: 1347
Репутация: 51
Статус: Оффлайн
Скутер: SpeedGear 50QT ; & ; Zip R3
Вольтметр

Существуют наборчики радиодеталей от конторы МАСТЕРКИТ ( www.masterkit.ru ). Один из наборчиков называется NM5302 – Блок индикации - автомобильный вольтметр «бегающая точка» . Основа схемы – чип UAA180 или отечественный аналог1003ПП1.

Назначение выводов микросхемы:
1 – земля;
18 – питание до +18 Вольт;
17 – вход для измеряемого напряжения;
16 – эталонный нижний уровень измеряемого напряжения;
3 – эталонный верхний уровень;
2 – управлени яркостью свечения светодиодов;
4..15 – выводы управления включением светодиодами.

Микросхема делит разницу напряжений между 3й и 16й ногой на 12 диапазонов, и если напряжение на 17й ноге попадает в один из этих диапазонов, то зажигается соответствующий светодиод. Однако, есть ограничения: напряжения на измерительных выводах не могут быть больше 6 Вольт.
Чтобы ограничить измеряемое напряжение, соберем измерительную цепочку из стабилитрона и двух резисторов. Пусть V – напряжение в бортовой сети. В цепочке из стабилитрона VD1 и сопротивлений R1, R2 напряжение на стабилитроне будет постоянным 9 Вольт (приблизительно), а на мостике R1, R2 оно будет равно (V-9). При одинаковых сопротивлениях R1=R2 напряжение на сопротивлении R2 получится равным половине (V-9), т.е. если в сети напряжение V будет меняться от 10 до 15 Вольт, то напряжение в точке между R1 и R2 будет меняться от (10-9)/2 =0,5 до (15-9)/2 =3 Вольт.
Цепочка R3, R4, R5 и стабилитрон VD2 задают эталонные минимальное и максимальное напряжение. Минимальное ноль, т.к. 16 нога на земле. Максимальное устанавливается подстроечным резистором на уровне около 3 Вольт. При такой настройке получается возможным измерение напряжения бортовой сети в диапазоне от 9 до 15 Вольт с шагом 0,5 Вольта на один светодиод.
Цепочка R6, R7 просто задает яркость свечения диодов. При R6=50К яркость больше, при 100К меньше.

Варианты схем со шкалой «бегающая точка» и «светящийся столб» отличаются только подключением светодиодов к микросхеме. Измерительные цепи остаются такими же.

Настройка схемы выполняется следующим образом. Вольтметр нужно подключить к эталонному источнику 14,7В, повернуть подстроечный резистор так, чтобы загорелся столб из 11 светодиодов, затем медленно поворачивать подстроечник в обратную сторону до того положения, пока 11й светодиод не погаснет и в столбе останется только 10 включенных светодиодов.
Подразумевается, что шкала имеет масштаб 2 светодиода на 1 Вольт, и включение 11го светодиода соответствует достижению измеряемым напряжением уровня 14,7В так, как это показано на рисунке ниже.

Над светодиодами в передней панели вольтметра сделана цветная разметка диапазонов напряжения:
до 11,6В - красный, заряд АКБ менее 50%;
11,6-12,6В - красный пунктир, заряд АКБ 50-100%;
12,6В - зеленая точка, заряд 100%;
13,7-14,7В - зеленый, напряжение генератора в норме;
более 14,7В - красный, перезаряд.

Схему спаял в варианте "светящийся столб". На рисунке внизу общий вид того, что получилось. Подсветку сделал одной безцокольной автомобильной лампочкой на 12В.

Собиралось все приблизительно так, как на картинке ниже.

Рисунок платы. Сделано в зеркальном отражении, чтобы переводить отпечаток на фольгу для травления. Если печатать с плотностью 300 точек на дюйм, то получим картинку в масштабе 1:1.

Размещение деталей. Вид со стороны монтажа радиодеталей. Дорожки на самом деле с другой стороны платы, но здесь нарисованы видимыми, как будто плата прозрачная.

Во время работы прибора на автомобиле обнаружился недостаток.

Из-за дискретности шкалы последний в светящемся столбе светодиод часто работает в мерцающем режиме. Не всегда, но часто. По началу мигание отвлекает внимание, правда, потом привыкаешь, а мигание воспринимается, как попытка прибора изобразить половину деления дискретной шкалы.



... так мало пройдено дорог, так много сделано ошибок ...
(пробег 54245км)
 
PredatorДата: Пн, 31.08.2009, 14:33 | Сообщение # 24
Полковник
 Модератор

Сообщений: 1347
Репутация: 51
Статус: Оффлайн
Скутер: SpeedGear 50QT ; & ; Zip R3
Указатель уровня топлива

Указатель остатка топлива на самом деле является омметром и измеряет сопротивление датчика-реостата. Если подключить переменное соротивление к указателю, то его показания должны соответствовать следующему:
0 Ом – стрелка лежит на левом краю шкалы;
15 Ом – стрелка на границе красной и белой зоны;
45 Ом – стрелка на линии 1/2;
90 Ом – стрелка на линии 1;
при разрыве стрелка на правом краю шкалы;

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

Стабилизатор 78L03 при таком подключении работает, как источник тока 30 мА. Стабилитрон на 3В нужен для защиты измерительного входа микросхемы от перенапряжения в случае "обрыва" провода датчика. При КЗ датчика показания должны быть, как для пустого бака.
Цепочка R3, C3 замедляет изменение напряжения на измерительном входе 17 микросхемы UAA180. Постоянная времени цепочки около 2 секунд. Такое замедление должно предотвращать скачки в показаниях прибора при колебаниях поплавка датчика вместе с уровнем бензина во время движения.
Для настройки прибора вместо датчика-реостата нужно подключить сопротивление 90 Ом и, вращая подстроечный резистор, найти момент включения полного светящегося столба.
На рисунке ниже передняя панель указателя.

После установки приборов на автомобиль был замечен такой недостаток в работе указателя остатка топлива.
При полном баке все хорошо, а, вот, когда бак становится пустым больше, чем на половину, то во время движения (в поворотах, или при разгоне/торможении) показания могут меняться на 3 деления (а это четверь шкалы!), например, от 1 до 4 светодиодов. Очевидно, что это связано с переливанием бензина по горизонтально расположенному баку под действием сил инерции. Как с этим бороться пока не очень понятно.

Рисунок платы.

Размещение деталей.



... так мало пройдено дорог, так много сделано ошибок ...
(пробег 54245км)
 
PredatorДата: Пн, 31.08.2009, 15:20 | Сообщение # 25
Полковник
 Модератор

Сообщений: 1347
Репутация: 51
Статус: Оффлайн
Скутер: SpeedGear 50QT ; & ; Zip R3
Термометр

В книжках пишут, что зависимость сопротивления исправного датчика ТМ-100А (штатный датчик на УЗАМ) от температуры должна быть такой:
Градусы – Омы
40 – 400...530
80 – 130...160
100 – 80...95
120 – 50...65

Зависимость обратная, да еще и не линейная. Но датчик логометрического типа. Такой датчик обеспечивает изменение тока в обмотке указателя пропорционально измеряемой величине. Получается интересная штука: если такой датчик включить последовательно с правильно подобранным дополнительным сопротивлением (равным сопротивлению обмотки измерителя), подать на эту цепочку стабилизированное напряжение, то на этом дополнительном сопротивлении напряжение будет пропорционально температуре. Это дополнительное сопротивление приблизительно равно 150 Ом. Из-за того, что датчик температуры должен устанавливаться на массу, схема простой не получилась. То, что получилось, представлено на рисунке.

Пояснение для тех, кто захочет разобраться в схеме.
Схема сделана шиворот на выворот. Представьте часы, у которых стрелка часов всегда смотрит вверх, а циферблат вращается под стрелкой. 17я нога, которая должна быть подключена к измеряемому напряжению, подключена к стабилизированным 3 Вольтам. Разница измеряемых мин. и макс. напряжений между 16й и 3ей ногой тоже стабилизированная, около 3х Вольт, но напряжения на 16й и 3й ноге меняются синхронно, «плавают» вокруг напряжения на 17й ноге. В целом схема работает так, что показания шкалы светодиодов соответствуют напряжению на резисторе R3. Мостики со стабилитронами нужны для поддержания напряжений-границ измеряемого диапазона.

Однако, оказалось, что в схеме термометра можно обойтись без стабилизации вообще. Ниже приведена гораздо более простая схема. Она основана на том, что как бы не изменялось напряжение питания схемы при постоянной температуре, пропорция напряжений на входах микросхемы U16:U17:U3 будет оставаьтся постоянной. Абсолютные величины будут меняться, но их отношение друг к другу нет.

Мостик R4-R5-R6 устанавливает границы измеряемого диапазона. Подстроечник R1 позволяет сдвигать показания в большую или меньшую сторону. Сопротивление R3 необходимо для понижения напряжения питания до уровня, при котором напряжение на входах DA1 не будет превышать предельно допустимого в 6В.

Такую схему можно использовать только в режиме светящаяся точка. Дело в том, что при минимальной температуре измеряемое в этой схеме напряжение максимально. С повышением температуры напряжение уменьшается до минимального. Чтобы светящаяся точка двигалась по шкале слева направо с увеличением температуры, а не наоборот, достаточно расположить светодиоды на индикаторе в обратном порядке. Но такое возможно только для светящейся точки. Светящийся столб в обратном порядке не зажигается.

Чтобы "перевернуть" напряжение относительно середины измеряемого диапазона можно добавить в схему инвертор на операционном усилителе.

Номиналы сопротивлений, задающих напряжения на входах 3 и 16, подобраны таким образом, чтобы полная шкала в 12 светодиодов соответствовала диапазону в 80оС.

Схема настраивается следующим образом. Можно опустить датчик температуры в кипящую воду, либо вместо датчика к схеме подсоединить сопротивление 91 Ом и подстроечным резистором найти момент переключения светящегося столба с 10 на 11 светодиодов, что должно соответствовать точке кипения воды - 100оС.

В общем номиналы сопротивлений и настройка должны соответствовать вот такой передней панели термометра.

У термометра обнаружился такой недостаток.

Т.к. шкала была рассчитана в масштабе 3 светодиода на 20оС, то один диод перекрывает диапазон приблизительно в 7 градусов. Если во время езды на шкале горит 10 диодов, то температура может быть от 93 до 100оС, а сколько именно, сказать нельзя. В то же время на автомобильном термометре не нужна растянутая левая часть шкалы для низких температур. Поэтому при повторении конструкции лучше будет сделать термометр с масштабом 5оС на диод, например, от 50 до 110оС так, как на рисунке ниже.

Рисунок платы.

Размещение деталей.

Исходник материала взят от сюда


... так мало пройдено дорог, так много сделано ошибок ...
(пробег 54245км)
 
DozerДата: Сб, 12.03.2011, 14:03 | Сообщение # 26
Рядовой
 Новичек

Сообщений: 2
Репутация: 0
Статус: Оффлайн
Скутер: VIPER TORNADO 250cc
Прибор (Predator) 07.02.2011

--------------------------------------------------------------------------------

Вы выкладывали схему и печатку :
"Универсальный прибор для автомобиля Часы, термометр, вольтметр, тахометр."
Пробовал компилировать исходники автора этого прибора размеры получившихся файлов не совпадают с выложенным HEX. файлом.
Неужели в выложенных автором исходниках ошибка, я просто хочу избавиться от пищания на 4000 оборотов и от пищания не на 12В,а на 11.5В
Ссылка на прибор :
http://scooterclub.kharkov.ua/forum/11-752-1
http://www.picping.narod.ru/auto_ch.htm



Если долго мучиться что-нибудь сломается.
 
ComradeДата: Сб, 12.03.2011, 14:15 | Сообщение # 27
Генерал-майор
 Бывалый

Сообщений: 2343
Репутация: 86
Статус: Оффлайн
Скутер: Honda Foresight 250
Dozer, лучше всего связаться с ним другим способом, т.к. он уже больше месяца не посещает наш форум...


Услуги электрика
Установка сигнализаций, подсветки багажника, дополнительной светотехники, прочие электротехнические работы. Качественно. Возможен выезд. (093) 916-34-81
 
denkumДата: Сб, 12.03.2011, 14:15 | Сообщение # 28
Сержант
 Бывалый

Сообщений: 20
Репутация: 2
Статус: Оффлайн
Скутер: YAMAHA Super JOG ZR
Quote (Predator)
Идешь на рынок и покупаеш 10ти светодиодный индикатор уровня сигнала! Остается тебе только через сопротивление подать +12 Вольт на датчик бензина и снять показание индикатором! Сопротивление ставь подстроечное чтобы смог уровень выставить 0 и полный бак!

Я купил 5-ти разрядный на AN6884,какое сопротивление покупать,как работает индикатор уровня топлива (вольтметр или амперметр)???? surprised
 
Alex101Дата: Сб, 14.02.2015, 15:06 | Сообщение # 29
Сержант
 Модератор форума

Сообщений: 2407
Репутация: 139
Статус: Оффлайн
Скутер: Viper Wind
UP


Если что то происходит, ищи кому это выгодно.
Толковые советы давать и посты набивать- две разные вещи!!!
Посты без репутации как брачная ночь без невесты!
Сигарета без кофе, как и вобла без пива.
 
Общение » Технический раздел » Стайлинг/Электрооборудование » Измерительные приборы (Разновидность и использование измерительных приборов в скуте)
  • Страница 2 из 2
  • «
  • 1
  • 2
Поиск: