Test

Dependencies:   mbed-dev-OS5_10_4

Committer:
kevman
Date:
Fri Aug 07 07:24:21 2020 +0000
Revision:
0:014fad4dfb9d
Test

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kevman 0:014fad4dfb9d 1 /*-------------------------------------------------------------------------------
kevman 0:014fad4dfb9d 2 Programm Name: AdRead.cpp
kevman 0:014fad4dfb9d 3 Version: 1.0
kevman 0:014fad4dfb9d 4 Sprache: C++
kevman 0:014fad4dfb9d 5 Compiler: mbed
kevman 0:014fad4dfb9d 6 Autor: PS
kevman 0:014fad4dfb9d 7 Copyright: PS
kevman 0:014fad4dfb9d 8
kevman 0:014fad4dfb9d 9
kevman 0:014fad4dfb9d 10 Funktion: Lese-Funktion für den A/D Wandlerzugriff
kevman 0:014fad4dfb9d 11
kevman 0:014fad4dfb9d 12 30.06.2017:
kevman 0:014fad4dfb9d 13
kevman 0:014fad4dfb9d 14 -------------------------------------------------------------------------------*/
kevman 0:014fad4dfb9d 15 #include "Headers.h"
kevman 0:014fad4dfb9d 16
kevman 0:014fad4dfb9d 17
kevman 0:014fad4dfb9d 18 // Membervariablen, die nur in dieser Datei verwendet werden
kevman 0:014fad4dfb9d 19 uint8_t m_AiMask, m_Rdy0Mask, m_Rdy1Mask, m_RdyStatus[8];
kevman 0:014fad4dfb9d 20
kevman 0:014fad4dfb9d 21 int g_nDelCount;
kevman 0:014fad4dfb9d 22 uint8_t AdcA0V1, AdcA0V2, AdcA0V3;
kevman 0:014fad4dfb9d 23
kevman 0:014fad4dfb9d 24 long g_nChn1Counter = 0;
kevman 0:014fad4dfb9d 25 long g_nChn2Counter = 0;
kevman 0:014fad4dfb9d 26 long g_nFinishCounter = 0;
kevman 0:014fad4dfb9d 27
kevman 0:014fad4dfb9d 28 uint16_t nTempCounter = 0;
kevman 0:014fad4dfb9d 29
kevman 0:014fad4dfb9d 30 int g_Temp1, g_Temp2, g_Temp3, g_Temp4, g_Temp5, g_Temp6;
kevman 0:014fad4dfb9d 31
kevman 0:014fad4dfb9d 32 Converter0 Conv0[2];
kevman 0:014fad4dfb9d 33
kevman 0:014fad4dfb9d 34 uint8_t g_nIRead;
kevman 0:014fad4dfb9d 35
kevman 0:014fad4dfb9d 36 int nStatusCounter = 0;
kevman 0:014fad4dfb9d 37
kevman 0:014fad4dfb9d 38 bool g_fDisableDataRead;
kevman 0:014fad4dfb9d 39
kevman 0:014fad4dfb9d 40 /*----------------- INTERRUPT SERVICE ROUTINES --------------------------*/
kevman 0:014fad4dfb9d 41
kevman 0:014fad4dfb9d 42 void Rdy0Fall()
kevman 0:014fad4dfb9d 43 {
kevman 0:014fad4dfb9d 44 __disable_irq();
kevman 0:014fad4dfb9d 45 g_fRdy0 = true;
kevman 0:014fad4dfb9d 46 Adc0ReadChn();
kevman 0:014fad4dfb9d 47 __enable_irq();
kevman 0:014fad4dfb9d 48 }
kevman 0:014fad4dfb9d 49
kevman 0:014fad4dfb9d 50 /*-------------------------------------------------------------------------------
kevman 0:014fad4dfb9d 51 -------------------------------------------------------------------------------*/
kevman 0:014fad4dfb9d 52 void Rdy1Fall()
kevman 0:014fad4dfb9d 53 {
kevman 0:014fad4dfb9d 54 __disable_irq();
kevman 0:014fad4dfb9d 55 g_fRdy1 = true;
kevman 0:014fad4dfb9d 56 Adc1ReadChn();
kevman 0:014fad4dfb9d 57 __enable_irq();
kevman 0:014fad4dfb9d 58 }
kevman 0:014fad4dfb9d 59 /*-------------------------------------------------------------------------------
kevman 0:014fad4dfb9d 60 ReadConverter0: Lesen des ersten A/D Wandlers
kevman 0:014fad4dfb9d 61 -------------------------------------------------------------------------------*/
kevman 0:014fad4dfb9d 62 void ReadConverter0()
kevman 0:014fad4dfb9d 63 {
kevman 0:014fad4dfb9d 64 unsigned char ChnStatus;
kevman 0:014fad4dfb9d 65
kevman 0:014fad4dfb9d 66 g_fRdy0 = false;
kevman 0:014fad4dfb9d 67 if(g_fDisableDataRead == true)
kevman 0:014fad4dfb9d 68 return;
kevman 0:014fad4dfb9d 69 // m_Rdy0Status = ReadAdStatusRegister(0); // liest Statusregister von Wandler 0
kevman 0:014fad4dfb9d 70 // m_Rdy0Mask = 0x01;
kevman 0:014fad4dfb9d 71 ChnStatus = Conv0[0].AdPart[3] >> 5;
kevman 0:014fad4dfb9d 72 if(ChnStatus >= 4) ChnStatus = 3;
kevman 0:014fad4dfb9d 73
kevman 0:014fad4dfb9d 74 Conv0[0].AdPart[3] = 0x00;
kevman 0:014fad4dfb9d 75 MVars.dbAdSum[ChnStatus] += Conv0[0].AdComplete;
kevman 0:014fad4dfb9d 76 MVars.nChnAverage[(int)ChnStatus]++;
kevman 0:014fad4dfb9d 77
kevman 0:014fad4dfb9d 78 }
kevman 0:014fad4dfb9d 79 /*-------------------------------------------------------------------------------
kevman 0:014fad4dfb9d 80 ReadConverter0: Lesen des ersten A/D Wandlers
kevman 0:014fad4dfb9d 81 Der zweite Wandler wird mit den Idexen 4-7 verarbeitet
kevman 0:014fad4dfb9d 82 -------------------------------------------------------------------------------*/
kevman 0:014fad4dfb9d 83 void ReadConverter1()
kevman 0:014fad4dfb9d 84 {
kevman 0:014fad4dfb9d 85 unsigned char ChnStatus;
kevman 0:014fad4dfb9d 86
kevman 0:014fad4dfb9d 87 g_fRdy1 = false;
kevman 0:014fad4dfb9d 88 if(g_fDisableDataRead == true)
kevman 0:014fad4dfb9d 89 return;
kevman 0:014fad4dfb9d 90 // m_Rdy0Status = ReadAdStatusRegister(0); // liest Statusregister von Wandler 0
kevman 0:014fad4dfb9d 91 // m_Rdy0Mask = 0x01;
kevman 0:014fad4dfb9d 92 ChnStatus = Conv0[1].AdPart[3] >> 5;
kevman 0:014fad4dfb9d 93 if(ChnStatus >= 4) ChnStatus = 3;
kevman 0:014fad4dfb9d 94
kevman 0:014fad4dfb9d 95 Conv0[1].AdPart[3] = 0x00;
kevman 0:014fad4dfb9d 96 MVars.dbAdSum[ChnStatus *2 + 1] += Conv0[1].AdComplete;
kevman 0:014fad4dfb9d 97 MVars.nChnAverage[((int)ChnStatus + 4) + 1]++;
kevman 0:014fad4dfb9d 98
kevman 0:014fad4dfb9d 99 }
kevman 0:014fad4dfb9d 100 /*-------------------------------------------------------------------------------
kevman 0:014fad4dfb9d 101 CheckAnalogIn: Liest die Daten von den Wandlern
kevman 0:014fad4dfb9d 102 -------------------------------------------------------------------------------*/
kevman 0:014fad4dfb9d 103 int CheckAnalogIn()
kevman 0:014fad4dfb9d 104 {
kevman 0:014fad4dfb9d 105 if(g_fRdy0 == true)
kevman 0:014fad4dfb9d 106 ReadConverter0();
kevman 0:014fad4dfb9d 107 if(g_fRdy1 == true)
kevman 0:014fad4dfb9d 108 ReadConverter1();
kevman 0:014fad4dfb9d 109 return(true);
kevman 0:014fad4dfb9d 110 }
kevman 0:014fad4dfb9d 111
kevman 0:014fad4dfb9d 112 /*-------------------------------------------------------------------------------
kevman 0:014fad4dfb9d 113 CheckDaAd: Schreibt zum AD und liest den AD
kevman 0:014fad4dfb9d 114 -------------------------------------------------------------------------------*/
kevman 0:014fad4dfb9d 115 int CheckDaAd()
kevman 0:014fad4dfb9d 116 {
kevman 0:014fad4dfb9d 117 int i,Ret;
kevman 0:014fad4dfb9d 118
kevman 0:014fad4dfb9d 119 // ReadAllChannels(); wird schon im Main aufgerufen
kevman 0:014fad4dfb9d 120 // In Grundstellung ist nAktMittelAfter=500, d.h. es wird über eine halbe Sekunde gemittelt
kevman 0:014fad4dfb9d 121 // Im Messmode ist nAktMittelAfter auf einen Wert von z.B. 10 bei 100 Werten pro Sekunde
kevman 0:014fad4dfb9d 122 Ret = CalculateAdBaseValues();
kevman 0:014fad4dfb9d 123 if(Ret == false) // nicht alle Felder waren mit Werten gefüllt
kevman 0:014fad4dfb9d 124 {
kevman 0:014fad4dfb9d 125 g_nChn1Counter++;
kevman 0:014fad4dfb9d 126 g_nChn2Counter++;
kevman 0:014fad4dfb9d 127 if(g_nChn1Counter > 10)
kevman 0:014fad4dfb9d 128 {
kevman 0:014fad4dfb9d 129 Ad7739Stop(); // Erst mal stoppen, damit noch ein weiterer Zugriff passiert
kevman 0:014fad4dfb9d 130 Ad7739Start(0, 0,1); // neu starten
kevman 0:014fad4dfb9d 131 g_nChn1Counter = 0;
kevman 0:014fad4dfb9d 132 if(g_nChn2Counter >= 100 ) // hat 10 Mal versucht neu anzustossen
kevman 0:014fad4dfb9d 133 {
kevman 0:014fad4dfb9d 134 sprintf(HostIf.strErrorBuf,"%c#ER#A/D-Converter did not answer. 10 times restart without access %c\r\n", STX, ETX); //
kevman 0:014fad4dfb9d 135 HostIf.fSendError = true;
kevman 0:014fad4dfb9d 136 }
kevman 0:014fad4dfb9d 137
kevman 0:014fad4dfb9d 138 }
kevman 0:014fad4dfb9d 139 return(false);
kevman 0:014fad4dfb9d 140 }
kevman 0:014fad4dfb9d 141 else
kevman 0:014fad4dfb9d 142 {
kevman 0:014fad4dfb9d 143 g_nChn1Counter = 0;
kevman 0:014fad4dfb9d 144 g_nChn2Counter = 0;
kevman 0:014fad4dfb9d 145 }
kevman 0:014fad4dfb9d 146
kevman 0:014fad4dfb9d 147 g_nChn1Counter = 0;
kevman 0:014fad4dfb9d 148 // MVars.dbAdResult[g_nUChn[0]] = MVars.dbAdResult[g_nUChn[0]]; // - IrComp.dbKorrVoltage;
kevman 0:014fad4dfb9d 149 // CheckLimitValues();
kevman 0:014fad4dfb9d 150
kevman 0:014fad4dfb9d 151 SendAnalogValues();
kevman 0:014fad4dfb9d 152
kevman 0:014fad4dfb9d 153 MVars.nMwMittelCount = 0;
kevman 0:014fad4dfb9d 154 return(true);
kevman 0:014fad4dfb9d 155 }
kevman 0:014fad4dfb9d 156
kevman 0:014fad4dfb9d 157 /*-------------------------------------------------------------------------------
kevman 0:014fad4dfb9d 158 -------------------------------------------------------------------------------*/
kevman 0:014fad4dfb9d 159 int AdReadChannels(uint8_t Chn, uint8_t Wandler, uint8_t MitStatus)
kevman 0:014fad4dfb9d 160 {
kevman 0:014fad4dfb9d 161 // ab hier ist der gewandelte Wert einzulesen
kevman 0:014fad4dfb9d 162 // #define AD7739_READ_OP(addr) (0x40 | addr) #define AD7739_CHANNEL(0x08, 0...3) (addr | ch) #define AD7739_ADDR_C_DATA 0x08
kevman 0:014fad4dfb9d 163 // Ad7739OutWrite(AD7739_READ_OP(AD7739_CHANNEL(AD7739_ADDR_C_DATA, Chn)),Wandler); //0x48, die 0 legt die CS0 auf low
kevman 0:014fad4dfb9d 164
kevman 0:014fad4dfb9d 165 // for(g_TempDelay = 0;g_TempDelay < 2; g_TempDelay++);
kevman 0:014fad4dfb9d 166 AdInRead(Wandler);
kevman 0:014fad4dfb9d 167 m_RdyStatus[Chn] = g_AReadTemp;
kevman 0:014fad4dfb9d 168 AdInRead(Wandler);
kevman 0:014fad4dfb9d 169 AdcA0V1 = g_AReadTemp;
kevman 0:014fad4dfb9d 170 AdInRead(Wandler);
kevman 0:014fad4dfb9d 171 AdcA0V2 = g_AReadTemp;
kevman 0:014fad4dfb9d 172 AdInRead(Wandler);
kevman 0:014fad4dfb9d 173 AdcA0V3 = g_AReadTemp;
kevman 0:014fad4dfb9d 174 return(true);
kevman 0:014fad4dfb9d 175 }
kevman 0:014fad4dfb9d 176 /*-------------------------------------------------------------------------------
kevman 0:014fad4dfb9d 177 Liest zuerst das Statusbyte und dann die Daten, welche in die Union Struktur gelesen werden
kevman 0:014fad4dfb9d 178 -------------------------------------------------------------------------------*/
kevman 0:014fad4dfb9d 179 int Adc0ReadChn()
kevman 0:014fad4dfb9d 180 {
kevman 0:014fad4dfb9d 181 AdInRead(0);
kevman 0:014fad4dfb9d 182 Conv0[0].AdPart[3] = g_AReadTemp;
kevman 0:014fad4dfb9d 183 AdInRead(0);
kevman 0:014fad4dfb9d 184 Conv0[0].AdPart[2] = g_AReadTemp;
kevman 0:014fad4dfb9d 185 AdInRead(0);
kevman 0:014fad4dfb9d 186 Conv0[0].AdPart[1] = g_AReadTemp;
kevman 0:014fad4dfb9d 187 AdInRead(0);
kevman 0:014fad4dfb9d 188 Conv0[0].AdPart[0] = g_AReadTemp;
kevman 0:014fad4dfb9d 189 return(true);
kevman 0:014fad4dfb9d 190 }
kevman 0:014fad4dfb9d 191 /*-------------------------------------------------------------------------------
kevman 0:014fad4dfb9d 192 Liest zuerst das Statusbyte und dann die Daten, welche in die Union Struktur gelesen werden
kevman 0:014fad4dfb9d 193 -------------------------------------------------------------------------------*/
kevman 0:014fad4dfb9d 194 int Adc1ReadChn()
kevman 0:014fad4dfb9d 195 {
kevman 0:014fad4dfb9d 196 AdInRead(1);
kevman 0:014fad4dfb9d 197 Conv0[1].AdPart[3] = g_AReadTemp;
kevman 0:014fad4dfb9d 198 AdInRead(1);
kevman 0:014fad4dfb9d 199 Conv0[1].AdPart[2] = g_AReadTemp;
kevman 0:014fad4dfb9d 200 AdInRead(1);
kevman 0:014fad4dfb9d 201 Conv0[1].AdPart[1] = g_AReadTemp;
kevman 0:014fad4dfb9d 202 AdInRead(1);
kevman 0:014fad4dfb9d 203 Conv0[1].AdPart[0] = g_AReadTemp;
kevman 0:014fad4dfb9d 204 return(true);
kevman 0:014fad4dfb9d 205 }
kevman 0:014fad4dfb9d 206
kevman 0:014fad4dfb9d 207 /*-------------------------------------------------------------------------------
kevman 0:014fad4dfb9d 208 //Liest das vorher selektierte Register des ersten A/D Wandler
kevman 0:014fad4dfb9d 209 -------------------------------------------------------------------------------*/
kevman 0:014fad4dfb9d 210 void AdInRead(int Wandler)
kevman 0:014fad4dfb9d 211 {
kevman 0:014fad4dfb9d 212 // core_util_critical_section_enter();
kevman 0:014fad4dfb9d 213 int i;
kevman 0:014fad4dfb9d 214
kevman 0:014fad4dfb9d 215 m_AiMask = 0x80;
kevman 0:014fad4dfb9d 216 g_AReadTemp = 0x00;
kevman 0:014fad4dfb9d 217
kevman 0:014fad4dfb9d 218 AdMosiDown(); // muss unten sein, da sonst der Continous Mode gestoppt werden kann
kevman 0:014fad4dfb9d 219 AdSckUp();
kevman 0:014fad4dfb9d 220
kevman 0:014fad4dfb9d 221 if(Wandler == 0)
kevman 0:014fad4dfb9d 222 {
kevman 0:014fad4dfb9d 223 Ad1CsUp();
kevman 0:014fad4dfb9d 224 Ad0CsDown();
kevman 0:014fad4dfb9d 225 }
kevman 0:014fad4dfb9d 226 else
kevman 0:014fad4dfb9d 227 {
kevman 0:014fad4dfb9d 228 Ad0CsUp();
kevman 0:014fad4dfb9d 229 Ad1CsDown();
kevman 0:014fad4dfb9d 230 }
kevman 0:014fad4dfb9d 231 for(g_TempDelay = 0;g_TempDelay < 2; g_TempDelay++);
kevman 0:014fad4dfb9d 232 for(i=0;i<8;i++)
kevman 0:014fad4dfb9d 233 {
kevman 0:014fad4dfb9d 234 AdSckDown();
kevman 0:014fad4dfb9d 235 for(g_TempDelay = 0;g_TempDelay < 2; g_TempDelay++);
kevman 0:014fad4dfb9d 236 if(AdIsMisoUp())
kevman 0:014fad4dfb9d 237 g_AReadTemp |= m_AiMask;
kevman 0:014fad4dfb9d 238 AdSckUp();
kevman 0:014fad4dfb9d 239 for(g_TempDelay = 0;g_TempDelay < 2; g_TempDelay++);
kevman 0:014fad4dfb9d 240 m_AiMask = (m_AiMask>>1);
kevman 0:014fad4dfb9d 241 }
kevman 0:014fad4dfb9d 242
kevman 0:014fad4dfb9d 243 Ad0CsUp();
kevman 0:014fad4dfb9d 244 Ad1CsUp();
kevman 0:014fad4dfb9d 245 }
kevman 0:014fad4dfb9d 246