cbcx

Dependencies:   DmTftLibrary mbed

Fork of LCD_Proj by Tobias Fuchsbichler

Committer:
TFuchsbichler
Date:
Mon Feb 01 13:08:54 2016 +0000
Revision:
4:0d4286278f41
dshshd

Who changed what in which revision?

UserRevisionLine numberNew contents of line
TFuchsbichler 4:0d4286278f41 1 #include "mbed.h"
TFuchsbichler 4:0d4286278f41 2 extern Serial pc;
TFuchsbichler 4:0d4286278f41 3
TFuchsbichler 4:0d4286278f41 4 //0x3FFD = CORDIC magnitude
TFuchsbichler 4:0d4286278f41 5 //0x3FFE = Measured angle without dynamic angle error compensation
TFuchsbichler 4:0d4286278f41 6 //0x3FFF = Measured angle with dynamic angle error compensation
TFuchsbichler 4:0d4286278f41 7
TFuchsbichler 4:0d4286278f41 8 //Chipselect = activ Low
TFuchsbichler 4:0d4286278f41 9 //Vor jedem einzelnem Data muss steigende Flanke erzeugt werden
TFuchsbichler 4:0d4286278f41 10
TFuchsbichler 4:0d4286278f41 11 SPI spi(p11, p12, p13); // mosi, miso, sclk
TFuchsbichler 4:0d4286278f41 12 DigitalOut cs1(p23);
TFuchsbichler 4:0d4286278f41 13 DigitalOut cs2(p24);
TFuchsbichler 4:0d4286278f41 14 //Adresse ANGLECOM = 0x3FFF
TFuchsbichler 4:0d4286278f41 15
TFuchsbichler 4:0d4286278f41 16
TFuchsbichler 4:0d4286278f41 17 class _as50
TFuchsbichler 4:0d4286278f41 18 {
TFuchsbichler 4:0d4286278f41 19 int Index;
TFuchsbichler 4:0d4286278f41 20 unsigned int Sarray1[24];
TFuchsbichler 4:0d4286278f41 21 unsigned int Sarray2[24];
TFuchsbichler 4:0d4286278f41 22 unsigned int Laenge,Breite; //Länge und breite des rechteckigen Kanals in dem gemessen wird
TFuchsbichler 4:0d4286278f41 23 Timer timer;
TFuchsbichler 4:0d4286278f41 24
TFuchsbichler 4:0d4286278f41 25 public: _as50() //Konstruktor
TFuchsbichler 4:0d4286278f41 26 {
TFuchsbichler 4:0d4286278f41 27 Index=24;//Arraygröße für schleifen
TFuchsbichler 4:0d4286278f41 28 spi.format(16,1); // heißt 16 Bit und //mode 1 -->CPOL=0, CPHA=1 heißt steigende Flanke
TFuchsbichler 4:0d4286278f41 29 spi.frequency(1000000); //10Mhz clock
TFuchsbichler 4:0d4286278f41 30 cs1 = 1; cs2= 1; //steigende Flanke --> anfangs (0 benötigt)
TFuchsbichler 4:0d4286278f41 31 InitFeld();
TFuchsbichler 4:0d4286278f41 32 Laenge=1;Breite=1; //Länge und Breite des Kanals in Meter
TFuchsbichler 4:0d4286278f41 33 }
TFuchsbichler 4:0d4286278f41 34 public: unsigned int Durchfluss(int welcher)
TFuchsbichler 4:0d4286278f41 35 {
TFuchsbichler 4:0d4286278f41 36 int durchfluss=0;
TFuchsbichler 4:0d4286278f41 37 if(welcher==1)
TFuchsbichler 4:0d4286278f41 38 {
TFuchsbichler 4:0d4286278f41 39 timer.start();
TFuchsbichler 4:0d4286278f41 40 while(timer.read()<=1) // 1 Sekunde lang Daten sammeln und dann mittelwert zurückgeben
TFuchsbichler 4:0d4286278f41 41 {
TFuchsbichler 4:0d4286278f41 42 durchfluss=Sensormittelwert(1);
TFuchsbichler 4:0d4286278f41 43 }
TFuchsbichler 4:0d4286278f41 44 timer.stop();timer.reset();
TFuchsbichler 4:0d4286278f41 45 }
TFuchsbichler 4:0d4286278f41 46 if(welcher==2)
TFuchsbichler 4:0d4286278f41 47 {
TFuchsbichler 4:0d4286278f41 48 timer.start();timer.reset();
TFuchsbichler 4:0d4286278f41 49 while(timer.read()<=1)
TFuchsbichler 4:0d4286278f41 50 {
TFuchsbichler 4:0d4286278f41 51 durchfluss=Sensormittelwert(2);
TFuchsbichler 4:0d4286278f41 52 }
TFuchsbichler 4:0d4286278f41 53 timer.stop();timer.reset();
TFuchsbichler 4:0d4286278f41 54 }
TFuchsbichler 4:0d4286278f41 55 return durchfluss*Laenge*Breite; //*Länge*Breite des Kanals pro sekunde --> physikalischer Durchfluss
TFuchsbichler 4:0d4286278f41 56 }
TFuchsbichler 4:0d4286278f41 57 unsigned int Sensormittelwert(int welcher)
TFuchsbichler 4:0d4286278f41 58 {
TFuchsbichler 4:0d4286278f41 59 if(welcher==1)
TFuchsbichler 4:0d4286278f41 60 {
TFuchsbichler 4:0d4286278f41 61 unsigned int Sensor1=Sensor(1); //pc.printf("Sensor1: %u ",Sensor1);
TFuchsbichler 4:0d4286278f41 62 unsigned int size1= Arraysize(Sarray1); //pc.printf("size1: %u ",size1);
TFuchsbichler 4:0d4286278f41 63 AddField(1,Sensor1,size1);
TFuchsbichler 4:0d4286278f41 64 unsigned int Mittelwert1=Mittelwert(Sarray1); //pc.printf("Mittelwert1: %u \r\n",Mittelwert1);
TFuchsbichler 4:0d4286278f41 65 return Mittelwert1; //*Lange*Breite pro sekunde --> Durchfluss
TFuchsbichler 4:0d4286278f41 66 }
TFuchsbichler 4:0d4286278f41 67 if(welcher==2)
TFuchsbichler 4:0d4286278f41 68 {
TFuchsbichler 4:0d4286278f41 69 unsigned int Sensor2=Sensor(2); //pc.printf("Sensor2: %u",Sensor2);
TFuchsbichler 4:0d4286278f41 70 unsigned int size2= Arraysize(Sarray2); //pc.printf("size2: %u",size2);
TFuchsbichler 4:0d4286278f41 71 AddField(2,Sensor2,size2);
TFuchsbichler 4:0d4286278f41 72 unsigned int Mittelwert2=Mittelwert(Sarray2); //pc.printf("Mittelwert2: %u \r\n",Mittelwert2);
TFuchsbichler 4:0d4286278f41 73 return Mittelwert2; //*Lange*Breite pro sekunde --> Durchfluss
TFuchsbichler 4:0d4286278f41 74 }
TFuchsbichler 4:0d4286278f41 75 return 0; //Default
TFuchsbichler 4:0d4286278f41 76 }
TFuchsbichler 4:0d4286278f41 77
TFuchsbichler 4:0d4286278f41 78 unsigned int Sensor(unsigned int welcher) //Sensorwerte auslesen
TFuchsbichler 4:0d4286278f41 79 {
TFuchsbichler 4:0d4286278f41 80 unsigned int whoami;
TFuchsbichler 4:0d4286278f41 81
TFuchsbichler 4:0d4286278f41 82 if(welcher==1)
TFuchsbichler 4:0d4286278f41 83 {
TFuchsbichler 4:0d4286278f41 84 cs1 = 0; //select Sensor 1 setzen
TFuchsbichler 4:0d4286278f41 85
TFuchsbichler 4:0d4286278f41 86 // Send 0x8f, the command to read the WHOAMI register
TFuchsbichler 4:0d4286278f41 87 whoami = spi.write(0x3FFE | (1<<14)); //Register auslesen 1<<um 14 //rüberschieben (1 heißt lesen 0 heißt schreiben)
TFuchsbichler 4:0d4286278f41 88 whoami &= ~(0xC000);
TFuchsbichler 4:0d4286278f41 89 wait(0.001); //mindestens 5ns delay vor Flanke
TFuchsbichler 4:0d4286278f41 90 cs1 = 1; //deselect Sensor (0 setzen)
TFuchsbichler 4:0d4286278f41 91 }
TFuchsbichler 4:0d4286278f41 92 if (welcher==2)
TFuchsbichler 4:0d4286278f41 93 {
TFuchsbichler 4:0d4286278f41 94 cs2 = 0; //select Sensor 1 setzen
TFuchsbichler 4:0d4286278f41 95
TFuchsbichler 4:0d4286278f41 96 // Send 0x8f, the command to read the WHOAMI register
TFuchsbichler 4:0d4286278f41 97 whoami = spi.write(0x3FFE | (1<<14)); //Register auslesen 1<<um 14 //rüberschieben (1 heißt lesen 0 heißt schreiben)
TFuchsbichler 4:0d4286278f41 98 whoami &= ~(0xC000);
TFuchsbichler 4:0d4286278f41 99 wait(0.001); //mindestens 5ns delay vor Flanke
TFuchsbichler 4:0d4286278f41 100 cs2 = 1; //deselect Sensor (0 setzen)
TFuchsbichler 4:0d4286278f41 101 }
TFuchsbichler 4:0d4286278f41 102 whoami/=360;
TFuchsbichler 4:0d4286278f41 103 return whoami;
TFuchsbichler 4:0d4286278f41 104
TFuchsbichler 4:0d4286278f41 105 }
TFuchsbichler 4:0d4286278f41 106 void InitFeld() //Alle Felder in Array auf 0 setzen
TFuchsbichler 4:0d4286278f41 107 {
TFuchsbichler 4:0d4286278f41 108 for(int i=0;i<Index;i++)
TFuchsbichler 4:0d4286278f41 109 {
TFuchsbichler 4:0d4286278f41 110 Sarray1[i]=0;
TFuchsbichler 4:0d4286278f41 111 Sarray2[i]=0;
TFuchsbichler 4:0d4286278f41 112 }
TFuchsbichler 4:0d4286278f41 113 }
TFuchsbichler 4:0d4286278f41 114 unsigned int Arraysize(unsigned int Sarray[]) //Felder mit Werten sind ungleich 0...liefert Anzahl der Felder mit Werten
TFuchsbichler 4:0d4286278f41 115 {
TFuchsbichler 4:0d4286278f41 116 int counter=0;
TFuchsbichler 4:0d4286278f41 117 for(int i=0;i<Index;i++)
TFuchsbichler 4:0d4286278f41 118 {
TFuchsbichler 4:0d4286278f41 119 if(Sarray[i]!=0)
TFuchsbichler 4:0d4286278f41 120 {
TFuchsbichler 4:0d4286278f41 121 counter++;
TFuchsbichler 4:0d4286278f41 122 }
TFuchsbichler 4:0d4286278f41 123 }
TFuchsbichler 4:0d4286278f41 124 return counter;
TFuchsbichler 4:0d4286278f41 125 }
TFuchsbichler 4:0d4286278f41 126
TFuchsbichler 4:0d4286278f41 127 void AddField(unsigned int welcher,unsigned int wert,unsigned int gross)
TFuchsbichler 4:0d4286278f41 128 {
TFuchsbichler 4:0d4286278f41 129 if(gross==(Index-1)) //Bevor Feld "out of index geht" --> alles 0 setzen
TFuchsbichler 4:0d4286278f41 130 {
TFuchsbichler 4:0d4286278f41 131 InitFeld();
TFuchsbichler 4:0d4286278f41 132 if(welcher==1)
TFuchsbichler 4:0d4286278f41 133 Sarray1[0]=wert;
TFuchsbichler 4:0d4286278f41 134 if(welcher==2)
TFuchsbichler 4:0d4286278f41 135 Sarray2[0]=wert;
TFuchsbichler 4:0d4286278f41 136 }
TFuchsbichler 4:0d4286278f41 137 else //Fügt Sensordaten in Array ein
TFuchsbichler 4:0d4286278f41 138 {
TFuchsbichler 4:0d4286278f41 139 if (welcher==1)
TFuchsbichler 4:0d4286278f41 140 {
TFuchsbichler 4:0d4286278f41 141 Sarray1[gross]=wert;
TFuchsbichler 4:0d4286278f41 142 }
TFuchsbichler 4:0d4286278f41 143 if (welcher==2)
TFuchsbichler 4:0d4286278f41 144 {
TFuchsbichler 4:0d4286278f41 145 Sarray2[gross]=wert;
TFuchsbichler 4:0d4286278f41 146 }
TFuchsbichler 4:0d4286278f41 147 }
TFuchsbichler 4:0d4286278f41 148
TFuchsbichler 4:0d4286278f41 149 }
TFuchsbichler 4:0d4286278f41 150 unsigned int Mittelwert(unsigned int Array[]) //Errechnet den Mittelwert der Arraydaten
TFuchsbichler 4:0d4286278f41 151 {
TFuchsbichler 4:0d4286278f41 152 unsigned int groesse=Arraysize(Array);
TFuchsbichler 4:0d4286278f41 153 if((groesse)==0)
TFuchsbichler 4:0d4286278f41 154 groesse=1;
TFuchsbichler 4:0d4286278f41 155 unsigned int value=0;
TFuchsbichler 4:0d4286278f41 156 for(int i=0;i<groesse;i++)
TFuchsbichler 4:0d4286278f41 157 {
TFuchsbichler 4:0d4286278f41 158 value+=Array[i]; //alle addieren
TFuchsbichler 4:0d4286278f41 159 }
TFuchsbichler 4:0d4286278f41 160 value/=groesse; //durch Anzahl
TFuchsbichler 4:0d4286278f41 161
TFuchsbichler 4:0d4286278f41 162 return value;
TFuchsbichler 4:0d4286278f41 163 }
TFuchsbichler 4:0d4286278f41 164 };