Arduino Mega 2560 R3 - Pin D0 und D1 sind HIGH beim Boot-up

Hallo liebe Community,

ich möchte in einem kleinen Projekt 8 Magnetventile über Mosfets steuern und benutze dafür die digitalen Pins D0 bis D7. Als technische Grundlage diente dieser Schaltplan hier aus der Community:

Nun habe ich zwei Seltsamkeiten festgestellt:

1.) Wenn ich im Setup den Serial1 starte, um z.B. Messages zu loggen, sind Pin D0 und D1 immer HIGH, auch wenn ich sie als OUTPUT und LOW definiere.

void setup() {

 Serial.begin(9600);
 pinMode(0, OUTPUT);
 pinMode(1, OUTPUT);
 digitalWrite(0, LOW);
 digitalWrite(1, LOW);
 
 pinMode(47, INPUT_PULLUP);

}

void loop() {
  if (digitalRead(47) == LOW) {
    Serial.println("VALVES HIGH");
    digitalWrite(0, HIGH);
    digitalWrite(1, HIGH);
  } else {
    Serial.println("VALVES LOW");
    digitalWrite(0, LOW);
    digitalWrite(1, LOW);
  }

}

(Der Code ist ein Testcode. Im richtigen Code sind die Pin-Nr. selbstverständlich durch Variablen definiert!)

Um dieses Problem komme ich ja noch drum rum, da ich den Serial nicht wirklich benötige (oder auf Serial2 ausweichen kann) und wenn ich die Zeile "Serial.begin(9600)" entferne, tritt dieser Effekt nicht mehr auf.

2.) Jetzt kommt das wirkliche Problem. Wenn ich den Arduino neu starte oder Reset drücke, sind für 1-2 Sekunde die digitalen Pins D0 und D1 auf HIGH geschaltet und werden dann nach besagter Verzögerung erst LOW. Und das ist ein großes Problem für mich, da die Magnetventile nicht einfach so beim Start öffnen sollen.

Jetzt fragt sich manch einer bestimmt, warum ich nicht einfach auf andere digitale Pins ausweiche. Das Problem ist, ich habe ein eigenes Shield entworfen und eine Platine drucken lassen und ohne dass ich das Layout ändere und eine neue Platine drucken lasse, kann ich die Pins nicht ändern.

Woran liegt es, dass dieses Verhalten auftritt und kann man das ändern?

Du solltest besser nicht D0 und D1 verwenden. Auf dem Mega hast du ja genug andere digitale Pins.
Die beiden werden auch für die serielle Schnittstelle zum USB verwendet, daher deine Feststellung.

Zur Info:
Das ist Serial und nicht Serial1.

Edit:
Ohne Hardware-Änderung am Mega wirst du das Problem nicht beheben können.

Als Alternative kannst du den Bootloader vom Mega werfen und ihn nur noch über die ISP-Schnittstelle statt USB programmieren. Die Pins werden durch den Bootloader aktiv, der über USB (und damit über D0 und D1) auf die Programmierung wartet.
Auf USB würde ich aber nur in absoluten Notfall verzichten. Wenn irgend möglich nimm andere Pins als D0 und D1. Nur beim Leonardo darf man ungestraft D0 und D1 nutzen, da dort die USB-Schnittstelle anders bereitgestellt wird.

matthias1987:
ich habe ein eigenes Shield entworfen und eine Platine drucken lassen und ohne dass ich das Layout ändere und eine neue Platine drucken lasse, kann ich die Pins nicht ändern.

Wieso kannst du das nicht? Hast du kein Messer, Draht und Lötkolben?

Patch die beiden Leitungen doch einfach auf andere Pins,
speziell auf unbestückten Platinen sollte das doch sehr simpel sein.

Whandall:
Wieso kannst du das nicht? Hast du kein Messer, Draht und Lötkolben?

Patch die beiden Leitungen doch einfach auf andere Pins,
speziell auf unbestückten Platinen sollte das doch sehr simpel sein.

Die Platine ist mit CAD entworfen und dann hergestellt. Wie soll ich diese Leitungen denn ändern?

matthias1987:
Die Platine ist mit CAD entworfen und dann hergestellt. Wie soll ich diese Leitungen denn ändern?

Also neu machen....und vorher informieren...sorry.

Und sowas entwickelt man auf einem Steckbrett oder Lochraster.
Dann passiert das nicht.

matthias1987:
Wie soll ich diese Leitungen denn ändern?

Messer:
die bestehende Leitung unterbrechen (Skalpellklinge-11 geht gut)
einen Kontaktpunkt auf der verbliebenen Restleitung finden, oder mit Kratzen schaffen

Lötkolben:
einen feinen Draht anbringen und zum neuen Pinkontakt führen

matthias1987:
..... Wie soll ich diese Leitungen denn ändern?

Whandall hat es dir ja schon beschrieben. Aber Vorsicht, die Klingen sind sehr scharf.

HotSystems:
Aber Vorsicht, die Klingen sind sehr scharf.

Unglaublich nützlich um z.B. bei einem Krustenbraten die Haut vor dem Braten in schöne Rautenmuster zu schneiden,
bei Entenbrustfilets merkt nan nicht einmal wie man das Gewebe durchtrennt

In den Händen und anderen eigenen Körperteilen gilt es natürlich oben genannte Muster zu vermeiden. :wink:

Whandall:
Unglaublich nützlich um z.B. bei einem Krustenbraten die Haut vor dem Braten in schöne Rautenmuster zu schneiden,
bei Entenbrustfilets merkt nan nicht einmal wie man das Gewebe durchtrennt

In den Händen und anderen eigenen Körperteilen gilt es natürlich oben genannte Muster zu vermeiden. :wink:

OT...Ganz schlechter Vorschlag....ich habe schon wieder Hunger....mmhmm lecker Krustenbraten, stell ich mir jetzt richtig vor.../OT :wink:

Theseus:
Als Alternative kannst du den Bootloader vom Mega werfen und ihn nur noch über die ISP-Schnittstelle statt USB programmieren. Die Pins werden durch den Bootloader aktiv, der über USB (und damit über D0 und D1) auf die Programmierung wartet.
Auf USB würde ich aber nur in absoluten Notfall verzichten. Wenn irgend möglich nimm andere Pins als D0 und D1. Nur beim Leonardo darf man ungestraft D0 und D1 nutzen, da dort die USB-Schnittstelle anders bereitgestellt wird.

Jein.
Ohne Bootloader benutzt der ATmega2560 die Pins 0 und 1 nicht; der ATmega16U2 ist aber immernoch aktiv und steuert mit seinem TX Ausgang über einen Widerstand den RX Pin des Arduino Mega an und somit kann er ein High auf einen noch nicht als Ausgang definierten Pin erzeugen.
Um das zu vermeiden mußt Du auch auf dem Atmega16U2 eingreifen.

Grüße Uwe

Um das zu vermeiden mußt Du auch auf dem Atmega16U2 eingreifen.

Z.B. im Reset halten.
Das geht über eine Steckbrücke auf dessen ISP Anschluss.

Hi

Die Platine wurde für einen ARDUINO entworfen?
… zumindest klingt D0 und D1 danach …

Bei einem nacktem AVR müsste man nur auf die Nutzung von Serial verzichten.

(Daß D0 und D1 an Uno und Nano (Mega weiß ich jetzt nicht) die erste Serial ist, steht aber auch auf den Platinen - hätte man eigentlich sehen müssen)

Für eine gößere Menge ist Das Umfrickeln natürlich blöd bis unmöglich … blöd gelaufen :confused:

MfG
MfG

postmaster-ino:
(Daß D0 und D1 an Uno und Nano (Mega weiß ich jetzt nicht) die erste Serial ist, steht aber auch auf den Platinen - hätte man eigentlich sehen müssen)

Als Entwickler sollte man auch die Datenblätter lesen.
Das ist Pflicht !

Noch eine Idee, falls umbasteln nicht geht. Du könntest dir einen Adapter basteln: Prototype PCB DIY for Arduino UNO R3 Shield Board FR-4 Fiber 2mm+2.54mm Pitch | eBay

Bestücke die Pins D0 und D1 auf der Megaseite nicht. Dafür kannst du dann das Signal von anderen Pins abgreifen und auf der Buchsenseite auf D0 und D1 legen.

HotSystems:
Als Entwickler sollte man auch die Datenblätter lesen.
Das ist Pflicht !

Genau so.

Wichtig ist auch die Schaltung vorher auf einem Steckbrett auszuprobieren. Da wäre dir das Problem sofort aufgefallen. Verbuche das ganze als lehrreiche Erfahrung.