Zum Frequenzzähler wird ein LCD Display 16 x 2 hinzugefügt basierend auf den beiden Projekten:
– Frequenzzähler Teil 1 & Teil 2
– LCD Display Teil 1 & Teil 2
Das 1602 LCD Display soll die gemessene Frequenz ausgeben. Die Anschlüsse bei beiden Projekten überschneiden sich nicht, sodass sie alle weiter verwendet werden.
Die Display Anschlüsse:
LCD > Arduino
————-
VSS > GND
VDD > +5V
V0 > 10k Poti + 1kOhm Widerstand > GND
RS > Pin 12
R/W > Pin 13
E > Pin 11
D4 > Pin 7
D5 > Pin 8
D6 > Pin 9
D7 > Pin 10
A > +5V
K > 10 Ohm Widerstand > GND
Die Messfrequenz wird mit einem Pegel von ca. 5V auf Pin 5 und GND angeschlossen. Achtung: nicht über 5V Pegel!
Der Aufbau
Das Programm
// Arduino Uno Frequenzzähler bis ca. 5 MHz // Eingangsspannung muss an Pin 5 mit ca. 5V Pegel ankommen. // V 1.2: 1602 Display hinzugefügt // // Beschreibung und Library unter: // http://interface.khm.de/index.php/lab/experiments/arduino-frequency-counter-library/ // // Matthias Busse 24.05.2014 Version 1.2 /* LCD Display Anschlüsse: LCD > Arduino ------------- VSS > GND VDD > +5V V0 > 10k Poti + 1kOhm Widerstand > GND RS > Pin 12 R/W > Pin 13 E > Pin 11 D4 > Pin 7 D5 > Pin 8 D6 > Pin 9 D7 > Pin 10 A > +5V K > 10 Ohm Widerstand > GND */ #include < FreqCounter.h> #include < LiquidCrystal.h> LiquidCrystal lcd(12, 13, 11, 7, 8, 9, 10); long int rfreq, mfreq; // rfreq=Rechenfrequenz, mfreq=Messfrequenz int hz=0, khz=0, mhz=0; // Hz, kHz und MHz je 3 Ziffern char sfreq[15]; // sfreq=Stringfrequenz void setup() { Serial.begin(38400); // Serielle Ausgabe Serial.println("Frequenz Zaehler V 1.2"); lcd.begin(20,4); lcd.clear(); lcd.setCursor(0,0); lcd.print("Frequenz Zaehler"); delay(1000); } void loop() { FreqCounter::f_comp= 8; // Kompensation einstellen FreqCounter::start(1000); // Zähler starten für 1000ms while (FreqCounter::f_ready == 0) // warten bis der Zähler fertig ist mfreq=FreqCounter::f_freq; // Ergebnis lesen rfreq=mfreq; hz=rfreq-(int((rfreq/1000))*1000); // Hz ermitteln rfreq=(rfreq-hz)/1000; // kHz ermitteln khz=rfreq-(int((rfreq/1000))*1000); rfreq=(rfreq-khz)/1000; // MHz ermitteln mhz=rfreq-(int((rfreq/1000))*1000); if(mfreq<1000) // Hz in String schreiben sprintf(sfreq," %3d Hz",hz); if((mfreq>=1000)&&(mfreq<1000000)) // kHz.Hz in String schreiben sprintf(sfreq," %3d.%03d Hz",khz,hz); if(mfreq>999999) // MHz.kHz.Hz in String schreiben sprintf(sfreq,"%3d.%03d.%03d Hz",mhz,khz,hz); Serial.println(sfreq); // Terminal ausgeben lcd.setCursor(1,1); // Display ausgeben lcd.print(" "); lcd.setCursor(1,1); lcd.print(sfreq); }
Für den Frequenzeingang sollte noch eine Schutzschaltung vorgesehen werden, z.B. ein 7400 IC mit 5V Berieb, das den Pin 5 des Arduino vor Überspannungen schützt.
> Frequenzzähler für niedrige Frequenzen mit Pulslängenmessung
> Eingangsverstärker für den Frequenzzähler
> Den Frequenzzähler mit LCD auf der Platine aufgebaut.
von Matthias Busse
Pingback: Temperatursensor DS18B20 mit dem Arduino Uno und LCD Display | Shelvin – Elektronik ausprobiert und erläutert
Pingback: Ein Frequenzzähler für niedrige Frequenzen mit dem Arduino Uno und der Periodendauer Messung | Shelvin – Elektronik ausprobiert und erläutert
Pingback: Eingangsverstärker für den Arduino Frequenzzähler 10 Hz bis 10 MHz | Shelvin – Elektronik ausprobiert und erläutert
Pingback: Der Frequenzgenerator und Frequenzzähler | Shelvin – Elektronik ausprobiert und erläutert
Pingback: Frequenzzähler mit dem Arduino Uno Teil 2 | Shelvin – Elektronik ausprobiert und erläutert
Danke für die gute Anleitung.
Der Code hat bei mir jedoch an zwei Stellen zu einem Kompilierungsfehler geführt.
Und zwar sind bei den Includes vor den Bibliothekbezeichnungen zwei Leerzeichen, welche dort
nicht hingehören (also hinter dem „<"):
#include
#include
Viele Grüße,
Heiko
Hallo Heiko,
die Leerzeichen mußte ich leider einfügen, sonst löscht mein WordPress den Rest der Textzeile.
An alle: Wenn jemand dafür eine Lösung kennt, bitte mir mitteilen.
Matthias
Servus
ich bekomme immer eine Fehlermeldung
„sketch_aug05a.ino:26:26: fatal error: FreqCounter.h: Datei oder Verzeichnis nicht gefunden
compilation terminated.“
FreqCounter habe ich hier runtergeladen und importiert
https://github.com/PaulStoffregen/FreqCount
In Zeile:
#include
#include wird FreqCounter.h in orange
dagegen
#include bleibt alles schwarz
Danke für die Bereitstellung aller dieser sehr schönen Projekte. Der Frequenzzähler läuft bei mir sehr stabil und ist für die Auswertung von seriellen Meßdaten im NF Bereich sehr brauchbar. Leider macht er geringe Abweichungen (von ca. 0,8%) vom Realwert. Mit einem entsprechenden Vorteiler (z.B.: 10:1) und einer anderen Torzeit ließe sich der Meßbereich auf das Kurzwellenband >30MHz erweitern. Wie aber bekomme ich die Schaltung bzw. Software (für Radioanwendung) genauer kalibriert?
Vielen Dank
Viele Grüße
Bernhard
Hallo,
Du kannst einfach bei einem ermittelten 0,8% Fehler mfreq*1.008 oder mfreq/1.008 rechnen.
Viele Grüße,
Matthias
Hallo Matthias,
kann ich die Ausgabe zusatzlich zum LCD Display noch über einen Piezo machen der bei Erhöhung der Eingangsfrequenz einem ansteigenden Ton ausgibt.
Weiterhin wäre für mich eine Balkenanzeige 1. Zeile und darunter die Frequenz als Wert brauchbarer.
außerdem ist mir oben im Code aufgefallen:
lcd.begin(20,4)
müsste da nicht lcd.begin(16,2) stehen?
Danke vorab für ein kurze Rückemeldung