Warum haben manche Pins neben ihren Nummern ein „~“-Zeichen?

Ich schaute auf meinen Arduino Uno und bemerkte dieses Symbol durch digitale Pins 11, 10, 9, 6, 5, und 3. Was bedeuten diese? Beeinflusst dies die Funktionsweise? Kann ich diese Stifte für bestimmte Situationen nicht verwenden?

Das Tilde-Symbol bedeutet „ungefähr“. Wie in "das ist ungefähr Pin 11". Während des MFG-Prozesses können sich die Pins ein wenig verschieben. Selten wird Pin 11 genau 11 sein. Meist ist es etwas mehr oder etwas weniger als 11. Pins, die eine erhöhte Neigung zum Verschieben haben, werden mit dem Symbol ~ gekennzeichnet. :)
@AnnonomusPerson David ist scherzhaft, was nicht sofort offensichtlich ist, wenn Sie mit Pinbelegungen und dergleichen nicht vertraut sind.
@Shamtam: Oder wenn Sie mit David nicht vertraut sind :)

Antworten (2)

Entspannen. Mach dir keine Sorgen. Diese Pins heißen PWMund sind die gleichen wie die anderen Pins, außer dass sie einen „zusätzlichen Bonus“ haben.


Einige Verwendungen von Arduinos Website :

  • Dimmen einer LED
  • Simuliert einen analogen Ausgang. Der Ausgang schaltet immer noch digital von 0 V auf 5 V um. Allerdings Tiefpassfilter (Kondensator und Widerstand), um analoge Spannungen zu simulieren.
  • Audiosignale erzeugen.
  • Bereitstellung einer variablen Drehzahlregelung für Motoren.
  • Generieren eines modulierten Signals, um beispielsweise eine Infrarot-LED für eine Fernbedienung anzusteuern.

Wie es funktioniert:

Die PWM-Pins werden von On-Chip-Timern gesteuert, die die Pins automatisch mit einer Rate von etwa 490 Hz umschalten. Die "Pulsweitenmodulation" (PWM) gibt an, wie lange der Pin für einen einzelnen Zyklus dieser Frequenz ein- oder ausgeschaltet bleibt. Dies kann eine LED dimmen, indem die Illusion entsteht, dass sie halb so hell ist wie zuvor, wo sie wirklich sehr schnell blinkt.Bild verschiedener Arbeitszyklen.

Bei einem Arbeitszyklus von 25 % ist es ein Viertel der Zeit eingeschaltet. Wenn Sie eine LED verwenden, erscheint sie etwa 1/4 so hell [Geben oder Nehmen]. (Hinweis: Wie einige Leute darauf hingewiesen haben, ist dies nicht wirklich proportional, aber lassen wir es der Einfachheit halber so. Bsp.: 25 % sind nicht immer 1/4 der Helligkeit.)

(Wenn Sie wirklich elektrisch versiert sind, könnten Sie wahrscheinlich einen Kondensator hinzufügen, um ihn auch zu einem analogen Ausgang zu machen.)


So verwenden Sie diese Pins zur Ausgabe:

Zuerst müssen Sie den Pin als Ausgang definieren. Dann verwenden Sie analogWrite(ledPin, 128);, um es zu starten. Das ledPinist der PWM-Pin, mit dem Sie PWM starten möchten, und 128sollte durch eine Zahl zwischen 0und ersetzt 255werden. 0: 0% duty cycle(schaltet den Pin komplett aus) und 255: 100% duty cycle. (schaltet den Stift vollständig ein)

Quelle: http://www.arduino-tutorials.com/arduino-pwm/


Warum kann ich das Licht in meinem Code nicht einfach ein- und ausschalten?:

Technisch geht das, allerdings gibt es einige Probleme:

  • Es ist möglicherweise nicht so präzise wie die Verwendung der festverdrahteten Schaltungen mit dem Arduino
  • Es ist einfacher, nur Anweisungen einzugeben, anstatt viele "if" -Anweisungen zu haben

Es wird nicht wirklich einen großen Unterschied machen, wenn der einzige Zweck des Arduino darin besteht, PWM-Signale zu erzeugen. Wenn Sie jedoch Verzögerungen von mehr als 50 MS in die Hauptschleife einfügen, wird das Timing durcheinander gebracht. Mit dem Software-Ansatz möchten Sie alle "Verzögerungs" -Funktionen eliminieren, da das Arduino nur auf einem Thread läuft (es kann nur eine Sache gleichzeitig tun). Wenn Sie wissen, was Sie tun, macht es keinen großen Unterschied, das Licht zu dimmen, aber wenn Sie einen zusätzlichen Pin mit PWM haben, verschwenden Sie nur Ihre Zeit mit einem Software-Ansatz.


Wie andere betont haben:

Sie benötigen immer noch einen Widerstand für Ihre Schaltungen, um Strom und Spannung zu begrenzen. Sie können dies nicht überspringen.

Ich habe keine Ahnung, was Sie mit "Rechenleistung" meinen (oder was auch immer dieser Ausdruck bedeuten soll). PWM funktioniert, weil es von den Timern ausgelöst wird, die unabhängig vom laufenden Code laufen.
@JamesC4S Ich meine, dass es den gesamten Code langsamer macht, wenn Sie die Verzögerung hinzufügen und es "Ein" und "Aus" geht. Der Prozessor kann nur so viele Dinge pro Sekunde tun, bevor er überhitzt, also kontrolliert er, wie schnell er geht.
@AnnonomusPerson Sie müssen in den Antworten, die Sie geben, viel klarer sein. Ich verstehe immer noch nicht, was Ihre Erklärung mit "Rechenleistung" zu tun hat. Beispielsweise können Sie PWM-Routinen schreiben, die delay() nicht verwenden, beispielsweise mit millis(), was nur minimale Auswirkungen auf die Ausführungsgeschwindigkeit für den Rest des Codes hätte.
@AnnonomusPerson: Ich würde sagen, dass es zwei Möglichkeiten gibt, PWM im Code zu implementieren: Entweder kann man den Prozessor die PWM in einer Schleife ausführen lassen, die nichts anderes tut, als vielleicht zu entscheiden, wann beendet werden soll, oder man kann einen Timer-Tick-Interrupt haben Führen Sie die PWM durch. In der ersten Situation kann der Prozessor während der PWM nichts anderes tun; im letzteren gibt es Grenzen für die Genauigkeit und Präzision des PWM-Timings. Hardware-PWM-Schaltungen ermöglichen es einem Chip, saubere PWM-Wellenformen zu erzeugen, die auf den Bruchteil einer Mikrosekunde genau sind, während er andere Dinge tut.
Beachten Sie, dass dank der Funktionsweise des Sehens eine LED mit 1/4 DC (oder einem anderen Verhältnis) nicht unbedingt den entsprechenden Bruchteil der vollen Helligkeit anzeigt.
@IgnacioVazquez-Abrams Das weiß ich, aber ich habe diesen Teil nur der Einfachheit halber eingefügt. Sie haben jedoch Recht, ich sollte das dort einfügen, dass sie nicht direkt proportional sind.

Ein weit verbreiteter Irrtum über die PWM-Pins ist, dass bei der Verwendung von PWM keine Strombegrenzungswiderstände (z. B. bei LEDs) erforderlich sind.

Das ist nicht wahr. Die PWM-Pins sollten als digitale Pins betrachtet werden, die automatisch ein- und ausgeschaltet werden. Dies bedeutet, dass sie auf die gleiche HOCH-Spannung gehen wie alle anderen Pins.

Bei Verwendung von LEDs mit PWM müssen Sie weiterhin Strombegrenzungswiderstände verwenden. Wenn Sie Motoren mit PWM verwenden, sollten Sie (fast immer) einen Transistor verwenden.

@AnnonomusPerson Nein, das ist nicht korrekt. Sie würden immer noch Strombegrenzer für LEDs benötigen, selbst wenn Sie echte analoge Ausgänge hätten. LEDs benötigen Konstantstromquellen, keine Konstantspannungsquellen.
Sie können LEDs mit einem eingebauten Strombegrenzungswiderstand bekommen. Ich war so enttäuscht, als ich bei Maplin nach einer LED und einem geeigneten Widerstand fragte, um sie mit 12 V zu betreiben, als sie mir sagten, dass sie solche hatten, die direkt mit 12 V betrieben wurden. Heh, warte einfach, bis sie versuchen, eine Menge Transistoren in ein Paket zu packen, um ein UND-Gatter oder so etwas zu machen.