Sari la conținut
ELFORUM - Forumul electronistilor

Frecvenţmetru cu Arduino


MifTy

Postări Recomandate

pentru că mă plictiseam clasa una, şi nu aveam chef nici să dorm, nici... alte alea, m-am apucat să modific exemplul lui Nawrath ca să scoată şi pe LCD, varianta de librărie compilată de mars01...

după fr'o 10 minute de compilări (mai mult pentru că uitam "amănunte" gen, un spaţiu în plus, şi se pierdea un caracter, etc.) a rezultat coada de mai jos.
pinul de intrare e D5, ca în librărie... probabil se poate modifica, dar nu am chef să editez librăria, nici să încerc să definesc eu alt pin de intrare, nici...

 

l-am testat direct pe breadboard, pe setupul de aici, singurele adăugiri fiind un potenţiometru de contrast, jumperii aferenţi şi LCD-ul...

 

mai sunt destule modificări posibile, l-am făcut doar ca să îl am pentru un timp... sau poate nu mă mai complic, şi o să fac un Arduino pe o plăcuţă cu găurele, îi încarc codul ăsta, o cutie (am nişte savoniere mişto! :rade: ) şi gata, am un frecvenţmetru capabil de maximum 8 Mhz, după cum spune neamţul...

// Frequency Counter Lib example

/*
  Martin Nawrath KHM LAB3
  Kunsthochschule f¸r Medien Kˆln
  Academy of Media Arts
  http://www.khm.de
  http://interface.khm.de/index.php/labor/experimente/	
 */
#include <FreqCounter.h>
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 10, 4, 3, 2);

unsigned long frequency;
int count_value;
int LED_pin=13;

void setup() {
  pinMode(LED_pin, OUTPUT);

  Serial.begin(115200);        // connect to the serial port

  Serial.println("Frequency Counter");

  lcd.begin(16, 2);
  lcd.print("Frequenzzahler");
  delay(500);
  lcd.clear();
  lcd.print("Nawrath + MifTy");
  delay(1000);

}



void loop() {

  // wait if any serial is going on
  FreqCounter::f_comp=10;   // Cal Value / Calibrate with professional Freq Counter
  FreqCounter::start(100);  // 100 ms Gate Time

  while (FreqCounter::f_ready == 0) 

  frequency = FreqCounter::f_freq;
  Serial.print(count_value++);
  Serial.print("  Freq: ");
  Serial.println(frequency);
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print(frequency);
  lcd.print(" Hz ");
  delay(20);
  digitalWrite(LED_pin,!digitalRead(LED_pin));  // blink Led

}  

un cod "clasic" de frecvenţmetru mai puteţi găsi aici, (sketch chior, nu are nevoie de nici o librărie minus cea de LCD) dar nu vă recomand să-l folosiţi... decât dacă vreţi să măsuraţi frecvenţe de maximum 800 de... kilohertzi!
peste 800 kHz afişarea devine instabilă şi indică overload! :rade:
de amorul artei, codul copiat de-acolo şi modificat de mine până în momentul în care mi-am dat seama că mai mult de 800-900 kHz nu poate :))))))))

valentinmarcarian, eşti mulţumit?
că tot îmi cereai "să vă arăt ce-am mai făcut"! :wretre

#include <LiquidCrystal.h>

LiquidCrystal lcd(12, 11, 10, 4, 3, 2);

const int pulsePin = 5; // Input signal connected to Pin 12 of Arduino

int pulseHigh; // Integer variable to capture High time of the incoming pulse

int pulseLow; // Integer variable to capture Low time of the incoming pulse

float pulseTotal; // Float variable to capture Total time of the incoming pulse

float frequency; // Calculated Frequency

void setup() {

pinMode(pulsePin, INPUT);

lcd.begin(16, 2);

lcd.setCursor(0, 0);

lcd.print("Instructables");

lcd.setCursor(0, 1);

lcd.print(" Freq Counter ");

delay(5000);

}

void loop() {

lcd.setCursor(0, 0);

lcd.print("Frequency is ");

lcd.setCursor(0, 1);

lcd.print(" ");

pulseHigh = pulseIn(pulsePin, HIGH);
pulseLow = pulseIn(pulsePin, LOW);

pulseTotal = pulseHigh + pulseLow; // Time period of the pulse in microseconds
frequency = 1000000/ pulseTotal; // Frequency in Hertz (Hz)

lcd.setCursor(0, 1);
lcd.print(frequency);

lcd.print(" Hz");

delay(500);

}
Link spre comentariu
  • Răspunsuri 1
  • Creat
  • Ultimul Răspuns

Top autori în acest subiect

Top autori în acest subiect

 

pinul de intrare e D5, ca în librărie... probabil se poate modifica, dar nu am chef să editez librăria, nici să încerc să definesc eu alt pin de intrare, nici...

 

Probabil ca sigur nu se poate modifica. Pinul D5 corespunde cu PD5 (pinout ATMega328), care este intrare pentru Timer1.

Varianta cu functia "PulseIn" este cea mai proasta cu putinta (este "blocking solution").

Link spre comentariu

Creează un cont sau autentifică-te pentru a adăuga comentariu

Trebuie să fi un membru pentru a putea lăsa un comentariu.

Creează un cont

Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!

Înregistrează un nou cont

Autentificare

Ai deja un cont? Autentifică-te aici.

Autentifică-te acum



×
×
  • Creează nouă...

Informații Importante

Am plasat cookie-uri pe dispozitivul tău pentru a îmbunătății navigarea pe acest site. Poți modifica setările cookie, altfel considerăm că ești de acord să continui.Termeni de Utilizare si Ghidări