Pin A0 - A5

Hi, Ich habe einmal eine Frage zu den Aeduino Pins A0-A5 da ich diese noch nie an meinem Arduino genutzt habe , müsste ich in Erfahrung bringen ob ich diese auch als Ausgang für eine LED benutzen kann. Nich das ich was Falsch mache und meinen Ardi schrotte. Es soll im grunde nur eine LED angeschlossen werden die im Sekundentakt blinkt.

l.G.Jürgen

Die Analogpins sind im Grunde genommen Digital I/O mit der Zusatzmöglichkeit, den AD-Wandler anzukoppeln. Mit pinMode(Ax,OUTPUT) kannst du die Pins als ganz normal als Ausgang (digitalWrite() ) benutzen, die Spezifikationen sind dieselben wie bei jedem anderen Digital I/O auch. Genauso funktioniert auch digitalRead() auf diesen Pins, wenn du pinMode(Ax,INPUT) benutzt.

1 Like

Sie können sie als D14 bis D19 sowie zugreifen.

byte ledName = 14;

pinMode (ledName, OUTPUT);

digitalWrite (ledName, HIGH);
digitalWrite (ledName, LOW);

etc.

Vielen Dank für eure Antworten, damit ist mir sehr geholfen.

l.G.Jürgen

Die SMD-Version des ATmega328 hat zusätzlich noch A6 und A7, zwei Analogeingänge mehr. Diese beiden können NICHT als digitale Ein/Ausgänge benutzt werden, Sie sind nur Analogeingänge. A& und A7 sind zB beim Arduino NANO herausgeführt, beim Arduino UNO SMD sind sie nicht herausgeführt.
Grüße Uwe

1 Like

Da es hier gerade um die Analog Pins geht. Bei den ProtoShields wird SCL und SDA vom UNO herausgeführt. Sind die durchgeschleift mit A4 und A5? Oder kann ich A4/A5 neben I2C auch als Analog Input nutzen?

Nein. Du kannst nicht gleichzeitig den I2C-Bus und die Pins A4/A5 als Analoge Eingänge oder digitale Ein/Ausgänge nutzen.
Ich weiß nicht ob auf dem Protoshield diese Pins verbunden sind; Auf dem Arduino Uno R3 sind sie sicher verbunden. Auf anderen Audinos sind andere Pins als I2C Schnittstelle benutzt: Mega : pin 20 und 21. Für die anderen weiß ich es nicht auswendig.
Grüße Uwe

Mit ATmega328P: Sie können I2C, oder Sie können A4/A5 verwenden. Sie können nicht beides haben aktiv zur gleichen Zeit.
Dies kann zu arbeiten:

:
:
Wire.end (); / / Stop I2C
:
value = AnalogRead (A4);
:
:
Wire.begin (); / / Neustart I2C

Auf dem Protoshield sind die nicht mit A4/A5 verbunden. Zurzeit brauch ich die ja noch nicht zwingend.

sschultewolter:
Auf dem Protoshield sind die nicht mit A4/A5 verbunden. Zurzeit brauch ich die ja noch nicht zwingend.

Danke CroosRoads für den Tip.

You are welcome.

CrossRoads:
You are welcome.

Das hiess früher : "Bitte sehr" oder sogar "War mir eine Ehre"
Heute sagen viele: "Gern" oder "gerne"
In Hamburg : "Da nich für" ( No need to thank for that )

( Ich geh mal davon aus, dass du dein Deutsch trainieren willst, CrossRoads. "Herzlich Willkommen" )

:
:
Wire.end (); / / Stop I2C
:
value = AnalogRead (A4);
:
:
Wire.begin (); / / Neustart I2C

value wird wohl 1023 sein, oder wer tauscht die Pullup-Widerstände gegen Analog-Signale ? ...

translate.google.com für mein Englisch auf Deutsch :slight_smile:

1023 - ich weiß nicht, ob wire.end trennt die Pullup-Widerstände. Wenn nicht, wird es abhängen, ob das analoge Signal eingeschaltet werden kann und aus wie ein Pin-Treiber.

Ich werde euch alle auf, den Rest zu verlassen ...

Und hier auch der Beweis, daß es garantiert geht ohne etwas zu schrotten:

Das Problem ist nicht etwas zu schrotten sondern daß:

  1. der Pullupwiderstand die Analogmessung verfälscht
  2. die Analogspannng den I2C Bus so stöhrt, daß dieser nicht funktioniert.

Man kann beide Sachen nicht gleichzeitig ohne irgendwelche Multiplexer machen . Wenn man zuwenig analoge Pins hat, dann ist es sinnvoller die analogen Eingänge durch Analogmultiplexer (CD4067 CD4051 ecc) zu erweitern und A4 und A5 einzig für den I2C Bus zu nutzen.

Grüße Uwe

Ich habe noch einmal eine Frage zu den Pin A0 - A5. Und zwar fehlt mir ein Pin an dem möchte ich ein LED betreiben, die im Sekundentakt an und aus geht. Ich habe heute 2 Nanos bekommen, und mein Programm draufgespielt. jetzt wollte ich in LOOP eimal

void loop() {
digitalWrite(ledsek,HIGH)
....
....
.... //(Programmablauf
....

if (alteSekunde==millis()/1000) return; // selbe Sekunde, loop verlassen
alteSekunde=millis()/1000;

tickOneSecond(); // Uhrzeit weiterticken lassen

digitalWeite(ledsek,LOW)
}

Meine Blaue LED Leuchtet zwar super , doch sie schaltet bei LOW nicht ab so das sie im Rythmus des Programmablaufs Blinkt. Was mache ich Falsch, ledsel ist Declariert Pin A0 ist mit pinMode(ledsek, OUTPUT); auf Ausgang gesetzt, aber es tut sich nichts. Sorry das ist das erstemal das ich die Pin A0-A5 überhaupt gebrauche.

l.G.Jürgen

weiss jetzt nicht, was das mit Pin A0 - A5 zu tun hat, aber wenn du am Ende von loop

...
digitalWrite(ledsek,LOW); // hab das mal so interpretiert
}

und am Anfang

void loop() {
digitalWrite(ledsek,HIGH) 
....

stehen hast, dann ist deine ledsek "immer" HIGH

Michael hat sich schon erledigt. Ich hatte zwar nicht an emde von Loop High stehen sondern LOW und am Anfang von Loop High aber das war es nicht, ohne Pause da zwischen kannst Du das Blinken nicht wahrnehmen. jetzt habe ich das High in die Schleife von void tickOneSecond() verlegt da die Abfrage am ende von Loop
if (alteSekunde==millis()/1000) return; // selbe Sekunde, loop verlassen
alteSekunde=millis()/1000;

tickOneSecond(); // Uhrzeit weiterticken lassen
digitalWrite(ledsek,LOW);

Habe ich henau ein Blinken im Sekundentakt, da die Sekunde die noch nicht voll ist durch die Ifabfrage ignoriert wird und Loop verlassen wird so das echt nur weiter im Sekundentakt gezählt wird wenn die sekunde Voll ist.

l.G.Jürgen