Test
Dependencies: mbed-dev-OS5_10_4
MySources/AdGlobals.cpp@0:014fad4dfb9d, 2020-08-07 (annotated)
- Committer:
- kevman
- Date:
- Fri Aug 07 07:24:21 2020 +0000
- Revision:
- 0:014fad4dfb9d
Test
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
kevman | 0:014fad4dfb9d | 1 | /*------------------------------------------------------------------------------- |
kevman | 0:014fad4dfb9d | 2 | Programm Name: AdGlobals.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: Globale Variablen 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 | // I/O's für den A/D Wandler |
kevman | 0:014fad4dfb9d | 19 | DigitalOut AdcSck(PTC10); |
kevman | 0:014fad4dfb9d | 20 | DigitalIn AdcMiso(PTC11); |
kevman | 0:014fad4dfb9d | 21 | DigitalOut AdcMosi(PTB11); |
kevman | 0:014fad4dfb9d | 22 | |
kevman | 0:014fad4dfb9d | 23 | InterruptIn AdcRdy0(PTB10); |
kevman | 0:014fad4dfb9d | 24 | InterruptIn AdcRdy1(PTC9); |
kevman | 0:014fad4dfb9d | 25 | |
kevman | 0:014fad4dfb9d | 26 | DigitalOut Adc0Cs(PTB3); |
kevman | 0:014fad4dfb9d | 27 | DigitalOut Adc1Cs(PTC8); |
kevman | 0:014fad4dfb9d | 28 | |
kevman | 0:014fad4dfb9d | 29 | DigitalIn AdcReset(PTB2); |
kevman | 0:014fad4dfb9d | 30 | |
kevman | 0:014fad4dfb9d | 31 | |
kevman | 0:014fad4dfb9d | 32 | // Globale Variablen |
kevman | 0:014fad4dfb9d | 33 | //------------------------------------- |
kevman | 0:014fad4dfb9d | 34 | uint8_t g_TempDelay; |
kevman | 0:014fad4dfb9d | 35 | uint8_t g_AReadTemp; |
kevman | 0:014fad4dfb9d | 36 | uint8_t g_nAdResultCount; |
kevman | 0:014fad4dfb9d | 37 | |
kevman | 0:014fad4dfb9d | 38 | |
kevman | 0:014fad4dfb9d | 39 | bool g_fAdConversion; |
kevman | 0:014fad4dfb9d | 40 | bool g_fRdy0, g_fRdy1; |
kevman | 0:014fad4dfb9d | 41 | |
kevman | 0:014fad4dfb9d | 42 | |
kevman | 0:014fad4dfb9d | 43 | AD_VAL *AdVal; |
kevman | 0:014fad4dfb9d | 44 | |
kevman | 0:014fad4dfb9d | 45 | UINT8 g_fARead[8]; |
kevman | 0:014fad4dfb9d | 46 | uint8_t g_nAdSetPos, g_nAdGetPos; |
kevman | 0:014fad4dfb9d | 47 | int g_nAdCount; |
kevman | 0:014fad4dfb9d | 48 | UINT32 m_AdTemp[8]; |
kevman | 0:014fad4dfb9d | 49 | |
kevman | 0:014fad4dfb9d | 50 | |
kevman | 0:014fad4dfb9d | 51 | /*------------------------------------------------------------------------------- |
kevman | 0:014fad4dfb9d | 52 | Schreibt die Inits auf beide AD Wandler |
kevman | 0:014fad4dfb9d | 53 | -------------------------------------------------------------------------------*/ |
kevman | 0:014fad4dfb9d | 54 | void Ad7739CommonWrite(uint8_t b) |
kevman | 0:014fad4dfb9d | 55 | { |
kevman | 0:014fad4dfb9d | 56 | uint8_t mask = 0x80; |
kevman | 0:014fad4dfb9d | 57 | AdSckUp(); |
kevman | 0:014fad4dfb9d | 58 | Ad0CsDown(); |
kevman | 0:014fad4dfb9d | 59 | Ad1CsDown(); |
kevman | 0:014fad4dfb9d | 60 | short_delay(2); |
kevman | 0:014fad4dfb9d | 61 | do |
kevman | 0:014fad4dfb9d | 62 | { |
kevman | 0:014fad4dfb9d | 63 | AdSckDown(); |
kevman | 0:014fad4dfb9d | 64 | short_delay(2); // min. 50ns SCK low |
kevman | 0:014fad4dfb9d | 65 | (b & mask) ? (AdMosiUp()) : (AdMosiDown()); |
kevman | 0:014fad4dfb9d | 66 | short_delay(2); // min. 30ns bevor die Flanke hochgeht |
kevman | 0:014fad4dfb9d | 67 | AdSckUp(); |
kevman | 0:014fad4dfb9d | 68 | short_delay(2); // min. 50ns SCK high |
kevman | 0:014fad4dfb9d | 69 | } |
kevman | 0:014fad4dfb9d | 70 | while(mask >>= 1); |
kevman | 0:014fad4dfb9d | 71 | // AdMosiUp(); |
kevman | 0:014fad4dfb9d | 72 | Ad0CsUp(); |
kevman | 0:014fad4dfb9d | 73 | Ad1CsUp(); |
kevman | 0:014fad4dfb9d | 74 | } |
kevman | 0:014fad4dfb9d | 75 | /*------------------------------------------------------------------------------- |
kevman | 0:014fad4dfb9d | 76 | -------------------------------------------------------------------------------*/ |
kevman | 0:014fad4dfb9d | 77 | void Ad7739OutWrite(uint8_t b, int Wandler) |
kevman | 0:014fad4dfb9d | 78 | { |
kevman | 0:014fad4dfb9d | 79 | uint8_t mask = 0x80; |
kevman | 0:014fad4dfb9d | 80 | AdSckUp(); |
kevman | 0:014fad4dfb9d | 81 | if(Wandler == 0) |
kevman | 0:014fad4dfb9d | 82 | Ad0CsDown(); |
kevman | 0:014fad4dfb9d | 83 | else |
kevman | 0:014fad4dfb9d | 84 | Ad1CsDown(); |
kevman | 0:014fad4dfb9d | 85 | short_delay(2); // min. 50ns SCK low |
kevman | 0:014fad4dfb9d | 86 | do |
kevman | 0:014fad4dfb9d | 87 | { |
kevman | 0:014fad4dfb9d | 88 | AdSckDown(); |
kevman | 0:014fad4dfb9d | 89 | short_delay(2); // min. 50ns SCK low |
kevman | 0:014fad4dfb9d | 90 | (b & mask) ? (AdMosiUp()) : (AdMosiDown()); |
kevman | 0:014fad4dfb9d | 91 | short_delay(2); // min. 30ns bevor die Flanke hochgeht |
kevman | 0:014fad4dfb9d | 92 | AdSckUp(); |
kevman | 0:014fad4dfb9d | 93 | short_delay(2); // min. 50ns SCK high |
kevman | 0:014fad4dfb9d | 94 | } |
kevman | 0:014fad4dfb9d | 95 | while(mask >>= 1); |
kevman | 0:014fad4dfb9d | 96 | Ad0CsUp(); |
kevman | 0:014fad4dfb9d | 97 | Ad1CsUp(); |
kevman | 0:014fad4dfb9d | 98 | AdMosiDown(); |
kevman | 0:014fad4dfb9d | 99 | } |
kevman | 0:014fad4dfb9d | 100 | /*------------------------------------------------------------------------------- |
kevman | 0:014fad4dfb9d | 101 | Startet einen einzelnen A/D Wandler. Wenn Mode = 0, dann single Mode, wenn Mode |
kevman | 0:014fad4dfb9d | 102 | = 1, dann continous Mode. |
kevman | 0:014fad4dfb9d | 103 | -------------------------------------------------------------------------------*/ |
kevman | 0:014fad4dfb9d | 104 | void Ad7739Start(uint8_t Chn, uint8_t Wandler, uint8_t Mode) |
kevman | 0:014fad4dfb9d | 105 | { |
kevman | 0:014fad4dfb9d | 106 | |
kevman | 0:014fad4dfb9d | 107 | if(Mode == 0) // Single Mode |
kevman | 0:014fad4dfb9d | 108 | { |
kevman | 0:014fad4dfb9d | 109 | Ad7739OutWrite(AD7739_WRITE_OP(AD7739_CHANNEL(AD7739_ADDR_MODE, Chn)), Wandler); |
kevman | 0:014fad4dfb9d | 110 | Ad7739OutWrite(0x42, Wandler); // 0x26 ist continous mode |
kevman | 0:014fad4dfb9d | 111 | } |
kevman | 0:014fad4dfb9d | 112 | else // continuous |
kevman | 0:014fad4dfb9d | 113 | { |
kevman | 0:014fad4dfb9d | 114 | Ad7739OutWrite(AD7739_WRITE_OP(AD7739_CHANNEL(AD7739_ADDR_MODE, Chn)), Wandler); |
kevman | 0:014fad4dfb9d | 115 | Ad7739OutWrite(0x2E, Wandler); // 0x26 ist continous mode0x08=Dump Mode, 0x04: Continous Read |
kevman | 0:014fad4dfb9d | 116 | Ad7739OutWrite(0x48, Wandler); // the first write of 48 start the continous read mode |
kevman | 0:014fad4dfb9d | 117 | // g_nIRead = 0; |
kevman | 0:014fad4dfb9d | 118 | AdMosiDown(); // muss unten sein, da sonst der Continous Mode gestoppt werden kann |
kevman | 0:014fad4dfb9d | 119 | |
kevman | 0:014fad4dfb9d | 120 | } |
kevman | 0:014fad4dfb9d | 121 | __enable_irq(); // 2017-05-31 |
kevman | 0:014fad4dfb9d | 122 | |
kevman | 0:014fad4dfb9d | 123 | } |
kevman | 0:014fad4dfb9d | 124 | /*------------------------------------------------------------------------------- |
kevman | 0:014fad4dfb9d | 125 | -------------------------------------------------------------------------------*/ |
kevman | 0:014fad4dfb9d | 126 | void Ad7739CommonStart(uint8_t Chn, uint8_t Mode) |
kevman | 0:014fad4dfb9d | 127 | { |
kevman | 0:014fad4dfb9d | 128 | if(Mode == 0) // Single Mode |
kevman | 0:014fad4dfb9d | 129 | { |
kevman | 0:014fad4dfb9d | 130 | Ad7739CommonWrite(AD7739_WRITE_OP(AD7739_CHANNEL(AD7739_ADDR_MODE,Chn))); |
kevman | 0:014fad4dfb9d | 131 | Ad7739CommonWrite(0x42); // 0x26 ist continous mode |
kevman | 0:014fad4dfb9d | 132 | } |
kevman | 0:014fad4dfb9d | 133 | else // continuous |
kevman | 0:014fad4dfb9d | 134 | { |
kevman | 0:014fad4dfb9d | 135 | Ad7739CommonWrite(AD7739_WRITE_OP(AD7739_CHANNEL(AD7739_ADDR_MODE, Chn))); |
kevman | 0:014fad4dfb9d | 136 | Ad7739CommonWrite(0x2E); // 0x26 ist continous mode |
kevman | 0:014fad4dfb9d | 137 | Ad7739CommonWrite(0x48); // 0x26 ist continous mode |
kevman | 0:014fad4dfb9d | 138 | } |
kevman | 0:014fad4dfb9d | 139 | |
kevman | 0:014fad4dfb9d | 140 | g_fAdConversion = true; // 2017-05-31 |
kevman | 0:014fad4dfb9d | 141 | __enable_irq(); // 2017-05-31 |
kevman | 0:014fad4dfb9d | 142 | |
kevman | 0:014fad4dfb9d | 143 | } |
kevman | 0:014fad4dfb9d | 144 | |
kevman | 0:014fad4dfb9d | 145 | /*------------------------------------------------------------------------------- |
kevman | 0:014fad4dfb9d | 146 | -------------------------------------------------------------------------------*/ |
kevman | 0:014fad4dfb9d | 147 | void Ad7739Stop(void) |
kevman | 0:014fad4dfb9d | 148 | { |
kevman | 0:014fad4dfb9d | 149 | // single |
kevman | 0:014fad4dfb9d | 150 | /* return; */ |
kevman | 0:014fad4dfb9d | 151 | |
kevman | 0:014fad4dfb9d | 152 | // continous |
kevman | 0:014fad4dfb9d | 153 | Ad7739CommonWrite(AD7739_WRITE_OP(AD7739_ADDR_MODE)); |
kevman | 0:014fad4dfb9d | 154 | Ad7739CommonWrite(0x02); |
kevman | 0:014fad4dfb9d | 155 | |
kevman | 0:014fad4dfb9d | 156 | g_fAdConversion = false; // 2017-05-31 |
kevman | 0:014fad4dfb9d | 157 | __enable_irq(); // 2017-05-31 |
kevman | 0:014fad4dfb9d | 158 | } |