Kann ich zwei GPIO-Pins auf einem Arduino/ATmega328 schleifen?

Ich spiele mit einigen Rad-Encoder-Sensoren und einem Arduino herum. Der Sensor muss etwas entprellt werden, daher habe ich mich gefragt, wie der Mikrocontroller-Kern die Eingabe sieht. Das heißt, wie sieht das Eingangssignal aus, nachdem es den Schmitt-Trigger und den Synchronizer im GPIO-Eingangspfad durchlaufen hat?

Gibt es eine Möglichkeit, zwei GPIO-Pins direkt zu schleifen, einen als Eingang und den anderen als Ausgang, damit ich sehen kann, wie das Signal am anderen Ende des Synchronizers aussieht?

Wie ich es sehe, verliere ich Informationen, wenn ich einen Lese- / Schreibvorgang in Software versuche, wenn das Programm länger als eine Anweisung ist. WAHR?

Der Synchronisierer befindet sich auf dem Eingangspfad. Was würde die Ausgabe tun?
Ich möchte den Ausgang des GPIO-Pads, das ich als Eingang konfiguriert habe, mit einem anderen GPIO verbinden, das als Ausgang konfiguriert ist :) Ich möchte sehen, was der Eingangspfad mit meinem unordentlichen Signal macht!
Wenn Sie "verdrahten" sagen, meinen Sie damit ein internes Loopback durchführen?
Ich denke, das meint er. Und @op, das ist nicht möglich, wenn nicht über Software, wodurch einige Taktzyklen verloren gehen. Wenn Sie wissen möchten, wie Ihr Signal im Inneren des Mikros aussieht, sollten Sie alles, was Sie brauchen, auf dem Datenblatt finden.
Ja, ein interner Loopback ist das, wonach ich suche. Vladimir, wenn Sie Ihren Kommentar als Antwort neu schreiben, akzeptiere ich ... Vielen Dank an Sie beide.
Nein, das kannst du nicht. Das Entprellen kann jedoch leicht erreicht werden, indem eine Eingabe einfach für einige kurze Zeit ignoriert wird , nachdem ein Übergang von Interesse festgestellt wurde. Die Entprellung unterscheidet sich von der Rauschfilterung darin, dass die Prellungen immer einem echten Übergang folgen; Wenn Sie tatsächlich Rauschen / Störungen haben, bei denen Sie zu kurze Impulse ignorieren müssen (sogar den ersten), ist das ein anderes Problem.
Obwohl ich Software-Entprellung bisher nur auf einem Encoder verwendet habe, würde ich zusätzlich eine Hardware-Entprellung (RC-Filter) empfehlen, da in Prellsignalen Spannungsnadeln im Nanosekundenbereich auftreten können, die jede gängige IO-Schaltung in einem uC verwirren können.
Haben Sie sich den Arduino-Debounce-Beispielcode angesehen? Könnte ein hilfreicher Ausgangspunkt sein. arduino.cc/en/Tutorial/Debounce

Antworten (2)

Die Idee des Entprellens ist nicht gut, wenn Sie einen Quadratur-Encoder verwenden müssen. Sogar die max. Die theoretische Frequenz (gezählt von der max. Drehzahl) ist niedrig, Sie können ein hochfrequentes Flackern auf einem Kanal sehen, der plus eins, minus eins usw. ist. Wenn Sie eine Flanke verpassen (z. B. durch einen externen Interrupt behandelt), sehen Sie eine Verschiebung. Wenn Sie Aufwärts-/Abwärtszählimpulse benötigen, können Sie einen externen Taktgeber für zwei AVR-Zähler wiederverwenden. Die MCU unterstützt einige einfache Entprellungen und die Bandbreite ist hoch genug. Es lädt auch die MCU. Ich fand, dass die Auswertung von Quadratur-AB-Signalen im Code nutzlos ist, dh nicht zuverlässig genug für hochpräzise Systeme und eher die Verwendung externer Quadraturzähler LSI.

Einige Probleme im Zusammenhang mit dem Verbinden von zwei Ports sind im AVR ATMega I/O-Pin-Überstromschutz- Thread zu finden.

Beim Entprellen haben Sie im Allgemeinen zwei Möglichkeiten: einen Hardware-Fix oder einen Software-Fix. Je nach Anwendung kann beides vorzuziehen sein.

Je weniger Eingänge entprellt werden müssen, desto besser ist eine Softwarekorrektur vorzuziehen, insbesondere bei Mikrocontrollern mit geringer Leistung. Ein Software-Fix wäre, Interrupts zu verwenden, die immer dann ausgeführt werden, wenn sich der Eingangszustand ändert, und dann eine Art Variable zu haben, die verfolgt, wann die letzte Zustandsänderung oder das letzte "Bouncen" aufgetreten ist. Wenn es sich um eine einstellige Millisekunde handelt, handelt es sich wahrscheinlich um einen Sprung, und Sie möchten diesen Wert ablehnen. Vieles davon wird Versuch und Irrtum sein, um zu sehen, was eine akzeptable Zeit zwischen den Drücken ist, aber 100 ms sind ein guter Ausgangspunkt, da es höchst unwahrscheinlich ist, dass ein Mensch eine Taste schneller als 10 Mal pro Sekunde drücken kann, und es ist noch weniger wahrscheinlich, dass dies der Fall war Absicht, und es ist fast unmöglich, dass ein Tastensprung in über 100 ms auftreten kann, es sei denn, es ist nicht funktionsfähig.

Was eine Hardware-Korrektur betrifft, so kann dies die Anzahl der Schaltungselemente erhöhen, die Ihr Board verwenden muss, also gibt es diesen Nachteil. Wenn Sie jedoch durch die Leistung des verwendeten Mikrocontrollers eingeschränkt sind und viele entprellte Schalter benötigen, ist dies möglicherweise die einzig praktikable Option. Aber wenn Sie es schaffen, die richtige RC-Schaltung abzustimmen und an Ihren Eingang zu löten, können Sie eine "Glättungs" -Schaltung haben, die schnelle Änderungen an Ihrem Eingangssignal ablehnt, bevor es an den Eingang des Mikrocontrollers gesendet wird.Einfache RC-Entprellschaltung