Обсуждаем электронику на колесах. Нужен увлажнитель воздуха для Камаза? Вам сюда.
Ответить

Re: Ламповый спидометр на ИН-8Б

Пт сен 12, 2014 00:16:48

Mishany отлично получилось :beer: чесно даже лучше чем я ожидал.

Яркость не дотягивает всегда или только в момент изменения цифер? пробовали выставит какое то статическое значение и посмотреть? если только в момент переключение, можно особо с этим не заморачиватся.

Re: Ламповый спидометр на ИН-8Б

Пт сен 12, 2014 05:48:30

Всегда, как бы на 60-70% от нормы яркость ламп, и при изменении любого значения заметна небольшая волна на шкале.
Чем больше частота на динамической индикации тем слабее светятся лампы, понижение частоты пагубно отражается в момент плавной смены цифр.
Сегодня, если будет время, проработаю меню, коррекцию, вот только опять есть неясность в режимах и колличестве кнопок/тумблеров немного подитожу:
1) Есть шкала с делением для скорости 1 диод - 10км/ч, также может отображать в % остаток топлива (нужны данные по сопротивлению датчика),
2) есть циферки, могут отображать скорость, пробег счетчик обнуляемый(суточный) и общий, может показывать напряжение борт. сети.
3) кнопки тумблеры...., одна кнопка может отрабатывать как длинное нажатие так и короткое с колличеством которых надо определиться
4) еще раз подумать над режимами отображения и методами переключения между ними.
Autosteam читайте внимательней посты, уже спрашивал про сопротивление датчика уровня, но ответа так и не последовало....

Re: Ламповый спидометр на ИН-8Б

Пт сен 12, 2014 08:29:48

Mishany постараюсь сегодня купить датчик и замерить. по пункту 3, если кнопка может определять короткое нажатие, то думаю хватит тумблера для настройки(вместо кнопки). допустим:
у тумблера есть 3 положения:
1 ; 0 ; 2
соответственно положению переключателя.

- когда тумблер в режиме 0(он выключен, сигнал не проходит), выводим скорость.
- когда тумблер в режиме 1, выводим пробег.
- быстрое двойное включение тумблера с режима 0 в режим 1 и обратно в 0 (последовательность сигналов 0>1>0>1>0) обнуляет счетчик пробега.
- когда счетчик в режиме 2 выводим на шкалу уровень топлива, на лампы заряд АКБ
- быстрое двойное переключение с режима 0 в режим 2 (последовательность сигналов 0>2>0>2>0) заходит в калибровочное меню.
- в калибровочном меню, переключение в режим 1 изменяет количество импульсов на 100 м пробега. (цикл от минимального значения допустим в 280 до максимального в 420)
- в калибровочном меню, переключение в режим 2 запоминает данные и выходит с меню.
- после выхода с меню показывает стандартную для режима 2 индикацию топлива и АКБ.

Re: Ламповый спидометр на ИН-8Б

Пт сен 12, 2014 10:46:48

с тумблером конечно хорошо, если б не дребезг контактов который может давать 0>1>0>1>0....
пока выложу что есть мож кому будет интересно
Спойлер
Код:
#define F_CPU 8000000UL
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
#include <avr/eeprom.h>
unsigned char edinicy EEMEM;
unsigned char desyatki EEMEM;
unsigned char sotny EEMEM;

//.......................0.....1.....2.....3.....4.....5.....6.....7.....8.....9....пусто
const char digit[11] = {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x10}; // масив цифр для отправки на К155ИД1
volatile char lev[7] = {255, 1, 1, 255, 255, 255, 255};
volatile uint8_t out[3] = {10, 10, 10};
volatile unsigned char lever;
unsigned int D1,D1N, p, S, df;
unsigned char k, sh, l1, l2, l3, l4, ds, n=0;
volatile uint8_t fr[3]; // какой разряд изменился
uint8_t tscr[3]; // временный экран
uint8_t iocr = 0, dig = 0;
char ms = 0, digr;
const uint8_t psc[25]={1,11,32,43,64,85,106,157,178,199,220,251,255,251,220,199,178,157,106,85,64,43,32,11,1}; // ступени яркости
const uint8_t lm1[21]={0,1,2,3,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5};//массивы для шкалы
const uint8_t lm2[21]={0,0,0,0,0,0,1,2,3,4,5,5,5,5,5,5,5,5,5,5,5};//----
const uint8_t lm3[21]={0,0,0,0,0,0,0,0,0,0,0,1,2,3,4,5,5,5,5,5,5};//----
const uint8_t lm4[21]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,3,4,5};//----
const uint8_t anod[4]={0,1,4,5};//распределение анодных портов для шкалы
volatile uint8_t catod[4]={0,0,0,0};//   временный массив
   
   
void raz(uint8_t l)//разложение на разряды шкалы в пятиричной системе счисления
{               //с занесением во временный ммассив
catod[0]=lm1[l];
catod[1]=lm2[l];
catod[2]=lm3[l];
catod[3]=lm4[l];
}

void code(char lever)//пятеричная система переводится на конкретные порты
{
   switch (lever)
   {
   case 0:   break;
   case 1:   PORTB|=(1<<0);   break;
   case 2:   PORTB|=(1<<0)|(1<<4);   break;
   case 3:   PORTB|=(1<<0)|(1<<4)|(1<<5);   break;
   case 4:   PORTB|=(1<<0)|(1<<4)|(1<<5)|(1<<6);   break;
   case 5:   PORTB|=(1<<0)|(1<<4)|(1<<5)|(1<<6)|(1<<7);   break;
   }
   
}

ISR(TIMER0_OVF_vect)//шкала
{
   p++; //организация отрезка выборки ~500ms c ДС
   if (p>1950)
   {
      D1=S;//перекладываем насчитаное для дальнейшей обработки
      S=0;//сбрасываем насчитаное за 0,5сек
      p=0;
      D1N=D1N+D1/6; //суммируем пробег метры
      if (D1N>1000)// если насчитали больше км складываем в конечную копилку
         {
         df++;
         D1N=D1N/100; //тут оставшиеся десятки, а может даже и сотни возвращаем в сумматор
         }
   }
  PORTB&=~((1<<0)|(1<<4)|(1<<5)|(1<<6)|(1<<7));//сбрасываем катоды шкалы
  PORTD&=~((1<<0)|(1<<1)|(1<<4)|(1<<5));//сбрасываем аноды шкалы
  PORTD|=(1<<anod[k]);               //перебираем аноды
  code(catod[k]);                  //выводим значение для каждого анода
   k++;
   if (k>3){k=0;}               //что бы начать все сначало
}

void soft (int D1) // эффект плавной смены цифр, здесь идет поиск тех цифр, которые надо менять
{
 uint8_t i;// запомнили новое время для 3 разрядов и заносим в массив tscr[]
       tscr[0] = D1 / 100;// сотни
      tscr[1] = (D1 / 10) % 10;//десятки
      tscr[2] = D1 % 10;//еденицы
      for (i = 0; (i < 3); i++) // сравнили с тем, что было 6 раз (цикл)
         if (tscr[i] != out[i]) // узнаём в каком разряде поменялась цифра, массив out[i] содержит текущие значения
            {fr[i] = 1;} // цифра изменилась создаем массив с индикатором 1 измененных цифр
         else
            {fr[i] = 0;} // цифра осталась
         iocr = 0;


}

ISR (TIMER2_OVF_vect) // реализация ШИМ управления яркостью ламп и подсветки
{
   uint8_t i;// переменная i
   PORTB &=~((1<<1)|(1<<2)|(1<<3));
   OCR2 = lev[dig]; // подготавливаемся к выводу следуйщего разряда. таймер по совпадению
   if (iocr < 25)// плавная смена яркости цифр
      {
      if (++ms == 18) // ~38ms
         {
         ms = 0;
         for (i = 0; i < 3; i++) //без 100грамм не разобраться:
            {
            if ((fr[i] == 1) || (iocr == 0))
               {
               lev[i] = psc[iocr];
               }
            if (iocr == 12)
               {
               out[i] = tscr[i];
               }               
            }
         iocr++;
         }
      }
}

ISR (TIMER2_COMP_vect) // реализация ШИМ управления яркостью ламп и подсветки
{
   if(dig < 3)// три разряда 0,1,2 digr3-еденицы
   {
       PORTC = digit[out[dig]]; // выводим цифру на дешифратор катоды т.е.0-9
       digr=dig+1;   
   if (dig==0){if (out[0]!=0){PORTB|=(1<<digr);}}// далее выбор анодов цифр с гашением 0
   if (dig==1){if ((out[0]!=0)||(out[1]!=0)){PORTB|=(1<<digr);}}
   if (dig==2){PORTB|=(1<<digr);}   
   }   
   if (++dig > 3){dig = 0;}
}

ISR(ADC_vect)
{
ADCSRA&=~(1<<ADSC);//это вроде аппаратно должно сбрасываться
}

ISR(INT0_vect)
{
S++;// здесь складываются импульсы от ДС
}

int main(void)
{
   /**********************************настройка портов******************************/
   DDRB|=(1<<0)|(1<<4)|(1<<5)|(1<<6)|(1<<7)|(1<<1)|(1<<2)|(1<<3);
   DDRD|=(1<<0)|(1<<1)|(1<<4)|(1<<5)|(1<<3);
   DDRC|=(1<<0)|(1<<1)|(1<<2)|(1<<3);//к дешифратору
/**********************************настройка таймера2 индикация цифр*****************************/
TCCR2 |= (1 << CS20) | (1 << CS21);
TIMSK |= (1<<OCIE2) | (1<<TOIE2);
/**********************************настройка таймера1 индикация шкалы*****************************/
TCCR0 |= (1<<CS01);// | (1<<CS00);
TIMSK |= (1<<TOIE0);
/**********************************настройка внешнего прерывания INT0*****************************/
MCUCR |= (1<<ISC01);
GICR |= (1<<INT0);   
/**********************************настройка внешнего прерывания INT1*****************************/
//для мониторинга питания, на случай его пропадания записать пробег в eeprom
//пока в процессе
/**********************************настройка ADC*****************************/
   ADMUX |= (1 << REFS0); // Vref=VCC=5V
   ADMUX |= (1 << MUX0)|(1<<MUX1)|(1<<MUX2)|(1<<ADLAR); // Подключаем канал ADC7, 8-bit ADC
   ADCSRA |= (1 << ADEN) // разрешение АЦП
   |(1 << ADSC) // запуск преобразования
   |(1 << ADPS2)|(1 << ADPS1)|(1 << ADPS0)|(1<<ADFR) // предделитель на 128
   |(1 << ADIE); // разрешение прерывания от АЦП
/********************************************************************************/
   sei();
   while(1)//тестовые формулы и т.д.
   {
      sh=(ADCH*100)/1275;
      ds=D1/10;
      soft(df);
      raz(ds);
      _delay_ms(1000);
      ADCSRA|=(1<<ADSC);
   }
   return 0;
}

Re: Ламповый спидометр на ИН-8Б

Сб сен 13, 2014 18:34:56

Mishany, купил датчик топлива, но пока не могу замерить, отец сломал мультитестер :?

const uint8_t psc[25]={1,11,32,43,64,85,106,157,178,199,220,251,255,251,220,199,178,157,106,85,64,43,32,11,1}; // ступени яркости
этот массив можно попробовать уменьшить до
const uint8_t psc[13]={1,42,84,126,168,210,255,210,168,126,84,42,1};

Шаг в 16% от яркости думаю хватит, да и обрабатывать проще. И еще есть вопрос - единица в начале и конце массива обязательна?


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

Re: Ламповый спидометр на ИН-8Б

Вс сен 14, 2014 16:08:14

еденички означают полную яркость, 255 - значит практически потушен.
на любом механическом контакте присутствует дребезг :)))
с кнопками отдельная песня еще будет, т.к. в программе уже куча прерываний...
три по счетчикам (два по переполнению, одно по совпадению), int0, ADC...

Re: Ламповый спидометр на ИН-8Б

Вс сен 14, 2014 19:49:30

Mishany я думал наоборот 255 полная яркость, теперь понятней.

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

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

Re: Ламповый спидометр на ИН-8Б

Вс сен 14, 2014 21:17:03

А по коду видно что когда перебор массива доходит до 12 номера (середины) происходит смена цифры :))) .Во вторник буду с кнопками колдовать, посмотрю что получиться...
По поводу дут, у него есть мин и макс значение сопротивления что соответственно равно полный и пустой где полный 100% пустой 0% вопрос зачем делать калибровку если литры он показывать всеравно не сможет?
Про ДУТ имеем 345 Ом на пустом и 7 Ом на полном :))) вешаем его через резистор 1кОм к 5 вольтам получим при кз в датчике 5 мА, адс с ионом 2,56В, а при пустом баке напряжение будет 1,25В на адц, ADCH будет в пределах 0-120 что равно шагу измерения 0,01В вполне достаточно для процентного отображения топлива в баке.
А куда все энтузиасты подевались, тухляк како-то в теме, видать ни кому не интересно.... Видать нет здесь настоящих байкеров :))) К примеру этот спидометр не только на лампах можно собрать, но и на диодах и знакосинтезирующем дисплее......
Кстати можно на инт0 попеременно подавать импульсы с ДС и коленвала (пара транзисторов в обвязке) получиться и спидометр и тахометр, либо инт0 и инт1 по переменно запрещая прерывания на каждом входе.....

Re: Ламповый спидометр на ИН-8Б

Пн сен 15, 2014 21:34:45

Mishany я думаю ентузиастам просто добавить нечего, вы основательно за дело взялись :)) я тоже думал что смогу помочь, но пока только наблюдаю.

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

Re: Ламповый спидометр на ИН-8Б

Пн сен 15, 2014 23:04:52

Можна было бы если ног на мк было бы раза в два больше :)))
Либо добавлять еще кучу микросхем и переписывать прогу с нуля....
По изначальному тех. заданию отмеги8 хватало с запасом, с тем что сейчас уже в притирку. А если брать другой мк то я сливаюсь :)))
Доделываю этот проект и оформляю его в лабораторию для общеиспользования.
А взялся чтоб подготовиться к реанимации приборки от авто китайского производства, в ней стоит атмега8 и данные пробега храняться в ее eeprom, которая благополучно скончалась и приборка вместо пробега показывает теперь матерное слово :))) ну и + fuse на блокировку от считывания, так что кроме как прошивку с нуля писать больше ничего не остается.

Re: Ламповый спидометр на ИН-8Б

Вт сен 16, 2014 08:55:36

Идея двух шкал - тахометр, спидометр, на мой взгляд интересна.
Но нет смысла объединять её в одном контроллере. (механически, в одном корпусе - да. а электронно в одном контроллере с управлением ламповым спидометром - нет)
Делал тахометры и утверждаю - очень простое устройство. Пропускаем импульсы через 555, на выходе - заряжаем конденсатор, импульсами со стабильной длительностью, но изменяемой частотой. Выводим через светодиодный вольтметр. Один блок ( БЛОК - как громко сказано :) ) подключаем к датчику скорости, другой - к датчику коленвала.

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

Re: Ламповый спидометр на ИН-8Б

Вт сен 16, 2014 19:01:23

По поводу кнопок и тумблеров:
всего две кнопки
1кн- короткое - переключает режимы отображения.
1кн - длинное - сбрасывание пробега из режима пробега.
2кн - длинное - вход в режим калибровки.
2кн - короткое - запись значения в еепром.
При включении и при записи шкала доходит до максимума и обратно.

Re: Ламповый спидометр на ИН-8Б

Вт сен 16, 2014 22:45:39

Mishany смотрите, если ставить тумблер то надо чтоб при длинном нажатии как-нибудь отключалась проверка нажатия. ну тоесть, не будет же удобно на ходу включать, ждать 5 секунд и потом выключать. Он на то и тумблер: включил - забыл. По этим же соображениям именно тумблер и выбран, его не надо держать.

Re: Ламповый спидометр на ИН-8Б

Вт сен 16, 2014 23:24:52

С тумблером только по режимам получиться, с обнулением и калибровкой только кнопка.
Да и по вашему зажать кнопку для обнуления сложнее чем тумблером щелкать туда сюда несколько раз? Сомневаюсь.....
Две кнопки куда проще, ну или на кройняк если уж так нравится сам тумблер сделать его без фиксации по типу джостика....
Я к тому что комбинацию 1-0-1-0-1 я не отлавлю ногой мк чтоб это работало без глюков...
Пробег, режим отображения сохраняет только при отключении питания и то, если значения были изменены:)))
Подумайте еще раз о тумблере и кнопках.

Re: Ламповый спидометр на ИН-8Б

Ср сен 17, 2014 02:24:28

Так может - четыре кнопки. Каждой кнопке - свой монстабильный на 555 (ну да - люблю я её)?
Размеры и цена 555 в СОИКе + обвязка вполне позволяют использовать в качестве вспомогательного элемента. А выводы моностабильных - попарно на одну и вторую ногу контроллера.

Re: Ламповый спидометр на ИН-8Б

Ср сен 17, 2014 05:29:26

Еще можно на кондюке и пару резисторов с транзисторами сделать одновибратор, так чтоба при однократном переключении тумблера появлялся сигнал на 0,5 сек, при переключении туда-сюда держался сигнал, закончил щелкать сигнал пропал.... но это пару дц места на плате которого и так не
А 555 чесно не понял какой с них сигнал будет от тумблера?

Re: Ламповый спидометр на ИН-8Б

Ср сен 17, 2014 07:50:47

Изображение
Используйте для кнопок АЦП :) . 1 вывод = много кнопок...

Re: Ламповый спидометр на ИН-8Б

Ср сен 17, 2014 08:15:29

Если АЦП.то я бы сказал вот так
А если 555, то классическая схема мостабильного одновибратора - одно нажатие кнопки без фиксации=один сигнал заданной длинны.
Вложения
Безымянный.jpg
(38.56 KiB) Скачиваний: 270

Re: Ламповый спидометр на ИН-8Б

Ср сен 17, 2014 09:01:12

Mishany может дело в том что я просто привык к тумблерам. у меня на моте много чего на них сделанно, дальний-ближний свет, тумблер габаритов, тумблер включения зажигания, тумблер поворотников =) в общем 4 тумблера только на руле стоит. Кнопок только 3 - гудок, стартер и мигальник дальним (который практически не используется, потому что фара всегда включена). В автомобиле - та же самая система.

Можно сделать калибровку кнопкой а переключение между режимами - тумблером, это отличный вариант. Но надо учитывать что тумблер будет перекючатся в статическое положение, т.е. там нет нажатий, только вкл-выкл-вкл.

Re: Ламповый спидометр на ИН-8Б

Ср сен 17, 2014 11:02:59

калибровку надо делать без кнопок - через блютуз, например. Ну или хотя бы кнопками поключаемыми через технологический разъём на время настройки. А кнопки и менюшки в транспорте меня, например, бесят. В моём старом опеле, чтобы притушить яркость панели, достаточно покрутить регулятор, а в новом служебном пеже, надо войти в менюшку итд.., что во время езды сделать довольно не тривиально.
Ответить