/*
 * Copyright 2016 Mario Richter
 * This file is part of NeMo.
 *
 * NeMo is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * NeMo is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with NeMo.  If not, see <http://www.gnu.org/licenses/>.
 */

/*!
 * \file adc.h
 * \ingroup adc
 * \brief Routinen für den AD-Wandler (Temperatur- und Spannungsmessung)
 */

#ifndef __ADC_H__
#define __ADC_H__


// --------------------------------------
// Defines

#define ADC_STAT_IDLE           0       //!< ADC-Status: Leerlauf (warte auf nächsten Zyklus)
#define ADC_STAT_START          1       //!< ADC-Status: 1. Wandlung starten
#define ADC_STAT_WAIT1          2       //!< ADC-Status: Warte auf 1. Wandlung (5V)
#define ADC_STAT_WAIT2          3       //!< ADC-Status: Warte auf 2. Wandlung (3.3V)
#define ADC_STAT_WAIT3          4       //!< ADC-Status: Warte auf 3. Wandlung (VLED)
#define ADC_STAT_WAIT4          5       //!< ADC-Status: Warte auf 4. Wandlung (Endstufentemperatur)

// Inkremente für Spannungsberechnungen
// Diese Werte sind nach Messen der Referenzspannung des Controllers per Multimeter
// berechnet, womit der AD-Wandler kalibriert und dessen Genauigkeit verbessert werden kann.
#define ADC_5V_INKR_1V          166     //!< ADC-Inkremente für 5V-Messung: 1V
#define ADC_5V_INKR_0V1         17      //!< ADC-Inkremente für 5V-Messung: 0.1V
#define ADC_5V_INKR_0V01        2       //!< ADC-Inkremente für 5V-Messung: 0.01V

#define ADC_3V3_INKR_1V         258     //!< ADC-Inkremente für 3.3V-Messung: 1V
#define ADC_3V3_INKR_0V1        26      //!< ADC-Inkremente für 3.3V-Messung: 0.1V
#define ADC_3V3_INKR_0V01       3       //!< ADC-Inkremente für 3.3V-Messung: 0.01V

#define ADC_VLED_INKR_10V       369     //!< ADC-Inkremente für VLED-Messung: 10V
#define ADC_VLED_INKR_1V        37      //!< ADC-Inkremente für VLED-Messung: 1V
#define ADC_VLED_INKR_0V1       4       //!< ADC-Inkremente für VLED-Messung: 0.1V


// --------------------------------------
// Funktionsdeklarationen

void adcInit(void);
uint8_t adcStartCycle(void);
void adcScheduler(void);

void adcVoltageCalc(void);
void adcTemperatureCalc(void);


// --------------------------------------
// Globale Variablen

extern uint16_t   adcResults[];         //!< AD-Wandlerergebnisse

extern char            u5v[];           //!< Gemessene Spannung 5V
extern char            u3v3[];          //!< Gemessene Spannung 3.3V
extern char            uLed[];          //!< Gemessene Spannung VLED
extern char            NTCtemp[];       //!< Gemessene Temperatur


#endif

