DIC DAC Beispiel

Dependencies:   mbed

Committer:
Lukas_Adlboller
Date:
Mon Jan 13 09:22:46 2020 +0000
Revision:
0:2aca3f53fe79
Child:
1:c8943c51b10d
DIC

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Lukas_Adlboller 0:2aca3f53fe79 1 #include "mbed.h"
Lukas_Adlboller 0:2aca3f53fe79 2
Lukas_Adlboller 0:2aca3f53fe79 3 #define PI 3.14159
Lukas_Adlboller 0:2aca3f53fe79 4
Lukas_Adlboller 0:2aca3f53fe79 5 AnalogOut dacOutput(p18); // Ausgangs Pin 18
Lukas_Adlboller 0:2aca3f53fe79 6 Ticker valueTicker;
Lukas_Adlboller 0:2aca3f53fe79 7 float voltageValues[100]; // 100 Punkte
Lukas_Adlboller 0:2aca3f53fe79 8 int actualPoint; // Aktueller Punkt
Lukas_Adlboller 0:2aca3f53fe79 9 int outputMode = 1; // 1 = Sägezahn, 2 = Rechteck, 3 = Sinus
Lukas_Adlboller 0:2aca3f53fe79 10
Lukas_Adlboller 0:2aca3f53fe79 11 void outputToDAC()
Lukas_Adlboller 0:2aca3f53fe79 12 {
Lukas_Adlboller 0:2aca3f53fe79 13 dacOutput.write(voltageValues[actualPoint]);
Lukas_Adlboller 0:2aca3f53fe79 14 actualPoint++;
Lukas_Adlboller 0:2aca3f53fe79 15 if(actualPoint >= 100)
Lukas_Adlboller 0:2aca3f53fe79 16 {
Lukas_Adlboller 0:2aca3f53fe79 17 actualPoint = 0;
Lukas_Adlboller 0:2aca3f53fe79 18 }
Lukas_Adlboller 0:2aca3f53fe79 19 }
Lukas_Adlboller 0:2aca3f53fe79 20
Lukas_Adlboller 0:2aca3f53fe79 21 int main()
Lukas_Adlboller 0:2aca3f53fe79 22 {
Lukas_Adlboller 0:2aca3f53fe79 23 actualPoint = 0;
Lukas_Adlboller 0:2aca3f53fe79 24
Lukas_Adlboller 0:2aca3f53fe79 25 for(int i = 0; i < 100; i++)
Lukas_Adlboller 0:2aca3f53fe79 26 {
Lukas_Adlboller 0:2aca3f53fe79 27 switch(outputMode)
Lukas_Adlboller 0:2aca3f53fe79 28 {
Lukas_Adlboller 0:2aca3f53fe79 29 case 1:
Lukas_Adlboller 0:2aca3f53fe79 30 voltageValues[i] = (float)i / 100.0f;;
Lukas_Adlboller 0:2aca3f53fe79 31 break;
Lukas_Adlboller 0:2aca3f53fe79 32 case 2:
Lukas_Adlboller 0:2aca3f53fe79 33 voltageValues[i] = i <= 49 ? 1 : 0;
Lukas_Adlboller 0:2aca3f53fe79 34 break;
Lukas_Adlboller 0:2aca3f53fe79 35 case 3:
Lukas_Adlboller 0:2aca3f53fe79 36 voltageValues[i] = 0.5f * sin(((float)i * PI) * 3.6f / 180) + 0.5f; // w = 6283 = 2 * PI * f
Lukas_Adlboller 0:2aca3f53fe79 37 break;
Lukas_Adlboller 0:2aca3f53fe79 38 }
Lukas_Adlboller 0:2aca3f53fe79 39 }
Lukas_Adlboller 0:2aca3f53fe79 40
Lukas_Adlboller 0:2aca3f53fe79 41 valueTicker.attach_us(&outputToDAC, 10);
Lukas_Adlboller 0:2aca3f53fe79 42
Lukas_Adlboller 0:2aca3f53fe79 43 while(1)
Lukas_Adlboller 0:2aca3f53fe79 44 {
Lukas_Adlboller 0:2aca3f53fe79 45 }
Lukas_Adlboller 0:2aca3f53fe79 46 }