Ein 4,8-V-Messwert an einem losen Pin 0?

Ich habe ein Setup, das erfordert, dass ich alle meine E / A auf meinem Arduino Uno R3-Board verwende - einschließlich der seriellen Pins 0 und 1.

Also habe ich diese Pins als Eingänge initialisiert, aber wenn ich Pin 0 lese, ist es hoch, obwohl es mit nichts verbunden ist. Mein Multimeter zeigt mir ständig 4,8 V am Pin an.

Alle meine anderen Pins Ich habe keine serielle Kommunikation initialisiert und ich habe versucht, die Platine mit einer Batterie zu betreiben (also keine Computerverbindung).

Ich habe Waveshield von Adafruit daran angeschlossen, aber meiner Meinung nach sollte es Pin 0 in keiner Weise stören.

Ich habe eine einfache Zeichnung gemacht, die das Konzept dessen zeigt, was ich tue. Es ist alles dabei, nur die Größe von 12 Knöpfen und 12 Lampen. Um genug I/Os zu bekommen, musste ich einen IO-Expander (mcp23016) auf dem I2C-Bus implementieren, aber es ist das gleiche Prinzip wie auf der Zeichnung.

Wenn ich also alles angeschlossen habe, scheint alles gut zu sein, außer Pin 0 auf dem Arduino-Board. Alle anderen Messwerte (sowohl auf dem Arduino als auch auf dem Expander) funktionieren einwandfrei. Das Seltsame ist: Wenn ich die Spannung an Pin 0 messe, erhalte ich 4,8 V; An Pin 1 gibt es mir 1 V und an den anderen Pins gibt es mir 0 V. Etwas unterscheidet sich also offensichtlich von den seriellen Pins.

Gibt es interne Pull-Ups oder Downs oder könnten es die vielen 10k-Widerstände sein, die ich verwende? Müssen sie vielleicht kleiner oder größer sein?

Vielleicht ist es nur ein schlechtes Löten, aber ich habe stundenlang nachgesehen und kann wirklich kein Problem am Hardwareteil erkennen.

Konzept schematisch

Sie werden dich wegen dieser Zeichnung anschreien. Ein richtiger Schaltplan würde einen langen Weg gehen.
*schrei* <- das bin ich, der wegen der Zeichnung schreit.
J-"YELL"-Ton, Amirite?
@dex Genau. :)
Epische Zeichnung (yell!).

Antworten (2)

Wenn es als Eingangspin eingestellt ist, ist der Versuch, die Spannung daran zu messen, weitgehend unproduktiv, es sei denn, Sie glauben natürlich, dass es immer noch als Ausgang eingestellt ist - dann müssten Sie eine Last daran anschließen, um zu sehen, ob es sich um eine Spannung handelt Das Produzieren ist "echt" oder nur ein Leckstrom von einem nicht angeschlossenen Eingang, wodurch ein hochohmiges Voltmeter etwa 4,8 V anzeigt.

Versuchen Sie, einen 1k-Widerstand von diesem Pin an Masse anzuschließen - zeigt er immer noch logisch 1 oder vielleicht jetzt logisch 0.

Einige IO-Pins haben (bei einigen MCUs) standardmäßig einen eingebauten hochohmigen Pull-up in der Größenordnung von 100k, und dies kann auch passieren. Dies kann (bei einigen MCUs) so programmiert werden, dass es (a) überhaupt nicht vorhanden ist, (b) Pull-up oder (c) Pull-down ist. Ich glaube, einige MCUs können einen niedrigeren oder einen höheren Widerstand programmieren. Vielleicht kommt das auch vor?

Das Arduino unterstützt ein internes Pull-up an Eingängen, ist jedoch standardmäßig nicht aktiviert. Verwenden Sie pinMode(pin,INPUT_PULLUP), um es zu aktivieren.
+1 für "weitgehend unproduktiv". Ich hätte eine stärkere Terminologie verwendet :-)

Die seriellen Pins auf dem Hauptmikrocontroller des Arduino (ATMega328p) sind über zwei Widerstände mit dem seriellen IC (ein FTDI FT232 USB-zu-Seriell-IC oder auf neueren Boards ein ATMega16U mit USB-zu-Seriell-Programmierung) verbunden. Diese Widerstände werden zwischen dem ATMega328p und dem seriellen IC platziert, aber nicht zwischen dem ATMega328p und dem Pin 0- und Pin 1-Header. Dadurch kann ein serielles Gerät, das über den Arduino-Header (normalerweise eine Abschirmung) verbunden ist, den seriellen IC überschreiben.

In Ihrem Fall bedeutet dies, dass der serielle Anschluss des seriellen ICs stattdessen die Pins ansteuert, es sei denn, es gibt ein Signal, das den Pin High oder Low ansteuert. Und wenn das Signal einen Widerstand hat, der schwächer als 1 kΩ ist, hat der serielle IC immer noch Vorrang vor diesem Signal.

Ich schlage vor, stattdessen Pin 0 als Ausgang zu verwenden.

Siehe Uno Rev 3-Schema unten für RN4A und RN4B, 1-kΩ-Widerstandsnetzwerk.