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

Обсуждаем электронику на колесах. Нужен увлажнитель воздуха для Камаза? Вам сюда.
Ответить
Открыл глаза
Сообщения: 66
Зарегистрирован: Чт авг 28, 2014 11:04:25

Сообщение Autosteam »

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

Яркость не дотягивает всегда или только в момент изменения цифер? пробовали выставит какое то статическое значение и посмотреть? если только в момент переключение, можно особо с этим не заморачиватся.
Реклама
Электрический кот
Аватара пользователя
Сообщения: 1031
Зарегистрирован: Чт июн 20, 2013 00:00:58
Откуда: москва, м.Сходненская

Сообщение Mishany »

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

Сообщение Autosteam »

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 индикацию топлива и АКБ.
Электрический кот
Аватара пользователя
Сообщения: 1031
Зарегистрирован: Чт июн 20, 2013 00:00:58
Откуда: москва, м.Сходненская

Сообщение Mishany »

с тумблером конечно хорошо, если б не дребезг контактов который может давать 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;
}
Реклама
Эиком - электронные компоненты и радиодетали
Открыл глаза
Сообщения: 66
Зарегистрирован: Чт авг 28, 2014 11:04:25

Сообщение Autosteam »

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 секунды, хотя думаю это лишняя работа, тумблер конструкция понадежней кнопки, там дребезжание минимально. до щелчка замыкания не происходит, а после него контакт зажимает пружиной намертво.
Реклама
Электрический кот
Аватара пользователя
Сообщения: 1031
Зарегистрирован: Чт июн 20, 2013 00:00:58
Откуда: москва, м.Сходненская

Сообщение Mishany »

еденички означают полную яркость, 255 - значит практически потушен.
на любом механическом контакте присутствует дребезг :)))
с кнопками отдельная песня еще будет, т.к. в программе уже куча прерываний...
три по счетчикам (два по переполнению, одно по совпадению), int0, ADC...
Реклама
Открыл глаза
Сообщения: 66
Зарегистрирован: Чт авг 28, 2014 11:04:25

Сообщение Autosteam »

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

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

И о датчике топлива, я попытаюсь как можно быстрее замерить мин и макс показатели датчика, но вдруг его менять придется (я его купил но мне его качество что-то доверия не внушает). Возможно стоит калибровку для него сделать, как можно проще... :facepalm: извините пожалуйста за лишнюю работу... ну в общем калибровку можно по двум точкам замерять, сделать массив, первый индекс - пустой бак, последний - полный. промежуток заполнить циклом.
Электрический кот
Аватара пользователя
Сообщения: 1031
Зарегистрирован: Чт июн 20, 2013 00:00:58
Откуда: москва, м.Сходненская

Сообщение Mishany »

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

Сообщение Autosteam »

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

касаемо тахометра, при такой компоновке как у нас, надо делать вторую шкалу над шкалой скорости, либо выносить в отдельное табло. вообще вторая шкала смотрелась бы неплохо но тогда надо светодиоды меньшего размера паять, чтоб места хватило. было б интересно смотреть как шкала скорости догоняет шкалу тахометра при разгоне и наоборот при торможении.
Электрический кот
Аватара пользователя
Сообщения: 1031
Зарегистрирован: Чт июн 20, 2013 00:00:58
Откуда: москва, м.Сходненская

Сообщение Mishany »

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

Сообщение Arwood »

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

(судя по обсуждению - люди тут с электроникой знакомые, поэтому не стал париться с рисованием совсем простеньких схемок. надеюсь - словесного описания - достаточно)
Электрический кот
Аватара пользователя
Сообщения: 1031
Зарегистрирован: Чт июн 20, 2013 00:00:58
Откуда: москва, м.Сходненская

Сообщение Mishany »

По поводу кнопок и тумблеров:
всего две кнопки
1кн- короткое - переключает режимы отображения.
1кн - длинное - сбрасывание пробега из режима пробега.
2кн - длинное - вход в режим калибровки.
2кн - короткое - запись значения в еепром.
При включении и при записи шкала доходит до максимума и обратно.
Открыл глаза
Сообщения: 66
Зарегистрирован: Чт авг 28, 2014 11:04:25

Сообщение Autosteam »

Mishany смотрите, если ставить тумблер то надо чтоб при длинном нажатии как-нибудь отключалась проверка нажатия. ну тоесть, не будет же удобно на ходу включать, ждать 5 секунд и потом выключать. Он на то и тумблер: включил - забыл. По этим же соображениям именно тумблер и выбран, его не надо держать.
Электрический кот
Аватара пользователя
Сообщения: 1031
Зарегистрирован: Чт июн 20, 2013 00:00:58
Откуда: москва, м.Сходненская

Сообщение Mishany »

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

Сообщение Arwood »

Так может - четыре кнопки. Каждой кнопке - свой монстабильный на 555 (ну да - люблю я её)?
Размеры и цена 555 в СОИКе + обвязка вполне позволяют использовать в качестве вспомогательного элемента. А выводы моностабильных - попарно на одну и вторую ногу контроллера.
Электрический кот
Аватара пользователя
Сообщения: 1031
Зарегистрирован: Чт июн 20, 2013 00:00:58
Откуда: москва, м.Сходненская

Сообщение Mishany »

Еще можно на кондюке и пару резисторов с транзисторами сделать одновибратор, так чтоба при однократном переключении тумблера появлялся сигнал на 0,5 сек, при переключении туда-сюда держался сигнал, закончил щелкать сигнал пропал.... но это пару дц места на плате которого и так не
А 555 чесно не понял какой с них сигнал будет от тумблера?
Мудрый кот
Аватара пользователя
Сообщения: 1795
Зарегистрирован: Ср апр 04, 2012 09:55:53
Откуда: Северодонецк

Сообщение RoboC »

Изображение
Используйте для кнопок АЦП :) . 1 вывод = много кнопок...
У того, кто делает — получается редко. У того, кто не делает — не получается никогда.
Контактная информация:
Держит паяльник хвостом
Аватара пользователя
Сообщения: 986
Зарегистрирован: Чт янв 13, 2011 13:51:26

Сообщение Arwood »

Если АЦП.то я бы сказал вот так
А если 555, то классическая схема мостабильного одновибратора - одно нажатие кнопки без фиксации=один сигнал заданной длинны.
Вложения
Безымянный.jpg
(38.56 КБ) 301 скачивание
Открыл глаза
Сообщения: 66
Зарегистрирован: Чт авг 28, 2014 11:04:25

Сообщение Autosteam »

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

Можно сделать калибровку кнопкой а переключение между режимами - тумблером, это отличный вариант. Но надо учитывать что тумблер будет перекючатся в статическое положение, т.е. там нет нажатий, только вкл-выкл-вкл.
Друг Кота
Аватара пользователя
Сообщения: 7365
Зарегистрирован: Пт авг 28, 2009 21:34:30
Откуда: 845-й км.

Сообщение uldemir »

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

Вернуться в «АвтоМотоВело»