17 #include <avr/interrupt.h> 18 #include <util/delay.h> 31 int16_t current[8] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
32 float voltage[8] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
34 uint8_t bat_nummer2channel[8] = { BAT_NUMMER2CHANNEL_1_1, BAT_NUMMER2CHANNEL_1_2, BAT_NUMMER2CHANNEL_1_3, BAT_NUMMER2CHANNEL_1_4, BAT_NUMMER2CHANNEL_2_1, BAT_NUMMER2CHANNEL_2_2,
35 BAT_NUMMER2CHANNEL_2_3, BAT_NUMMER2CHANNEL_2_4 };
77 TWI_MasterInit ( &twiAD7997, &TWIC, TWI_MASTER_INTLVL_LO_gc, TWI_BAUDSETTING );
79 PORTA.DIRCLR = I_SGN_1_1 | I_SGN_1_2 | I_SGN_1_3 | I_SGN_1_4 | I_SGN_2_1 | I_SGN_2_2 | I_SGN_2_3 | I_SGN_2_4;
81 AD7997_ADC1_CONVST_PORT.DIRSET = AD7997_ADC1_CONVST_PIN_bm;
82 AD7997_ADC1_CONVST_PORT.AD7997_ADC1_CONVST_PIN_CTRL = PORT_OPC_TOTEM_gc;
83 AD7997_ADC1_CONVST_PORT.OUTCLR = AD7997_ADC1_CONVST_PIN_bm;
86 PMIC.CTRL |= PMIC_HILVLEN_bm | PMIC_MEDLVLEN_bm | PMIC_LOLVLEN_bm;
93 sendRegData[0] = AD7997_CTIMER_REG;
101 sendRegData[0] = AD7997_CTIMER_REG;
131 uint16_t reg_current[8] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
133 for (
int battery_nr = 0; battery_nr < 8; battery_nr++ )
135 sendRegData[0] = AD7997_READ_SINGLE | (bat_nummer2channel[battery_nr] << 4);
140 reg_current[battery_nr] = ((((uint8_t) twiAD7997.
readData[0]) << 8) | ((uint8_t) twiAD7997.
readData[1])) >> 2;
145 einlese_zeit[ALTE_ZEIT] = einlese_zeit[NEUE_ZEIT];
147 einlese_zeit[NEUE_ZEIT] = now.seconds;
170 if ( PORTA.IN & (1 << sensor_nummer) )
213 uint16_t reg_voltage[8] = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 };
215 for (
int battery_nr = 0; battery_nr < 8; battery_nr++ )
217 sendRegData[0] = AD7997_READ_SINGLE | (bat_nummer2channel[battery_nr] << 4);
222 reg_voltage[battery_nr] = ((((uint8_t) twiAD7997.
readData[0]) << 8) | ((uint8_t) twiAD7997.
readData[1])) >> 2;
228 for (
int i = 4; i <= 7; i++ )
234 for (
int i = 0; i <= 3; i++ )
237 for (
int k = 4; k <= 7; k++ )
239 if ( akku_an[k] ) voltage[i] -= voltage[k];
254 void leerlauf_voltage_get_data (
void )
258 for (
int i = 4; i <= 7; i++ )
260 if ( akku[i] ) mess_akku = i;
#define AD7997_RESULT_FLT
10bit ADC => 2 LSB sind immer 0. RESULT_REG >> 2, dann 10bit - Filter (0x3FF)
#define AD7997_ADC2_I
Adresse für ADC2 zur Strommessung.
Konstanten, Filter und Commands für den Temperatursensor MCP 9843.
#define R_MESS
Messwiderstand, 15mOhm.
Header, Definition der Konstanten und Commands für DS1388.
void DS1388_get_datetime(void)
Die Uhrzeit und das Datum werden ausgelesen.
#define AD7997_CONFIG_REG
Registeradresse.
void TWI_MasterInit(TWI_Master_t *twi, TWI_t *module, TWI_MASTER_INTLVL_t intLevel, uint8_t baudRateRegisterSetting)
Initialise the TWI module.
register8_t readData[TWIM_READ_BUFFER_SIZE]
#define AD7997_CONFIG_MSB
0FF0: Alle 8 Kanäle enabled (Bit 11 - Bit 4 = 1)
#define AD7997_CONFIG_LSB
D3 FLTR (SDA/SDC = 1 an, default), D2 ALERT EN = 0, D1 BUSY/ALERT = 0, D0 BUSY/ALERT POLARITY = 0 (ac...
#define SPANNUNGSTELER_2
Faktor zur Umrechnung der Batteriespannung in Säule 2.
Standard Header Datei, Definition der Batteriekonstanten und Grenzwerte.
#define ADC_RES
10bit Auflösung des ADC
XMEGA TWI master driver header file.
#define REF_VOLTAGE
Referenzspannung für die ADC; In V7.1 5V, in V7.2 3,3V !
void AD7997_init(void)
TWI (I2C) und ADC 1/2 werden initialisiert.
void AD7997_voltage_get_data(void)
Ermittelt die Spannungen der Batterien.
int AD7997_current_vorzeichen(uint8_t sensor_nummer)
Ermittelt die Stromrichtung der abgefragten Batterie.
#define AD7997_CTIMER_bm
Cycle Timer = 0x00 für Mode 1 (CONVST-PIN) und Mode 2.
Definition der Schalterstellungen für die einzelnen MOSFETs.
void TWI_MasterInterruptHandler(TWI_Master_t *twi)
Common TWI master interrupt service routine.
bool TWI_MasterWrite(TWI_Master_t *twi, uint8_t address, uint8_t *writeData, uint8_t bytesToWrite)
TWI write transaction.
#define AD7997_ADC1_V
Adresse für ADC1 zur Spannungsmessung.
void AD7997_current_get_data(void)
Ermittelt die Stromstärke in den Batteriestromkreisen.
TWI master driver struct.
bool TWI_MasterRead(TWI_Master_t *twi, uint8_t address, uint8_t bytesToRead)
TWI read transaction.
void mosfet_battery(uint8_t batteryNumber, bool set)
Einzelne Akkus werden in den Stromkreis zu- oder abgeschaltet.
#define SPANNUNGSTELER_1
Faktor zur Umrechnung der Batteriespannung in Säule 1.
Header für ADC AD7997, Definition der Register und Commands.