Guten morgen zusammen,
ich habe folgendes Problem: und zwar habe ich ein Mikrofon, welches
digitale Signale im PDM-Format ausgiebt.
Dieses Mikrofon wird mit einem 2MHz-Clock-Signal angesteuert, mit dem
selben Takt schickt das Mikrofon die Signale auch raus. Jetzt möchte ich
diese Signale über ein Interrupt einlesen. Wenn eine bestimmte Anzahl an
Werten aufgenommen wurde soll der Interrupt deaktiviert werden, damit
die Werte in Ruhe abgearbeitet werden können. Aber leider kommen keine
Daten auf meinem Rechner an. Das Clocksignal und die Serielle
Übertragung ansich funktionieren aber das Zusammenspiel leider nicht.
Habt ihr eine Idee woran es liegen kann?
Vielen dank schon mal im Vorraus!!!
1 | volatile int n=0;
|
2 | volatile unsigned char data[65536];
|
3 |
|
4 | void setup() {
|
5 | Serial.begin(9600);
|
6 |
|
7 | pinMode(25, INPUT);
|
8 | pinMode(29,OUTPUT);
|
9 | pinMode(7,INPUT);
|
10 |
|
11 | digitalWrite(29,HIGH);
|
12 |
|
13 | int32_t mask_PWM_pin_7 = digitalPinToBitMask(7);
|
14 |
|
15 | REG_PMC_PCER1 = 1<<4;
|
16 | REG_PIOC_PDR |= mask_PWM_pin_7;
|
17 | REG_PIOC_ABSR |= mask_PWM_pin_7;
|
18 | REG_PWM_CLK = 0;
|
19 | REG_PWM_CMR6 = 0<<9;
|
20 | REG_PWM_CPRD6 = 35;
|
21 | REG_PWM_CDTY6 = 17;
|
22 | REG_PWM_ENA = 1<<6;
|
23 |
|
24 | attachInterrupt(7, read, RISING);
|
25 | }
|
26 |
|
27 | void loop() {
|
28 |
|
29 | int b = 1;
|
30 | int y = 0;
|
31 |
|
32 | if (n > 65536){
|
33 | detachInterrupt(7);
|
34 |
|
35 | for (int zeiger = 0; zeiger < 65024; zeiger++) {
|
36 |
|
37 | for(int k = 0; k < 512; k++){
|
38 | y = b * data[k + zeiger];
|
39 | }
|
40 | Serial.println(y);
|
41 | y = 0;
|
42 | }
|
43 | delay(1000);
|
44 | n = 0;
|
45 |
|
46 | attachInterrupt(7, read, RISING);
|
47 | }
|
48 | }
|
49 |
|
50 | void read (){
|
51 | data[n] = REG_PIOD_PDSR & 0x1;
|
52 | n=n+1;
|
53 | }
|
Gruß Olli