UART-Signalverzerrung mit AVR

Bei der Evaluierung des Libelium Waspmote- Boards für drahtlose Sensornetzwerke entdeckten wir ein seltsames Kommunikationsproblem.

Wir haben versucht, eine Verbindung zwischen der Waspmote und einem anderen Board über UART bei 115200 Baud mit 8N1 herzustellen.

Dies ist die resultierende Wellenform auf Tx für das Senden von 9 mal 0x55 (01010101b):

Oszilloskop-Plot

Die High- und Low-Pegel degenerieren bis zur Erkennungsschwelle: Beginnend mit einem High-Pegel von 3,3 V fallen die Spitzen auf etwa 2,7 V ab und die Tiefs beginnen bei etwa 1,1 V und fallen auf 0,7 V ab.

Gemäß der Spezifikation der Zielplatinen sollten die Spitzen > 2,3 V und die Tiefs < 1 V für einen korrekten Betrieb sein.

Es sieht für mich so aus, als ob ein kapazitives Verhalten auftritt, aber ich habe keine Ahnung, warum dies passiert.

Ich brauche einen Hinweis darauf, was passiert, was ich falsch mache oder was ich tun kann, um dieses Problem zu beheben.

Einige Zusatzinfos:

  • Der Mikrocontroller auf der Waspmote ist ein Atmega1281, und seine UART-Pins sind direkt mit der Kommunikationsverbindung verbunden (keine Treiber dazwischen).
  • Ich kann die Baudrate nicht reduzieren, da das Zielboard nur 115200 Baud akzeptiert.

AKTUALISIERUNG 1

Ich habe eine Detailaufnahme des Signals gemacht. Wir betrachten eine Übertragung mit etwa 125 kHz - was ein bisschen weit von den gewünschten 115200 Baud entfernt zu sein scheint, die ich anstrebe.

Nicht ganz 115200 Baud

AKTUALISIERUNG 2

Ich messe identische Wellenformen, wenn ich die Traget-Platine abtrenne und die Oszilloskopsonde direkt an den UART-Pin des Mikrocontrollers stecke. Dies scheint Probleme mit der Zielplatine auszuschließen. Die gemessene Baudrate beträgt jedoch genau 125000, was einen Fehler von etwa 8 % gegenüber der gewünschten Zielbaudrate von 115200 darstellt. Da die UARTs-Spezifikation den Baudratenversatz auf 2 % begrenzt, liegt hier wohl mein Problem. Da das Waspmote-Board jedoch auf eine Taktrate von 8 MHz eingestellt ist, kann der Atmega1281 auf dem Board durch die Prescaler-Register keinen genaueren 115200-Baud-Takt erzeugen (ich habe das Handbuch überprüft). Ich denke, ich brauche ein anderes Board, um mit meinem Zielboard zu kommunizieren.

Danke an alle.

Das sieht fast aus wie das allgegenwärtige 50/60-Hz-Brummen, das heutzutage das Universum durchdringt. Überprüfen Sie Ihre Erdung.
@Majenko - Das Aussehen ist ähnlich, aber das Timing scheint nur Sinn zu machen, wenn er ein 500-Hz-Netz bei 50 Hz hat :-). 100 uS/Division = 1 mS über den Bildschirm und sieht aus wie etwa 1/2 Zyklus, also 2 mS/Zyklus = 500 Hz. ABER das Oszilloskop kann basierend auf mehreren Zyklen angezeigt und abgebildet werden
60Hz Brummen mit etwa 50 gemischten Klängen irgendwie sexy. ;)
Sind diese konsistent?. Kann sein: "UART-Pins sind direkt mit der Kommunikationsverbindung verbunden" und Der andere Mikrocontroller-UART ist mit einem Vierkanal-Multiplexer verbunden, und es ist möglich auszuwählen ... welcher der vier neuen UARTs für die Verbindung mit dem UART erforderlich ist der Mikrocontroller. Vier neue UARTs werden wie folgt verbunden. Einer ist mit der GPRS-Karte verbunden, der andere mit dem GPS und die anderen beiden sind für den Benutzer über den zusätzlichen I2C-UART-Anschluss zugänglich. Die Konfiguration des Multiplexers erfolgt mit: { setMuxAux1(); setMuxAux2(); setMuxGPS(); setMuxGPRS() }
Es sieht auf den ersten Blick wie eine kapazitive Kopplung aus, aber wenn Sie genau hinsehen, werden Sie sehen, dass die Spannung tatsächlich in die falsche Richtung driftet. Die DC-Vorspannung sollte sich während der Impulse nach oben bewegt haben, nicht nach unten, wenn das Signal kapazitiv gekoppelt wäre. Ich vermute, dass dies eher mit dem Spannungsabfall zu tun hat. Ich kann sehen, dass dies nicht die RS-232-Pegel sind, aber ist dort möglicherweise irgendwo eine Ladungspumpenversorgung vorhanden?
@ sum1stolemyname Wenn Sie das Oversampling von 16x auf 8x ändern, können Sie 111111 Baud erhalten, was viel näher als 125000 Baud ist und oft funktioniert - meine Antwort unten wurde aktualisiert, um dies expliziter zu machen.

Antworten (2)

Ihr Problem liegt wahrscheinlich in der Verwendung der falschen Baudrate: 112500 ist höchstwahrscheinlich ein Fehler, die Standardrate in diesem Bereich ist 115200 (eine Suche auf der Website des Herstellers nach dieser Nummer findet viele Treffer, aber keinen für 112500). Sie könnten auch aufgrund der Teiler-Granularität nicht die programmierte Baudrate an dem einen oder anderen Ende erzeugen; Manchmal kann es hilfreich sein, das Oversampling des UART zu ändern. BEARBEITEN: Insbesondere ein Wert von 8 (Teiler von 9) bringt Ihnen 111111 Baud von 8 MHz, wenn Sie das Modusbit "Doppelte Geschwindigkeit" setzen.

Zweitens haben Sie ein Problem wie das Fehlen einer gemeinsamen Erdung zwischen den Platinen oder das Oszilloskop nicht mit ihnen geerdet, was zu einer verzerrten Wellenform führt. Es ist noch nicht klar, ob es das ist, was der Empfänger sieht, oder ob es sich lediglich um einen Messfehler bei der Anwendung des Zielfernrohrs handelt.

Haben Sie außerdem überprüft, ob das unbenannte externe Board auch ohne einen seriellen Übersetzer läuft? Die meisten modularen seriellen Kommunikationen zwischen Platinen erfolgen auf RS232-Pegeln und sind logisch von den Logikpegelsignalen invertiert, obwohl es Ausnahmen gibt.

Das war eigentlich das Hauptproblem. Das verzerrte Signal ist ein Artefakt einer falsch konfigurierten Oszilloskopsonde. Akzeptiert.

Wie Sie sagen - das Signal scheint kapazitiv gekoppelt zu sein - wenn ja, macht es einen relativ guten Sinn für das, was Sie sehen. Es sei denn, das Oszilloskop ist kapazitiv gekoppelt und zeigt Ihnen die Auswirkungen davon.


Eine vernünftige Möglichkeit:

Der technische Leitfaden von WaspMote weist darauf hin, dass es über 4 UARTS verfügt,
von denen jeder über einen mitgelieferten Multiplexer ausgewählt werden kann.

In der Tat, wenn Sie den UART sehen möchten, den Sie verwenden, MUSS er vom Multiplexer ausgewählt werden :-) !!!

Abschnitt 2.5 auf Seite 16 behandelt UART- und Mux-Pinbelegungen und 2.5.4 auf Seite 18 behandelt die Software-Mux-Steuerung.

Wenn Sie den UART nicht richtig ausgewählt haben, koppelt er möglicherweise informell kapazitiv. Haben Sie den Multiplexer richtig ausgewählt?


Eine Möglichkeit:

Sobald Sie sich sicher sind, wie der DC-Verbindungspfad aussehen sollte, können Sie ihn überprüfen.

  • Schalten Sie alle Systeme aus. Messen Sie die DC-Kontinuität von Ende zu Ende auf der Signalleitung entlang des längsten Pfads, der DC-resistiv sein sollte.

    Ist es?

  • Messen Sie den Massedurchgang vom Massestift des Prozessors zur Masse des Waspmote-Prozessors.

    Diese sollten offensichtlich DC-kontinuierlich sein.


Einen Versuch wert:

Entscheiden Sie, ob es einen Punkt in der TX-CCT gibt, der so nahe am Signalursprungspunkt liegt, der geerdet oder mit einem kleinen Widerstand heruntergezogen werden kann. Vielleicht auch zur Versorgung gezogen. Wenn ja, tun Sie dies und prüfen Sie, ob der DC-Pegel bestehen bleibt und nicht nur eine kapazitiv gekoppelte Auslenkung verursacht.


Verzweifelt

Wird ein Treiber nicht mit Strom versorgt, so dass der Signalhub ihn mit Strom versorgt, die Versorgung dann jedoch unter Last abklingt.

Schauen Sie sich die Polarität der Drift an und Sie können sehen, dass sie nicht auf kapazitive Kopplung zurückzuführen ist. Wenn dies der Fall wäre, wäre die Drift während der Impulse nach oben gegangen, nicht wie gezeigt nach unten.