Нужно дескриптор посылать перед пакетом данных и тогда таких проблем не будет. Программа работает с виртуальным com портом и пакеты ни как не синхронизируются
Нужно дескриптор посылать перед пакетом данных и тогда таких проблем не будет. Программа работает с виртуальным com портом и пакеты ни как не синхронизируются
как вариант можно использовать преобразователь частота/напряжение и подавать на аналоговый вход Ардуины. Например LM 2907/2917. А вообще датчик скорости работает на эффекте Холла, и скважность импульсов (отношение периода к длинне импульса) - величина постоянная и не зависит от частоты. То есть достаточно измерять все-таки длинну импульса, как для ДС так и для тахометра (с ДХ зажигания для карб. авто)
Для разных датчиков скважность может быть разной и соответственно длинна импульсов будет разной. Это можно скорректировать программно.
У большинства датчиков скважность =2(меандр). То есть для 6-ти импульсного датчика, например, при скорости 200 км/ч длительность импульса будет составлять 1,5 мс. Для 4-х цилиндрового мотора при 8000 об/мин длинна импульса будет 1,33(3) мс. Функция pulseIn() меряет длинну импульсов на цифровом входе в диапазоне от 10 мкс до 3 минут. Насколько я понимаю то в этом случае прерывания не нужны? или я ошибаюсь?
Последний раз редактировалось Frud; 16.01.2012 в 17:37.
Заказал себе Мега АДК. Прийдет через неделю. Попробую скетч от Chip для Flash. Я вообще о существовании Ардуино узнал только в пятницу, а уже куча идей у меня родилось. Клевая штука.
Последний раз редактировалось Frud; 16.01.2012 в 22:38.
возможно ли, что бы будущая прога работала со своей библиотекой флэш? на случай если не установлен адоб флэш или как у меня на таблетке флэш ролики тормозят малеха. хотя видео в хд летит на ура
Последний раз редактировалось reanon; 17.01.2012 в 00:00.
Флеш можно обернуть в *.exe без проблем
попробую
Скетч для спидометра напасал, на выходе выдает частоту.
Можно так же использовать как частотомер, попробовал измерять частоту 62500Гц достаточно точно измеряет
Если перемкнуть вход для спидометра D2 и выход ШИМ D6 то в сериал мониторе будем видеть частоту ШИМ. Частоту ШИМ можно изменить в м указал параметры
PHP код:
#include <util/delay.h>
volatile uint8_t Count,Counter;
volatile uint16_t Time=0;
uint32_t result;
//*************************************************************************
ISR(TIMER1_OVF_vect)
{
asm volatile( "inc %0 \n"
: "=r" (Counter) //output
: "r" (Counter)); //input
}
//*************************************************************************
ISR(INT0_vect)
{
Time=TCNT1;
TCNT1 = 0;
asm volatile(
"mov %1,%0\n"
"clr %0 \n"
: "=r" (Counter), "=r" (Count) //output
: "r" (Counter), "r" (Count)); //input
}
////*************************************************************************
//ISR(INT1_vect)
//{
//}
////*************************************************************************
void setup()
{
pinMode(6, OUTPUT);
TCCR0B = TCCR0B & 0b11111000 | 5;//частота ШИМ 61 Гц
//0x01 62500
//0x02 7812
//0x03 976
//0x04 244
//0x05 61
analogWrite(6, 128);
pinMode(2, INPUT); //вход спидометра
digitalWrite(2, HIGH); // включить подтяжку входа
Serial.begin(115200);
Init_Timer1();
Init_Ext_Int();
_delay_ms(200);
}
//*************************************************************************
void loop()
{
cli();
result=2000000/(Count*65536+Time+1);
Serial.print("freq=");
Serial.println(result,DEC);
TCNT1 = 0;
Counter=0;
sei();
_delay_ms(200);
}
//*************************************************************************
void Init_Ext_Int()
{
EICRA |=(1<<ISC00)|(1<<ISC01);
EIMSK |=(1<<INT0);//((1<<INT0)|(1<<INT1));
sei();
}
//*************************************************************************
void Init_Timer1()
{
TCCR1A = 0;
TCCR1B = (1<<CS11);
TCNT1 = 0;
TIMSK1 = _BV(TOIE1);
sei();
}
Последний раз редактировалось Chip; 17.01.2012 в 17:32.
Эту тему просматривают: 6 (пользователей: 0 , гостей: 6)