Byte von Pro Mini zu Pro Micro senden - Serial.write/read

Hallo,

ich habe mir vorgenommen, ein Byte von einem zum Arduino Pro Mini kombatiblen Gerät zu einem Pro Micro zu senden, was für mich noch "Neuland" ist.

Dazu habe ich zum Testen auf den Pro Mini einen Sketch geladen, der im loop die Zahl 45 sendet ( Serial.write(45); ) - wie im Beispiel hier:

Der Pro Micro hat ziehmlich genau den Sketch aus folgendem Beispiel:

Wenn ich das richtig verstehe, müsste am PC im Serial Monitor etwas ausgegeben werden, dieser bleibt aber nur weiß. :confused:

Verkabelt habe ich das ganze wie folgt: Der Pro Micro ist per USB mit dem PC verbunden. RX ist jeweils mit TX der anderen Platine verbunden; VCC mit VCC und GND mit GND.

Habe ich da grundlegend etwas falsch verstanden, oder müsste das ungefähr so funktionieren?

Noch zwei Neben-Fragen, die vermutlich nichts mit meinem leeren Serial Monitor zu tun haben:
-Im "Getting Started" des Pro Mini steht "The board can be powered through [...] a regulated 5V [...] supply applied to the VCC pin or an unregulated supply on the RAW pin. "
Ist es in meinem Fall richtig, dass ich VCC verwendet habe, bzw. was genau bedeutet "unregulated"?

-Im ersten verlinkten Beispiel steht
"int incomingByte = 0;" - warum ist die Variable nicht als byte deklariert, wenn doch laut Namensgebung ein Byte darin gespeichert werden soll?

hi,

wenn Du die 9600 unverändert gelassen hast und das auch im serial monitor eingestellt ist, sollte es gehen.

was mich stört, ist das: "ziehmlich genau"

gruß stefan

PS.: 5V an VCC ist ok, das int ist einfach nachlässigkeit...

Sagamihara:
...
-Im "Getting Started" des Pro Mini steht "The board can be powered through [...] a regulated 5V [...] supply applied to the VCC pin or an unregulated supply on the RAW pin. "
Ist es in meinem Fall richtig, dass ich VCC verwendet habe, bzw. was genau bedeutet "unregulated"?

Der Pro Mini hat einen Spannungsregler onBoard (Micrel MIC5205). Der verträgt bis zu 16V Gleichspannung am Eingang und liefert am Ausgang stabilisierte 5V mit bis zu 150mA.

Das Netzteil, das an diesem Pin "RAW" angeschlossen wid, braucht also keine besonders genauen 5V liefern, die Spannung muss lediglich knapp über 5V liegen. Daher "unregulated".

Gut wären z.B. 6V. Ist die Eingangsspannung unnötig hoch, so muss der Überschuss vom Spannungsregler abgebaut werden. Das erzugt verluste und sorgt für die Erwärmung des Reglers.

Benutzt man jedoch die "VCC" Anschlüsse, dann muss man dort zimlich genau die benötigten 5V einspeisen.

Versucht man z.B. 12V auf "VCC" einzuspisen, hat man mit Sicherheit etwas kaputt gmacht.

Die Micro USB Buchse des PC liefert eine stabilisierte und geglättete Gleichspannung von 5V. Also "regulated" und darf daher direkt mit "VCC" verbunden sein.

Vom Pro Mini gibt es verschiedene Versionen, mit 3,3V und 5V Reglern, und nicht alle 3,3V Versionen vertragen 5V an Vcc. Wenn der Mini vom Micro gespeist wird, würde ich jedenfalls Vcc nachmessen.

DrDiettrich:
Vom Pro Mini gibt es verschiedene Versionen, mit 3,3V und 5V Reglern, und nicht alle 3,3V Versionen vertragen 5V an Vcc. Wenn der Mini vom Micro gespeist wird, würde ich jedenfalls Vcc nachmessen.

Stimmt, hat er nicht spezifiziert. Da er von "regulated 5V" schrieb, habe ich das angenommen.

@Eisebaer: Ich habe die Sketches im zweiten Anhang dargestellt, ich habe eigentlich nur die Variable anders genannt, ansonsten müsste es identisch zum Beispiel sein. Links sieht man den Sketch vom pro micro und rechts vom pro mini.

@newarduinosmith: Danke für die sehr gut verständliche Erklärung!

@DrDiettrich: Ich habe die 5V-Version vom pro mini.

Falls ich also keinen offensichtlichen Fehler gemacht habe, wie würde man dem Problem auf den Grund gehen? Ich denke, ich werde nachher versuchen, einen der beiden Arduinos mit einem Uno auszutauschen...

ich habe mir vorgenommen, ein Byte von einem zum Arduino Pro Mini kompatiblen Gerät zu einem Pro Micro zu senden,

Das ist kein Problem.
Mache ich (oder besser, meine Arduinos) dauernd.

Allerdings über I2C.
Für kurze Entfernungen, für mich, das Mittel der Wahl.

Tipp 1:
Auf dem Foto mit deinem ProMini sehe ich eine Doppelbelegung der seriellen Schnittstelle.
Das muss versagen.
Die Serielle ist kein Bus.

Tipp 2:
Der 32U4 spricht per Serial über USB
Der 32U4 spricht per Serial1 über die TxD und RxD Pins.

hi,

sollte es nicht trotzdem funktionieren, solange der PC nicht über seriell reinredet?

spiel mal auf beide den blink-sketch drauf, ob auch wirklich beide mit 5V funktionieren.

gruß stefan

sollte es nicht trotzdem funktionieren, solange der PC nicht über seriell reinredet?

Was soll funktionieren?
Die Explosion?
Die Rauchentwicklung?
Das wird nicht gelingen.
Aber Schäden sind schon zu erwarten, wenn zwei Gegentaktendstufen gegeneinander arbeiten.
Nur mit einer gelungenem Kommunikation, darf man nicht rechnen.

Tipp: In den Datenblättern wird dieser Zustand nicht erwähnt, weil er weit außerhalb der Spezifikation liegt.

Siehe dazu: Abb. 9.24: Stromverhältnisse bei zwei verbundenen Totem-Pole-Ausgängen ("Low"-Pegel).
In: 9.2.5 Anwendung von Open-Collector- und Tri-State-TTL

@combie: Welchen Vorteil hat denn I2C? Für mich ist es besonders wichtig, dass die Datenübermittlung nicht allzu viel Zeit in Anspruch nimmt. Der Pro Mini soll mit Hall Sensoren eine Drehzahl messen - anfangs hatte ich noch zusätzlich ein 16x2-Display angesteckt und den Eindruck, dass die Kommunikation mit dem Display zu lange dauert, und so einige Eingaben des Hall-Sensors nicht erfasst worden sind.
Aus dem Grund bin ich auf die Idee gekommen, dass ich die Drehzahlmessung und die anderen Aufgaben auf zwei Arduinos verteilen möchte, der pro mini soll also nur die Drehzahl zum pro micro schicken.

Die Kabel, die rechts aus dem Bild hinauslaufen, gehen zu dem USB-Adapter, der aber nicht angeschlossen ist. Ich bin davon ausgegangen, dass es irrelevant wäre, ob man den Adapter entfernt?

Bedeutet Tipp 2, dass das also garnicht funktionieren kann, und es nur Sinn ergibt, per TX/RX zu kommunizieren, wenn der USB-Anschluss gleichzeitig nicht verwendet wird? In dem Fall würde ich natürlich I2C ausprobieren.

@ Eisebaer und allgemein: Mit ist eben aufgefallen, als ich den Pro Micro mit dem Uno ersetzt habe, dass ich den Sketch nicht übertragen konnte ("not in sync"), solange er mit dem Pro Mini verbunden war. Ich nehme an, das liegt genau an dem beschriebenen Phänomen, dass ich zwei Serielle Gespräche gleichzeitig am laufen hatte. Wenn ich die Verbindung zum Pro Mini erst hergestellt habe, nachdem der Sketch übertragen war, hat es funktioniert. Auch die Ausgabe auf dem Serial Monitor war korrekt ("45"), obwohl das ja nicht unbedingt zu erwarten war, aber vermutlich liegt das daran, dass Pro Mini und Pro Micro in dem speziellen Fall nacheinander senden.

Das Standard-Blink-Sketch funktioniert nicht, aber wenn ich zusätzlich nach dem Blink ein Serial.print einfüge, wird das im Serial Monior angezeigt, und gleichzeitig blinkt eine LED auf dem Board. Ich denke dass der Pro Micro keine LED hat, die wie beim Uno dem digitalen Pin 13 angesprochen wird, und es in dem Fall nur auf die serielle Kommunikation hindeutet!? Das Blinken kommt auch nur, wenn der Serial Monitor geöffnet ist.

Ich werde jetzt also in Richtung I2C recherchieren...

Sagamihara:
@combie: Welchen Vorteil hat denn I2C? Für mich ist es besonders wichtig, dass die Datenübermittlung nicht allzu viel Zeit in Anspruch nimmt. Der Pro Mini soll mit Hall Sensoren eine Drehzahl messen - anfangs hatte ich noch zusätzlich ein 16x2-Display angesteckt und den Eindruck, dass die Kommunikation mit dem Display zu lange dauert, und so einige Eingaben des Hall-Sensors nicht erfasst worden sind.

Von welchen Drehzahlen sprechen wir?

Gruß Tommy

Für mich ist es besonders wichtig, dass die Datenübermittlung nicht allzu viel Zeit in Anspruch nimmt

Ah, ja....
Ich sach nur 9600 Baud.
Und was sacht I2C?

und so einige Eingaben des Hall-Sensors nicht erfasst worden sind.

Von wie vielen Impulsen, pro Zeit, sprechen wir?
Von wie viel Zeit, pro Impulszyklus, sprechen wir?
WAS soll übertragen werden?

Hmmm....
Du verwendest einen 2ten Arduino, nur, weil du die Messung nicht auf den Schirm bekommst?
Dann klappts auch mit dem zweiten nicht.(Vermute ich mal)
Denn die Probleme bleiben doch die gleichen.
Oder?

I2C hat jetzt funktioniert.

Es sollen geschätzt 100 Impulse pro Sekunde gemessen werden. Der Hall-Sensor ist an einem Analog Pin angeschlossen und es wird registriert, wenn ein bestimmter Schwellwert überschritten wird (der ca. 1/300s überschritten bleibt).
Bei meinen bisherigen Tests war es so, dass ich die Drehzahl auf einem per I2C angeschlossenen Display habe anzeigen lassen, und je nachdem ob ich die Anzeige 10 mal pro Sekunde oder nur alle 5 Sekunden habe aktualisieren lassen, war die gemessene Drehzahl unterschiedlich. Daraus habe ich geschlossen, dass die Messungen am Analog-Pin nicht häufig genug durchgeführt worden sind, und so der Magnet nicht registriert wurde. Als Grund dafür nehme ich an, dass die Kommunikation mit dem Display zu lange gedauert hat.
Meine Vermutung ist, dass diese Zeit stark reduziert werden kann, wenn ich jeweils nur 1 Byte (die ungefähre Drehzahl) an den anderen Arduino sende, anstatt eines langen Textes an das Display. Ferner soll das Gerät später auch noch weitere Funktionen übernehmen, die das Problem noch weiter verschärfen würden.

Hast Du mal im Datenblatt Deines Hall-Sensors geschaut, wie schnell der ist?
analogRead() ist selbst auch nicht die schnellste Funktion.

Es gibt auch Hallschalter, die Du mit einem digitalRead lesen kannst oder einem Interrupt. Der hier schaft 10 KHz.

Denn 100 Impulse / Sekunde sollten kein Problem sein.

Gruß Tommy

Der Hall-Sensor ist an einem Analog Pin angeschlossen und es wird registriert, wenn ein bestimmter Schwellwert überschritten wird (der ca. 1/300s überschritten bleibt).

Warum tust du das so?
Es gibt so viele schöne digitale Hallsensoren....
Und damit viele Möglichkeiten die Impulse digital zu erfassen.

Tipp:
Eine Schwellwert Erkennung macht man mit dem Analog Komperator.
Ein solcher ist sicherlich fest in deinem ATMEGA eingebaut.
Musste nur nutzen.....

combie:
Tipp:
Eine Schwellwert Erkennung macht man mit dem Analog Komperator.
Ein solcher ist sicherlich fest in deinem ATMEGA eingebaut.
Musste nur nutzen.....

Danke, über den war ich auch noch nicht gestolpert.
Wieder was gelernt.

Gruß Tommy

@Tommy56: Im Datenblatt habe ich dazu keine Informationen gefunden, auch per google nicht (der heißt A3503) aber bei meinen Versuchen hatte ich den Eindruck, dass er schnell genug ist.

@combie

Warum tust du das so?
Es gibt so viele schöne digitale Hallsensoren....
Und damit viele Möglichkeiten die Impulse digital zu erfassen.

Weil ich ein "Noob" bin, und es nicht besser wußte. Einen analogen Sensor habe ich gewählt, da ich dachte, dass man das Signal einfacher verarbeiten und universeller einsetzen kann. Mit anderen Hall-Sensoren habe ich keine Erfahrungen.

Falls das so funktionieren sollte, wie ich das denke, melde ich mich in den nächsten Tagen/Wochen nochmal :wink:

Sagamihara:
@Tommy56: Im Datenblatt habe ich dazu keine Informationen gefunden, auch per google nicht (der heißt A3503) aber bei meinen Versuchen hatte ich den Eindruck, dass er schnell genug ist.

@combie
Weil ich ein "Noob" bin, und es nicht besser wußte. Einen analogen Sensor habe ich gewählt, da ich dachte, dass man das Signal einfacher verarbeiten und universeller einsetzen kann. Mit anderen Hall-Sensoren habe ich keine Erfahrungen.

Falls das so funktionieren sollte, wie ich das denke, melde ich mich in den nächsten Tagen/Wochen nochmal :wink:

Steht doch im Datenblatt. 3dB-Bandbreite 23 kHz. Der IC ist übrigens nicht mehr in der Produktion.
Ich würde Dir die Nutzung eines Hallschalters oder die von Combie vorgeschlagene Analog Comparator Methode vorschlagen.
Mit analogRead() wirst Du auf Dauer nicht glücklich werden.

Gruß Tommy

Nicht glücklich wegen der Geschwindigkeit, oder gibt es noch weitere Gründe?

Dass die Bandbreite dasselbe ist wie die Schaltfrequenz habe ich nicht gewußt. :frowning:

Hauptsächlich wegen der Geschwindigkeit. Die gemessene Spannung ist aber auch von der Vergleichsspannung (hier wohl Betriebsspannung) abhängig und das kann zu unvorhergesehenen Effekten führen, wenn die Spannung schwankt.

Beim Hallschalter hast Du LOW oder HIGH.

Gruß Tommy