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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren