ну что связал эти два устройства? это устройство у меня уже собрано и не плохо работает, хотелось бы собрать бакометр и прилепить к той схемке.вот схема с аналоговым<p><b>Добавлено</b> (14.06.2011, 20:39)
---------------------------------------------
<img src="https://bezkz.su/…/2/2154849.gif" border="0" alt=""/><p><b>Добавлено</b> (14.06.2011, 20:40)
---------------------------------------------
и связать эти два устройства очень просто
бaкoмeтр
Автор
hfelyx
, 03 апр 2011 20:32
Сообщений в теме: 1974
#961
Отправлено 25 дек 2012 - 11:12
#962
Отправлено 29 дек 2012 - 18:09
Всех с наступающим Новым Годом!
#963
Отправлено 02 янв 2013 - 05:01
ВСЕХ
С Новым Годом!
С Новым Годом!
#964
Отправлено 04 янв 2013 - 18:38
ПРИВЕТ ВСЕМ ПОДСКАЖИТЕ КАК КАЛИБРОВАТЬ
#965
Отправлено 05 янв 2013 - 22:46
Калибровка устройства:Нажимаем кнопку на устройстве-на индикаторе засветяться мигающие нули,это означает что у нас пустой бак.Если действительно пустой нажимаем кнопку еще раз.если нет опустошаем полностью и нажимаем кнопку.
На индикаторе засветится 02(2 литра)-заливаем 2 литра и нажимаем кнопку.
После засветится 04-заливаем еще 2 литра (в баке уже 4 литра)и нажимаем кнопку .
Таким образом при калибровке все значения на индикаторах в мигаищем режиме,а нажимая кнопку мы соглашаемся что в баке действительно находится n-литров при мигающем его значении.После калибровки на дисплее отобразится 40-что означает 40литров бензина в баке(ведь так оно и есть)и мигания прекратятся.Устройство перешло в режим измерения.Кнопку больше не трогаем,чтоб не сбить настроек.При падении уровня топлива ниже 6 литров индикаторы начинают мигать,это говорит о том что пора на заправку.В комплекте идут прошивки с разным шагом калибровки,все рабочие и достаточно точные.
Точно устройство показывает в состоянии покоя,когда бензин в баке не плещется и поплавок не качает.
Копипаст с первой страницы,в форуме есть ответы практически на все вопросы по теме,читайте
На индикаторе засветится 02(2 литра)-заливаем 2 литра и нажимаем кнопку.
После засветится 04-заливаем еще 2 литра (в баке уже 4 литра)и нажимаем кнопку .
Таким образом при калибровке все значения на индикаторах в мигаищем режиме,а нажимая кнопку мы соглашаемся что в баке действительно находится n-литров при мигающем его значении.После калибровки на дисплее отобразится 40-что означает 40литров бензина в баке(ведь так оно и есть)и мигания прекратятся.Устройство перешло в режим измерения.Кнопку больше не трогаем,чтоб не сбить настроек.При падении уровня топлива ниже 6 литров индикаторы начинают мигать,это говорит о том что пора на заправку.В комплекте идут прошивки с разным шагом калибровки,все рабочие и достаточно точные.
Точно устройство показывает в состоянии покоя,когда бензин в баке не плещется и поплавок не качает.
Копипаст с первой страницы,в форуме есть ответы практически на все вопросы по теме,читайте
#966
Отправлено 28 янв 2013 - 17:02
legend2
Привет!
Чтобы убрать подмаргивание и погасить незначащий ноль (L100) для 3-х замени это:
delay10(); cc := i mod 3; if cc = 2 then begin C1 := 0; C2 := 0; {if sign then begin portc := $3B; porta.4 := 1; end else } Led(L100); C3 := 1; end else if cc = 1 then begin C1 := 0; C3 := 0; Led(L10); C2 := 1; end else begin C2 := 0; C3 := 0; Led(L1); C1 := 1; end; end; end.на это:
delay10(); cc := i mod 4; if cc = 0 then begin C1 := 0; C2 := 0; if (L100 = 0) then begin portc:= $3F; porta.4:=1; end else Led(L100); C3 := 1; end else if cc = 1 then begin C1 := 0; C3 := 0; Led(L10); C2 := 1; end else if cc = 2 then begin C2 := 0; C3 := 0; Led(L1); C1 := 1; end else if cc = 3 then begin C2 := 0; C3 := 0; C1 := 0; end; end; end.
Добрый вечер. Вот собрал бакометр с тремя разрядами и при вклюении питания загорается где то на секунду во всех трёх разрядах одновременно сегмент (А). хотелось бы убрать это.
#967
Отправлено 05 фев 2013 - 23:05
Доброго времени суток, нарисовал свою универсальную плату датчика давления и температуры под стаканчик 2106, если вас не затруднит прошу проверить, критика приветствуется.на светодиодах-бак,цифровой у меня сделан,но до операции я не успел его поставить.а сейчас авто отдали другому и мне стало уже фиолетово.если разберешься в моей плате-пользуйся.
Прикрепленные файлы
#968
Отправлено 07 фев 2013 - 01:55
program bakometr;
const
stNormal : byte = 1;
stCalibr : byte = 2;
AdrHi : byte = 1;
litr : array [0..AdrHi] of byte = (0,150);
var
C1 : sbit at porta.2;
C2 : sbit at porta.5;
C3 : sbit at porta.1;
SW : sbit at porta.3;
i, j, cc: byte;
V : word; absolute 0x40;
Vhi : byte; absolute 0x41;
VLo : byte; absolute 0x40;
V100 : word;
L100, L10, L1 : byte;
dat : array [0..AdrHi] of byte;
mode : byte;
calibrN : byte;
sign : byte;
procedure Razr(V : integer);
begin
sign := V < 0;
sign := 0;
L100 := V div 100;
V100 := V mod 100;
L10:= V100 div 10;
L1 := V100 mod 10;
end;
procedure Led(i: short);
begin
if I=0 then begin
portc:=$00;
porta.4:=1;
end;
if I=1 then begin
portc:=$2D;
porta.4:=1;
end;
if I=2 then begin
portc:=$22;
porta.4:=0;
end;
if I=3 then begin
portc:=$28;
porta.4:=0;
end;
if I=4 then begin
portc:=$0D;
porta.4:=0;
end;
if I=5 then begin
portc:=$18;
porta.4:=0;
end;
if I=6 then begin
portc:=$10;
porta.4:=0;
end;
if I=7 then begin
portc:=$09;
porta.4:=1;
end;
if I=8 then begin
portc:=$00;
porta.4:=0;
end;
if I=9 then begin
portc:=$08;
porta.4:=0;
end;
end;
procedure delay10;
begin
delay_ms(10);
end;
procedure ReadData;
begin
for i := 0 to AdrHi do dat[i]:=EEPROM_Read(i);
end;
begin
porta := %00000000;
trisa := %11001001;
portc := %11111111;
trisc := %00000000;
wpua := %00000001;
cmcon := %00000111;
ansel := %00000001;
adcon0:= %00000000;
adcon1:= %00110000;
mode:=stNormal;
ReadData;
ADC_Init;
i := 0;
while true do
begin
inc(I);
if mode = stNormal then
begin
if (i.7) and (V<6) then
begin
C1:=0;
C2:=0;
C3:=0;
end;
if i=0 then
begin
V:=ADC_Read(0);
V:=V shr 2;
if V>=dat[AdrHi]
then V:=litr[adrHi]
else
begin
if V<=dat[0]
then V:=litr[0]
else
begin
for j:=0 to AdrHi-1 do
if (V>=dat[j]) and (V<dat[j+1]) then cc:=j;
if cc=AdrHi
then V:=Litr[AdrHi]
else
begin
V:= (V-dat[cc]);
j:=(Litr[cc+1]-Litr[cc]);
V:= V * j;
j:=(dat[cc+1]-dat[cc]);
V:= V / j;
V:= V + litr[cc];
end;
end;
end;
Razr(V);
(*
sign := V < 0;
L100 := V div 100;
V100 := V mod 100;
L10:= V100 div 10;
L1 := V100 mod 10;
*)
//L10 := V div 10;
//L1 := V mod 10;
if (SW = 0) then
begin
delay_ms(3000);
begin
C1 := 1;
C2 := 1;
C3 := 1;
portc := $3B;
porta.4 := 1;
calibrN := 0;
mode := stCalibr;
delay10;
repeat until SW = 1;
end;
delay10;
end;
end;
end;
if mode = stCalibr then
begin
Razr(litr[calibrN]);
(*
//sign := litr[calibrN] < 0;
L100 := litr[calibrN] div 100;
V100 := litr[calibrN] mod 100;
L10 := V100 div 10;
L1 := V100 mod 10;
*)
if i > 127 then
begin
C1 := 0;
C2 := 0;
C3 := 0;
end;
if SW = 0 then
begin
delay10;
repeat until SW = 1;
delay10;
V:=adc_read(0);
V:=V shr 2;
EEPROM_Write(calibrN,VLo);
inc(calibrN);
if calibrN>AdrHi then
begin
mode:= stNormal;
CalibrN:=0;
delay10;
delay10;
delay10;
delay10;
ReadData;
end;
end;
end;
delay_ms(3);
cc := i mod 4;
if cc = 0 then
begin
C1 := 0;
C2 := 0;
if (L100 = 0) then
begin
portc:= $3F;
porta.4:=1;
end
else
Led(L100);
C3 := 1;
end
else
if cc = 1 then
begin
C1 := 0;
C3 := 0;
Led(L10);
C2 := 1;
end
else
if cc = 2 then
begin
C2 := 0;
C3 := 0;
Led(L1);
C1 := 1;
end
else
if cc = 3 then
begin
C2 := 0;
C3 := 0;
C1 := 0;
end;
end;
end.
const
stNormal : byte = 1;
stCalibr : byte = 2;
AdrHi : byte = 1;
litr : array [0..AdrHi] of byte = (0,150);
var
C1 : sbit at porta.2;
C2 : sbit at porta.5;
C3 : sbit at porta.1;
SW : sbit at porta.3;
i, j, cc: byte;
V : word; absolute 0x40;
Vhi : byte; absolute 0x41;
VLo : byte; absolute 0x40;
V100 : word;
L100, L10, L1 : byte;
dat : array [0..AdrHi] of byte;
mode : byte;
calibrN : byte;
sign : byte;
procedure Razr(V : integer);
begin
sign := V < 0;
sign := 0;
L100 := V div 100;
V100 := V mod 100;
L10:= V100 div 10;
L1 := V100 mod 10;
end;
procedure Led(i: short);
begin
if I=0 then begin
portc:=$00;
porta.4:=1;
end;
if I=1 then begin
portc:=$2D;
porta.4:=1;
end;
if I=2 then begin
portc:=$22;
porta.4:=0;
end;
if I=3 then begin
portc:=$28;
porta.4:=0;
end;
if I=4 then begin
portc:=$0D;
porta.4:=0;
end;
if I=5 then begin
portc:=$18;
porta.4:=0;
end;
if I=6 then begin
portc:=$10;
porta.4:=0;
end;
if I=7 then begin
portc:=$09;
porta.4:=1;
end;
if I=8 then begin
portc:=$00;
porta.4:=0;
end;
if I=9 then begin
portc:=$08;
porta.4:=0;
end;
end;
procedure delay10;
begin
delay_ms(10);
end;
procedure ReadData;
begin
for i := 0 to AdrHi do dat[i]:=EEPROM_Read(i);
end;
begin
porta := %00000000;
trisa := %11001001;
portc := %11111111;
trisc := %00000000;
wpua := %00000001;
cmcon := %00000111;
ansel := %00000001;
adcon0:= %00000000;
adcon1:= %00110000;
mode:=stNormal;
ReadData;
ADC_Init;
i := 0;
while true do
begin
inc(I);
if mode = stNormal then
begin
if (i.7) and (V<6) then
begin
C1:=0;
C2:=0;
C3:=0;
end;
if i=0 then
begin
V:=ADC_Read(0);
V:=V shr 2;
if V>=dat[AdrHi]
then V:=litr[adrHi]
else
begin
if V<=dat[0]
then V:=litr[0]
else
begin
for j:=0 to AdrHi-1 do
if (V>=dat[j]) and (V<dat[j+1]) then cc:=j;
if cc=AdrHi
then V:=Litr[AdrHi]
else
begin
V:= (V-dat[cc]);
j:=(Litr[cc+1]-Litr[cc]);
V:= V * j;
j:=(dat[cc+1]-dat[cc]);
V:= V / j;
V:= V + litr[cc];
end;
end;
end;
Razr(V);
(*
sign := V < 0;
L100 := V div 100;
V100 := V mod 100;
L10:= V100 div 10;
L1 := V100 mod 10;
*)
//L10 := V div 10;
//L1 := V mod 10;
if (SW = 0) then
begin
delay_ms(3000);
begin
C1 := 1;
C2 := 1;
C3 := 1;
portc := $3B;
porta.4 := 1;
calibrN := 0;
mode := stCalibr;
delay10;
repeat until SW = 1;
end;
delay10;
end;
end;
end;
if mode = stCalibr then
begin
Razr(litr[calibrN]);
(*
//sign := litr[calibrN] < 0;
L100 := litr[calibrN] div 100;
V100 := litr[calibrN] mod 100;
L10 := V100 div 10;
L1 := V100 mod 10;
*)
if i > 127 then
begin
C1 := 0;
C2 := 0;
C3 := 0;
end;
if SW = 0 then
begin
delay10;
repeat until SW = 1;
delay10;
V:=adc_read(0);
V:=V shr 2;
EEPROM_Write(calibrN,VLo);
inc(calibrN);
if calibrN>AdrHi then
begin
mode:= stNormal;
CalibrN:=0;
delay10;
delay10;
delay10;
delay10;
ReadData;
end;
end;
end;
delay_ms(3);
cc := i mod 4;
if cc = 0 then
begin
C1 := 0;
C2 := 0;
if (L100 = 0) then
begin
portc:= $3F;
porta.4:=1;
end
else
Led(L100);
C3 := 1;
end
else
if cc = 1 then
begin
C1 := 0;
C3 := 0;
Led(L10);
C2 := 1;
end
else
if cc = 2 then
begin
C2 := 0;
C3 := 0;
Led(L1);
C1 := 1;
end
else
if cc = 3 then
begin
C2 := 0;
C3 := 0;
C1 := 0;
end;
end;
end.
Прикрепленные файлы
#969
Отправлено 07 фев 2013 - 15:08
не сочтите за наглость, список всех запчастей(резюки, конденсаторы) для 2-й схемы(модернизированная) никто не делал? Если да то скинте, пожалуйста…
#970
Отправлено 10 фев 2013 - 22:23
вот собрал бакометр, последний на 3-х разрядах работает не плохо.
Прикрепленные файлы
#971
Отправлено 12 фев 2013 - 15:17
3-х
Прикрепленные файлы
#972
Отправлено 16 фев 2013 - 17:24
не сочтите за наглость, список всех запчастей(резюки, конденсаторы) для 2-й схемы(модернизированная) никто не делал? Если да то скинте, пожалуйста…
А разве схема с номиналами не является списком деталей?
Порой я просто поражаюсь некоторым просьбам.
Распечатайте картинку и на рынок за деталями только сразу с маркером чтобы с продавцом выводы деталей по подписывать, а то забудете потом
#973
Отправлено 28 фев 2013 - 20:07
Наконецто собрал бакометр, и поставил на авто только крышку не закрывал, начал заливать бензин по два литра в бак. Так как в баке было всего 26 литров и отколибровал я его под 26 литров. а после 26 просто нажимал кнопку, в результате получилось что датчик показывает 26, у ничего завтра проеду и посмотрю как будет работать. у меня авто нива датчик стандартный старого образца. РЕБЯТА СПАСИБО ЗА РАЗРАБОТКУ. У меня еще стоит вольтметр и друзьям собрал 3 штуки, теперь жду измеритель давления.
#974
Отправлено 04 мар 2013 - 21:04
и я себе в ваз 2108 собрал бакометр. авторам проекта велике спасибо!!! давно мечтал о такой штуке.
Прикрепленные файлы
#975
Отправлено 08 мар 2013 - 11:06
Не прошло и пол года как решился я вчера поставить таки девайс на свой автомобиль. Сделал товарищу на таврию у него успешно работает. У меня же выявилась проблема, после тарировке меньше 15 литров не показывает, начинают мигать нули. сам пока не разбирался. Что навскидку может быть? Автомобиль ваз 2109
#976
Отправлено 08 мар 2013 - 16:25
Почему у тебя столько кондеров и сопротивлений, не сходится со схемой! У меня фигня какая то, показывает неправильно…бывает закскоки от 40 до 35 потом ровно, потом бах 20 и ровно опять и до 7 литров а потом опять 00! Датчик без обрыва на шахе
#977
Отправлено 08 мар 2013 - 20:01
заскоки эти датчик виноват, или при калибровке очень торопился, при калибровке не торопись кнопочку жать сосчитай до десяти чтобы то что ты влил успокоилось, ну и как уже говорили достоверные данные снимаются на стоянке.
#978
Отправлено 09 мар 2013 - 16:07
эти номиналы не столь важны, важен датчик! и программа и метод калибровкиПочему у тебя столько кондеров и сопротивлений, не сходится со схемой! У меня фигня какая то, показывает неправильно…бывает закскоки от 40 до 35 потом ровно, потом бах 20 и ровно опять и до 7 литров а потом опять 00! Датчик без обрыва на шахе
#979
Отправлено 09 мар 2013 - 19:12
Собрал я при стандартной схеме с делителем 1.5 кОм, вроде все работает. Показывает точно. Но в протеусе моделировал, что при 1.5 кОм есть проскок на 2 литра, а при 220 Ом все точно. Вот скажите на что влияет делитель напряжения и не спалю ли МК (так как на датчике 12 вольт ведь при полном баке)....Я читал тут всю переписку…запутался аж, до 3 ночи вчера листал, поэтому скажите про делитель пожалуйста.
А калибровка 0,5,13,16,19,22,25,30,35,40. Все нормально. Пока тестирую вручную (поплавок смещаю). Заливать не заливал.
А калибровка 0,5,13,16,19,22,25,30,35,40. Все нормально. Пока тестирую вручную (поплавок смещаю). Заливать не заливал.
#980
Отправлено 10 мар 2013 - 22:00
program bakometr;
const
stNormal : byte = 1;
stCalibr : byte = 2;
AdrHi : byte = 15;
litr : array [0..AdrHi] of byte = (0,10,20,30,40,50,60,70,80,90,100,110,120,130,140,150);
var
C1 : sbit at porta.5;
C2 : sbit at porta.1;
C3 : sbit at porta.2;
SW : sbit at porta.3;
i, j, cc: byte;
V : word; absolute 0x40;
Vhi : byte; absolute 0x41;
VLo : byte; absolute 0x40;
V100 : word;
L100, L10, L1 : byte;
dat : array [0..AdrHi] of byte;
mode : byte;
calibrN : byte;
sign : byte;
procedure Razr(V : integer);
begin
sign := V < 0;
sign := 0;
L100 := V div 100;
V100 := V mod 100;
L10:= V100 div 10;
L1 := V100 mod 10;
{L1:=(L1 div 5)*5}
end;
procedure Led(i: short);
begin
if I=0 then begin
portc:=$02;
porta.4:=0;
end;
if I=1 then begin
portc:=$1F;
porta.4:=0;
end;
if I=2 then begin
portc:=$08;
porta.4:=1;
end;
if I=3 then begin
portc:=$18;
porta.4:=0;
end;
if I=4 then begin
portc:=$15;
porta.4:=0;
end;
if I=5 then begin
portc:=$30;
porta.4:=0;
end;
if I=6 then begin
portc:=$20;
porta.4:=0;
end;
if I=7 then begin
portc:=$16;
porta.4:=0;
end;
if I=8 then begin
portc:=$00;
porta.4:=0;
end;
if I=9 then begin
portc:=$10;
porta.4:=0;
end;
end;
procedure delay10;
begin
delay_ms(10);
end;
procedure ReadData;
begin
for i := 0 to AdrHi do dat[i]:=EEPROM_Read(i);
end;
begin
porta := %00000000;
trisa := %11001001;
portc := %00000000;
trisc := %00000000;
wpua := %00000001;
cmcon := %00000111;
ansel := %00000001;
adcon0:= %00000000;
adcon1:= %00110000;
mode:=stNormal;
ReadData;
ADC_Init;
i := 0;
while true do
begin
inc(I);
if mode = stNormal then
begin
if (i.7) and (V<10) then
begin
C1:=0;
C2:=0;
C3:=0;
end;
if i=0 then
begin
V:=ADC_Read(0);
V:=V shr 2;
if V>=dat[AdrHi]
then V:=litr[adrHi]
else
begin
if V<=dat[0]
then V:=litr[0]
else
begin
for j:=0 to AdrHi-1 do
if (V>=dat[j]) and (V<dat[j+1]) then cc:=j;
if cc=AdrHi
then V:=Litr[AdrHi]
else
begin
V:= (V-dat[cc]);
j:=(Litr[cc+1]-Litr[cc]);
V:= V * j;
j:=(dat[cc+1]-dat[cc]);
V:= V / j;
V:= V + litr[cc];
end;
end;
end;
Razr(V);
(*
sign := V < 0;
L100 := V div 100;
V100 := V mod 100;
L10:= V100 div 10;
L1 := V100 mod 10;
*)
//L10 := V div 10;
//L1 := V mod 10;
if (SW = 0) then
begin
delay_ms(3000);
begin
C1 := 1;
C2 := 1;
C3 := 1;
portc := $3B;
porta.4 := 1;
calibrN := 0;
mode := stCalibr;
delay10;
repeat until SW = 1;
end;
delay10;
end;
end;
end;
if mode = stCalibr then
begin
Razr(litr[calibrN]);
(*
//sign := litr[calibrN] < 0;
L100 := litr[calibrN] div 100;
V100 := litr[calibrN] mod 100;
L10 := V100 div 10;
L1 := V100 mod 10;
*)
if i > 127 then
begin
C1 := 0;
C2 := 0;
C3 := 0;
end;
if SW = 0 then
begin
delay10;
repeat until SW = 1;
delay10;
V:=adc_read(0);
V:=V shr 2;
EEPROM_Write(calibrN,VLo);
inc(calibrN);
if calibrN>AdrHi then
begin
mode:= stNormal;
CalibrN:=0;
delay10;
delay10;
delay10;
delay10;
ReadData;
end;
end;
end;
delay_ms(3);
cc := i mod 4;
if cc = 0 then
begin
C1 := 0;
C2 := 0;
if (L100 = 0) then
begin
portc:= $3F;
porta.4:=1;
end
else
Led(L100);
C3 := 1;
end
else
if cc = 1 then
begin
C1 := 0;
C3 := 0;
Led(L10);
C2 := 1;
end
else
if cc = 2 then
begin
C2 := 0;
C3 := 0;
Led(L1);
C1 := 1;
end
else
if cc = 3 then
begin
C2 := 0;
C3 := 0;
C1 := 0;
end;
end;
end.
const
stNormal : byte = 1;
stCalibr : byte = 2;
AdrHi : byte = 15;
litr : array [0..AdrHi] of byte = (0,10,20,30,40,50,60,70,80,90,100,110,120,130,140,150);
var
C1 : sbit at porta.5;
C2 : sbit at porta.1;
C3 : sbit at porta.2;
SW : sbit at porta.3;
i, j, cc: byte;
V : word; absolute 0x40;
Vhi : byte; absolute 0x41;
VLo : byte; absolute 0x40;
V100 : word;
L100, L10, L1 : byte;
dat : array [0..AdrHi] of byte;
mode : byte;
calibrN : byte;
sign : byte;
procedure Razr(V : integer);
begin
sign := V < 0;
sign := 0;
L100 := V div 100;
V100 := V mod 100;
L10:= V100 div 10;
L1 := V100 mod 10;
{L1:=(L1 div 5)*5}
end;
procedure Led(i: short);
begin
if I=0 then begin
portc:=$02;
porta.4:=0;
end;
if I=1 then begin
portc:=$1F;
porta.4:=0;
end;
if I=2 then begin
portc:=$08;
porta.4:=1;
end;
if I=3 then begin
portc:=$18;
porta.4:=0;
end;
if I=4 then begin
portc:=$15;
porta.4:=0;
end;
if I=5 then begin
portc:=$30;
porta.4:=0;
end;
if I=6 then begin
portc:=$20;
porta.4:=0;
end;
if I=7 then begin
portc:=$16;
porta.4:=0;
end;
if I=8 then begin
portc:=$00;
porta.4:=0;
end;
if I=9 then begin
portc:=$10;
porta.4:=0;
end;
end;
procedure delay10;
begin
delay_ms(10);
end;
procedure ReadData;
begin
for i := 0 to AdrHi do dat[i]:=EEPROM_Read(i);
end;
begin
porta := %00000000;
trisa := %11001001;
portc := %00000000;
trisc := %00000000;
wpua := %00000001;
cmcon := %00000111;
ansel := %00000001;
adcon0:= %00000000;
adcon1:= %00110000;
mode:=stNormal;
ReadData;
ADC_Init;
i := 0;
while true do
begin
inc(I);
if mode = stNormal then
begin
if (i.7) and (V<10) then
begin
C1:=0;
C2:=0;
C3:=0;
end;
if i=0 then
begin
V:=ADC_Read(0);
V:=V shr 2;
if V>=dat[AdrHi]
then V:=litr[adrHi]
else
begin
if V<=dat[0]
then V:=litr[0]
else
begin
for j:=0 to AdrHi-1 do
if (V>=dat[j]) and (V<dat[j+1]) then cc:=j;
if cc=AdrHi
then V:=Litr[AdrHi]
else
begin
V:= (V-dat[cc]);
j:=(Litr[cc+1]-Litr[cc]);
V:= V * j;
j:=(dat[cc+1]-dat[cc]);
V:= V / j;
V:= V + litr[cc];
end;
end;
end;
Razr(V);
(*
sign := V < 0;
L100 := V div 100;
V100 := V mod 100;
L10:= V100 div 10;
L1 := V100 mod 10;
*)
//L10 := V div 10;
//L1 := V mod 10;
if (SW = 0) then
begin
delay_ms(3000);
begin
C1 := 1;
C2 := 1;
C3 := 1;
portc := $3B;
porta.4 := 1;
calibrN := 0;
mode := stCalibr;
delay10;
repeat until SW = 1;
end;
delay10;
end;
end;
end;
if mode = stCalibr then
begin
Razr(litr[calibrN]);
(*
//sign := litr[calibrN] < 0;
L100 := litr[calibrN] div 100;
V100 := litr[calibrN] mod 100;
L10 := V100 div 10;
L1 := V100 mod 10;
*)
if i > 127 then
begin
C1 := 0;
C2 := 0;
C3 := 0;
end;
if SW = 0 then
begin
delay10;
repeat until SW = 1;
delay10;
V:=adc_read(0);
V:=V shr 2;
EEPROM_Write(calibrN,VLo);
inc(calibrN);
if calibrN>AdrHi then
begin
mode:= stNormal;
CalibrN:=0;
delay10;
delay10;
delay10;
delay10;
ReadData;
end;
end;
end;
delay_ms(3);
cc := i mod 4;
if cc = 0 then
begin
C1 := 0;
C2 := 0;
if (L100 = 0) then
begin
portc:= $3F;
porta.4:=1;
end
else
Led(L100);
C3 := 1;
end
else
if cc = 1 then
begin
C1 := 0;
C3 := 0;
Led(L10);
C2 := 1;
end
else
if cc = 2 then
begin
C2 := 0;
C3 := 0;
Led(L1);
C1 := 1;
end
else
if cc = 3 then
begin
C2 := 0;
C3 := 0;
C1 := 0;
end;
end;
end.