Robotrontechnik-Forum

Registrieren || Einloggen || Hilfe/FAQ || Suche || Mitglieder || Home || Statistik || Kalender || Admins Willkommen Gast! RSS

Robotrontechnik-Forum » Sonstiges » Zähler mit Arduino, Anfängerprojekt » Themenansicht

Autor Thread - Seiten: -1-
000
12.11.2023, 23:40 Uhr
Egon



Hallo,

gegeben:
-Arduino UNO 3 mit Atmega 328
-passendes LCD-Shield

Ich versuche mich ja seit einiger Zeit an einem Frequenzzähler der mal eine spezielle Funktion
ausführen soll, jedoch bin ich schon mit der Umsetzung am Anfang etwas überfordert.

Die späteren Funktionen mal nicht betrachtet geht es um einen Zähler der zwei Eingänge hat, genannt
fA und fB. fA stellt dabei das Tor dar, fB ist die Messgröße die dabei gezählt wird.

Als Anfänger habe ich nun einen Kanal aufgebaut und mich dabei an die Grundfunktionen des 328 gehalten
und einen Kanal als einfachen Zähler programmiert der über die Periodenzeit die Frequenz berechnet.
Ich habe das bewusst gewählt weil ich mit Timern etc. gar keine Erfahrung habe.

Das Problem:

Mein Generator liefert exakt jede Frequenz mit weniger als 0,01% Abweichung, aber die Messwerte die ich
bekomme sehen grob so aus:

Generator (Hz)....Arduino
50...................>50,37
100.................>100,77
500.................>503,52
1000...............>1007,04
5000...............>5128,00
10000.............>10006,92

Mein Programm sieht so aus:

#include <LiquidCrystal.h>
int input=12;

int high_time;
int low_time;
float time_period;
float frequency;
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
void setup()
{
pinMode(input,INPUT);
lcd.begin(16, 2);
}
void loop()
{
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Frequency Meter");

high_time=pulseIn(input,HIGH);
low_time=pulseIn(input,LOW);

time_period=high_time+low_time;
time_period=time_period/1000;
frequency=1000/time_period;
lcd.setCursor(0,1);
lcd.print(frequency);
lcd.print(" Hz");
delay(500);
}

Frage:

Woher kommen die Fehler die die oben genannte Abweichung begründen?
Ich bin davon ausgegangen das bei so niedrigen Frequenzen der Weg über die Periodendeauer
die besten Ergebnisse liefern sollten.
Grüße Egon

Dieser Beitrag wurde am 13.11.2023 um 00:13 Uhr von Egon editiert.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
001
13.11.2023, 06:20 Uhr
Andreas



Hallo Egon
Der Arduino mit seinem Quarzgenerator ist viel zu ungenau.Die Berechnung basiert aber darauf.
--
Viele Grüße
Andreas
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
002
13.11.2023, 07:13 Uhr
runni



Ich würde da eher die Zeit vermuten die der Arduino zum starten des Timers braucht, genau das macht ja „pulsein“ jedesmal.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
003
13.11.2023, 08:34 Uhr
ralle



Hilft vielleicht ein Externer Quarzgenerator?
--
Gruß Ralle

Wenn Sie dazu neigen, Bedienungsanleitungen zusammen mit dem Verpackungsmaterial wegzuwerfen, sehen Sie bitte von einem derart drastischen Schritt ab!...
... Nachdem Sie das Gerät eine Weile ausprobiert haben, machen Sie es sich am besten mit dieser Anleitung und ihrem Lieblingsgetränk ein oder zwei Stunden lang in Ihrem Sessel bequem. Dieser Zeitaufwand wird Sie dann später belohnen...

aus KENWOOD-Bedienungsanleitung TM-D700
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
004
13.11.2023, 09:49 Uhr
Bert




Zitat:
Egon schrieb
100.................>100,77




Zitat:
Andreas schrieb
Der Arduino mit seinem Quarzgenerator ist viel zu ungenau.Die Berechnung basiert aber darauf.


Ein Quarz mit 7700 ppm Abweichung? Da müßte aber gehörig was schief laufen.
Selbst der billigste Quarz bei Reichelt ist mit +/- 30 ppm angegeben.

Die Ursache liegt eher in der Software bzw. dem Konzept.
Arduino ist schön um mit vorgefertigten Bibliotheken und der passenden Hardware schnell zu einem Ergebnis zu kommen. Das sieht man auch hier. Die Funktion pulsein() liefert Werte, die sogar plausibel sind.
Gezählt wird intern mit Mikrosekunden und dem Datentyp ulong:
https://www.arduino.cc/reference/de/language/functions/advanced-io/pulsein/
Dort steht:
"Das Timing der Funktion wurde empirisch getestet und wird vermutlich bei einem längeren Impuls falsch messen."

Die erste Frage, die sich mir stellt: Welche Anforderung an die Genauigkeit wird den benötigt bzw. erwartet?
Was ist die niedrigste und was die höchste Frequenz, die gemessen werden soll?
Wofür wird das Gate benötigt, kann nicht einfach kontinuierlich gemessen werden?
Ist tatsächlich die Länge der Pulse bzw. Pulspause interessant oder reicht auch die Periodendauer?

Danach kann man schauen, ob das alles mit pulsein() und in Software realisierbar ist, oder ob man doch tiefer einsteigen muß.
Mit direkter Programmierung des Timers ist auch eine höhere Genauigkeit möglich.

Selbst für einen tieferen Einstieg sind die 8-Bit-AVR-basierten Arduinos eine feine Sache, finde ich.
Das Datenblatt enthält ca. 150 bis 250 Seiten. Das kann man noch gut überfliegen.
Bei den 32-Bit-Controllern von STM z.B. hat man schnell mehrere PDFs mit jeweils 1500 Seiten, wo man schon genau wissen muß, was man sucht...

Grüße,
Bert
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
005
15.11.2023, 18:43 Uhr
Egon



Hallo,

gut das ihr euch besser auskennt als ich.
Als Anfänger hoffte ich die Frequenz besser mit der einfachen Funktion zu messen
als über den Weg mit einem exakten Timer u.s.w.
Dann verwerfe ich mal meinen Code-Schnipsel und stopple mir was aus dem Netz
zusammen in der Hoffnung dort was Besseres zu finden. Ich möchte das dann nämlich
noch für meinen Zweck abwandeln und dazu muss ich es ja wenigstens halbwegs auch
verstehen.
Grüße Egon

PS

Frage an Bert ---> würdest Du mir evtl. helfen was ordentliches zu bauen?
Wenn ja dann machen wir per PN weiter
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
006
16.11.2023, 06:01 Uhr
KK

Avatar von KK

Auf dem Uno ist wohl kein Quarz, sondern ein keramischer Resonator verbaut:

https://www.mikrocontroller.net/topic/508801#new

Laut Datenblatt beträgt dessen Temperaturdrift bis zu 0,3%:

https://www.murata.com/en-us/products/productdetail?partno=CSTCE16M0V53-R0
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
007
16.11.2023, 09:00 Uhr
Bert



Es scheint wohl mehrere Varianten zu geben. Auf den UNO R3, die ich bisher kenne, ist ein 16 MHz Quarz:
https://docs.arduino.cc/resources/schematics/A000066-schematics.pdf

Grüße,
Bert
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
008
17.11.2023, 05:55 Uhr
KK

Avatar von KK

Hmm, auf meinen beiden Clones von AZ Delivery sind auch Quarze drauf. Da muß der Egon mal schauen, wie seiner bestückt ist.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
009
17.11.2023, 16:35 Uhr
Guido
Default Group and Edit
Avatar von Guido


Zitat:
Bert schrieb
Es scheint wohl mehrere Varianten zu geben. Auf den UNO R3, die ich bisher kenne, ist ein 16 MHz Quarz:
https://docs.arduino.cc/resources/schematics/A000066-schematics.pdf

Grüße,
Bert


Nö, es ist ein Quarz gezeichnet, aber doch wohl nur ein Resonator verbaut. Das sieht man schon an den beiden unbezeichneten Kondensatoren.

Gruß Guido
--
Der Mensch hat drei Wege, klug zu handeln.
Erstens durch Nachdenken: Das ist der edelste.
Zweitens durch Nachahmen: Das ist der leichteste.
Drittens durch Erfahrung: Das ist der bitterste.
Konfuzius

Wer immun gegen ein Minimum an Aluminium ist, der hat eine Aluminiumminimumimmunitität.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
010
17.11.2023, 18:12 Uhr
paulotto



Am Atmega328 ist ein Keramikresonator verbaut (CSTCE16M0 mit 16MHz) und am Atmega16U2 ein 16MHz-Quarz.

Gruß,

Klaus
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
011
17.11.2023, 19:11 Uhr
Egon



Alle meine UNOs (mit Atmega328) haben einen 16 MHz Quarz verbaut,
sonst hätte ich mit dem Experiment gar nicht erst begonnen.

Grüße

Dieser Beitrag wurde am 17.11.2023 um 19:12 Uhr von Egon editiert.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
Seiten: -1-     [ Sonstiges ]  



Robotrontechnik-Forum

powered by ThWboard 3 Beta 2.84-php5
© by Paul Baecher & Felix Gonschorek