Hi, ich wollte gerne wissen, ob es Arduinos gibt, die schon einen
fertigen Zählapparat integriert haben. Ich habe eine Gabellichtschranke
und will da etwas zählen, wie oft etwas durch die Gabellichtschranke
durchging. Ist das schon fertig in den Aruinos mit drinnen oder muss das
als separates Zählgerät mit zugekauft werden?
In gewisser Weise ist es mit drinnen. Aber die Funktion eines Arduinos
entsteht erst aus der Programmierung. Du müsstest also ein Zählprogramm
schreiben.
MfG Chaos
J. T. schrieb:> In gewisser Weise ist es mit drinnen. Aber die Funktion eines Arduinos> entsteht erst aus der Programmierung. Du müsstest also ein Zählprogramm> schreiben.>> MfG Chaos
Danke für die Info.
Was ich nicht machen wollte, ist z.B. einen Digital-IN-Eingang immer
abzufragen, sonst muss ich das Programm ja schnell laufen lassen -
zumindest mindestens > 2 schneller als ein zu erwartender
Flankendurchgang. Ich wollte gerne eine Zählapparatur haben, die man
z.B. resetten kann und die dann immer weiter hochzählt, und immer, wenn
ich abfrage, dann kommt der aktuelle Wert raus, der dann immer höher
wird. Ist sowas schon dort integriert in einem Arduino?
Programmieranfänger schrieb:> Ist sowas schon dort integriert in einem Arduino?
Ja.
Wie schnell wird denn die Lichtschranke unterbrochen, dass ein Programm
mit dem zählen nicht mehr hinterherkommt, mehr als 100000 x pro Sekunde
?
Der Hardwarezähler schafft dann 10000000 x pro Sekunde.
Du brauchst.
Ein Arduino-Nano o.ä. = ca. 3 Euro
Eine Gabellichtschranke = ca. 1 Euro
Ein Display 2x16 Zeichen o.ä. mit I2C-Adapter = ca. 4-5 Euro
2- x Taster. = einige Cent/a
Alle Preise China/Ebay-Preise
Dann den Arduino so programmieren
Eine Variable als Anzahl deklarieren.
Wenn der Level High ist, am Pin wo die Lichtschranke dran ist, Anzahl =
Anzahl + 1 und den Wert Anzahl am Display ausgeben.
Was die Taster angeht.
Taste 1 : Bei HIGH Anzahl = 0 , führt ein Reset durch
Taste 2 : Den würde ich für eine Pause des zählen verwenden.
Weitere Taster für besondere wünsche.
Programmieranfänger schrieb:> Was ich nicht machen wollte, ist z.B. einen Digital-IN-Eingang immer> abzufragen, sonst muss ich das Programm ja schnell laufen lassen -> zumindest mindestens > 2 schneller als ein zu erwartender> Flankendurchgang.
Das ist Unsinn. Der Job einen Arduino ist es ja gerade Eingänge
abzufragen, und Daten an Ausgänge zu senden. Klar kann man mit Interrupt
arbeiten, das macht man = ich aber nur wenn ich Strom sparen will, oder
das Ereignis wirklich das laufende Programm unterbrechen soll.
Deine Idee, dass man den Mikrocontroller zwischendurch resetten können
soll ohne den Zählerstand zu verlieren, würde ich nochmal überdenken.
Weil: Ein Reset setzt normalerweise alles zurück. Das Programm startet
neu mit frischer Initialisierung. Das erwartet man von einem Reset.
Nun hat der Mikrocontroller auch ein bisschen EEPROM, wo man Daten
ablegen kann, die sogar ohne Stromversorgung erhalten bleiben sollen.
Allerdings hat das EEPROM nur eine begrenzte Lebensdauer. Das Programm
kann dies einfach ignorieren (dann geht das Gerät nach einer gewissen
Zeit kaputt) oder mit einem ausgefuchsten Algorithmus ein Ding "für die
Ewigkeit" schaffen.
Aber: Was machst du, wenn die Daten in dem EEPROM durcheinander geraten?
Das kommt durchaus vor. Störungen der Stromversorgung und starke
elektromagnetische Felder können das auslösen. Dafür solltest du eine
zweite Rücksetz-Taste vorsehen, mit der man das EEPROM ggf. löschen
kann. Du kennst das sicher von andere elektronischen Geräten, zum
Beispiel Internet Router. Manche Drucker habe so etwas ebenfalls. Früher
hatten die Personal Computer auch einen BIOS-Reset Jumper.
Wenn Du nur die Anzahl zählen willst knnst Du die T0 bzw T1 Pins nehmen.
Willst Du wissen, wie oft etwas pro Sekunde durch die Lichtschranke
geht, nimmst Du den ICP pin.
Für beides solltest Du leicht sketches finden, die Du nutzen kannst.
Aber um ein bisschen Einarbeitung in die Arduino IDE und dessen
Programmierung wirst Du nicht rumkommen.
Joachim B. schrieb:> was braucht man noch?> einen PC, windows oder debian oder Raspi mit OS und> raspian desktop
… nun wollte ich es auch mal versuchen, habe aber nur Arch hier, auch
auf den Raspberry Pis. Gemein :(
Stefan ⛄ F. schrieb:> Deine Idee, dass man den Mikrocontroller zwischendurch resetten können> soll ohne den Zählerstand zu verlieren, würde ich nochmal überdenken.
Ließe sich da nicht was mit externem SRAM bauen? Solange Spannung
anliegt, sollte es die Daten doch behalten?
Sebastian R. schrieb:> Ich würde es auch nicht über Interrupts machen.>> Zählen kann man durch die Timer komplett in Hardware, wenn man die> Lichtschranke als Clock für den Timer nimmt.
Richtig, aber dann wäre es schon nicht mehr nur Arduino-Programmierung,
sondern eine direkte Mikrocontroller-Programmierung.
Dann würde man quasi gezwungen, das Datenblatt zu lesen.
Programmieranfänger schrieb:> Was ich nicht machen wollte, ist z.B. einen Digital-IN-Eingang immer> abzufragen, sonst muss ich das Programm ja schnell laufen lassen -> zumindest mindestens > 2 schneller als ein zu erwartender> Flankendurchgang.
Ja so macht man das, überhaupt kein Problem. Allerdings läßt man die
CPU-Hardware abfragen, nennt sich externer Interrupt.
Lassen wir dem Arduino 160 Zyklen Zeit für einen Interrupt, kann er bei
16MHz Takt bequem alle 10µs einen Interrupt auslösen.
Bei einem drehenden Teil wären das 6000000rpm. Das sollte doch wohl
reichen.
Anzeigen sollte man aber nicht schneller als 5 Werte/s, sonst sieht man
nur unleserliches Flackern der untersten Stellen.
Jack V. schrieb:> Ließe sich da nicht was mit externem SRAM bauen? Solange Spannung> anliegt, sollte es die Daten doch behalten?
Das ist komplizierter, als das interne EEPROM zu verwenden.
Also die Zählscheibe vor dem Inkrementengeber hat 30 Schlitze und die
Maschine dreht bis ca. 2000 Umdrehungen pro Minute. Das sind dann 60.000
Signale in der Sekunde bei maximaler Geschwindigkeit. Schafft der
Arduino das?
Programmieranfänger schrieb:> Schafft der> Arduino das?
ich weiss das der Arduino mit 16 MHz locker IRMP auswertet mit 15000
IRQ/s
lass doch mal rechnen
1/60000 sind 16,666 µs
mit Portauslesen im 62,5 ns Bereich sollte das Auslesen also möglich
sein.
wie lange du nun rechnest bis wieder gelesen werden muss liegt an dir
und deinen Programmierkenntnissen!
Notfalls musst du auf die Float LIB verzichten und in inline assembling
gehen.
mittlerweile gibt es ja auch viel schnellere Arduino als nur 16 MHz
Programmieranfänger schrieb:> Also die Zählscheibe vor dem Inkrementengeber hat 30 Schlitze und die> Maschine dreht bis ca. 2000 Umdrehungen pro Minute. Das sind dann 60.000> Signale in der Sekunde bei maximaler Geschwindigkeit. Schafft der> Arduino das?
Vorsicht. Immer auf die Einheiten achten.
2000 1/min entsprechen,
gemäß 1/min = 1/60 s,
2000 1/min * 1 min / 60 s = 33,333 1/s
Bie 30 Schlitzen sind das
33,333 1/s * 30 = 999,9 1/s Signale
entsprechend rund 1ms.
Das ist das 100-fache dessen, was Peter kalkuliert hat.
Reicht noch für ne schnelle Tasse Kaffee zwischendurch. :-)
Programmieranfänger schrieb:> Also die Zählscheibe vor dem Inkrementengeber
Warum möchtest du Incrementgeber durch Zähler auswerten und nicht durch
die richtige Art einen Incrementalgeber auszuwerten ?
http://www.dse-faq.elektronik-kompendium.de/dse-faq.htm#F.29> hat 30 Schlitze und die> Maschine dreht bis ca. 2000 Umdrehungen pro Minute. Das sind dann 60.000> Signale in der Sekunde bei maximaler Geschwindigkeit. Schafft der> Arduino das?
Er kenn wenigstens besser rechnen als du
20000 upm sind 216 pro Sekunde sind 6500 pro Sekunde.
Ein ATmega328 schafft 250000 pro Sekunde (1000000 Auswertungen), ganz
ohne Hardwarezähler (siehe oben).
Als Arduinoanfänger mit Mathedefiziten kann es natürlich schon bei 6000
knapp werden wenn man auf biegen und brechen ein schlechtes Programm
schreibt.
MaWin schrieb:> Als Arduinoanfänger mit Mathedefiziten kann es natürlich schon bei 6000> knapp werden wenn man auf biegen und brechen ein schlechtes Programm> schreibt.
Falls das passiert, helfen wir gerne weiter.