Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependents: Sumo_v2 Sumo_v2_Unstable Sumo_v2_RG13
Revision 0:b08668430838, committed 2012-03-23
- Comitter:
- BlazeX
- Date:
- Fri Mar 23 14:45:07 2012 +0000
- Child:
- 1:a5bfae540999
- Commit message:
Changed in this revision
| AR8000.cpp | Show annotated file Show diff for this revision Revisions of this file |
| AR8000.h | Show annotated file Show diff for this revision Revisions of this file |
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/AR8000.cpp Fri Mar 23 14:45:07 2012 +0000
@@ -0,0 +1,51 @@
+#include "mbed.h"
+#include "AR8000.h"
+
+
+//Initialisieren
+AR8000::AR8000(InterruptIn & ChInt0_,
+ InterruptIn & ChInt1_,
+ InterruptIn & ChInt2_,
+ InterruptIn & ChInt3_,
+ InterruptIn & ChInt4_,
+ InterruptIn & ChInt5_,
+ InterruptIn & ChInt6_,
+ InterruptIn & ChInt7_)
+ : ChInt0(ChInt0_),
+ ChInt1(ChInt1_),
+ ChInt2(ChInt2_),
+ ChInt3(ChInt3_),
+ ChInt4(ChInt4_),
+ ChInt5(ChInt5_),
+ ChInt6(ChInt6_),
+ ChInt7(ChInt7_)
+{}
+
+void AR8000::Init()
+{
+ Time.start();
+
+ for(int i= 0; i < 8; i++)
+ {
+ LastRise[i]= 0;
+ dTime[i]= 1500;
+ }
+
+ ChInt0.mode(PullDown); ChInt0.rise<AR8000>(this, &AR8000::Rise0); ChInt0.fall<AR8000>(this, &AR8000::Fall0);
+ ChInt1.mode(PullDown); ChInt1.rise<AR8000>(this, &AR8000::Rise1); ChInt1.fall<AR8000>(this, &AR8000::Fall1);
+ ChInt2.mode(PullDown); ChInt2.rise<AR8000>(this, &AR8000::Rise2); ChInt2.fall<AR8000>(this, &AR8000::Fall2);
+ ChInt3.mode(PullDown); ChInt3.rise<AR8000>(this, &AR8000::Rise3); ChInt3.fall<AR8000>(this, &AR8000::Fall3);
+ ChInt4.mode(PullDown); ChInt4.rise<AR8000>(this, &AR8000::Rise4); ChInt4.fall<AR8000>(this, &AR8000::Fall4);
+ ChInt5.mode(PullDown); ChInt5.rise<AR8000>(this, &AR8000::Rise5); ChInt5.fall<AR8000>(this, &AR8000::Fall5);
+ ChInt6.mode(PullDown); ChInt6.rise<AR8000>(this, &AR8000::Rise6); ChInt6.fall<AR8000>(this, &AR8000::Fall6);
+ ChInt7.mode(PullDown); ChInt7.rise<AR8000>(this, &AR8000::Rise7); ChInt7.fall<AR8000>(this, &AR8000::Fall7);
+
+ Update();
+}
+
+//Update-Methode
+void AR8000::Update()
+{
+ for(int i= 0; i < 8; i++)
+ Pos[i]= dTime[i]-1000;
+}
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/AR8000.h Fri Mar 23 14:45:07 2012 +0000
@@ -0,0 +1,63 @@
+//TODO:
+//- Ein Timer reicht. Mit read_us() kann zu jeder Zeit die Zeit festgestellt werden
+
+#pragma once
+
+//Interrupt-Callback Vorlage
+#define AR8000_RISE_FALL(Ch)\
+void Rise##Ch()\
+{\
+ LastRise[Ch]= Time.read_us();\
+}\
+void Fall##Ch()\
+{\
+ int dT= Time.read_us() - LastRise[Ch];\
+ if(dT > 900 && dT < 2200)\
+ dTime[Ch]= dT;\
+}
+
+
+class AR8000
+{
+private:
+ InterruptIn & ChInt0; //Interrupt-Handler fuer jeden Pin
+ InterruptIn & ChInt1;
+ InterruptIn & ChInt2;
+ InterruptIn & ChInt3;
+ InterruptIn & ChInt4;
+ InterruptIn & ChInt5;
+ InterruptIn & ChInt6;
+ InterruptIn & ChInt7;
+
+ Timer Time; //Timer for all 8 Channels
+ volatile int LastRise[8]; //Zeitpunkt der letzten steigende Flanke
+ volatile int dTime[8]; //Pulsdauer in us [1000...2000]
+
+public:
+ //Das Ergebnis [0...1000], kann nach dem Update "gelesen werden"
+ int Pos[8];
+
+ //Initialisieren
+ AR8000(InterruptIn & ChInt0_,
+ InterruptIn & ChInt1_,
+ InterruptIn & ChInt2_,
+ InterruptIn & ChInt3_,
+ InterruptIn & ChInt4_,
+ InterruptIn & ChInt5_,
+ InterruptIn & ChInt6_,
+ InterruptIn & ChInt7_);
+ void Init();
+
+ //Interrupt-Callbacks definieren
+ AR8000_RISE_FALL(0);
+ AR8000_RISE_FALL(1);
+ AR8000_RISE_FALL(2);
+ AR8000_RISE_FALL(3);
+ AR8000_RISE_FALL(4);
+ AR8000_RISE_FALL(5);
+ AR8000_RISE_FALL(6);
+ AR8000_RISE_FALL(7);
+
+ //Update-Methode
+ void Update();
+};
\ No newline at end of file