Hallo
Ich möchte gerne zwei Arduinos mithilfe von zwei Hc-05 Modulen kommunizieren lassen, was auch alles klappt über 9600 Baud.
Jedoch ist mir dies zu langsam und im möchte es auf 115200 Baud stellen. Wenn ich das bei beiden Modulen mache, kommt am am Seriellen Monitor folgendes raus ⸮ ⸮ ⸮…
Was kann ich tun?
Du solltest nicht das HC-05 UND den Seriellen Monitor auf den gleichen Pins betreiben.
Auch wenn es erstmal so aussieht es ginge es...
In jedem Fall, musst Du aber unten rechts im serMon dann auch auf 115200 stellen, wenn da 9600 drin steht.
PS: Der 06 kann auf 115200 gestellt werden - der 05 ist doch fest defult auf 9600 und für AT 38400... - Du musst also erst im AT-Modus mit AT+UART die Geschwindigkeit setzen...
Da wird sich die Doppelbelegung der Pins bemerkbar machen.
Ich hätte das mit SoftwareSerial umgesetzt - manchmal gehts auch bis 115200 - wenn es da zu Problemen kommt könntest versuchen mit AltSoftwareSerial zu arbeiten. Der macht eine bessere Geschwindigkeit ist aber von den Pins nicht frei belegbar.
Die Pin 0 und 1 hängen gleichzeitig am USB-UART.
Wenn Du den Seriellen Monitor benutzt, ist PIN 0 und 1 tabu.
Im reference-Design-Schematic siehst Du unten links den Chip, der die USB-Schnittstelle bedient. Und ganz unten rechts am Chip PD0 und PD1 geht sowohl die Verbindung ran, als auch die Leiste, die auf dem Board aufgelötet ist...
Bus heißt viele Teilnehmer an den gleichen Leitungen. Wie das dann funktioniert dafür gibt es verschiedene Techniken und Regeln.
Seriel ist aber eine 1 zu 1 Verbindung zwischen 2 Teilnehmern so wie das alte Telefohn ohne Konferenzschaltung.
Grüße Uwe
Hallo,
Thema ist ja inzwischen gelöst, aber was heist zu langsam. hast Du mal nur eine "1" auf dem Seriellen Monitor mit 9600 ausgegeben und mal beobachtet wie schnell das geht.
Heinz
Natürlich können prinzipiell 2 Teilnehmer lesen, was ein dritter sendet. Ein Sender merkt überhaupt nicht, ob jemand liest. (und wenn ja, wie viele)
Das Problem ist allerdings die Sendeleitung: Dass nicht zwei senden können, sollte schon klar sein. Eine nicht benutzte darf aber auch nicht verbunden sein, denn da liegt ein HIGH Potential drauf.
Prinzipiell besteht eine UART Verbindung immer aus Tx und Rx.
Unter der Voraussetzung gibt es keine Möglichkeit eine gültige Verschaltung mit mehr als 2 Partnern aufzubauen.
Durch irgendwelche Schaltungstricks oder Weglassungen, kann man vielleicht etwas basteln. Aber dafür müssen schon profunde Kenntnisse vorliegen, im Köcher wohnen. Es ist und bleibt eine Basellösung.
UART ist per se nicht Kurzschluss fest. Zwei gegeneinander arbeitende Gegentaktendstufen können sich dabei zerstören. Arduino schützt sich durch Serienwiderstände gegen diese Zerstörung. Aber die Daten werden bei einer solchen Kollision zerstört/unbrauchbar.
RS232C muss per Definition solche Schaltungsfehler überleben. Aber auch hier opfern sich die Daten dabei.
Erst RS485 bietet die Auswahl der Senderichtung in Hardware, so sind dann auch mehr als 2 Partner möglich. Die Entscheidung, wer gerade senden darf muss allerdings in Software erfolgen.
CAN, LIN usw. können die Busarbitrierung in ihrer Hardware.
Arduino UNO und MEGA hat zwischen TX/RX vom ATmega328 zum RX/TX vom ATMEGA16U2 (USB Adapter) 500 Ohm 1 kOhm Widerstände. Wenn man einen andere TX/RX Leitung an D0 und D1 anschließt Wird der TX-Ausgang am Atmega16U2 nicht kaputt aber funktioniert auch wieder nicht. Die Verbindung Arduino (ATmega328) zum anderen Gerät funktioniert durch die Widerstände. Auf dieses Projekt bezogen müßte die Verbindung zum Treiber funktionieren aber nicht mehr die Verbindung über USB.