Цифровой спидометр
Re: Цифровой спидометр
Итак, пример кода на C (Code Vision):
определение переменных:
volatile unsigned char timer1_ovf_counter=0; // Cколько раз переполнялся таймер1 счёта импульсов
unsigned char timer1_ovf_counter_summ=0; // Cколько раз переполнялся таймер1 счёта импульсов - результирующее значение
unsigned char timer2_clock=0; // Необходимо для отсчёта времени 1 сек таймером 2
unsigned char timer1_counterH; // Старший байт таймера счёта по окончанию 1 сек
unsigned char timer1_counterL; // Младший байт таймера счёта по окончанию 1 сек
unsigned int frequency_tmp; // промежуточная переменная для расчета частоты
инициализация таймеров:
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 7.813 kHz
// Mode: CTC top=OCR0
// OC0 output: Disconnected
TCCR0=0x0D;
TCNT0=0x00;
OCR0=0x9C;
// Timer/Counter 1 initialization
// Clock source: T1 pin Rising Edge
// Mode: Normal top=FFFFh
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer1 Overflow Interrupt: On
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x07;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: 7,813 kHz
// Mode: CTC top=OCR2
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x0F;
TCNT2=0x00;
OCR2=0x9C;
// Timer(s)/Counter(s) Interrupt(s) initialization
//TIMSK=0x02;
//TIMSK=0x06;
TIMSK=0x86;
функции прерываний:
// Timer2 отсчитывает 1 сек интервал и сохраняет значения счетчиков для расчета скорости
interrupt [TIM2_COMP] void timer2_comp_isr(void)
{
timer2_clock++;
//если значение счетчика равно 50 (20 мсек*50 = 1 сек) то запоминаем значения счетчиков таймеров
if (timer2_clock == FRQ_CLOCK){
timer1_counterL=TCNT1L;
timer1_counterH=TCNT1H;
TCNT1H=0x00;
TCNT1L=0x00;
timer1_ovf_counter_summ=timer1_ovf_counter;
timer1_ovf_counter=0;
timer2_clock=0;
// Расчет числа импульсов прошедших за период таймера2 с входа T1 таймера1
frequency=timer1_ovf_counter_summ;
frequency=frequency << 16;
frequency_tmp=timer1_counterH;
frequency_tmp=frequency_tmp << 8;
frequency_tmp=frequency_tmp+timer1_counterL;
frequency=frequency+frequency_tmp;
///получили текущую скорость и выполнили суммирование
avg_speed = ceil(frequency*SPEED_SENSOR_TYPE);
}
}
// Timer1 - вызов прерывания переполнения с каждым импульсом с датчика скорости
interrupt [TIM1_OVF] void timer1_ovf_isr(void)
{
timer1_ovf_counter++;
}
и после этого в основном цикле выводим значение avg_speed:
sprintf(lcd_buffer,"%u км/ч ",avg_speed);
lcd_gotoxy(0,0);
lcd_puts(lcd_buffer);
определение переменных:
volatile unsigned char timer1_ovf_counter=0; // Cколько раз переполнялся таймер1 счёта импульсов
unsigned char timer1_ovf_counter_summ=0; // Cколько раз переполнялся таймер1 счёта импульсов - результирующее значение
unsigned char timer2_clock=0; // Необходимо для отсчёта времени 1 сек таймером 2
unsigned char timer1_counterH; // Старший байт таймера счёта по окончанию 1 сек
unsigned char timer1_counterL; // Младший байт таймера счёта по окончанию 1 сек
unsigned int frequency_tmp; // промежуточная переменная для расчета частоты
инициализация таймеров:
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 7.813 kHz
// Mode: CTC top=OCR0
// OC0 output: Disconnected
TCCR0=0x0D;
TCNT0=0x00;
OCR0=0x9C;
// Timer/Counter 1 initialization
// Clock source: T1 pin Rising Edge
// Mode: Normal top=FFFFh
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer1 Overflow Interrupt: On
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x07;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: 7,813 kHz
// Mode: CTC top=OCR2
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x0F;
TCNT2=0x00;
OCR2=0x9C;
// Timer(s)/Counter(s) Interrupt(s) initialization
//TIMSK=0x02;
//TIMSK=0x06;
TIMSK=0x86;
функции прерываний:
// Timer2 отсчитывает 1 сек интервал и сохраняет значения счетчиков для расчета скорости
interrupt [TIM2_COMP] void timer2_comp_isr(void)
{
timer2_clock++;
//если значение счетчика равно 50 (20 мсек*50 = 1 сек) то запоминаем значения счетчиков таймеров
if (timer2_clock == FRQ_CLOCK){
timer1_counterL=TCNT1L;
timer1_counterH=TCNT1H;
TCNT1H=0x00;
TCNT1L=0x00;
timer1_ovf_counter_summ=timer1_ovf_counter;
timer1_ovf_counter=0;
timer2_clock=0;
// Расчет числа импульсов прошедших за период таймера2 с входа T1 таймера1
frequency=timer1_ovf_counter_summ;
frequency=frequency << 16;
frequency_tmp=timer1_counterH;
frequency_tmp=frequency_tmp << 8;
frequency_tmp=frequency_tmp+timer1_counterL;
frequency=frequency+frequency_tmp;
///получили текущую скорость и выполнили суммирование
avg_speed = ceil(frequency*SPEED_SENSOR_TYPE);
}
}
// Timer1 - вызов прерывания переполнения с каждым импульсом с датчика скорости
interrupt [TIM1_OVF] void timer1_ovf_isr(void)
{
timer1_ovf_counter++;
}
и после этого в основном цикле выводим значение avg_speed:
sprintf(lcd_buffer,"%u км/ч ",avg_speed);
lcd_gotoxy(0,0);
lcd_puts(lcd_buffer);
- GP1
- Поставщик валерьянки для Кота
- Сообщения: 2401
- Зарегистрирован: Пт май 23, 2008 19:32:22
- Откуда: Россия, Волгоград
- Контактная информация:
Re: Цифровой спидометр
нифига не понял
к чему это здесь?
к чему это здесь?
Re: Цифровой спидометр
мой вариант расчета скорости на C (Codevision AVR), может кому то пригодитсяGP1 писал(а):нифига не понял![]()
к чему это здесь?
Re: Цифровой спидометр
При включении все в норме, а если подключаю генератор (от GP1 на 555), появляется такое:
Подскажите, какая самая стабильная прошивка, именно по начальной схеме (без тахометров и т.п.) Я заливал
эти http://www.radiokot.ru/forum/viewtopic.php?p=470225#p470225 http://radiokot.ru/forum/viewtopic.php?p=524865#p524865
Подскажите, какая самая стабильная прошивка, именно по начальной схеме (без тахометров и т.п.) Я заливал
эти http://www.radiokot.ru/forum/viewtopic.php?p=470225#p470225 http://radiokot.ru/forum/viewtopic.php?p=524865#p524865
- GP1
- Поставщик валерьянки для Кота
- Сообщения: 2401
- Зарегистрирован: Пт май 23, 2008 19:32:22
- Откуда: Россия, Волгоград
- Контактная информация:
Re: Цифровой спидометр
Крайние варианты прошивок лежат на стр.22
у тебя вариант не совсем по начальной схеме, судя по фото стоит ULN2003 и нет внешней памяти.
да и скорость 521, как-то многовато будет, у меня он считает до 255 км/ч, однобайтовая переменная.
у тебя вариант не совсем по начальной схеме, судя по фото стоит ULN2003 и нет внешней памяти.
да и скорость 521, как-то многовато будет, у меня он считает до 255 км/ч, однобайтовая переменная.
Re: Цифровой спидометр
GP1Ты имеешь ввиду вот эту "mega16-OA v23-03-2012.zip"? Просто боюсь ошибиться, первый раз залил не то, а тут уже линейки, тахометры. И можно ли малой кровью подправить прошивку под свои начальные значения пробега?
- GP1
- Поставщик валерьянки для Кота
- Сообщения: 2401
- Зарегистрирован: Пт май 23, 2008 19:32:22
- Откуда: Россия, Волгоград
- Контактная информация:
Re: Цифровой спидометр
Чтобы ответить на твой вопрос мне надо знать по какой схеме собран девайс
перекомпилить прошивку не проблема вообще, надо только знать нужна линейка или нет
начальные значения пишутся в ЕЕPROM либо во встроенную, либо во внешнюю, но порядок ячеек одинаков
перекомпилить прошивку не проблема вообще, надо только знать нужна линейка или нет
начальные значения пишутся в ЕЕPROM либо во встроенную, либо во внешнюю, но порядок ячеек одинаков
Re: Цифровой спидометр
Ну вот не дождавшись пока админы исправят исходную статью, выкладываю измененную схему, прошивку и исходники от нового спидометра.
схема вот эта http://radiokot.ru/forum/download/file.php?id=34401
со встроенным EEP, хотя расстроился, прочитав твое замечание по поводу 100000 циклов перезаписи, но это меркнет, перед радостью заработавшего девайса
Наивно думал открыть в hex-редакторе и подправить байты, ан нет - перекомпиляция. Мое начальное 413124 км. И спасибо за полезную вещь.
зы: без линеек. Если получится, скинь в личку, чтоб народ не вводить в заблуждение
Re: Цифровой спидометр
Интересно, насколько дольше проживет внешняя EEPROM? И как узнать, что внутренняя сдыхает, чтобы успеть сохранить EEP в файл и прошить на другую мегу?
Re: Цифровой спидометр
GP1
Спасибо, вот такая солянка получилась, осталось испытать на машине
Спасибо, вот такая солянка получилась, осталось испытать на машине
- GeparD
- Вымогатель припоя
- Сообщения: 538
- Зарегистрирован: Сб июн 27, 2009 23:34:18
- Откуда: Украина
- Контактная информация:
Re: Цифровой спидометр
Как поправить прошивку под 4 и под 5 импульсов?? что нужно делать чтоб ее подправить???Обьясните пожалуйста
Голова - это прибор для создания голограмм
Хелбой, Халк и Аватар - отличное наглядное представление модели RGB
Хелбой, Халк и Аватар - отличное наглядное представление модели RGB
- GP1
- Поставщик валерьянки для Кота
- Сообщения: 2401
- Зарегистрирован: Пт май 23, 2008 19:32:22
- Откуда: Россия, Волгоград
- Контактная информация:
Re: Цифровой спидометр
bkost писал(а):GP1
Спасибо, вот такая солянка получилась, осталось испытать на машине
мне ещё в прошлый раз показалось что индикатор "задом-на-перед" индицирует.
поменяй местами крайние аноды
- GP1
- Поставщик валерьянки для Кота
- Сообщения: 2401
- Зарегистрирован: Пт май 23, 2008 19:32:22
- Откуда: Россия, Волгоград
- Контактная информация:
Re: Цифровой спидометр
GeparD писал(а):Как поправить прошивку под 4 и под 5 импульсов?? что нужно делать чтоб ее подправить???Обьясните пожалуйста
скорость пересчитать не проблема, просто поменять константу (см.описание eeprom на 22 стр), а вот с пробегом...
там у меня такого набыдлокодено,

Re: Цифровой спидометр
Да, лоханулся
, KEM5631, даташит не нашел, решил, что все стандартно - 1 = 12 нога, ан нет
Re: Цифровой спидометр
Как можно регулировать яркость семисегментников? Поставил вечерком в авто, жуть, как ярко
- GP1
- Поставщик валерьянки для Кота
- Сообщения: 2401
- Зарегистрирован: Пт май 23, 2008 19:32:22
- Откуда: Россия, Волгоград
- Контактная информация:
Re: Цифровой спидометр
на схеме есть переменный резистор - это и есть регулятор яркости.
Re: Цифровой спидометр
R7 22kOm? Вот я дятел, я посчитал, что он относится к ЖКИ и не ставил. И меня вылечат! 
Re: Цифровой спидометр
GP1 писал(а):GeparD писал(а):Как поправить прошивку под 4 и под 5 импульсов?? что нужно делать чтоб ее подправить???Обьясните пожалуйста
скорость пересчитать не проблема, просто поменять константу (см.описание eeprom на 22 стр), а вот с пробегом...
там у меня такого набыдлокодено,что и сам не вспомню.
Уважаемый GP1 как же быть? Хотел собрать и установить на мотоцикл "Урал", датчик планирую использовать 6ти импульсный, но у мотоцикла изменено соотношение передачи главной пары заднего моста и поэтому придётся подбирать количество импульсов на километр?
- GP1
- Поставщик валерьянки для Кота
- Сообщения: 2401
- Зарегистрирован: Пт май 23, 2008 19:32:22
- Откуда: Россия, Волгоград
- Контактная информация:
Re: Цифровой спидометр
вопрос конечно интересный
считай импульсы
считай импульсы
