Datenaustausch zwischen 2 Arduinos

Ich bräuchte bitte mal Hilfe von erfahrenen Arduinisten (oder wie man das nennt :wink: ), da ich bisher erst 2 Arduino-Projekte gemacht habe:
Ich will eine relativ aufwändige Anzeige für Messwerte eines Sensors bauen, auf der neben dem aktuellen Messwert (numerisch und grafisch) auch der bisherige Minimal- und Maximalwert angezeigt wird. Dazu habe ich ein TFT Touch Panel basierend auf dem ILI9486 mit eingebautem SD-Kartenleser auf einem Arduino Uno installiert (bisher geht leider nur die LCDWIKI und nicht die UTFT Bibliothek). Wie zu erwarten ist der Speicher für den Sketch randvoll und die Durchlaufzeit recht lang: ich liege bei max. 40 Hz Sampling Rate. Das ist für die Anzeige nicht schlimm, da das Auge sowieso nicht schneller wahrnehmen kann. Aber ich laufe Gefahr, bei dieser Sampling rate Minima und Maxima Peaks zu verpassen. Eine echte Abtastung von mehreren hundert Hertz wäre wünschenswert. Um das zu erreichen, habe ich in meiner Unkenntnis folgende Ideen ausgebrütet:

  1. Ich versuche einen schnelleres Board, z. B. den Arduino Due. Nachteil: ist auch nicht soooo viel schneller, arbeitet mit 3,3V und wird vermutlich Schwierigkeiten mit dem TFT Panel haben. Würde bedeuten beides (Board und Panel) neu zu kaufen. Gibt es für den Due überhaupt ein geeignetes TFT Touch Panel (ca. 3,5", 480 x 320)?
  2. Ich nehme ein weiteres Board (z. B. Arduino Uno) nur zum schnellen Erfassen der Daten am AnalogIn und zum Berechnen der Minima / Maxima. Die Werte übergebe ich dann an das Anzeigen-Board (egal, wenn das mit leichter Verzögerung passiert, Hauptsache ich habe die Maximalwerte erwischt). Problem: Ich möchte mit dem Erfassungsboard nicht auf das Anzeigenboard warten, bis es den Wert ausliest. Ich könnte aber z. B. jeden 20sten Messwert und die bis dahin errechneten Minima / Maxima übergeben, damit ich nicht auf das Lesen des Anzeigeboards warten muss.
    Aber wie würde ich die Daten übergeben? Kann ich ein serial read an dem Anzeige-Board machen, obwohl ich schon das TFT Panel als serial output habe? Wie synchronisiere die Boards?
    Als Alternative zur seriellen Übergabe könnte man auch den / die Werte wieder als (PWM) AnalogOut schreiben (kein Handshake nötig), aber das wäre ja von hinten in die Brust und so (und außerdem bestimmt ungenau).

Puh, habt Ihr verstanden, was ich meine und hat einer eine Idee? :blush:

I2C?

Schau dir mal Nextion Displays an, die haben eine eigene Intelligenz und werden seriell angesprochen.

https://www.itead.cc/display/nextion.html

Nimm einen Mikrocontroller mit zwei seriellen Schnittstellen,
der schnell genug ist, deine Sensoren zu lesen und genug Speicher hat.

ESP32 basierende Mikros sind in fast allem gut (Analog ausgenommen),
günstig und bieten Wi-Fi und Bluetooth.

Hallo,

um wie viele Analogwerte geht es denn ?

nimm doch i2C Bus , der Messknecht stellt die Daten zur Verfügung , z.B aktuelle Messwert,Max und Min .Der Anzeiger geht sie holen wann immer er will oder kann. Auf dem Messknecht werden mit dem Auslesen die aktuelle Min/Max werte gelöscht und damit bis zum nächsten Auslesen neue abgelegt werden können. Der Messknecht muss halt nur mitbekommen das Daten abgeholt worden sind, dann kann er die letzten min/max Werte löschen.

Eventuell benötigst Du noch einen Zeitstempel damit Du die Daten zeitlich zuordnen kannst. Kannst auch mal über ESP 32 nachdenken die sind schon ziemlich flott und Speicher ist auch genug vorhanden. Es gibt auch Touch Panels die mit 3,3V laufen.

Heinz

Vielen Dank an die Arduinisten für die schnellen Antworten!
I2C scheint das richtige Stichwort zu sein, als Neuling hatte ich mich noch nicht bis zu diesem Thema durchgewühlt. Ich werde das auf jeden Fall versuchen. Ich habe mich eben schon mal kurz eingelesen, aber ich muss mich noch ein wenig damit beschäftigen.

Nur, damit ich das richtig verstehe:

  • Ich nehme den Anzeiger als Master, der in seinem loop() mit Wire.requestFrom() bei jedem der langsamen Durchläufe beim Messknecht anfragt
  • der schnelle Messknecht als Slave bei jeder eingehenden Anfrage über requestEvent() per wire.write() die aktuellen Daten übergibt,
  • die der Master dann per wire.read() ausliest?

Ich werde es probieren.

Übrigens: Die Nextion-Displays sehen auch interessant aus. Werde ich beim nächsten Projekt in Erwägung ziehen.
Vielen Dank!

ardufrog:
der schnelle Messknecht als Slave bei jeder eingehenden Anfrage über requestEvent() per wire.write() die aktuellen Daten übergibt,

Die Funktion die man onRequest() übergibt kann einen beliebigen Namen haben. Worauf da da achten musst ist dass du im Event Handler nur einmal write() machen kannst. Das ist nicht dokumentiert. Man kann also nur einen einzelnen Wert oder ein Array übergeben. Unions aus Strukturen und Arrays oder ähnliches sind natürlich auch möglich um unterschiedliche Variablen als Array anzusprechen

OK, wichtiger Tip, verstanden. Danke.

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.