Pages: [1]   Go Down
Author Topic: Digitales Signal - Frequenz im MHz Bereich ermitteln  (Read 628 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 10
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo Forum,

Ich benutze ein Arduino Mega 2560 und möchte folgendes Programm schreiben:

Ich habe ein digitales Input Signal an PIN 29, von dem ich gerne die Frequenz ermitteln möchte. Das Oszilloskop zeigt eine Frequnz von ca. 1,5 MHz an. Ich würde gerne nachvollziehen, ob das Arduino Board schnell genug ist und die gleiche Frequenz heraus bekommt!

Wie könnte ein mögliches Programm aussehen?

Vielen Dank!

Mfg
Logged

Forum Moderator
BZ (I)
Offline Offline
Brattain Member
*****
Karma: 251
Posts: 21219
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bei 16 Mhz Takt sind 1,5MHz gerade mal 10,6 Taktzyklen.
Mit einem C-Programm hast Du keine Chanche diese  Frequenz zu messen.
Grüße Uwe
Logged

Germany S-H
Offline Offline
Faraday Member
**
Karma: 135
Posts: 2863
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Wie könnte ein mögliches Programm aussehen?

Mit der FreqCount-Library angeblich (von mir nicht getestet) Frequenzzählung bis zu 5 MHz möglich:
http://www.pjrc.com/teensy/td_libs_FreqCount.html

Probier's aus!
Logged

Chemnitz/Saxony/Germany
Offline Offline
Full Member
***
Karma: 0
Posts: 107
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Bei 16 Mhz Takt sind 1,5MHz gerade mal 10,6 Taktzyklen.
Mit einem C-Programm hast Du keine Chanche diese  Frequenz zu messen.

Sehe ich auch so. Und selbst in Assembler dürfte das sportlich sein.

Klassisch hat man das früher mit Schaltkreisgräbern so gemacht:

Ein Zeitgeber hat das Zeitfenster für die Zählung definiert, z. Bsp. eine Sekunde. In diesem Zeitfenster wurden die Impulse von einer Zählerkette gezählt. Danach ausgegeben, Zähler auf Null und alles wieder von vorn.

Weil Zählerbausteine auch nicht beliebig schnell zählen können hat man davor einen Vorteiler gepackt, der den Zählimpuls durch einen bestimmten Wert runtergeteilt hat.

So in der Art würde ich das heute auch machen:

- Vorteiler um zählbare Impulsfolgen zu erhalten.
- Das Zeitfenster über einen Timer.  Wird der Timerinterrupt ausgelöst --> Wert anzeigen und zurück auf Null.
- Den Zählimpuls selbst würde ich über eine Interruptroutine zählen: Der Impuls löst den Interrupt aus, in der Routine wird der Zählwert um 1 erhöht.

Die Interruptroutine muss sehr kurz und schnell sein, damit sie sicher fertig ist bevor der nächste Zählimpuls kommt. Das ist das was Uwe mit den 10,6  Takten meinte.

Andererseits darf der Zählinterrupt auch nicht so oft ausgelöst werden das die anderen Routinen garnicht mehr zum Zug kommen.
Logged

0
Offline Offline
Faraday Member
**
Karma: 23
Posts: 3470
20 LEDs are enough
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Die Hardware Zähler im AVR Chip können auch extern getaktet werden. Und Vorteiler haben die auch noch --> 1.5 MHz ist dann plötzlich gar nicht mehr wirklich sportlich. Die Details dazu stehen im Datenblatt.
Logged

Check out my experiments http://blog.blinkenlight.net

Cologne
Offline Offline
Sr. Member
****
Karma: 11
Posts: 496
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo,
teile den zu messenden Takt doch erst durch ein vielfaches von 2, z.B. mit einem Binärzähler (74HC4060). Diesen Takt kannst du dann messen und zurückrechnen.
Gruß
Reinhard
Logged

Pages: [1]   Go Up
Jump to: