Verwenden Sie alle Pins als digitale E / A.


9

Erhöhen Sie die Anzahl der digitalen Pins

Es gibt viele Beiträge, die erklären, wie man mehr als nur die Standardstifte der verschiedenen Arduinos verwendet, aber keiner von ihnen erklärt die Einschränkungen und die Probleme richtig.

Geben Sie hier die Bildbeschreibung ein

Arduino Uno:

1.Sie können die analogen Pins verwenden

Pin 14 = Analog in 0
Pin 15 = Analog in 1
Pin 16 = Analog in 2
Pin 17 = Analog in 3
Pin 18 = Analog in 4
Pin 19 = Analog in 5

digitalWrite(14,HIGH);
or
digitalWrite(A0,HIGH);

2.Sie können nicht beide SDA, SCL & A4, A5 verwenden, da sie im Grunde gleich sind (18,19).

3. Sie können auch TX / RX verwenden.

"Tu es nicht, du unterbrichst die serielle Kommunikation ..."

"Verwenden Sie niemals die Stifte 0 und 1"

"Sie können die TX / Rx-Pins nicht verwenden"

Sie können ... aber Sie müssen Vorsichtsmaßnahmen treffen. Welche?

Es sollte eine serielle Software über USB haben, oder?

Oder breche ich die USB-Serie?

Gibt es interne Chipprobleme, wenn ich TX / RX verwende?

Da ich diese TX / RX-Pins im Code verwende, sollte ich sie wahrscheinlich nicht verwenden Serial.print()?

Was passiert, wenn ich vergesse, Serial.print()nach dem Hochladen des Codes, der die Pins 0,1 verwendet , zu entfernen ?

Wie kann man den Arduino / Bootloader per Hardware zurücksetzen, wenn etwas schief geht?

Da es verschiedene andere Arduinos gibt, die unterschiedliche Chips verwenden, gilt das oben Gesagte für alle Atmel-Chips?

Also, was sollte ich wissen, bevor ich diese TX / RX oder vielleicht auch die anderen analogen Pins benutze?

Es gibt billige Schieberegister, PWM-Treiber, LED-Treiber, SPI, i2c und mehr ICs, um Ihre E / A zu erweitern


Aber wenn es keine zu großen Probleme gibt, bedeutet dies, dass das Arduino 20 E / A-Pins hat ...

Sie könnten theoretisch steuern:

17x3 = 51 = 17 RGB leds (multiplexing, pwm sourcing&sinking);
14x6 = 84 leds (multiplexing, pwm on 6 rows/colums );
10x10 = 100 leds (multiplexing, high low);
20x(20-1) = 380 leds (charlieplexing, high low);
// yes it would flicker

Korrigiere mich, wenn ich falsch liege. Das heißt, Sie können 380 "Whatever" mit Dioden und einem Arduino steuern.

Antworten:


7

Das Hauptproblem sind die Pins 0 und 1.

Vielen Pins sind mehrere Funktionen zugewiesen, z. B. A4 und A5 sind auch die I2C-Pins, die Pins 10/11/12/13 sind auch die SPI-Pins usw. Die Pins 0 und 1 sind jedoch die einzigen Multifunktionspins, die tatsächlich vorhanden sind habe etwas an der Tafel angebracht.

Alle anderen Pins sind zwar multifunktional, ihre Funktion wird jedoch im Wesentlichen durch das definiert, was Sie an sie anhängen. Da die Pins 0 und 1 bereits auf der Platine mit dem USB-Schnittstellenchip verbunden sind, sind ihre Verwendungsmöglichkeiten etwas eingeschränkter.

  • Sobald Sie Serial in Ihrer Skizze ( Serial.begin()) aktivieren, können diese beiden Pins nicht mehr zuverlässig für digitale E / A verwendet werden.

Das bedeutet, dass Sie entweder die serielle Hardware-Schnittstelle oder die Pins für digitale E / A verwenden können, aber nicht beide.

  • Geräte, die an die Pins 0 und 1 angeschlossen sind, können die serielle Verbindung stören

Dazu gehört das Hochladen von Skizzen. Sie haben serielle Daten, die vom PC eingehen, während dieselben Pins von anderen mit ihnen verbundenen Dingen beeinflusst werden. Am häufigsten werden GPS-Module verwendet, die mit diesen Pins verbunden sind und ständig serielle Daten senden. Diese seriellen Daten stehen in Konflikt mit den seriellen Daten des PCs und kommen auch nicht richtig an.

  • Wie lade ich Skizzen hoch, wenn die Serie durch Ihre Skizze gestört wird? Wie "setzt" man das Board zurück?

Das tust du nicht. Es ist nicht Ihre Skizze, die die Seriennummer stört, sondern das, was physisch mit den beiden störenden E / A-Pins verbunden ist. Trennen Sie einfach diese beiden Pins von den angeschlossenen Pins und Sie können wieder Skizzen hochladen. Viele Schilde fügen jetzt einen kleinen Schalter hinzu, um diese Stifte zu trennen, sodass Sie Skizzen hochladen können, ohne den Schild abzuziehen. Sie können den gleichen Trick auch mit anderen Geräten anwenden, die Sie an diese Stifte anschließen. Fügen Sie einen zweipoligen Einzelwurf oder einen zweipoligen Doppelwurf hinzu (und verwenden Sie nicht eine Position), um beide Stifte einfach vom Rest zu trennen Ihre Hardware, wenn Sie müssen.

  • Betrifft dies alle Arduino-Boards?

Nein, nur diejenigen, die einen USB-zu-Seriell-Bridge-Chip verwenden - das sind Dinge wie Uno, Due, Mega usw. Boards mit direkter USB-Verbindung verwenden nicht die TX- und RX-Pins zum Hochladen von Skizzen - sie verwenden den dedizierten USB D + und D- Pins. Das sind Boards wie das Leonardo, einige der kleineren (Mini? Micro? Ich vergesse welche) Boards usw.


"Viele Schilde fangen jetzt an, einen kleinen Schalter hinzuzufügen" cool. Micro hat "USB to Serial Bridge Chip"? Bedeutet das, dass ich die Pins 0,1 auf uno, aber nicht auf micro verwenden kann?
Cocco

Sie können sie auf allen verwenden, die keine USB-zu-Seriell-Brücke haben. Der Uno hat einen, der Mega hat einen, der Mini hat keinen, Sie müssen jedoch einen extern an die TX / RX-Pins anschließen, um ihn zu programmieren. Alle diese sind raus. Das Micro und das Leonardo haben keine, also können Sie diese verwenden.
Majenko

Davon spricht @Nick Gammon? Uno und die anderen, die Sie aufgeschrieben haben, haben Pullup-Widerstände, mit denen Sie Pin 0 und 1 nicht richtig verwenden können, aber das Micro hat keinen Pullup-Widerstand, sodass die Pins 0 und 1 ordnungsgemäß funktionieren und auch der USB, um neue Skizzen hochzuladen?
Cocco

Diesmal irrt sich Nick in diesem Punkt. Es gibt keine Pullup-Widerstände. Es gibt ein Paar kleiner Inline-Widerstände, um Probleme zu vermeiden, wenn sowohl die Haupt-MCU als auch der USB-Chip versuchen, dieselbe Leitung gleichzeitig auf entgegengesetzte Pegel zu bringen. Sie können sie im Uno-Schaltplan als RN4A und RN4B sehen.
Majenko

Wenn der USB-Chip versucht, den RX-Pin anzusteuern (Sie haben den USB-Anschluss eingesteckt und Sie öffnen die serielle Verbindung [oder vielleicht ist er nur eingesteckt, nicht sicher]), kann dies die Spannung am RX-Pin unabhängig davon beeinflussen Sie tun dies in Ihrer Skizze, daher ist es möglicherweise nicht sicher, diesen Stift für Dinge wie Charlieplexing zu verwenden.
Majenko

0

20x (20-1) = 380 LEDs (Charlieplexing, hoch niedrig); Korrigiere mich, wenn ich falsch liege. Das heißt, Sie können 380 "Whatever" mit Dioden und einem Arduino steuern.

Erstens ist die Zahl 380 für 20 Pins (20 2 - 20) korrekt, jedoch sind die Pins 0 und 1 mit Pull-up-Widerständen am Atmega16U2 verbunden, sodass sie nie wirklich bei 0 V liegen. Wenn Sie eine leere Skizze laden, messen Sie 5 V an den Pins 0 und 1.

Zweitens können Sie nicht 380 "was auch immer" steuern. Sie können 380 LEDs über Charlieplexing steuern. Die Eigenschaft der LED, dass Strom nur in eine Richtung fließt, ist wichtig für die Funktionsweise.

Verwandte Frage Gibt es eine Möglichkeit, mehr als 14 Ausgangspins auf Arduino zu haben?


Erstens: Was passiert, wenn ich 2 LEDs invertiert (mit Widerständen) an Pin 0 und 1 lege, Pin 0 hoch Pin 1 niedrige Verzögerung 1 Sekunde und Pin 0 niedrig und Pin 1 hohe Verzögerung 1 Sekunde setze?
Cocco

Zweitens: Mit "was auch immer" meine ich Schalter ... Klickschalter, Reedschalter, Sensoren oder jede Art von Kombination von Eingängen, Ausgängen, die High-Low unterstützen. electronicdesign.com/site-files/electronicdesign.com/files/… mit Dioden.
Cocco

Nicht wirklich. Charlieplexing ist eine Form des Multiplexens. Wenn Sie also nicht möchten, dass Ihre Schalter wie verrückt klicken, funktioniert es für sie nicht wirklich. Und es ist eine Ausgabesituation, also werden Sie keine Eingaben machen, wie Sie zu denken scheinen. Ich schlage vor, Sie lesen die anderen Links. Schieberegister oder Hafenerweiterungen sind hier praktischer als Charlieplexing.
Nick Gammon

0

Ich kann wegen unzureichender Reputation keinen Kommentar abgeben, möchte aber darauf hinweisen, dass bei der OP-Pinbelegung mindestens ein Pin falsch ist!

PB6 sollte PB5 sein

Ich habe ziemlich viel Zeit damit verbracht herauszufinden, warum ich SCK auf dem Oszilloskop (SPI-Bus) nicht sehen konnte. Ich habe auf niedrigem Niveau gearbeitet, nicht mit der IDE.

Da dies das erste Bild ist, das beim Googeln auftaucht, wollte ich die gleichen Probleme für andere vermeiden ...

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.