Цифровой тахометр с LED индикацией
Добрый Всем день !!! МК и в частности Arduino увлёкся недавно ( Arduino тольуо жду с Китая).
Есть идея реализовать тахометр с светодиодной индикацией оборотов. Для осуществления идеи, нужно симитировать сигналы с датчика положения коленвала.
Данные по оборотам есть, может не совсем точные но приблизительные.
Задачи:
1)Нужно симитировать П-образный сигнал, с постоянной скважностью 25% и разной частотой от 0 до 6750 Гц. Регулировку частоты вывести на Потенциометр.
2)Считать сигнал, и перевести его в поочередное загорание Светодиодов с увеличения частоты.
По первому вопросу идей пока "0", видел чтото подобное вот здесь http://sites.google.com/site/vanyamb...rator-signalov но не разобрался, точнее вроде понятно, но не смог смоделировать в Протеусе (потенциометр не работает), и не понятно как интерпритировать это к себе.
По второму вопросу видел тут : http://www.compcar.ru/forum/showthre...?t=8169&page=4 но тоже пока не всё понятно...
Вообщем помогите чем сможете пожалуйста !!!
Заранее благодарен всем откликнувшимся :)
Re: Цифровой тахометр с LED индикацией
потенциометр подключить к аналоговому входу , на основе его данных изменять частоту софтового ШИМ.
Софтовый ШИМ на требуемую частоту можно написать , но на чистом avr cи
вот тебе код готового частотомера
PHP код:
#include <util/delay.h>
volatile unsigned int tachBuf;
unsigned long tachValue;
ISR(TIMER1_CAPT_vect)
{
TCNT1 = 0;
tachBuf = ICR1+2;
}
//********************************************************************
void setup()
{
pinMode(8, INPUT); //Вход для импульсов спидометра
pinMode(6, OUTPUT);//выход ШИМ
TCCR0B = TCCR0B & 0b11111000 | 5;//частота ШИМ
analogWrite(6, 128); //Запустить ШИМ
digitalWrite(8, HIGH); // включить подтяжку входа
Serial.begin(115200);
TIM_Init();//инициализация таймера
_delay_ms(300);
}
//********************************************************************
void loop()
{
cli();
tachValue =250000/tachBuf;
Serial.print("freq=");
Serial.println(tachValue,DEC);
tachBuf=1;
sei();
_delay_ms(300);
}
//********************************************************************
void TIM_Init(void)
{
TIMSK1=(1<<ICIE1);
TCCR1A=(0<<COM1A1)|(0<<COM1A0)|(0<<WGM11)|(0<<WGM10);
TCCR1B=(1<<ICNC1)|(1<<ICES1)|(0<<WGM13)|(0<<WGM12)|(0<<CS12)|(1<<CS11)|(1<<CS10);
TCNT1 = 0;
}
Re: Цифровой тахометр с LED индикацией
Изменяя в обработчике прерывания значение TCNT1 можно получить частоту от 15Гц до 146кГц.
PHP код:
#define D4_High PORTD |=B00010000
#define D4_LOW PORTD &= B11101111
volatile boolean Counter;
//*************************************************************************
ISR(TIMER1_OVF_vect)
{
TCNT1=50000; //от 15Гц(0) до 145600Гц(65534)
Counter=~Counter;
if(Counter) D4_LOW; else D4_High;
}
////*************************************************************************
void setup()
{
pinMode(4, OUTPUT); //выход спидометра
Init_Timer1();
}
//*************************************************************************
void loop()
{
}
//*************************************************************************
void Init_Timer1()
{
TCCR1A = 0;
TCCR1B = (1<<CS11);
TCNT1 = 0;
TIMSK1 = _BV(TOIE1);
sei();
}
Re: Цифровой тахометр с LED индикацией
Цитата:
Сообщение от
Chip
потенциометр подключить к аналоговому входу , на основе его данных изменять частоту софтового ШИМ.
Софтовый ШИМ на требуемую частоту можно написать , но на чистом avr cи
вот тебе код готового частотомера
1) Что значит, на чистом Си ? Всмысле написать в avr studio для данного МК (которое используется в моём Arduino), скомпилировать, и подключить в начале Кода как Delay.h ? Или написать на си в Arduino IDE как подпрограмму?
2)Скетч для вывода на LCD ? (как я понял) (требует детального разбора, и правки под нужный диапазон частот?)
3)Одновременная многозадачность :
Вообщем эта ардуинка будет выполнять несколько функций :
1) В приборную панель Nissan Note планируется изготовить подложку с светодиодами:
1.1 По шкале тахометра, от 0 до 6000 об/мин будут полукругом распологатся SMD светодиоды. Цель : Когда стрелка будет подыматся в направлении от 0 до 6000, постепенно друг, за другом будут загоратся светодиоды (шкала тахометра не подсвечмвается, стрелоска подсвечивается)
1.2 Тоже самое со спидометром (тут всё намного сложнее, даже идей нет как реализвовать, дело в том что датчика скорости на данном автомобиле нет, скорость вычисляется от ABS, который передаёт данные на ECM по CAN шине, как с неё считать скорость ума не приложу)
1.3 Тоже и для шкалы уровня топлива
1.4 Индикатор отсечки по показаниям тахометра, smd белого цвета начинающий моргать когда достигаются определёные обороты двигателя
1.5 Цвет свечения стрелочек плавно изменяется в зависимости от скорости, тахометра, показателя уровня топлива соответственно
Вообщем планы Бонопардовские, а знания почти нулевые.....
Re: Цифровой тахометр с LED индикацией
1-Уже выложил пример выше, можно через Serial monitor отправлять значения для изменения частоты
2-смотря что за LCD
3-Ранее выложенный скетч частотомера работает в фоновом режиме.
Re: Цифровой тахометр с LED индикацией
Цитата:
Сообщение от
Chip
1-Уже выложил пример выше, можно через Serial monitor отправлять значения для изменения частоты
2-смотря что за LCD
3-Ранее выложенный скетч частотомера работает в фоновом режиме.
1.Спасибо, долго писал сообщение, поэтому не увидел :)
2. Про LCD я напутал ввиду своей "чайниковости" подумал что :
"void loop()
{
cli();
tachValue =250000/tachBuf;
Serial.print("freq=");
Serial.println(tachValue,DEC);
tachBuf=1;
sei();
_delay_ms(300);
} "
Что то связаное с LCD :)
Ну нету знаний пока, нету... :(
3.Где то ранее читал, что использование функции delay тормозит выполнение всех функций на заданное время....
Извините если чушь какую то несу.... надо еще много учится.... Может дадите пару ссылок, почитать про многозадачность и Arduino, желательно с примерами....
За скетчи большое, спасибо буду в них разбиратся :)))
Re: Цифровой тахометр с LED индикацией
Многозадачность это скорее не к железке , а к операционке.
У ардуины нет операционки.
Копать нужно в сторону прерываний, все что связано с прерываниями будет работать в фоновом режиме