cbcx

Dependencies:   DmTftLibrary mbed

Fork of LCD_Proj by Tobias Fuchsbichler

Revision:
4:0d4286278f41
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/as5047p.h	Mon Feb 01 13:08:54 2016 +0000
@@ -0,0 +1,164 @@
+#include "mbed.h"
+extern Serial pc;
+
+//0x3FFD = CORDIC magnitude
+//0x3FFE = Measured angle without dynamic angle error compensation
+//0x3FFF = Measured angle with dynamic angle error compensation
+
+//Chipselect = activ Low
+//Vor jedem einzelnem Data muss steigende Flanke erzeugt werden
+ 
+SPI spi(p11, p12, p13); // mosi, miso, sclk
+DigitalOut cs1(p23);
+DigitalOut cs2(p24);
+//Adresse ANGLECOM = 0x3FFF 
+
+
+class _as50
+{
+int Index;
+unsigned int Sarray1[24];
+unsigned int Sarray2[24];
+unsigned int Laenge,Breite; //Länge und breite des rechteckigen Kanals in dem gemessen wird
+Timer timer;
+
+public: _as50() //Konstruktor
+  {
+    Index=24;//Arraygröße für schleifen
+    spi.format(16,1); // heißt  16 Bit und //mode 1 -->CPOL=0, CPHA=1 heißt steigende Flanke
+    spi.frequency(1000000); //10Mhz clock
+    cs1 = 1; cs2= 1; //steigende Flanke --> anfangs (0 benötigt)
+    InitFeld();
+    Laenge=1;Breite=1; //Länge und Breite des Kanals in Meter
+  }
+  public: unsigned int Durchfluss(int welcher)
+  {
+      int durchfluss=0;
+      if(welcher==1)
+     {
+          timer.start();
+          while(timer.read()<=1) // 1 Sekunde lang Daten sammeln und dann mittelwert zurückgeben
+          {
+              durchfluss=Sensormittelwert(1);
+          }
+           timer.stop();timer.reset();     
+     }
+     if(welcher==2)
+     {
+          timer.start();timer.reset();
+          while(timer.read()<=1) 
+          {
+              durchfluss=Sensormittelwert(2);
+          }
+           timer.stop();timer.reset();
+     }
+     return durchfluss*Laenge*Breite; //*Länge*Breite des Kanals pro sekunde --> physikalischer Durchfluss
+  }
+  unsigned int Sensormittelwert(int welcher)
+  {
+     if(welcher==1)
+     {
+         unsigned int Sensor1=Sensor(1);                    //pc.printf("Sensor1: %u ",Sensor1);
+         unsigned int size1= Arraysize(Sarray1);            //pc.printf("size1: %u ",size1);
+         AddField(1,Sensor1,size1);
+         unsigned int Mittelwert1=Mittelwert(Sarray1);      //pc.printf("Mittelwert1: %u \r\n",Mittelwert1);
+         return Mittelwert1; //*Lange*Breite pro sekunde --> Durchfluss
+     }
+     if(welcher==2)
+     {
+         unsigned int Sensor2=Sensor(2);                   //pc.printf("Sensor2: %u",Sensor2);
+         unsigned int size2= Arraysize(Sarray2);           //pc.printf("size2: %u",size2);
+         AddField(2,Sensor2,size2);
+         unsigned int Mittelwert2=Mittelwert(Sarray2);     //pc.printf("Mittelwert2: %u \r\n",Mittelwert2);
+         return Mittelwert2;  //*Lange*Breite pro sekunde --> Durchfluss
+     }
+     return 0; //Default
+  }
+  
+  unsigned int Sensor(unsigned int welcher) //Sensorwerte auslesen
+  {
+        unsigned int whoami;
+        
+        if(welcher==1)
+        {
+            cs1 = 0; //select Sensor  1 setzen
+         
+            // Send 0x8f, the command to read the WHOAMI register
+            whoami = spi.write(0x3FFE | (1<<14)); //Register auslesen    1<<um 14 //rüberschieben (1 heißt lesen 0 heißt schreiben)
+            whoami &= ~(0xC000);
+            wait(0.001); //mindestens 5ns delay vor Flanke 
+            cs1 = 1; //deselect Sensor (0 setzen) 
+        }
+        if (welcher==2)
+        {
+            cs2 = 0; //select Sensor  1 setzen
+         
+            // Send 0x8f, the command to read the WHOAMI register
+            whoami = spi.write(0x3FFE | (1<<14)); //Register auslesen    1<<um 14 //rüberschieben (1 heißt lesen 0 heißt schreiben)
+            whoami &= ~(0xC000);
+            wait(0.001); //mindestens 5ns delay vor Flanke 
+            cs2 = 1; //deselect Sensor (0 setzen) 
+        }
+        whoami/=360;
+    return whoami;
+        
+   }
+   void InitFeld() //Alle Felder in Array auf 0 setzen
+   {
+    for(int i=0;i<Index;i++)
+    {
+        Sarray1[i]=0;
+        Sarray2[i]=0;
+    }
+   }
+  unsigned int Arraysize(unsigned int Sarray[]) //Felder mit Werten sind ungleich 0...liefert Anzahl der Felder mit Werten
+   {
+    int counter=0;
+    for(int i=0;i<Index;i++)
+    {
+            if(Sarray[i]!=0)
+            {
+                counter++;
+            }
+    }
+    return counter;
+   }
+   
+  void AddField(unsigned int welcher,unsigned int wert,unsigned int gross) 
+  {
+    if(gross==(Index-1))  //Bevor Feld "out of index geht" --> alles 0 setzen
+    {       
+        InitFeld();
+        if(welcher==1)
+        Sarray1[0]=wert;
+        if(welcher==2)
+        Sarray2[0]=wert;
+    }
+    else //Fügt Sensordaten in Array ein
+    {
+            if (welcher==1)
+            {
+                Sarray1[gross]=wert;
+            }
+            if (welcher==2)
+            {
+                Sarray2[gross]=wert;
+            }
+    }
+    
+  }
+  unsigned int Mittelwert(unsigned int Array[])  //Errechnet den Mittelwert der Arraydaten
+  {
+     unsigned int groesse=Arraysize(Array);
+     if((groesse)==0)
+     groesse=1;
+     unsigned int value=0;
+     for(int i=0;i<groesse;i++)
+     {
+         value+=Array[i]; //alle addieren
+     }                         
+     value/=groesse; //durch Anzahl
+                                                  
+     return value;
+  }
+};