Forum: Mikrocontroller und Digitale Elektronik Frage(n) zum Ardino


von Programmieranfänger (Gast)


Lesenswert?

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?

von J. T. (chaoskind)


Lesenswert?

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

von Programmieranfänger (Gast)


Lesenswert?

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?

von Einer K. (Gast)


Lesenswert?

Oder einen der 3(-1) eingebauten Zähler überreden das automatisch zu 
tun.

von Arino-Coach (Gast)


Lesenswert?

Dafür muss natürlich ein zusätzliches Gerät gekauft werden. Gut geeignet 
sind Summenzähler wie diese hier

https://www.hengstler.de/de/s_c100101/Zaehler/Summenzaehler/

Zusätzlich benötigst Du ein Kameramodul, um die Anzeige zu erfassen. Ich 
habe gute Erfahrungen mit diesem hier gemacht, das Arduni-kompatibel ist

https://www.robotshop.com/de/de/arducam-mini-kamera-modul-platine-mit-2-mp-ov2640-fur-arduino.html

Deine Arbeit beschränkt sich dann darauf, das Kamerabild in eine 
Dezimalzahl zu konvertieren (gibt's sicher auch schon als Bibliothek), 
und fertig ist das Arduni-Zählgerät!

von MaWin (Gast)


Lesenswert?

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.

von Georg M. (g_m)


Lesenswert?

Programmieranfänger schrieb:
> Ich habe eine Gabellichtschranke
> und will da etwas zählen, wie oft etwas durch die Gabellichtschranke
> durchging.

Programmieranfänger schrieb:
> Was ich nicht machen wollte, ist z.B. einen Digital-IN-Eingang immer
> abzufragen

https://www.arduino.cc/reference/en/language/functions/external-interrupts/attachinterrupt/

Beitrag #6340710 wurde von einem Moderator gelöscht.
Beitrag #6340761 wurde von einem Moderator gelöscht.
von Schlaumaier (Gast)


Lesenswert?

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.

von Schlaumaier (Gast)


Lesenswert?

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.

von Georg M. (g_m)


Lesenswert?


von Stefan F. (Gast)


Lesenswert?

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.

von Asdf (Gast)


Lesenswert?

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.

von Joachim B. (jar)


Lesenswert?

Schlaumaier schrieb:
> 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

einverstanden, aber das geht kaum ohne zusätzliche Verdrahtung

Ich finde "Ein Display 2x16 Zeichen o.ä. mit I2C-Adapter" überteuert und 
bäh!

leichter ist doch ein Display direkt unter den nano zu hängen!
https://www.mikrocontroller.net/attachment/465632/esp32_nano328p.jpg

wer sich einen nano mit Kabel kauft hat alles um sofort loszulegen
https://www.ebay.de/itm/MINI-USB-Nano-V3-0-ATmega328P-CH340G-FT232-5V-16M-Micro-controller-Board-Arduino/402319347361

OK die Stiftleisten müssten gelötet werden

Display (die mit weisser Beleuchtung sind besser ablesbar)
https://www.ebay.de/itm/For-Arduino-84-48-Nokia-5110-LCD-White-Blue-Display-Screen-Module-Module-DIY-AHS/302921972821

Breadboard (die transparenten gefallen mir besser)
https://www.ebay.de/itm/Mini-Solderless-Breadboard-Clear-Transparent-Material-with-400Points-83-x-55-mm/402299493793
sollte man gleich mal mehr bestellen!

was braucht man noch?
Programmierwillen, einen PC, windows oder debian oder Raspi mit OS und 
raspian desktop

von Jack V. (jackv)


Lesenswert?

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?

: Bearbeitet durch User
von Sebastian R. (sebastian_r569)


Lesenswert?

Georg M. schrieb:
> 
https://www.arduino.cc/reference/en/language/functions/external-interrupts/attachinterrupt/

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.

von Georg M. (g_m)


Lesenswert?

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.

von Peter D. (peda)


Lesenswert?

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.

von Stefan F. (Gast)


Lesenswert?

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.

von Joachim B. (jar)


Lesenswert?

Jack V. schrieb:
> Ließe sich da nicht was mit externem SRAM bauen? Solange Spannung
> anliegt, sollte es die Daten doch behalten?

es gibt doch FRAM, viel Speicher braucht man doch nicht!
https://www.elektronikpraxis.vogel.de/fram-grundlagen-und-vorzuege-ferroelektrischer-speicher-a-646777/
https://www.elektronik-kompendium.de/sites/com/0610041.htm

https://arduino-projekte.webnode.at/meine-libraries/fram-speicher/

Sebastian R. schrieb:
> Zählen kann man durch die Timer komplett in Hardware, wenn man die
> Lichtschranke als Clock für den Timer nimmt.

letztens wurde hier berichtet das auch optische Sensoren prellen können 
also sollte man immer eine Entprellroutine nachschalten, Timer Verfahren 
nach Dannegger!

Peter D. schrieb:
> nennt sich externer Interrupt.

von daher, lieber deine Timer IRQ nutzen!

von Programmieranfänger (Gast)


Lesenswert?

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?

von Joachim B. (jar)


Lesenswert?

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

: Bearbeitet durch User
von Theor (Gast)


Lesenswert?

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. :-)

von MaWin (Gast)


Lesenswert?

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.

von Stefan F. (Gast)


Lesenswert?

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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.