Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

AVR Раздел по микроконтроллерам компании Atmel - AVR / ATtiny / ATmega / ATMega128 / ATxmega, вопросы по программированию в AVR studio и все, относящееся к AVR...

Закрытая тема
Опции темы
Непрочитано 05.08.2016, 19:16   #71
miwutka
Почётный гражданин KAZUS.RU
 
Регистрация: 05.07.2009
Адрес: Запорожье
Сообщений: 1,531
Сказал спасибо: 309
Сказали Спасибо 53 раз(а) в 48 сообщении(ях)
miwutka на пути к лучшему
По умолчанию Re: Спидометр атмега 8

makakus, нехочу китайчу ))) У нас по 90 грн продаются цифровые спидометры. Я обычный цифровой и сам сделал давно. Раз в секунду обновляется. Сравнивая со стрелочным - было всё точно. Но хочу чтобы работал как-то пореальнее но без сумашествия )) Ну как на видео в ютубе. Квазианалоговый тахометр. Спидометр работает. Проехал уже 600 км примерно. Всё четко работает параллельно с механическим. Увидел что на фиатовской коробке спидометр родной скорость больше на 7% примерно показывает чем цифровой. Но при этом киллометраж одинаковый на обоих счетчиках.
Реклама:
miwutka вне форума  
Непрочитано 05.08.2016, 19:30   #72
miwutka
Почётный гражданин KAZUS.RU
 
Регистрация: 05.07.2009
Адрес: Запорожье
Сообщений: 1,531
Сказал спасибо: 309
Сказали Спасибо 53 раз(а) в 48 сообщении(ях)
miwutka на пути к лучшему
По умолчанию Re: Спидометр атмега 8

Сообщение от МВА Посмотреть сообщение
Всем привет. Не нравится мне этот алгоритм. Очень большие вычисления делаются в прерывании. Я бы попробовал другие.
1). Прерывание по захвату. Это значит прошел импульс, забираешь содержимое счетчика, обнуляешь его и подсчет делаешь в главной программе. При следующем прерывании по захвату у тебя буде в счетчике значение соответствующее интервалу между импульсами. Однако есть возможность того, что программа не успеет посчитать, если частота входных импульсов будет высокой и предделитель таймера маленький или 1. Тогда следующий алгоритм.
2). В прерывании по захвату инвертируем какую-то переменную bool и по ней ореентируемся четное или не четное прерывание.
Это я попутно описываю что пронаблюдал.
Получается при тактировании 125000 Гц таймера первого(16битного) на холостых оборотах(у меня примерно 750 об/мин) разницав регистре ICR1 между первым входом в прерывание и вторым получается 700-1000 единиц(или 7000-10000, я много раз делил на 10 чтобы выводить на индикаторную шкалу). Ну и при повышении оборотов эта цифра уменьшается.
miwutka вне форума  
Непрочитано 05.08.2016, 20:11   #73
МВА
Гражданин KAZUS.RU
 
Регистрация: 15.08.2010
Адрес: Днепр
Сообщений: 842
Сказал спасибо: 74
Сказали Спасибо 199 раз(а) в 174 сообщении(ях)
МВА на пути к лучшему
По умолчанию Re: Спидометр атмега 8

Сообщение от miwutka Посмотреть сообщение
Это я попутно описываю что пронаблюдал.
Получается при тактировании 125000 Гц таймера первого(16битного) на холостых оборотах(у меня примерно 750 об/мин) разницав регистре ICR1 между первым входом в прерывание и вторым получается 700-1000 единиц(или 7000-10000, я много раз делил на 10 чтобы выводить на индикаторную шкалу). Ну и при повышении оборотов эта цифра уменьшается.
miwutka, что-то я не пойму твоих расчетов. Там намного все проще. Привожу пример для спидометра.
1) Ты находишь количество тиков между импульсами. Неважно как, или разница, или сбросом счетчика после каждого раза.
2) Вычисляешь длительность между импульсами:
длительность такта таймера * кол. тиков = Т(и-и)
3)Ты писал у тебя 6 импульсов на один метр пути или на оборот колеса. Прикинь более точный размер. Это будет влиять на точность тоже. Если L = 1 m:
1m/6имп.=0,1(6). - Это не обязательно делать программно можно посчитать один раз и загнать в константу.
4) У нас есть расстояние в метрах и время в секундах вычисляем скорость в метрах в секунду:
0,1(6)/Т(и-и)=V(сек).
5)И переводим в км/ч. для этого умножаем на 3600 (сек. в часе) и делим на 1000 (метров в километре) или то же самое, что просто умножаем 3,6.
Все сохраняем в переменную, например speed, потом преобазуем в строковую константу и выводим на дисплей.

P.S. То же самое делаем и для спидометра, только вместо количества импульсов и расстояния вставлявем количество импульсов на оборот.

Последний раз редактировалось МВА; 05.08.2016 в 20:15.
МВА вне форума  
Непрочитано 05.08.2016, 20:25   #74
miwutka
Почётный гражданин KAZUS.RU
 
Регистрация: 05.07.2009
Адрес: Запорожье
Сообщений: 1,531
Сказал спасибо: 309
Сказали Спасибо 53 раз(а) в 48 сообщении(ях)
miwutka на пути к лучшему
По умолчанию Re: Спидометр атмега 8

Сообщение от makakus Посмотреть сообщение
for (i=0; i‹20; i++) rpm+=tahom[i]; rpm*=16;
Незнаю почему, но у меня через FOR почему-то не работало )))) но я делал в cvavr компиляторе. А в студии через фор работает )))
miwutka вне форума  
Непрочитано 05.08.2016, 20:30   #75
miwutka
Почётный гражданин KAZUS.RU
 
Регистрация: 05.07.2009
Адрес: Запорожье
Сообщений: 1,531
Сказал спасибо: 309
Сказали Спасибо 53 раз(а) в 48 сообщении(ях)
miwutka на пути к лучшему
По умолчанию Re: Спидометр атмега 8

МВА, спидометр работает. Вот так... :
PHP код:
ISR(TIMER1_OVF_vect)
{
    
x_speed++;
    
    
x=0;
    
y=0;
    
z=0;
    
t=0;
    
speed=0;
    
    if (
x_speed › 1) {speed_sr=0;x_speed=0;}
    
}

ISR(TIMER1_CAPT_vect)
{
    
x_speed=0;
    
count_imp++;
if (
count_imp==6) {metres++;count_imp=0;}
    
if (
metres999) {
    
kilometres++;
    
metres=0;
    if (
kilometres == 10000kilometres=0;
    
km1++;
    if (
km1 == 10) {
        
km1 0;
        
km10++;
        if (
km10 == 10) {
            
km10 0;
            
km100++;
            if (
km100 == 10) {
                
km100 0;
                
km1000++;
                if (
km1000 == 10) {
                    
km1000 0;
                    
km10000++;
                    if (
km10000 == 10) {
                        
km10000 0;
                        
km100000++;
                        if (
km100000 == 10) {
                            
km100000 0;
                            
km10000 0;
                            
km1000 0;
                            
km100 0;
                            
km10 0;
                            
km1 0;
                        }
                    }
                }
            }
        }
    }
}
    if(
x==0//в первый заход считываем таймер в переменную х
    
{
        
x=ICR1;
    }
    else   
//во второй заход считываем в y, находим разницу
    
{
        
y=ICR1;
        
z=(y-x);
        
x=y;
        
        
t=125000/z;
        
speed=t*0.6;//умножаю и получаю сразу км/ч
        
        
speed_temp+=speed;
        
i_speed++;
        if (
i_speed == 10) {
            
i_speed=0;
            
speed_sr=speed_temp*0.1;  speed_temp=0;
            if (
speed_sr ›=999speed_sr 999;
            
        } 
        
    }
    

А вот тахометр не захотел почему то. Может тут подскажите что тут изменить...
Если я использую этот алгоритм, то на холостых показывает например 1000 об, а когда повышаются обороты, то отображение пропорционально уменьшается )))

Последний раз редактировалось miwutka; 05.08.2016 в 20:41.
miwutka вне форума  
Непрочитано 05.08.2016, 21:08   #76
МВА
Гражданин KAZUS.RU
 
Регистрация: 15.08.2010
Адрес: Днепр
Сообщений: 842
Сказал спасибо: 74
Сказали Спасибо 199 раз(а) в 174 сообщении(ях)
МВА на пути к лучшему
По умолчанию Re: Спидометр атмега 8

Сообщение от miwutka Посмотреть сообщение
А вот тахометр не захотел почему то. Может тут подскажите что тут изменить...
Если я использую этот алгоритм, то на холостых показывает например 1000 об, а когда повышаются обороты, то отображение пропорционально уменьшается )))
Ох, что-то мозги отказываются понимать. Эти кучи if это такое преобразование в разряды? И почему ты частоту тактирования делишь на количество выборок? И что за магическое число 0,6?
Для того, чтобы перевести int To char и наоборот, есть в библиотеке stdlib.h функции atoi(str) и
void* itoa(int input, char *buffer, int radix)

Последний раз редактировалось МВА; 05.08.2016 в 21:13.
МВА вне форума  
Непрочитано 05.08.2016, 21:40   #77
miwutka
Почётный гражданин KAZUS.RU
 
Регистрация: 05.07.2009
Адрес: Запорожье
Сообщений: 1,531
Сказал спасибо: 309
Сказали Спасибо 53 раз(а) в 48 сообщении(ях)
miwutka на пути к лучшему
По умолчанию Re: Спидометр атмега 8

Сообщение от МВА Посмотреть сообщение
Для того, чтобы перевести int To char и наоборот, есть в библиотеке stdlib.h функции atoi(str) и
void* itoa(int input, char *buffer, int radix)
Буду знать )))
Сообщение от miwutka Посмотреть сообщение
t=125000/z;
Я наверно не правильно понял работу захвата.....


Сообщение от МВА Посмотреть сообщение
И что за магическое число 0,6?
я его получил когда переводил км/ч в м/с. И чтобы не делить заменил умножением.
я регистр ICR похоже не правильно использую. Я думал что в нем тоже тикает счет как в TCNT1..... Чтото я загнался маленько .....
miwutka вне форума  
Непрочитано 05.08.2016, 22:52   #78
МВА
Гражданин KAZUS.RU
 
Регистрация: 15.08.2010
Адрес: Днепр
Сообщений: 842
Сказал спасибо: 74
Сказали Спасибо 199 раз(а) в 174 сообщении(ях)
МВА на пути к лучшему
По умолчанию Re: Спидометр атмега 8

Сообщение от miwutka Посмотреть сообщение
Буду знать )))

Я наверно не правильно понял работу захвата.....



я его получил когда переводил км/ч в м/с. И чтобы не делить заменил умножением.
я регистр ICR похоже не правильно использую. Я думал что в нем тоже тикает счет как в TCNT1..... Чтото я загнался маленько .....
Я описал алгоритм подсчета. Это задачка максимум для 8 класса. Сегодня уже некогда, а завтра подкину проект в АVR Studio.
МВА вне форума  
Непрочитано 06.08.2016, 09:55   #79
NewWriter
Заблокирован
 
Регистрация: 07.09.2014
Адрес: В Кремле!
Сообщений: 4,486
Сказал спасибо: 396
Сказали Спасибо 2,220 раз(а) в 1,319 сообщении(ях)
NewWriter на пути к лучшему
По умолчанию Re: Спидометр атмега 8

Сообщение от miwutka Посмотреть сообщение
Я наверно не правильно понял работу захвата.....
Захват - это просто значение таймера, получившееся между двумя фронтами входного сигнала. По одному фронту таймер запускается на счет от 0, по другому фронту значение таймера, до которого он успел досчитать, переписывается в регистры результата и таймер перезапускается заново. Значение результата таймера - численно выражает период между фронтами.
Например, таймер инкрементируется с частотой 1 кГц (каждую 1 мс). Если в результате захвата получилось значение 1000, значит, прошла 1000 х 0,001 = 1 с между фронтами входного сигнала. Всё ведь просто.
NewWriter вне форума  
Непрочитано 06.08.2016, 10:56   #80
miwutka
Почётный гражданин KAZUS.RU
 
Регистрация: 05.07.2009
Адрес: Запорожье
Сообщений: 1,531
Сказал спасибо: 309
Сказали Спасибо 53 раз(а) в 48 сообщении(ях)
miwutka на пути к лучшему
По умолчанию Re: Спидометр атмега 8

NewWriter, я в инете скопипастил чужой код. Вроде с радиокота про этот тахометр. Но вот теперь начинаю понимать как оно работает..... У меня генереатора частоты нету, может ща в протеусе сделаю схемку и буду менять частоту чтобы всё отследить..... У меня есть 4кгц шим и 1 кгц с осциллографа. Пока на них проверяю.
Я не дочитал вот этого:
Сообщение от NewWriter Посмотреть сообщение
По одному фронту таймер запускается на счет

Сообщение от NewWriter Посмотреть сообщение
по другому фронту значение таймера, до которого он успел досчитать, переписывается в регистры результата и таймер перезапускается заново.
Выходит что мне таймер на частоте 125000 ГЦ и не нужно запускать. и 7кгц хватит с головой..... На тахометре импульсы выше 1 кгц не будут ити полюбому
miwutka вне форума  
Закрытая тема

Закладки


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
атмега прошил другой прошивкой bass1981 AVR 17 28.05.2016 19:04
Тахометр и спидометр на Atmega8l GMVM Микроконтроллеры, АЦП, память и т.д 14 05.07.2010 16:29
Атмега 32а, не известно под какую частоту прошита. sae74 Микроконтроллеры, АЦП, память и т.д 1 10.04.2010 19:33
Добрый вечер,люди нужна схема корректора показаний спидометр MAICOM Электроника средств транспорта 5 10.02.2008 19:07
Электронный спидометр на Газель-33021 Gazel37 Информация по радиокомпонентам 1 12.05.2007 00:41


Часовой пояс GMT +4, время: 22:05.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot