Приборы для Ваз 2106 прошу помощи с прошивкой

Поклонники продукции Microchip Technology Inc тусуются тут.
maksdonetskiy
Первый раз сказал Мяу!
Сообщения: 34
Зарегистрирован: Вс дек 15, 2019 13:44:30

Приборы для Ваз 2106 прошу помощи с прошивкой

Сообщение maksdonetskiy »

Приветствую. Нашел в сети цифровой указатель уровня топлива на pic 16f676 и 7-сегментном индикаторе. Собрал, прошил, все превосходно работает. Захотелось также сделать указатель давления масла. Схема устройств полностью идентична получается, датчики уровня топлива и давления масла идентичны (330 Ом = 0; 0 Ом = 8 атм = 40 л). Вся проблема в прошивке. На сайте выложен исходник, но уровень моих познаний в МК - взять готовый hex, прошить контроллер, если не работает поиграться фьюзами. Пробовал разобраться сам, скачал mplab, компиляторы, переписал строчки, указанные в описании проекта, но скомпилировать прошивку так и не смог. В лучшем случае выскакивает 21 ошибка. Пробовал разные версии мплаб, разные компиляторы, ничего не помогло. Прошу вашей помощи, уважаемые пиководы.
Схема прибора: Изображение
Исходный код, в нем нужно изменить строки AdrHi : byte = 12;
litr : array [0..AdrHi] of byte = (0,5,10,15,20,25,30,35,40,45,50,55,60); на AdrHi : byte = 4;
litr : array [0..AdrHi] of byte = (0,40,60,80);
и добавить включение точки в 1 разряде (пока на макетке подкинул точку через резистор на общий провод)
Спойлерprogram bakometr;
const
stNormal : byte = 1;
stCalibr : byte = 2;
AdrHi : byte = 12;
litr : array [0..AdrHi] of byte = (0,5,10,15,20,25,30,35,40,45,50,55,60);
var
C1 : sbit at porta.5;
C2 : sbit at porta.2;
i,j,cc: byte;
V : word; absolute 0x30;
Vhi : byte; absolute 0x31;
VLo : byte; absolute 0x30;
L10,L1:byte;
dat : array [0..AdrHi] of byte;
mode : byte;
calibrN : byte;
procedure Led(i: byte);
begin
if I=0 then begin
portc:=$04;
porta.4:=0;
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:=$09;
porta.4:=1;
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:=$0D;
porta.4:=0;
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:=EEPROM_Read(i);
end;
begin
porta := %00010000;
trisa := %11001011;
portc := $FF;
trisc := 0;
wpua := 1;
cmcon := $07;
ansel := 2;
adcon0:= 4;
adcon1:= $30;
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;
end;
if i=0 then
begin
V:=ADC_Read(1);
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:= (dat[cc]-V);
j:=(Litr[cc+1]-Litr[cc]);
V:= V * j;
j:=(dat[cc]-dat[cc+1]);
V:= V / j;
V:= V + litr[cc];
end;
end;
end;
L10:= v div 10;
L1 := V mod 10;
if (porta.0 = 0) then
begin
C1:=1;
C2:=1;
portc:=$3B;
porta.4:=1;
calibrN:=0;
mode:=stCalibr;
delay10;
repeat until porta.0 = 1;
delay10;
end;
end;
end;
if mode = stCalibr then
begin
L10:=litr[calibrN] div 10;
l1:=litr[calibrN] mod 10;
if i>127 then
begin
C1:=0;
C2:=0;
end;
if porta.0 = 0 then
begin
delay10;
repeat until porta.0 = 1;
delay10;
V:=adc_read(1);
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(1);
if i.0 then begin
C2 := 0;
Led(L10);
C1 := 1;
end else
begin
C1 := 0;
Led(L1);
C2 := 1;
end;
end;
end.
Реклама
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: Приборы для Ваз 2106 прошу помощи с прошивкой

Сообщение Аlex »

maksdonetskiy писал(а):скачал mplab, компиляторы,
MPLAB Вам не поможет. В нём можно писать только на АСМ и С. А этот код на каком-то непонятном языке.
Реклама
Аватара пользователя
АлександрЛ
Друг Кота
Сообщения: 43879
Зарегистрирован: Пн ноя 30, 2009 03:00:01
Откуда: Нерезиновая

Re: Приборы для Ваз 2106 прошу помощи с прошивкой

Сообщение АлександрЛ »

[uquote="Аlex",url="/forum/viewtopic.php?p=4138540#p4138540"]А этот код на каком-то непонятном языке.[/uquote]
А это не может быть какой нибудь PicBasic?
https://forum.cxem.net/index.php?/topic ... -picbasic/
http://www.hardforum.ru/t82824/
Есть же BasComAVR, правда, от него, почему- то "попу морщат", хотя поляки, и, кажется, немцы, его весьма часто используют.. :dont_know:
Аватара пользователя
oleg110592
Друг Кота
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Re: Приборы для Ваз 2106 прошу помощи с прошивкой

Сообщение oleg110592 »

это Паскаль, скорее всего microPascal от Microe
https://www.mikroe.com/mikropascal-pic
Реклама
Эиком - электронные компоненты и радиодетали
maksdonetskiy
Первый раз сказал Мяу!
Сообщения: 34
Зарегистрирован: Вс дек 15, 2019 13:44:30

Re: Приборы для Ваз 2106 прошу помощи с прошивкой

Сообщение maksdonetskiy »

[uquote="oleg110592",url="/forum/viewtopic.php?p=4138624#p4138624"]это Паскаль, скорее всего microPascal от Microe
https://www.mikroe.com/mikropascal-pic[/uquote]
Действительно Паскаль, спасибо. Скачал программу, закинул код, при компиляции получил ошибку main function is not defined main function is not defined
Что нужно поправить в коде чтоб успешно скомпилировалось?
Изображение
Реклама
Аватара пользователя
oleg110592
Друг Кота
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Re: Приборы для Ваз 2106 прошу помощи с прошивкой

Сообщение oleg110592 »

у меня скомпилировалось
Изображение
чутка поформатировал код:
Спойлер

Код: Выделить всё

program bakometr;
const
  stNormal : byte = 1;
  stCalibr : byte = 2;
  AdrHi : byte = 12;
  litr : array [0..AdrHi] of byte = (0,5,10,15,20,25,30,35,40,45,50,55,60);
var
  C1 : sbit at porta.5;
  C2 : sbit at porta.2;
  i,j,cc: byte;
  V : word; absolute 0x30;
  Vhi : byte; absolute 0x31;
  VLo : byte; absolute 0x30;
  L10,L1:byte;
  dat : array [0..AdrHi] of byte;
  mode : byte;
  calibrN : byte;
procedure Led(i: byte);
begin
  if I=0 then begin
  portc:=$04;
  porta.4:=0;
  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:=$09;
  porta.4:=1;
  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:=$0D;
  porta.4:=0;
  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 := %00010000;
  trisa := %11001011;
  portc := $FF;
  trisc := 0;
  wpua := 1;
  cmcon := $07;
  ansel := 2;
  adcon0:= 4;
  adcon1:= $30;
  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;
      end;
      if i=0 then
      begin
      V:=ADC_Read(1);
      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:= (dat[cc]-V);
      j:=(Litr[cc+1]-Litr[cc]);
      V:= V * j;
      j:=(dat[cc]-dat[cc+1]);
      V:= V / j;
      V:= V + litr[cc];
      end;
      end;
      end;
      L10:= v div 10;
      L1 := V mod 10;
      if (porta.0 = 0) then
      begin
      C1:=1;
      C2:=1;
      portc:=$3B;
      porta.4:=1;
      calibrN:=0;
      mode:=stCalibr;
      delay10;
      repeat until porta.0 = 1;
      delay10;
      end;
      end;
      end;
      if mode = stCalibr then
      begin
      L10:=litr[calibrN] div 10;
      l1:=litr[calibrN] mod 10;
      if i>127 then
      begin
      C1:=0;
      C2:=0;
      end;
      if porta.0 = 0 then
      begin
      delay10;
      repeat until porta.0 = 1;
      delay10;
      V:=adc_read(1);
      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(1);
      if i.0 then begin
      C2 := 0;
      Led(L10);
      C1 := 1;
      end else
      begin
      C1 := 0;
      Led(L1);
      C2 := 1;
      end;
    end;
end.
Реклама
maksdonetskiy
Первый раз сказал Мяу!
Сообщения: 34
Зарегистрирован: Вс дек 15, 2019 13:44:30

Re: Приборы для Ваз 2106 прошу помощи с прошивкой

Сообщение maksdonetskiy »

[uquote="oleg110592",url="/forum/viewtopic.php?p=4138857#p4138857"]у меня скомпилировалось[/uquote]
Не знаю что я не так делаю :( . Теперь другие ошибки выскакивают. И со старым исходником, и с Вашим отформатированным
Изображение Изображение
Порядок действий: создаю новый проект - стандартный проект. выбираю 16f676, частоту оставляю предложенную 8.000 МГц (пробовал и 4.000), файлы не добавляю, жму финиш. В открывшееся окно вставляю код, жму Build. По идее все правильно...
Аватара пользователя
oleg110592
Друг Кота
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Re: Приборы для Ваз 2106 прошу помощи с прошивкой

Сообщение oleg110592 »

ну на всякий мой проект
project.zip
(29.08 КБ) 180 скачиваний
а понял там справа вкладочка называется типа Library Manager - надо подключить EEPROM и ADC
maksdonetskiy
Первый раз сказал Мяу!
Сообщения: 34
Зарегистрирован: Вс дек 15, 2019 13:44:30

Re: Приборы для Ваз 2106 прошу помощи с прошивкой

Сообщение maksdonetskiy »

Все, разобрался. Надо было подключить библиотеки eeprom. adc и button, после этого все удачно скомпилировалось. Hex сохранял через program (microprog suite) - hex file option - save. Загружаю hex в pickit2 и получаю предупреждение
Изображение
Вроде как прошивается, проверку записи проходит. В железе - не сохраняются данные калибровки (не работает запись в еепром?)

Добавлено after 2 hours 39 minutes 56 seconds:
Извиняюсь, это уже я затупил. В строках
AdrHi : byte = 12;
litr : array [0..AdrHi] of byte = (0,5,10,15,20,25,30,35,40,45,50,55,60)
указал
byte = 5;
litr : array [0..AdrHi] of byte = (0,20,40,60,80)
(вместо byte=5 нужно ставить 4, т.е 0 в калибровке не учитывается). После исправления все заработало как надо. прибор калибруется и сохраняет данные в еепром. Ошибка при прошивке (большой файл) на работу не повлияла. Огромное спасибо за помощь.
Хотелось бы еще исправить пару моментов в прошивке, а именно:
1. Убрать мигание при значении 06 и ниже
2. Зажечь точку 1-го разряда (со свободного порта RA3)
3. Переделать прибор под 3-разрядный семисегментник и на 3 разряд выводить букву L для бакомера и P для давления масла (хз возможно ли это, свободный порт всего 1, видел у одного парня такую реализацию, но его прошивок в инэте нет)
Если кто может помочь - буду очень благодарен
А пока что выкладываю проект и hex файлик с настроенными битами
Вложения
Oilpress.rar
Проект+Hex+биты конфигурации
(67.32 КБ) 158 скачиваний
Аватара пользователя
oleg110592
Друг Кота
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Re: Приборы для Ваз 2106 прошу помощи с прошивкой

Сообщение oleg110592 »

[uquote="maksdonetskiy",url="/forum/viewtopic.php?p=4139142#p4139142"]Хотелось бы еще исправить пару моментов в прошивке...[/uquote]
1) попробовать убрать эти строки

Код: Выделить всё

     if (i.7) and (V<6) then
      begin
      C1:=0;
      C2:=0;
      end;
2) RA3, насколько помню, может быть только входом
3) ввиду наличия отсутствия ресурсов микроконтроллера такой вариант предлагается - поставить подходящий по размеру и виду отдельный одноразрядный индикатор и чисто коммутацией (типа тумблер) зажигать нужные буквы...
Аватара пользователя
musor
Друг Кота
Сообщения: 39197
Зарегистрирован: Сб сен 13, 2014 16:27:32
Откуда: СпиртоГонск созвездия Омега

Re: Приборы для Ваз 2106 прошу помощи с прошивкой

Сообщение musor »

ну 3 разряда онно может тянуть... но в код не влезет наверно
ZМудрость(Опыт и выдержка) приходит с годами.
Все Ваши беды и проблемы, от недостатка знаний.
Умный и у дурака научится, а дураку и ..
Алберт Ейнштейн не поможет и ВВП не спасет.и МЧС опаздает
maksdonetskiy
Первый раз сказал Мяу!
Сообщения: 34
Зарегистрирован: Вс дек 15, 2019 13:44:30

Re: Приборы для Ваз 2106 прошу помощи с прошивкой

Сообщение maksdonetskiy »

[uquote="oleg110592",url="/forum/viewtopic.php?p=4139248#p4139248"][uquote="maksdonetskiy",url="/forum/viewtopic.php?p=4139142#p4139142"]Хотелось бы еще исправить пару моментов в прошивке...[/uquote]
1) попробовать убрать эти строки
2) RA3, насколько помню, может быть только входом
3) ввиду наличия отсутствия ресурсов микроконтроллера такой вариант предлагается - поставить подходящий по размеру и виду отдельный одноразрядный индикатор и чисто коммутацией (типа тумблер) зажигать нужные буквы...[/uquote]
1. Помогло, спасибо
2. Так и сделал, но загораются сразу обе точки. Думаю закрасить лаком черным ненужную
3. Я тоже об этом подумал)
Аватара пользователя
kotpalych
Электрический кот
Сообщения: 1062
Зарегистрирован: Пн ноя 21, 2011 16:45:00

Re: Приборы для Ваз 2106 прошу помощи с прошивкой

Сообщение kotpalych »

Точку на RA5 или RA2 .
Кнопку с RA0 на RA3 , RA0 на выход для третьего разряда.
Последний раз редактировалось kotpalych Пн дек 13, 2021 19:02:28, всего редактировалось 1 раз.
Невозможно починить то, что не сломалось.
Аватара пользователя
musor
Друг Кота
Сообщения: 39197
Зарегистрирован: Сб сен 13, 2014 16:27:32
Откуда: СпиртоГонск созвездия Омега

Re: Приборы для Ваз 2106 прошу помощи с прошивкой

Сообщение musor »

проще точку транзулем рулить
ZМудрость(Опыт и выдержка) приходит с годами.
Все Ваши беды и проблемы, от недостатка знаний.
Умный и у дурака научится, а дураку и ..
Алберт Ейнштейн не поможет и ВВП не спасет.и МЧС опаздает
maksdonetskiy
Первый раз сказал Мяу!
Сообщения: 34
Зарегистрирован: Вс дек 15, 2019 13:44:30

Re: Приборы для Ваз 2106 прошу помощи с прошивкой

Сообщение maksdonetskiy »

[uquote="kotpalych",url="/forum/viewtopic.php?p=4140928#p4140928"]Точку на RA5 или RA2 .
Кнопку с RA0 на RA3 , RA0 на выход для третьего разряда.[/uquote]
Как это в прошивке реализовать?)

Добавлено after 4 minutes 55 seconds:
[uquote="musor",url="/forum/viewtopic.php?p=4140954#p4140954"]проще точку транзулем рулить[/uquote]
Не совсем понял, откуда брать управление на базу транзюка, и как он поможет не зажигать точку второго разряда?

Добавлено after 12 minutes 45 seconds:
[uquote="musor",url="/forum/viewtopic.php?p=4139307#p4139307"]ну 3 разряда онно может тянуть... но в код не влезет наверно[/uquote]
Вот видос парня, выпускающего такие приборы. Я не знаю что за начинка в этой 3-ей серии, но предыдущие он собирал на 16f676 по схеме, приложенной в 1 посте. Интересная фича здесь - при включении питания МК сравнивает значения уровня топлива предыдущего запуска с текущим и отображает изменения. Ну и здесь есть третий разряд)
https://www.youtube.com/watch?v=GlaaYu9Q_Do
Аватара пользователя
oleg110592
Друг Кота
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Re: Приборы для Ваз 2106 прошу помощи с прошивкой

Сообщение oleg110592 »

для 3 разрядов Pic16f819 используют, что разумно (имхо):
https://www.youtube.com/watch?v=QjcugxTsR_c
схема платы, прошивки нет похоже:
https://www.drive2.ru/l/9185157/
з.ы. может сразу планшетик андроидный лучше вставить в торпеду... :)))
СпойлерИзображение
maksdonetskiy
Первый раз сказал Мяу!
Сообщения: 34
Зарегистрирован: Вс дек 15, 2019 13:44:30

Re: Приборы для Ваз 2106 прошу помощи с прошивкой

Сообщение maksdonetskiy »

[uquote="oleg110592",url="/forum/viewtopic.php?p=4141085#p4141085"]для 3 разрядов Pic16f819 используют, что разумно (имхо)[/uquote]
Невнимательно смотрел значится) Тогда вопрос закрыт, нельзя значит нельзя... Оставлю все как есть
Планшет конечно можно, но для этого как минимум мозги должны стоять :))
OKF
Это не хвост, это антенна
Сообщения: 1393
Зарегистрирован: Вт июн 07, 2011 08:03:18

Re: Приборы для Ваз 2106 прошу помощи с прошивкой

Сообщение OKF »

[uquote="oleg110592",url="/forum/viewtopic.php?p=4141085#p4141085"]для 3 разрядов Pic16f819 используют, что разумно (имхо):[/uquote]
Да ладно. Товарищу делал вольтметр на 676 - 10 пинов на 3 разряда с точкой.
Аватара пользователя
oleg110592
Друг Кота
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Re: Приборы для Ваз 2106 прошу помощи с прошивкой

Сообщение oleg110592 »

ну и я давненько делал и термометр и вольтметр на pic16f676
Изображение
если смысл сейчас упираться - 18 и 20-ногих микроконтроллеров нынче полно. Да и кто сейчас возьмется программу альтруизмистично переписать...
OKF
Это не хвост, это антенна
Сообщения: 1393
Зарегистрирован: Вт июн 07, 2011 08:03:18

Re: Приборы для Ваз 2106 прошу помощи с прошивкой

Сообщение OKF »

[uquote="oleg110592",url="/forum/viewtopic.php?p=4141236#p4141236"]если смысл сейчас упираться - 18 и 20-ногих микроконтроллеров нынче полно. Да и кто сейчас возьмется программу альтруизмистично переписать...[/uquote]
Это да. Это другое дело, согласен.)
Ответить

Вернуться в «PIC»