Frequenzzähler mit LCD Display am Arduino Uno.

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

Frequenzzaehler mit LCD

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

11 Gedanken zu „Frequenzzähler mit LCD Display am Arduino Uno.

  1. Pingback: Temperatursensor DS18B20 mit dem Arduino Uno und LCD Display | Shelvin – Elektronik ausprobiert und erläutert

  2. Pingback: Ein Frequenzzähler für niedrige Frequenzen mit dem Arduino Uno und der Periodendauer Messung | Shelvin – Elektronik ausprobiert und erläutert

  3. Pingback: Eingangsverstärker für den Arduino Frequenzzähler 10 Hz bis 10 MHz | Shelvin – Elektronik ausprobiert und erläutert

  4. Pingback: Der Frequenzgenerator und Frequenzzähler | Shelvin – Elektronik ausprobiert und erläutert

  5. Pingback: Frequenzzähler mit dem Arduino Uno Teil 2 | Shelvin – Elektronik ausprobiert und erläutert

  6. Heiko

    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

    Antworten
    1. admin Beitragsautor

      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

      Antworten
  7. fram08

    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

    Antworten
  8. Bernhard

    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

    Antworten
  9. Bernte

    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

    Antworten

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.