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: 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 }