Mishany отлично получилось чесно даже лучше чем я ожидал.
Яркость не дотягивает всегда или только в момент изменения цифер? пробовали выставит какое то статическое значение и посмотреть? если только в момент переключение, можно особо с этим не заморачиватся.
Всегда, как бы на 60-70% от нормы яркость ламп, и при изменении любого значения заметна небольшая волна на шкале. Чем больше частота на динамической индикации тем слабее светятся лампы, понижение частоты пагубно отражается в момент плавной смены цифр. Сегодня, если будет время, проработаю меню, коррекцию, вот только опять есть неясность в режимах и колличестве кнопок/тумблеров немного подитожу: 1) Есть шкала с делением для скорости 1 диод - 10км/ч, также может отображать в % остаток топлива (нужны данные по сопротивлению датчика), 2) есть циферки, могут отображать скорость, пробег счетчик обнуляемый(суточный) и общий, может показывать напряжение борт. сети. 3) кнопки тумблеры...., одна кнопка может отрабатывать как длинное нажатие так и короткое с колличеством которых надо определиться 4) еще раз подумать над режимами отображения и методами переключения между ними. 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 индикацию топлива и АКБ.
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++;// здесь складываются импульсы от ДС }
этот массив можно попробовать уменьшить до const uint8_t psc[13]={1,42,84,126,168,210,255,210,168,126,84,42,1};
Шаг в 16% от яркости думаю хватит, да и обрабатывать проще. И еще есть вопрос - единица в начале и конце массива обязательна?
на счет дребезга контактов, можно установить таймер короткого нажатия в минимум на 0.5 секунды, хотя думаю это лишняя работа, тумблер конструкция понадежней кнопки, там дребезжание минимально. до щелчка замыкания не происходит, а после него контакт зажимает пружиной намертво.
еденички означают полную яркость, 255 - значит практически потушен. на любом механическом контакте присутствует дребезг с кнопками отдельная песня еще будет, т.к. в программе уже куча прерываний... три по счетчикам (два по переполнению, одно по совпадению), int0, ADC...
Mishany я думал наоборот 255 полная яркость, теперь понятней.
На счет дребезжания, сколько контактов еще можно подключить для настройки/переключений? как вариант можно тумблер сделать чисто для переключений индикации, а настройку на чем то другом.
И о датчике топлива, я попытаюсь как можно быстрее замерить мин и макс показатели датчика, но вдруг его менять придется (я его купил но мне его качество что-то доверия не внушает). Возможно стоит калибровку для него сделать, как можно проще... извините пожалуйста за лишнюю работу... ну в общем калибровку можно по двум точкам замерять, сделать массив, первый индекс - пустой бак, последний - полный. промежуток заполнить циклом.
А по коду видно что когда перебор массива доходит до 12 номера (середины) происходит смена цифры .Во вторник буду с кнопками колдовать, посмотрю что получиться... По поводу дут, у него есть мин и макс значение сопротивления что соответственно равно полный и пустой где полный 100% пустой 0% вопрос зачем делать калибровку если литры он показывать всеравно не сможет? Про ДУТ имеем 345 Ом на пустом и 7 Ом на полном вешаем его через резистор 1кОм к 5 вольтам получим при кз в датчике 5 мА, адс с ионом 2,56В, а при пустом баке напряжение будет 1,25В на адц, ADCH будет в пределах 0-120 что равно шагу измерения 0,01В вполне достаточно для процентного отображения топлива в баке. А куда все энтузиасты подевались, тухляк како-то в теме, видать ни кому не интересно.... Видать нет здесь настоящих байкеров К примеру этот спидометр не только на лампах можно собрать, но и на диодах и знакосинтезирующем дисплее...... Кстати можно на инт0 попеременно подавать импульсы с ДС и коленвала (пара транзисторов в обвязке) получиться и спидометр и тахометр, либо инт0 и инт1 по переменно запрещая прерывания на каждом входе.....
Mishany я думаю ентузиастам просто добавить нечего, вы основательно за дело взялись я тоже думал что смогу помочь, но пока только наблюдаю.
касаемо тахометра, при такой компоновке как у нас, надо делать вторую шкалу над шкалой скорости, либо выносить в отдельное табло. вообще вторая шкала смотрелась бы неплохо но тогда надо светодиоды меньшего размера паять, чтоб места хватило. было б интересно смотреть как шкала скорости догоняет шкалу тахометра при разгоне и наоборот при торможении.
Можна было бы если ног на мк было бы раза в два больше Либо добавлять еще кучу микросхем и переписывать прогу с нуля.... По изначальному тех. заданию отмеги8 хватало с запасом, с тем что сейчас уже в притирку. А если брать другой мк то я сливаюсь Доделываю этот проект и оформляю его в лабораторию для общеиспользования. А взялся чтоб подготовиться к реанимации приборки от авто китайского производства, в ней стоит атмега8 и данные пробега храняться в ее eeprom, которая благополучно скончалась и приборка вместо пробега показывает теперь матерное слово ну и + fuse на блокировку от считывания, так что кроме как прошивку с нуля писать больше ничего не остается.
Идея двух шкал - тахометр, спидометр, на мой взгляд интересна. Но нет смысла объединять её в одном контроллере. (механически, в одном корпусе - да. а электронно в одном контроллере с управлением ламповым спидометром - нет) Делал тахометры и утверждаю - очень простое устройство. Пропускаем импульсы через 555, на выходе - заряжаем конденсатор, импульсами со стабильной длительностью, но изменяемой частотой. Выводим через светодиодный вольтметр. Один блок ( БЛОК - как громко сказано ) подключаем к датчику скорости, другой - к датчику коленвала.
(судя по обсуждению - люди тут с электроникой знакомые, поэтому не стал париться с рисованием совсем простеньких схемок. надеюсь - словесного описания - достаточно)
По поводу кнопок и тумблеров: всего две кнопки 1кн- короткое - переключает режимы отображения. 1кн - длинное - сбрасывание пробега из режима пробега. 2кн - длинное - вход в режим калибровки. 2кн - короткое - запись значения в еепром. При включении и при записи шкала доходит до максимума и обратно.
Mishany смотрите, если ставить тумблер то надо чтоб при длинном нажатии как-нибудь отключалась проверка нажатия. ну тоесть, не будет же удобно на ходу включать, ждать 5 секунд и потом выключать. Он на то и тумблер: включил - забыл. По этим же соображениям именно тумблер и выбран, его не надо держать.
С тумблером только по режимам получиться, с обнулением и калибровкой только кнопка. Да и по вашему зажать кнопку для обнуления сложнее чем тумблером щелкать туда сюда несколько раз? Сомневаюсь..... Две кнопки куда проще, ну или на кройняк если уж так нравится сам тумблер сделать его без фиксации по типу джостика.... Я к тому что комбинацию 1-0-1-0-1 я не отлавлю ногой мк чтоб это работало без глюков... Пробег, режим отображения сохраняет только при отключении питания и то, если значения были изменены:))) Подумайте еще раз о тумблере и кнопках.
Так может - четыре кнопки. Каждой кнопке - свой монстабильный на 555 (ну да - люблю я её)? Размеры и цена 555 в СОИКе + обвязка вполне позволяют использовать в качестве вспомогательного элемента. А выводы моностабильных - попарно на одну и вторую ногу контроллера.
Еще можно на кондюке и пару резисторов с транзисторами сделать одновибратор, так чтоба при однократном переключении тумблера появлялся сигнал на 0,5 сек, при переключении туда-сюда держался сигнал, закончил щелкать сигнал пропал.... но это пару дц места на плате которого и так не А 555 чесно не понял какой с них сигнал будет от тумблера?
Если АЦП.то я бы сказал вот так А если 555, то классическая схема мостабильного одновибратора - одно нажатие кнопки без фиксации=один сигнал заданной длинны.
Mishany может дело в том что я просто привык к тумблерам. у меня на моте много чего на них сделанно, дальний-ближний свет, тумблер габаритов, тумблер включения зажигания, тумблер поворотников =) в общем 4 тумблера только на руле стоит. Кнопок только 3 - гудок, стартер и мигальник дальним (который практически не используется, потому что фара всегда включена). В автомобиле - та же самая система.
Можно сделать калибровку кнопкой а переключение между режимами - тумблером, это отличный вариант. Но надо учитывать что тумблер будет перекючатся в статическое положение, т.е. там нет нажатий, только вкл-выкл-вкл.
калибровку надо делать без кнопок - через блютуз, например. Ну или хотя бы кнопками поключаемыми через технологический разъём на время настройки. А кнопки и менюшки в транспорте меня, например, бесят. В моём старом опеле, чтобы притушить яркость панели, достаточно покрутить регулятор, а в новом служебном пеже, надо войти в менюшку итд.., что во время езды сделать довольно не тривиально.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения