Что не правильно? Ведь всё работает!!!!
Что не правильно? Ведь всё работает!!!!
Работает, но с погрешностью и в многозадачном режиме погрешность будет увеличиваться
Обьясни пожалуйста, почему?
Потому что приведенный мной пример считает импульсы в фоновом(хардверном) режиме и ресурсы процессора можно использовать для других задач
А что вот это за библиотека?
#include <util/delay.h>
А тут я чушь написал!
Последний раз редактировалось mebitek; 21.03.2012 в 07:20.
Эдуард, а ты мог бы прокомментировать этот код?
Последние два блока.....
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;
Последний раз редактировалось mebitek; 21.03.2012 в 07:19.
Я немного по другом считаю импульсы. Использую аппаратные прерывания по входу. Когда приходит на вход фронт импульса с высокого на низкий или наоборот, обрабатывается прерывание, в котором счетчик импульсов увеличивается на единицу.
Функцией с интервалом 200 мс значение счетчика передается в порт, а сам счетчик обнуляется. В аппаратном прерывании используется оба фронта, и соответственно частота срабатывания прерывания в 2 раза выше реальной частоты на входе, выше точность. Пробовал прерывания одновременно с двух входов с разной частотой, и никакого взаимного влияния не обнаружил.
Я использую специальное аппаратное прерывание ICR (захват/сравнение)
Последний раз редактировалось Chip; 21.03.2012 в 20:49.
А что это такое?
Имею датчик холла:
Провода:
Black, Brown, Blue
Нашел тут http://answers.yahoo.com/question/in...9081442AAmCEM7, что:
Brown -> Power/Positive
Blue -> Ground/Neutral/Negative
Black -> Output
Не вяжется Black он обычно земля, не ошибка ли тут?
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)