Страница 1 из 8

Цифровой бакометр, спидометр и т.д.

Добавлено: 16 июн 2010, 15:23
izolyator
хочу сделать цифровой индикатор уровня топлива. нужна помощь программиста по микроконтроллерам типа pic16f873-04. цифровой спидометр и одометр уже работают, спасибо "analarc"

Re: Цифровой бакометр

Добавлено: 16 июн 2010, 16:12
Клубная Совесть
Блин... половина слов для меня - новые.
izolyator респект!

Re: Цифровой бакометр

Добавлено: 20 июн 2010, 16:34
izolyator
вот собственно прибор

Re: Цифровой бакометр

Добавлено: 20 июн 2010, 18:06
andrei@5
Привет izolyator!Я тоже этим увлекаюсь,но не лучше ли будет сделать имплантацию нового щитка приборов от VW,AUDI с диз. двигателем?Как на мой взгляд это будет более информативно.Читать приборы будет легче,а затраты могут быть меньше.Что ты думаешь по этому поводу?

Re: Цифровой бакометр

Добавлено: 21 июн 2010, 06:59
izolyator
менять щиток приборов не хотел изначально, а затраты на такой прибор не велики - все детали с контроллером 500р, да и тросик у нас от колеса, а не от коробки, для другого щитка пересчет делать надо, а это может только программист. а этот прибор показывает скорость и пробег суточный и общий, переключается синей кнопкой, а красная кнопка для изменения яркости индикаторов. Сейчас делаю правую сторону- цифровой термометр, бортовой вольтметр и указатель уровня топлива, все цифровые, проблема только с уровнем топлива, старый программист не хочет больше помагать. лень. вот и ищу другого

Re: Цифровой бакометр

Добавлено: 21 июн 2010, 11:15
olezhok
А можно подробнее- какой датчик используется, схемку бы увидеть....Бакометр можно сделать и аналоговым, например полоску светодиодов....У меня тахометр+термометр реализован следующим образом. Себестоимость 580рэ+ работа . Прибор БК-08 по моему....

Re: Цифровой бакометр

Добавлено: 21 июн 2010, 11:58
izolyator
вот схемка бортового вольтметра, на его основе и хочу бакометр, а датчик уровня родной, что в баке болтается

Re: Цифровой бакометр

Добавлено: 21 июн 2010, 12:26
olezhok
Так такое устройство должно замерять либо падение напряжения на реостате либо его сопротивление.В чистом виде не пойдет.....

Re: Цифровой бакометр

Добавлено: 21 июн 2010, 13:45
izolyator
это естественно, я солью соляру и буду заливая по 2 л. записывать показания датчика, потом рассчитаю таблицу напряжение-литры, а контроллеру надо только сравнивать входное напряжение с кодами в памяти и выводить инфу на 2х разрядный индикатор

Re: Цифровой бакометр

Добавлено: 22 июн 2010, 07:22
izolyator
вот вольтметр:
:020000040000FA
:100000008312031385018601870183160230850060
:100010000030860000308700C330810004309F002C
:10002000831249309F008B01A501A601A701A00101
:10003000A9013F2081010B11FF30A3000B1D1E28D9
:100040001F154F20A90B25285C200B111E280F39E6
:1000500082078234DE34433446341E34263422345C
:10006000CE34023406340A343234A33452342334C6
:100070002B3403398207803440341034203425086F
:100080002720A5080319FF30A10026082720A20079
:10009000A21027082720A300F230A400080087013F
:1000A000A00A2019A0012130200784000008860042
:1000B00020083920870008001F195C281E08A800A6
:1000C00069200800280E2720A10028082720A20068
:1000D0000800A501A601A7012530840005307E2077
:1000E0001E08A8002508A802A50164307E20840A05
:1000F0000A307E202808A7003F200800A802031C21
:0A0100008328800A7E28A807080063
:02400E00713F00
:00000001FF

но он на 4 разряда, а надо только 2 разряда, я переделаю схему вольтметра в бакометр и выложу

Re: Цифровой бакометр

Добавлено: 22 июн 2010, 07:53
izolyator
вот схема бакометра, а таблицу напряжение-литры, сделаю завтра, там обратная зависимость: 1,37v-60л, 3,75- пусто
вот спидо-одо, теперь начну разводить плату под термо+вольт+бакометр

Re: Цифровой бакометр

Добавлено: 22 июн 2010, 13:23
izolyator
;* Автовольтметр на PIC 16F873 *
;****************************************
;=====================================================================================

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

; Кварц 4 МГц


; Программная коррекция хода на +150 сек в сутки

; Переменные
; Номер активного анода
INDNO equ 0x20

; Буфер дисплея, разряды хранятся в виде комбинаций сегментов
IND01 equ 0x21 ; десятки вольт
IND02 equ 0x22 ; единицы вольт
IND03 equ 0x23 ; десятые вольт
IND04 equ 0x24 ; буква U

; Цифры для вывода - разряды 10, 1, 0.1
dVolt equ 0x25
eVolt equ 0x26
cVolt equ 0x27
VOLTS equ 0x28
DELAY equ 0x29

; Программа

bcf STATUS, RP0 ; Банк 0
bcf STATUS, RP1
clrf PORTA
clrf PORTB
clrf PORTC

bsf STATUS, RP0 ; банк 1

movlw b'00000010'
movwf TRISA ; AN1 на ввод, остальные на вывод
movlw b'00000000'
movwf TRISB ; RB - вывод
movlw b'00000000'
movwf TRISC ; RC - вывод

; будем использовать
; TMR0 - для динамической индикации

; выключаем подтягивающие резисторы (не нужны)
; устанавливаем TMR0 на внутренний такт с предделителем 16 (4 мс на цифру, 16 мс на все = 62Гц)
movlw b'11000011' ; 256 * 1 мкс * 16 = 4,096 мс
movwf OPTION_REG

; Конфигурируем АЦП
; Старшие биты преобразования в регистр ADRESH (левое выравнивание)
; | 3 бита не используются
; | | конфигурация ножек 0,1 и 3 - аналоговые, 2 и 4-7 цифровые
; | | |
; |---====
movlw b'00000100'
movwf ADCON1

bcf STATUS,RP0 ; банк 0

; продолжаем с АЦП
; от 1,25 до 5 МГц рекомендуется Fosc/8
; | номер канала для аналогового преобразования AN1 (3 нога)
; | | Бит запуска/завершения (при установке конфигупации=0)
; | | |не используется
; | | ||включить питание модуля АЦП
; --===|||
movlw b'01001001'
movwf ADCON0

clrf INTCON ;

; инициализируем переменные:
clrf dVolt
clrf eVolt
clrf cVolt
clrf INDNO
clrf DELAY

call FILL_VB ; заполнение видеобуфера 7-сегментными кодами

clrf TMR0
bcf INTCON,T0IF

; для отладки +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
movlw b'11111111'
movwf IND03

MAIN_LOOP
; проверить таймер 0 для динамической индикации
btfss INTCON,T0IF ; если таймер закончил отсчет, то идем менять разряд
goto MAIN_LOOP ; иначе повторяем проверки в цикле

; все, что ниже, выполняется 1 раз в 4 мс (на 4МГц)
bsf ADCON0,2 ; запуск измерения (пока измеряет, займемся индикацией)
call ChAnod ; переключение разрядов индикатора
decfsz DELAY,f
goto BypassOut
call GetVolts ; вызов процедуры измерения 1 раз в секунду
BypassOut
bcf INTCON,T0IF ; обнулить таймер 0
goto MAIN_LOOP


; перекодировка цифры в код 7-сегментного индикатора
SEG7 ; в счетчиках не само значение, а (10-значение)
andlw 0x0F ; на всякий случай
addwf PCL,f
; gfbadepc ноль в бите зажигает сегмент
retlw b'10000010' ; 0
retlw b'11011110' ; 1
retlw b'01000011' ; 2
retlw b'01000110' ; 3
retlw b'00011110' ; 4
retlw b'00100110' ; 5
retlw b'00100010' ; 6
retlw b'11001110' ; 7
retlw b'00000010' ; 8
retlw b'00000110' ; 9
retlw b'00001010' ; 10 A
retlw b'00110010' ; 11 b
retlw b'10100011' ; 12 C
retlw b'01010010' ; 13 d
retlw b'00100011' ; 14 E
retlw b'00101011' ; 15 F

; вычисление бита включения разряда по номеру активного анода
ACOD
andlw 0x03 ;на всякий случай
addwf PCL,f
; 1243 единица в бите зажигает разряд
retlw b'10000000' ; 0
retlw b'01000000' ; 1
retlw b'00010000' ; 2
retlw b'00100000' ; 3

FILL_VB ; заполнить видеобуфер
movfw dVolt
call SEG7
movf dVolt,f
btfsc STATUS,Z
movlw b'11111111'
movwf IND01
movfw eVolt
call SEG7
movwf IND02
bcf IND02,1 ; десятичная точка
movfw cVolt
call SEG7
movwf IND03
movlw b'11110010' ; сенменты c-d-e
movwf IND04
return


ChAnod
;обслуживание индикации
;(каждый раз после отсчета таймером полного цикла 4 мс х 4 разряда = 62 Гц)
clrf PORTC ; выключили разряд

incf INDNO,f
btfsc INDNO,2
clrf INDNO ; INDNO = цикл( 1,2,3,0 )

movlw IND01
addwf INDNO,w
movwf FSR
movfw INDF
movwf PORTB ; IND01[INDNO] -> PORTB

movfw INDNO
call ACOD
movwf PORTC ; включили следующий разряд

return

GetVolts
; ожидание завершения измерения
btfsc ADCON0,2
goto GetVolts
; извлечение результата измерения
movfw ADRESH
movwf VOLTS

; addwf VOLTS,f
; rrf VOLTS,f

call DisplayDEC
return

DisplayHEX
; преобразование в шестнадцатиричный код
swapf VOLTS,w
call SEG7
movwf IND01
movfw VOLTS
call SEG7
movwf IND02
return

DisplayDEC

clrf dVolt
clrf eVolt
clrf cVolt

movlw dVolt
movwf FSR

movlw 5
call GetDecDig ; в dVolt теперь ЦЕЛОЕ(VOLTS/5)
; в VOLTS остаток от деления на 5
movfw ADRESH
movwf VOLTS ; восстановим VOLTS
movfw dVolt
subwf VOLTS,f ; VOLTS = VOLTS - 1/5*VOLTS = 4/5 * VOLTS = 0,8 VOLTS
clrf dVolt

movlw d'100'
call GetDecDig

incf FSR,f
movlw d'010'
call GetDecDig

movfw VOLTS
movwf cVolt

call FILL_VB
return

GetDecDig ; эта подпрограмма на самом деле не дает десятичную цифру,
subwf VOLTS,f ; а делит VOLTS нацело на число из REGW
btfss STATUS,C ; частное записывает в INDF
goto LT_DIG ; в VOLTS остается остаток
GE_DIG ; INDF перед обращением нужно занулить
incf INDF,f
goto GetDecDig
LT_DIG
addwf VOLTS,f
return

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

Re: Цифровой бакометр

Добавлено: 22 июн 2010, 16:15
zacora
шансы есть, я бы сделал таблицу с точностью 1 литр и накопление результата измерения напряжения, чтобы цыфры не прыгали. и еще эту таблицу с возможностью корректировки, чтобы можно было на любой датчик этот бакометр повесить и любой объем бака. вижу это где-то так. кстати, может поцивильнее индикатор примастырить? к-либо графичесикй?

Re: Цифровой бакометр

Добавлено: 22 июн 2010, 18:17
olezhok
накопление результата и корректировка результата это очень хорошо.Индикатор то можно поцивильнее, но он будет выделяться на фоне семисегментных индикаторов.Дождемся Изолятора, что он скажет.

Re: Цифровой бакометр

Добавлено: 22 июн 2010, 21:46
zacora
как в оригинале датчик включается по схеме?

Re: Цифровой бакометр

Добавлено: 23 июн 2010, 10:53
olezhok
Выложил скан кусочка схемы. Это для дизельных двигателей.

Re: Цифровой бакометр

Добавлено: 23 июн 2010, 14:25
izolyator
сегодня солью всю солярку из бака и буду наливать по 1 л. если датчик будет видеть разницу в 1л. то здорово, тогда можно сделать прибор с такой точностью, а семисегментный индикатор меня вполне устраивает, т.к. есть большой выбор по размерам и цвету. а выводить на панель ЖК, много информации в одном месте, да и мелко все. люблю красненькие огоньки...а датчик -одна нога на землю, другая через прибор на +10 стабилизированное. дело в том, что у датчика на нашем баке очень нелинейная характеристика. ну если сделать возможность программировать из салона машины нажатием кнопок... это слишком. Таких машин как у меня много и сделанная и отлаженная система потом пригодится всем бусоводам

Re: Цифровой бакометр

Добавлено: 23 июн 2010, 23:45
zacora
померяй сопротивление датчика в крайних положениях

Re: Цифровой бакометр

Добавлено: 24 июн 2010, 07:53
izolyator
датчик включается одним концом на землю другим через стрелочный прибор на +10 стаб.
вот таблица после вчерашних заливаний по литру в бак соотв. литры, омы, вольты, после 55 литров показания не меняются, видимо поплавок упирается в бак
1 196 3,31
2 182 3,23
3 173 3,17
4 167 3,13
5 160 3,08
6 153 3,02
7 142 2,93
8 140,7 2,92
9 133,7 2,86
10 126,7 2,79
11 122,7 2,75
12 117,5 2,7
13 108,5 2,6
14 106 2,57
15 103,6 2,54
16 101,6 2,52
17 99,8 2,5
18 96,3 2,45
19 95,8 2,45
20 93,3 2,41
21 91,8 2,39
22 90,1 2,37
23 87,1 2,33
24 85,6 2,31
25 84,3 2,29
26 81,3 2,24
27 79,6 2,22
28 78,4 2,2
29 76,6 2,17
30 75,3 2,15
31 74 2,13
32 72,2 2,1
33 70,2 2,06
34 68,3 2,03
35 66,7 2
36 65 1,97
37 63,4 1,94
38 62 1,91
39 60,5 1,88
40 58,9 1,85
41 57,6 1,83
42 57 1,82
43 56,4 1,8
44 55 1,77
45 53,6 1,74
46 50,9 1,69
47 49,6 1,66
48 48,4 1,63
49 47,1 1,6
50 44,5 1,54
51 43,5 1,52
52 42,2 1,48
53 40,8 1,45
54 39,6 1,42
55 37,7 1,37

Re: Цифровой бакометр

Добавлено: 24 июн 2010, 12:24
vfrc
Дык а бенз же будет плёскаться и показания будут очень быстро меняться, циферки будут бегать быстро - фик увидишь