Interrupt Problem Arduino Due

OP #3627282
Lesenswert?
• ▲
▼
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
Gast #3628818
Lesenswert?
• ▲
▼
Oliver Reinsdorff schrieb:
> Wenn ich das Clock-Signal auf 100kHz runtersetzt funktioniert es leider
> ebenfalls nicht.

Wenn dein Prozessor mit den Default-Einstellungen läuft, läuft der mit 
1MHz Takt. Da sind auch 100kHz Interrupt-Frequenz noch seeeehr 
sportlich.

Der weiteren schau doch mal ins Datenblatt, wie

> volatile unsigned char data[65536];

mit der SRam-Größe des Prozessors zusammenpasst.

Und dann, obwohl in dem Fall eher akademisch, denkst du bitte auch 
nochmal über diese Zeile nach:

> if (n > 65536){

Vermutlich sind noch mehr Fehler drin, aber die darftst du dann selber 
finden.

Oliver

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.