rusefi-1/firmware/controllers/tachometer.cpp

42 lines
1.1 KiB
C++
Raw Normal View History

2015-08-18 12:03:44 -07:00
/*
* @file tachometer.cpp
2015-08-18 14:01:49 -07:00
* @brief This is about driving external analog tachometers
2015-08-18 12:03:44 -07:00
*
2016-08-16 19:05:36 -07:00
* This implementation produces one pulse per engine cycle
*
2016-05-24 19:02:13 -07:00
* todo: these is a bit of duplication with dizzySparkOutputPin
*
2015-08-18 12:03:44 -07:00
* @date Aug 18, 2015
2017-01-03 03:05:22 -08:00
* @author Andrey Belomutskiy, (c) 2012-2017
2015-08-18 12:03:44 -07:00
*/
#include "tachometer.h"
2015-08-18 14:01:49 -07:00
#include "trigger_central.h"
2015-08-18 12:03:44 -07:00
EXTERN_ENGINE;
2015-08-19 13:01:36 -07:00
static scheduling_s tachTurnSignalOff;
static void turnTachPinLow(void) {
2016-09-13 22:01:57 -07:00
turnPinLow(&enginePins.tachOut);
2015-08-19 13:01:36 -07:00
}
2015-08-18 14:01:49 -07:00
static void tachSignalCallback(trigger_event_e ckpSignalType,
uint32_t index DECLARE_ENGINE_PARAMETER_S) {
2015-08-18 21:03:11 -07:00
if (index != engineConfiguration->tachPulseTriggerIndex) {
return;
}
2016-09-13 22:01:57 -07:00
turnPinHigh(&enginePins.tachOut);
2016-10-02 08:02:09 -07:00
scheduleTask(false, "tach off", &tachTurnSignalOff, (int)MS2US(engineConfiguration->tachPulseDuractionMs), (schfunc_t) &turnTachPinLow, NULL);
2015-08-18 14:01:49 -07:00
}
2015-08-18 12:03:44 -07:00
void initTachometer(void) {
2015-08-18 21:03:11 -07:00
if (boardConfiguration->tachOutputPin == GPIO_UNASSIGNED) {
2015-08-18 12:03:44 -07:00
return;
2015-08-18 21:03:11 -07:00
}
2015-08-18 12:03:44 -07:00
2016-09-13 22:01:57 -07:00
outputPinRegisterExt2("analog tach output", &enginePins.tachOut, boardConfiguration->tachOutputPin, &boardConfiguration->tachOutputPinMode);
2015-08-18 14:01:49 -07:00
addTriggerEventListener(tachSignalCallback, "tach", engine);
2015-08-18 12:03:44 -07:00
}