Hanna
Sourcecode Kontrollplatine
adc.c
gehe zur Dokumentation dieser Datei
1 
15 #include <avr/io.h>
16 #include <stdio.h>
17 #include <stdint.h>
18 #include <avr/pgmspace.h>
19 #include <stddef.h>
20 
21 #include "adc.h"
22 
23 uint16_t V_CHG_1_mess = 0, I_CHG_1_mess = 0, V_CHG_2_mess = 0, I_CHG_2_mess = 0, V_BAT_mess = 0, I_BAT_mess = 0;
24 int16_t I_CHG_1 = 0, I_CHG_2 = 0, I_BAT = 0;
25 float V_CHG_1 = 0, V_CHG_2 = 0, V_BAT = 0, CHARGE_1 = 0, CHARGE_2 = 0, CHARGE_BAT = 0;
26 
36 void ADCA_init ( void )
37 {
38  ADCA.CTRLB = ADC_RESOLUTION_12BIT_gc; // By default, bit4 is cleared and the ADC is configured for unsigned mode.
39  // ADC_RESOLUTION_12BIT_gc ist 12bit, right adjusted
40  ADCA.REFCTRL = ADC_REFSEL_INTVCC_gc | ADC_BANDGAP_bm;
41  ADCA.PRESCALER = ADC_PRESCALER_DIV256_gc; // mit Prescaler 256 und F_CPU von 32 MHz ergibt sich eine Samplerate von 125kSPS (max 2 MSPS)
42  ADCA.CTRLA = ADC_ENABLE_bm;
43 
44  PORTA.DIR = 0x00; // Port A als Eingang, Spannungsmessung
45 
46  ADCA_Cal();
47 }
48 
55 void I_sgn_init ( void )
56 {
57  PORTB.DIRCLR = PIN0_bm | PIN1_bm | PIN2_bm; // Messeingänge das Vorzeichen der Ströme beim Laden und Betrieb.
58 }
59 
66 uint16_t ADCA_Conversion ( ADC_CH_t *Channel, char Pin )
67 {
68  Channel->CTRL = ADC_CH_INPUTMODE_SINGLEENDED_gc;
69  Channel->MUXCTRL = (Pin << 3);
70  Channel->CTRL |= ADC_CH_START_bm;
71 
72  while ( !Channel->INTFLAGS )
73  ;
74  Channel->INTFLAGS = ADC_CH_CHIF_bm; // INTFLAGS löschen
75  return Channel->RES;
76 }
77 
78 
84 void ADCA_Cal ( void )
85 {
86  ADCA.CALL = LeseKalibrationsbyte ( offsetof ( NVM_PROD_SIGNATURES_t, ADCACAL0 ) );
87  ADCA.CALH = LeseKalibrationsbyte ( offsetof ( NVM_PROD_SIGNATURES_t, ADCACAL1 ) );
88 }
89 
93 int LeseKalibrationsbyte ( int Index )
94 {
95  int result;
96 
97  NVM_CMD = NVM_CMD_READ_CALIB_ROW_gc;
98  result = pgm_read_byte ( Index );
99  NVM_CMD = NVM_CMD_NO_OPERATION_gc;
100  return (result);
101 }
uint16_t ADCA_Conversion(ADC_CH_t *Channel, char Pin)
Konvertiert die Spannung über Channel, die an Pin anliegt.
Definition: adc.c:66
void ADCA_init(void)
ADC A wird eingestellt.
Definition: adc.c:36
int LeseKalibrationsbyte(int Index)
Liest Kalibrierungsinformationen aus dem EEPROM des XMEGA.
Definition: adc.c:93
void ADCA_Cal(void)
Kalibrierung des ADCA mit den Kalibrierungsinformationen aus dem EEPROM des XMEGA.
Definition: adc.c:84
void I_sgn_init(void)
Stromrichtung aus den Strommesssensoren TS1101.
Definition: adc.c:55