cbcx
Dependencies: DmTftLibrary mbed
Fork of LCD_Proj by
as5047p.h@4:0d4286278f41, 2016-02-01 (annotated)
- Committer:
- TFuchsbichler
- Date:
- Mon Feb 01 13:08:54 2016 +0000
- Revision:
- 4:0d4286278f41
dshshd
Who changed what in which revision?
User | Revision | Line number | New 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 | }; |