Arduino micro Frequenz Array messen

Gast #7007185
Lesenswert?
• ▲
▼
Moin zusammen,

ich habe ein Array S[1600] und ein Array [16] diese zähle ich beide mit 
dem ersten code Beispiel durch. Um die durch zulaufen habe ich mit dem 
zweiten code Beispiel ein Interrupt erstellt.
Rein rechnerisch müsste ich bei einer Timer Frequenz von 80kHz geteilt 
durch 1600 Stellen auf 50Hz kommen und 80kHz geteilt durch 16 Stellen 
müssen das 5kHz sein. Wie kann ich das jetzt am besten messen ob das 
auch passt?
1
ISR(TIMER1_COMPA_vect){         //Interrupt
2
m=m+1;
3
if(m>1599)
4
m=0;
5

6
//Dreieckarray hochrechnen
7
n=n+1;
8
if(n>15)
9
n=0;
10
}
1
//Timer1 instalisieren
2
TCCR1A = 0;                     //Register definiert zurücksetzten
3
TCCR1B = 0;                     //zuerst Register definiert zurücksetzen
4
TCNT1 = 0;                      //Zählerwert zurücksetzten
5

6
OCR1A = 199;                    //Timer1 80kHZ einstellen
7
TCCR1B |= (1 << WGM12);         //CTC mode
8
//TCCR1B |= (0 << CS12) | (0 << CS11) | (1 >> CS10); //kein Prescale
9
TCCR1B |= (1 << CS10);          // clk/1 prescale 1024
10
TIMSK1 |= (1 << OCIE1A);        //Aktivieren des Timer-Vergleichs-Interrupt
Gast #7007206
Lesenswert?
• ▲
▼
Black D. schrieb:
> Rein rechnerisch müsste ich bei einer Timer Frequenz von 80kHz geteilt
> durch 1600 Stellen auf 50Hz kommen und 80kHz geteilt durch 16 Stellen
> müssen das 5kHz sein. Wie kann ich das jetzt am besten messen ob das
> auch passt?

Das wird wohl synchron mir deiner "Loop" laufen ...
Wie genau musst Du die 50Hz/5kHz denn wissen?
Gast #7007217
Lesenswert?
• ▲
▼
1
unsigned long T_index_0 = 0;
2
unsigned long T_index_1599 = 0;
3

4
ISR(TIMER1_COMPA_vect){         //Interrupt
5

6
 if(m == 0){
7
   wenn_das_array_bei_index_0 = micros();
8
 }
9
 m=m+1;
10

11
 if(m>1599){
12
  m=0;
13
  wenn_das_array_bei_index_1599 = micros();
14
  Serial.print(" T = ");
15
  Serial.print(T_index_1599 - T_index_0);
16
  Serial.print(", freq = ");Serial.println( 1 / T_index_1599 - T_index_0);
17
 }
18
//Dreieckarray hochrechnen
19
 n=n+1;
20
 if(n>15)
21
  n=0;
22
}


ungefähr so. Nimmt Zeit bis array index = 0 und bei 1599.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 4 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.