rusEFI
The most advanced open source ECU
Loading...
Searching...
No Matches
board_configuration.cpp
Go to the documentation of this file.
1/**
2 * @file boards/hellen/hellen128/board_configuration.cpp
3 *
4 * All fabricated boards use 176 pin MCU
5 *
6 * @brief Configuration defaults for the hellen128 board
7 *
8 * See https://rusefi.com/s/hellen128
9 *
10 * @author andreika <prometheus.pcb@gmail.com>
11 * @author Andrey Belomutskiy, (c) 2012-2020
12 */
13
14#include "pch.h"
15#include "hellen_all_meta.h"
16#include "i2c_bb.h"
17#include "defaults.h"
18#include "m111.h"
19#include "board_overrides.h"
20
21static void setInjectorPins() {
22 engineConfiguration->injectionPins[0] = H176_LS_1;
23 engineConfiguration->injectionPins[1] = H176_LS_2;
24 engineConfiguration->injectionPins[2] = H176_LS_3;
25 engineConfiguration->injectionPins[3] = H176_LS_4;
26 engineConfiguration->injectionPins[4] = H176_LS_5;
27 engineConfiguration->injectionPins[5] = H176_LS_6;
28 engineConfiguration->injectionPins[6] = H176_LS_7;
29 engineConfiguration->injectionPins[7] = H176_LS_8;
30}
31
32static void setIgnitionPins() {
33 engineConfiguration->ignitionPins[0] = H176_IGN_1;
34 engineConfiguration->ignitionPins[1] = H176_IGN_2;
35 engineConfiguration->ignitionPins[2] = H176_IGN_3;
36 engineConfiguration->ignitionPins[3] = H176_IGN_4;
37 engineConfiguration->ignitionPins[4] = H176_IGN_5;
38 engineConfiguration->ignitionPins[5] = Gpio::I5;
39 engineConfiguration->ignitionPins[6] = Gpio::I6;
40 engineConfiguration->ignitionPins[7] = Gpio::I7;
41}
42
44 // trigger inputs
45 engineConfiguration->triggerInputPins[0] = Gpio::B1;
46 engineConfiguration->triggerInputPins[1] = Gpio::Unassigned;
47 // Direct hall-only cam input
48 engineConfiguration->camInputs[0] = Gpio::A6;
49
50 setTPS1Inputs(EFI_ADC_4, EFI_ADC_8);
51
52 engineConfiguration->mafAdcChannel = H144_IN_MAP1;
53 engineConfiguration->map.sensor.hwChannel = H144_IN_MAP2;
54
55 engineConfiguration->clt.adcChannel = H144_IN_CLT;
56
57 engineConfiguration->iat.adcChannel = H144_IN_IAT;
58}
59
60static bool isFirstInvocation = true;
61
62static void setHellen128ETBConfig() {
63 BitbangI2c m_i2c;
64 uint8_t variant[2] = {0xff, 0xff};
65
66 //same pins as for LPS25
68 isFirstInvocation = false;
69 m_i2c.init(Gpio::B10, Gpio::B11);
70
71 /* TODO: release pis for LPS25 */
72 }
73 // looks like we support PCF8575 i2c I/O expander
74 m_i2c.read(/*address*/0x20, variant, sizeof(variant));
75
76 //Rev C is different then Rev A/B
77 if ((variant[0] == 0x63) && (variant[1] == 0x00)) {
78 efiPrintf("rev C Board Detected");
79 // TLE9201 driver
80 // This chip has three control pins:
81 // DIR - sets direction of the motor
82 // PWM - pwm control (enable high, coast low)
83 // DIS - disables motor (enable low)
84
85 //ETB1
86 // PWM pin
87 engineConfiguration->etbIo[0].controlPin = H176_OUT_PWM3;
88 // DIR pin
89 engineConfiguration->etbIo[0].directionPin1 = H176_OUT_PWM2;
90 engineConfiguration->etbIo[0].directionPin2 = Gpio::Unassigned;
91 // Disable pin
92 engineConfiguration->etbIo[0].disablePin = H176_OUT_PWM1;
93
94 //ETB2
95 // PWM pin
96 engineConfiguration->etbIo[1].controlPin = Gpio::I2;
97 // DIR pin
98 engineConfiguration->etbIo[1].directionPin1 = Gpio::H13;
99 // Disable pin
100 engineConfiguration->etbIo[1].disablePin = Gpio::B7;
101
102 // we only have pwm/dir, no dira/dirb
103 engineConfiguration->etb_use_two_wires = false;
104
105 } else {
106 efiPrintf("A/B BoardID [%02x%02x] ", variant[0], variant[1]);
107 //Set default ETB config
108 engineConfiguration->etbIo[0].directionPin1 = H176_OUT_PWM2;
109 engineConfiguration->etbIo[0].directionPin2 = H176_OUT_PWM3;
110 engineConfiguration->etbIo[0].controlPin = H176_OUT_PWM1; // ETB_EN
111 engineConfiguration->etbIo[0].disablePin = Gpio::Unassigned;
112 engineConfiguration->etb_use_two_wires = true;
113 }
114}
115
116#include "hellen_leds_176.cpp"
117
120
122
124
125 // this specific Hellen has less common pull-up value R49
126 engineConfiguration->clt.config.bias_resistor = 2700;
127 engineConfiguration->iat.config.bias_resistor = 2700;
128
129 setHellenCan();
130}
131
132/**
133 * @brief Board-specific configuration defaults.
134 *
135
136 *
137
138 */
142
143 engineConfiguration->fuelPumpPin = Gpio::D15;
144 engineConfiguration->idle.solenoidPin = Gpio::Unassigned;
145 engineConfiguration->fanPin = Gpio::D12; // OUT_PWM8
147
148 engineConfiguration->starterControlPin = H176_OUT_IO10;
149 engineConfiguration->startStopButtonPin = H176_IN_A16;
150 engineConfiguration->startStopButtonMode = PI_PULLDOWN;
151
152 // "required" hardware is done - set some reasonable defaults
154
156
157 /**
158 * Jimmy best tune
159 * https://rusefi.com/online/view.php?msq=626
160 * md_sanci latest tune
161 * https://rusefi.com/online/view.php?msq=630
162 */
163 setPPSInputs(H144_IN_PPS, EFI_ADC_14);
164 setPPSCalibration(1.49, 4.72, 1.34, 4.24);
165
166 engineConfiguration->vrThreshold[0].pin = Gpio::D14;
167 hellenWbo();
168}
169
void setup_custom_board_overrides()
void read(uint8_t addr, uint8_t *data, size_t size)
Definition i2c_bb.cpp:210
bool init(brain_pin_e scl, brain_pin_e sda)
Definition i2c_bb.cpp:37
@ Unassigned
void setPPSInputs(adc_channel_e pps1, adc_channel_e pps2)
void setTPS1Inputs(adc_channel_e tps1, adc_channel_e tps2)
void setPPSCalibration(float primaryUp, float primaryDown, float secondaryUp, float secondaryDown)
std::optional< setup_custom_board_overrides_type > custom_board_ConfigOverrides
std::optional< setup_custom_board_overrides_type > custom_board_DefaultConfiguration
static constexpr engine_configuration_s * engineConfiguration
static void setupDefaultSensorInputs()
static void setIgnitionPins()
static void setInjectorPins()
static void setHellen128ETBConfig()
static void hellen128_boardConfigOverrides()
static bool isFirstInvocation
static void hellen128_boardDefaultConfiguration()
Board-specific configuration defaults.
void setHellenCan()
void hellenWbo()
void setHellenVbatt()
void setHellenSdCardSpi2()
Bit-banged I2C driver.
void setMercedesM111EngineConfiguration()
Definition m111.cpp:21