PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Frage zu Arduino-UNO Digital-I/O PIN 0 und 1



Andi#87
15.01.2022, 11:33
Hallo,

beim UNO sind PIN 0 und 1 jeweils mit doppelter Funktion belegt: sowohl Digital-I/O als auch RX und TX. Muss in einem Sketch ein spezieller Befehl eingetragen werden, wenn ich diese beiden PIN als Digital-I/O benutzen möchte (weil ich insgesamt alle 14 Digital-I/O benötige und nicht erst beim Arduino-UNO-PIN2 einsetzen kann)? Ich finde nur immer den Hinweis, dass Pin 0 und 1 möglichst nicht als I/O verwendet werden sollen, wegen RX bzw. TX. Das ist ein wenig irritierend.


Andi

inka
15.01.2022, 15:09
ich meine mich erinnern zu können, dass wenn pin 0 und 1 als digitale pins verwendet werden das flashen nicht mehr möglich ist. Sicher bin ich aber nicht. ausprobieren...

Moppi
15.01.2022, 16:35
Können die Analogen nicht auch Digital-Pins sein?

Noch ein wenig mehr dazu: https://www.arduino.cc/reference/de/language/functions/communication/serial/

Andi#87
15.01.2022, 16:58
Ja, können Sie. Ist für die Könner unter den Usern. Ich fange fast jedesmal wieder von vorn an, wenn ich etwas am Arduino machen möchte. Naja, nicht ganz von vorn, aber ich bin immer froh, wenn ich es "einfach" hinbekomme. ;-)


Andi

Moppi
16.01.2022, 09:22
Zurzeit mache ich nichts mit dem Arduino. Aber wenn ich mich recht erinnere, muss man die sonst analogen Pins nur im Programm ändern. "pinMode(A0, INPUT);" zum Beispiel. RX/TX würde ich lassen. Einen Kommunikationskanal zu haben, ist immer gut, und sei es nur zur Überprüfung des Programmablaufs im seriellen Monitor der IDE. So weit ich gezählt habe, komme ich - ohne Gewähr - auf 16 digitale Pins, ohne RX/TX.

Gruß
Moppi

oberallgeier
16.01.2022, 10:04
.. beim UNO sind PIN 0 und 1 .. Digital-I/O als auch RX und TX ..weil ich insgesamt alle 14 Digital-I/O benötige ..Haste Dich vielleicht/vermutlich verzählt? Hier (klick mal) (https://iotspace.dev/arduino-uno-pinout-und-uebersicht/) , noch genauer hier (klick nochmal (https://upload.wikimedia.org/wikipedia/commons/c/c9/Pinout_of_ARDUINO_Board_and_ATMega328PU.svg)) oder "Datasheet" im Link unten - Seite 3, zähle ich ohne RX, TX, ohne Pin2 und ohne /RESET neunzehn ( 1 9 ) digitale IO´s. Ok, wenn Du die analogen Pins *gg* als analoge Pins benötigst oder das I²C-Protokoll fährst oder ähnliche Mehrfachnutzen benötigst, dann bist Du eingeschränkt.

Schreib doch mal ausführich welche Pinne Du benutzen willst oder musst und wozu. Dann kann man das besser/genauer raten.


.. wegen RX bzw. TX. Das ist ein wenig irritierend ..Wills mal so sagen: WENN ICH das ordentlich programmiere, dann wird RX und TX vor dem ersten Gebrauch entsprechend definiert/deklariert - damit NIX Undefiniertes passieren kann (Anm.: ich kenne kaum eine arduino-library, geschweige denn alle, daher kann ich das nur aus meiner Warte sagen). WENN ich die beiden Pinne "NUR" als digitale I/Os benötige, dann werden die eben nicht für die UART-Routinen deklariert. Nachteilig ist dann, dass der hardwaremäßige UART (siehe Dokumentation des mega328 ".. USART - Universal Synchronous Asynchronous Receiver Transceiver .." oder ".. USART0 .." wieder ´n Klick (https://ww1.microchip.com/downloads/en/DeviceDoc/Atmel-7810-Automotive-Microcontrollers-ATmega328P_Datasheet.pdf)) nicht be-/genutzt werden kann.

Nachtrag:
".. Ich finde nur immer den Hinweis, dass Pin 0 und 1 möglichst nicht als I/O verwendet werden sollen, .." heißt ja nicht "tu das auf keinen Fall" . . . *gg*

Andi#87
16.01.2022, 11:43
Danke für Eure bisherigen Antworten. Gezählt habe ich die PIN nicht, ich habe das in den Specs gelesen. Darin steht immer wieder "14 Digital I/O" (@oberallgeier: auch in dem Link von Dir), davon bin ich ausgegangen (ohne Einbeziehung der 6 analogen PIN).
Da ich den Arduino nicht als fertigen Arduino einsetze, sondern den Atmega 328 mit der notwendigen Beschaltung (Quartz usw.) auf eine eigene Platine integriere, entfällt die mögliche Nutzung von PIN 1 und 2 als RX/TX. Der Atmega macht nur die eine Aufgabe, die er in seinem Programm geladen hat, nämlich per Tasterdruck an den Ausgängen Relais an- bzw. auszuschalten. Insofern benötige ich die Funktion RX/TX nicht, sondern nur Digital-In.
PIN13 möchte ich umgehen, da dieser auch ein Signal ausgibt, wenn man RESET drückt. Das bedeutet, dass dann das zugehörige Relais entsprechend mehrmals schnell an und aus geht, was für meine Anwendung (Audio-Schaltmatrix) nicht sinnvoll ist. (gäbe es denn eine Möglichkeit, diese voreingestellte Funktion "RESET an PIN13" zu deaktivieren, so dass dort an PIN13 bei RESET kein Signal ausgegeben wird?)

Anbei der Sketch (Foto, ist noch eine alte 6-Tasten-Version).

@oberallgeier: wie würdest Du den denn "richtig" programmieren bzw. wie würdest Du RX/TX in diesem Beispiel deaktivieren, so dass "NIX Undefiniertes passieren kann"?

Andi


35722

oberallgeier
16.01.2022, 16:25
.. Da ich .. den Atmega 328 .. auf eine eigene Platine integriere, entfällt die mögliche Nutzung von PIN 1 und 2 als RX/TX ..*Grübel* - dann ist das ja ein (?ungeschickter/falscher?) Platinenentwurf ! ? Denn - sobald die Controllerpinne PD0 und PD1 auf Deiner Platine irgendwie zugreifbar sind (und nicht unverbunden "die Beine in die Luft" strecken), könnte man den UART nutzen; das ist dann eben eine Softwarefrage. Hardwaremäßig reicht für bidirektionalen UART RX, GND und TX, nur Senden oder nur Empfangen geht mit GND und einem der beiden xX-Pinne.


.. wie würdest Du den denn "richtig" programmieren bzw. wie würdest Du RX/TX in diesem Beispiel deaktivieren ..Uuups. Will mal so sagen: erstens programmiere ich nicht mit der arduino-IDE sonder mit ATMEL-Studio 4 oder ~7 üblicherweise in C. Sprich : es gibt diese Sprachbarriere, "mein" möglicher Code dürfte Dir nix nützen und ich werde mich nicht tiefer in die arduino-IDE einarbeiten. Zweitens : RX und/oder TX bzw. der HardwareUART muss durch geeignete Software aktiviert werden, die sind nicht "einfach so" funktionabel, müssen also vermutlich nicht erst deaktiviert werden. Wieso "vermutlich" : weil ich nicht weiß welche Bibliotheken Du oder Deine IDE-Einstellung einbindet.

LRKS (langer Rede kurzer Sinn) : programmieren musst Du selbst.

PS: ein screendump vom Code ist unschön und schwer leserlich. Der Forumseditor hat die Funktion "#" - die öffnet beim Schreiben ein/das Codefenster . . . Das sieht dann so aus:
// ================================================== =========================== =
// == Ausgabe Text PWM=on
// ================================================== =========================== =
void itxt_po (void) // "\r\tPWM ist on durch TC1PWM_on"
{ //
uputs0 ("\r\tPWM ist on durch TC1PWM_on"); //
itxt_rn();
} //
// ================================================== =========================== =

Andi#87
16.01.2022, 21:25
UART? Für eine an sich simple Aufgabe, per Taster Relais an- und auszuschalten? Der Platinenentwurf, den ich erstellt habe und der bereits hergestellt und im Einsatz ist, ist eigentlich ok ;-) Allerdings möchte ich das nochmal überarbeiten, da ich ein paar Kleinigkeiten im Layout übersehen habe, die allerdings "mechanische" Gründe haben, weil da etwas nur sehr eng ins Gehäuse passt. Bei dieser Gelegenheit würde ich eben gern PIN1 (PD1) zusätzlich noch als Digital-I/O verwenden. Um mich an UART usw. ranzuwagen, dazu fehlt mir noch das Wissen und - in diesem aktuellen Fall - denke ich, das ist nicht notwendig.

Danke aber für Deine Hinweise, zumindest werde ich mal Richtung UART usw. lernen. Möglicherweise wäre diese Anwendung ja doch gar nicht verkehrt, wenn ich es dann mal verstanden habe.

Danke für die Antworten.

Andi

oberallgeier
16.01.2022, 23:09
.. werde ich mal Richtung UART usw. lernen. Möglicherweise wäre diese Anwendung ja doch gar nicht verkehrt ..
Es wurde oben schon erwähnt dass man mit UART recht ordentlich debuggen kann - sprich: Fehler suchen. Grob skizziert plaziere ich in einem zu untersuchenden Code ein paar Ausgabebefehle, die eine Kennziffer, lieber gleich nen ganzen Satz/Text auf dem Bildschirm ausgeben. Erste SChritte mit UART (RS232 - klicks an (https://de.wikipedia.org/wiki/RS-232)) hatte ich schon mit nem Tiny13 gemacht bei/mit nem Experimentierkasten (http://www.b-kainka.de/lpmikros.htm). Später nahm ich dann die sehr universelle Bibliothek von Peter Dannegger (https://www.mikrocontroller.net/topic/101472) zu Hilfe - die erledigt mir seither in allen Projektchen die UART-Aufgaben. (Diese Bibliothek ist sehr gut und einfach zu benutzen - als Vorbild fürs Programmieren aber total ungeeignet. Peter produziert einen irre knappen, dafür sehr funktionellen Code).

Viel Erfolg mit den Pinnen PD0 und ~1 und mit UART.