Ethernet.begin blockiert pin ?

Hallo,

ein komisches Problem:

Ich habe ein TM1637 Display, einen Arduino Mega und darauf ein Ehernet Shield.
Das TM1637 ist an Pins 50 und 52 angeschlossen und FUNKTIONIERTE bis eben.

// TM1637 TRN
#define trn_CLK 52 //pins definitions for TM1637 and can be changed to other ports
#define trn_DIO 50
TM1637_6D trn_Disp(trn_CLK,trn_DIO);

Nachdem alles funktionierte, habe ich angefangen weiter an dem Script zu werkeln.
Plötzlich ging das Display nicht mehr ???
Nach ewigen suchen habe ich den "Fehler" gefunden.

Nachdem ich Ethernet.begin aufgerufen habe funktioniert das Display nicht mehr.
Lasse ich Ethernet.begin weg, dann geht es wieder.

Was ist denn das für ein komischer Fehler und woran kann das denn liegen ?

Matthias

PS: Muss ich eigentlich für die PINS CLK und DIO eine PinMode setzen ?

SPI beansprucht einige Pins.
Doppelbelegungen, machen Sorgen.

mroschk:
Das TM1637 ist an Pins 50 und 52 angeschlossen und FUNKTIONIERTE bis eben.

Warum ausgerechnet an die zwei für andere Aufgaben wichtigen Pins?
Du kannst so ziemlich jeden "normalen" PIN nehmen.

Nachdem ich Ethernet.begin aufgerufen habe funktioniert das Display nicht mehr.
Lasse ich Ethernet.begin weg, dann geht es wieder.

Was ist denn das für ein komischer Fehler und woran kann das denn liegen ?

PS: Muss ich eigentlich für die PINS CLK und DIO eine PinMode setzen ?

Ja na logisch.
Du versuchst auf den SPI-Pins etwas, was sich beisst.

Zum PS: Ein Blick in die lib gibt Aufschluss.

Hallo,

ahh, OUTPUT .. ok. In die cpp hab ich nicht reingeschaut.

Zu den Pins...
Ich hab jetzt die PINs erst mal getauscht, also andere genommen.
Mit PIN 20 ist es auch so, der geht einfach nicht als ganz normaler INPUT PIN zu benutzen wenn das Ethernet. begin drin ist.

Irgendwie komisch.

Matthias

mroschk:
Ich hab jetzt die PINs erst mal getauscht, also andere genommen.
Mit PIN 20 ist es auch so, der geht einfach nicht als ganz normaler INPUT PIN zu benutzen wenn das Ethernet. begin drin ist.

Irgendwie komisch.

Nein! Nicht komisch. Logisch.
Du solltest Dir das PINOUT ansehen, bevor Du das zusammensteckst.
Eigentlich stehts an den Pin's sogar dran, wenn die bestimmte Aufgaben übernehmen.

Ok, das muss ich mir noch einmal ganz genau anschauen, denn dazu habe ich noch eine Grundsätzliche Frage zum Verständnis.
Das bringt mich etwas durcheinander.
Ich schaue mir die Pinbelegung von dieser Seite an:

Nun ist da recht unten eine Legende dazu, welche besagt ( blau markiert m Bild ) die GRAUEN Zaheln sind die PHYSISCHEN Pin Nummern.
Aber warum unterscheiden die sich von den aufgedruckten Nummern auf dem Arduino? ( rot markiert )

Was muss ich denn nun bei pinMode angeben ?
Die Zahle, die auf dem Arduino aufgedruckt ist oder die graue ?

Als Beispiel mal der markiert Pin21 oder auch 43.
Was müsste ich denn für diesen Pin bei pinMode angeben ? 21 oder 43 ??

Matthias

Ps.: auf der oben verlinkten Seite steht übrigens :

Jeder der 54 digitalen Pins des Arduino 2560 Mega kann als Eingang oder Ausgang verwendet werden,

und das hab ich eben wörtlich genommen.

Du kannst dich auch nach den Farben orientieren. Auch dazu gibt es eine Beschreibung.

Und der physikalische Pin ist der Pin am Chip.
Der IDE-Pin ist der, wie er am besten in der IDE benannt wird.
In deinem Fall ist 21 ok.

mroschk:
Frage zum Verständnis.

Nun ist da recht unten eine Legende dazu, welche besagt ( blau markiert m Bild ) die GRAUEN Zaheln sind die PHYSISCHEN Pin Nummern.
Aber warum unterscheiden die sich von den aufgedruckten Nummern auf dem Arduino? ( rot markiert )

Au das ist sehr einfach...
Die physischen Pins findest Du hier:
https://ww1.microchip.com/downloads/en/devicedoc/atmel-2549-8-bit-avr-microcontroller-atmega640-1280-1281-2560-2561_datasheet.pdf Gleich auf der 2ten Seite.

Für Deine Zweite Frage musst Du einen Schritt zurück.
Ausgangspunkt ist der UNO. Dort hat man die physischen Pins https://ww1.microchip.com/downloads/en/DeviceDoc/ATmega48A-PA-88A-PA-168A-PA-328-P-DS-DS40002061B.pdf Seite 12, als logische PIN's zugeordnet.

Der Mega ist in weiten Teilen zum UNO Pin-kompatibel; was daran liegt, das das Mapping angepasst wurde.
Das Mapping findest Du unter ~/ArduinoVerzeichnis/hardware/arduino/avr/variants/mega

Was muss ich denn nun bei pinMode angeben ?
Die Zahle, die auf dem Arduino aufgedruckt ist oder die graue ?

Die Zahlen, die auf den Arduino aufgedruckt sind.

Ps.: auf der oben verlinkten Seite steht übrigens :
und das hab ich eben wörtlich genommen.

Das ist auch richtig.
Du kannst jeden einzelenen PIN als INPUT oder OUTPUT festlegen.
Das geht auch gemischt - aber eben nur, wenn Du sicherstellen kannst, das Dir nicht irgendwas reingreift.
In Deinem Fall die wire.h.

Ahh, ok...das bringt wieder etwas Licht ins Dunkel :slight_smile:

Danke euch allen für die hilfreichen Antworten.

Matthias

Ich muss leider noch einmal auf das Pin Thema zurück kommen.

@my_xy_projekt:
Du hast geschrieben das ich für pinMode die PinNummer nehmen soll, die auf dem Arduino aufgedruckt sind.
Das blöde ist nur, das es manche mehrmals gibt.

Siehe Bild .... und was nu ?

pins.JPG

pins.JPG

Warum schneidest du das Bild so kaputt?

Die analogen Pins fangen mit A an.
A0,A1,A2 usw.

Das steht sicherlich auch in dem Abgeschnittenem ganz deutlich.

combie:
Das steht sicherlich auch in dem Abgeschnittenem ganz deutlich.

Siehe #5. Da gibt es sogar eine Tabelle "Arduino Mega Pinmapping-Tabelle"
Mehr noch, da steht schön aufgelistet welche PIN's für welche Aufgaben "von Haus aus" vorgesehen sind.

War gestern irgendwie bei dem Einen oder Anderen kein Guter Tag. :wink:

mroschk:
Das blöde ist nur, das es manche mehrmals gibt

Man sollte schon das ganze lesen.
Steht doch extra dabei, welches die analogen Pins und welches die PWM-Pins (digitalen) sind.

Wobei man die "analogen" Pins (i.d.R.) auch als digitale verwenden kann. Beim Nano gibt es da eine kleine Ausnahme, aber ansonsten sind alle Pins erstmal digital. Und alles andere sind Zusatzfunktionen

Und um völlig zu verwirren kann man die Analog-Pins auch mit "digitalen Nummern" ansprechen. A0 ist 1 höher als der höchste Digital-Pin. Also 54 bei Mega

my_xy_projekt:
Siehe #5. Da gibt es sogar eine Tabelle "Arduino Mega Pinmapping-Tabelle"
Mehr noch, da steht schön aufgelistet welche PIN's für welche Aufgaben "von Haus aus" vorgesehen sind.

Da kann ich die Verwirrung aber schon etwas verstehen. Diese Tabelle verwendet nämlich die physischen Pin-Nummern. Es gibt extrem wenige Situationen in denen man die wirklich braucht.

Die Pin Nummern des Arduino Boards wären da hilfreicher. Die sind aber in der Grafik auch in Pink verfügbar.

Serenifly:
Die Pin Nummern des Arduino Boards wären da hilfreicher. Die sind aber in der Grafik auch in Pink verfügbar.

Da steht ganz eindeutig alles in der rechten Spalte.

Pin Nummer	Pin Name	Mapped Pin Name
1 	PG5 ( OC0B ) 	Digital pin 4 (PWM)
2 	PE0 ( RXD0/PCINT8 ) 	Digital pin 0 (RX0)
3 	PE1 ( TXD0 ) 	Digital pin 1 (TX0)
4 	PE2 ( XCK0/AIN0 ) 	 
5 	PE3 ( OC3A/AIN1 ) 	Digital pin 5 (PWM)
6 	PE4 ( OC3B/INT4 ) 	Digital pin 2 (PWM)
7 	PE5 ( OC3C/INT5 ) 	Digital pin 3 (PWM)
8 	PE6 ( T3/INT6 ) 	 
9 	PE7 ( CLKO/ICP3/INT7 ) 	 
10 	VCC 	VCC
11 	GND 	GND
12 	PH0 ( RXD2 ) 	Digital pin 17 (RX2)
13 	PH1 ( TXD2 ) 	Digital pin 16 (TX2)
14 	PH2 ( XCK2 ) 	 
15 	PH3 ( OC4A ) 	Digital pin 6 (PWM)
16 	PH4 ( OC4B ) 	Digital pin 7 (PWM)
17 	PH5 ( OC4C ) 	Digital pin 8 (PWM)
18 	PH6 ( OC2B ) 	Digital pin 9 (PWM)
19 	PB0 ( SS/PCINT0 ) 	Digital pin 53 (SS)
20 	PB1 ( SCK/PCINT1 ) 	Digital pin 52 (SCK)
21 	PB2 ( MOSI/PCINT2 ) 	Digital pin 51 (MOSI)
22 	PB3 ( MISO/PCINT3 ) 	Digital pin 50 (MISO)
23 	PB4 ( OC2A/PCINT4 ) 	Digital pin 10 (PWM)
24 	PB5 ( OC1A/PCINT5 ) 	Digital pin 11 (PWM)
25 	PB6 ( OC1B/PCINT6 ) 	Digital pin 12 (PWM)
26 	PB7 ( OC0A/OC1C/PCINT7 ) 	Digital pin 13 (PWM)
27 	PH7 ( T4 ) 	 
28 	PG3 ( TOSC2 ) 	 
29 	PG4 ( TOSC1 ) 	 
30 	RESET 	RESET
31 	VCC 	VCC
32 	GND 	GND
33 	XTAL2 	XTAL2
34 	XTAL1 	XTAL1
35 	PL0 ( ICP4 ) 	Digital pin 49
36 	PL1 ( ICP5 ) 	Digital pin 48
37 	PL2 ( T5 ) 	Digital pin 47
38 	PL3 ( OC5A ) 	Digital pin 46 (PWM)
39 	PL4 ( OC5B ) 	Digital pin 45 (PWM)
40 	PL5 ( OC5C ) 	Digital pin 44 (PWM)
41 	PL6 	Digital pin 43
42 	PL7 	Digital pin 42
43 	PD0 ( SCL/INT0 ) 	Digital pin 21 (SCL)
44 	PD1 ( SDA/INT1 ) 	Digital pin 20 (SDA)
45 	PD2 ( RXDI/INT2 ) 	Digital pin 19 (RX1)
46 	PD3 ( TXD1/INT3 ) 	Digital pin 18 (TX1)
47 	PD4 ( ICP1 ) 	 
48 	PD5 ( XCK1 ) 	 
49 	PD6 ( T1 ) 	 
50 	PD7 ( T0 ) 	Digital pin 38
51 	PG0 ( WR ) 	Digital pin 41
52 	PG1 ( RD ) 	Digital pin 40
53 	PC0 ( A8 ) 	Digital pin 37
54 	PC1 ( A9 ) 	Digital pin 36
55 	PC2 ( A10 ) 	Digital pin 35
56 	PC3 ( A11 ) 	Digital pin 34
57 	PC4 ( A12 ) 	Digital pin 33
58 	PC5 ( A13 ) 	Digital pin 32
59 	PC6 ( A14 ) 	Digital pin 31
60 	PC7 ( A15 ) 	Digital pin 30
61 	VCC 	VCC
62 	GND 	GND
63 	PJ0 ( RXD3/PCINT9 ) 	Digital pin 15 (RX3)
64 	PJ1 ( TXD3/PCINT10 ) 	Digital pin 14 (TX3)
65 	PJ2 ( XCK3/PCINT11 ) 	 
66 	PJ3 ( PCINT12 ) 	 
67 	PJ4 ( PCINT13 ) 	 
68 	PJ5 ( PCINT14 ) 	 
69 	PJ6 ( PCINT 15 ) 	 
70 	PG2 ( ALE ) 	Digital pin 39
71 	PA7 ( AD7 ) 	Digital pin 29
72 	PA6 ( AD6 ) 	Digital pin 28
73 	PA5 ( AD5 ) 	Digital pin 27
74 	PA4 ( AD4 ) 	Digital pin 26
75 	PA3 ( AD3 ) 	Digital pin 25
76 	PA2 ( AD2 ) 	Digital pin 24
77 	PA1 ( AD1 ) 	Digital pin 23
78 	PA0 ( AD0 ) 	Digital pin 22
79 	PJ7 	 
80 	VCC 	VCC
81 	GND 	GND
82 	PK7 ( ADC15/PCINT23 ) 	Analog pin 15
83 	PK6 ( ADC14/PCINT22 ) 	Analog pin 14
84 	PK5 ( ADC13/PCINT21 ) 	Analog pin 13
85 	PK4 ( ADC12/PCINT20 ) 	Analog pin 12
86 	PK3 ( ADC11/PCINT19 ) 	Analog pin 11
87 	PK2 ( ADC10/PCINT18 ) 	Analog pin 10
88 	PK1 ( ADC9/PCINT17 ) 	Analog pin 9
89 	PK0 ( ADC8/PCINT16 ) 	Analog pin 8
90 	PF7 ( ADC7 ) 	Analog pin 7
91 	PF6 ( ADC6 ) 	Analog pin 6
92 	PF5 ( ADC5/TMS ) 	Analog pin 5
93 	PF4 ( ADC4/TMK ) 	Analog pin 4
94 	PF3 ( ADC3 ) 	Analog pin 3
95 	PF2 ( ADC2 ) 	Analog pin 2
96 	PF1 ( ADC1 ) 	Analog pin 1
97 	PF0 ( ADC0 ) 	Analog pin 0
98 	AREF 	Analog Reference
99 	GND 	GND
100 	AVCC 	VCC

PS: Mein Hinweis bezog sich auf:

mroschk:
Das bringt mich etwas durcheinander.

Nun ist da recht unten eine Legende dazu, welche besagt ( blau markiert m Bild ) die GRAUEN Zaheln sind die PHYSISCHEN Pin Nummern.
Aber warum unterscheiden die sich von den aufgedruckten Nummern auf dem Arduino? ( rot markiert )

Also entschuldigt bitte, wenn ich mich da etwas blöde anstelle, aber für mich ist das nicht ganz eindeutig.

Im ersten nicht abgeschnittenen Bild habe ich mal den Pin 2 und 3 markiert.
Die beiden (z.B. ) gibt es auf dem Arduino AUFGEDRUCKT mehrmals, also zwei mal.
Einmal auf der rechten Seite (rot markiert) und einmal auf der linken Seite ( blau markiert ).
So, meine ursprüngliche Frage war ja welche Pinnummer ich in dem Scetch verwenden muss.
Die auf dem Arduino aufgedruckte kann es somit schon einmal nicht sein.
Mittlerweile ist klar, das es die ROSA NUMMERN sind...ok.

Nun im Bild 2, mit dem Text, steht Pin 2 wäre Interrupt 0 und Pin 3 wäre wohl Interrupt 1:

2 (Interrupt 0), 3 (Interrupt 1) ...

Wenn in der Anleitung auf der oben schon mal verlinkten Seite mit Pin 2 und Pin 3 die rosa Pin Nummern gemeint sind steht dahinter aber bei Pin2 "INT4" und bei Pin3 "INT5".

Ist das nun jetzt ein Fehler in der Anleitung ?

Matthias

mroschk:
Im ersten nicht abgeschnittenen Bild habe ich mal den Pin 2 und 3 markiert.
Die beiden (z.B. ) gibt es auf dem Arduino AUFGEDRUCKT mehrmals, also zwei mal.
Einmal auf der rechten Seite (rot markiert) und einmal auf der linken Seite ( blau markiert ).

NEIN! Es gibt die nicht 2x.
Denn wie Du genau so auf dem Bild siehst, ist es einmal ANALOG 2 und 3. Auf der anderen Seite ist es DIGITAL 2 und 3.
Also was grundlegend verschiedenes.

Ja, bevor die Frage kommt, die AnalgogPin kannst Du auch als DigitalPin nutzen.

So, meine ursprüngliche Frage war ja welche Pinnummer ich in dem Scetch verwenden muss.
Die auf dem Arduino aufgedruckte kann es somit schon einmal nicht sein.

DOCH!
Vielleicht hilft Dir ja diese Quelle:

Mittlerweile ist klar, das es die ROSA NUMMERN sind...ok.

Auch das ist falsch.
A0-A15 sind nicht rosa.

Nun im Bild 2, mit dem Text, steht Pin 2 wäre Interrupt 0 und Pin 3 wäre wohl Interrupt 1:Wenn in der Anleitung auf der oben schon mal verlinkten Seite mit Pin 2 und Pin 3 die rosa Pin Nummern gemeint sind steht dahinter aber bei Pin2 "INT4" und bei Pin3 "INT5".

Ist das nun jetzt ein Fehler in der Anleitung ?

Nein.
Alles richtig.

Nochmal zurück zu #9 Datenblätter nehmen und vergleichen.

Dann nochmal das in #9 geschriebene zum Mapping lesen und verstehen.
Als Hilfe zur vollständigen Stiftung von Verwirrung: https://content.arduino.cc/assets/Pinout-UNOrev3_latest.pdf Seite 2

Danach attachInterrupt() - Arduino Reference

Na dann - viel zu tun für Sonntag.

Morgen,

warum schickst du irgendwelche Links zu einem Arduino UNO ?
Es geht doch um einen Mega.

NEIN! Es gibt die nicht 2x.
Denn wie Du genau so auf dem Bild siehst, ist es einmal ANALOG 2 und 3. Auf der anderen Seite ist es DIGITAL 2 und 3.
Also was grundlegend verschiedenes.

Die Quelle hilft nicht, da auf meinem Arduino2560 LINKS UND RECHTS die gleichen Pin Nummern stehen.
Auf meinem steht auf der linken Seite eben NICHT A0, A1, .... sondern 0,1,2 ...
Ich hab doch den Link gepostet...

Trotzdem danke
Matthias

Ich bestell mir noch mal einen und werde das pin für pin testen ob es nun die rosanen sind, ich denke ja.

ie Quelle hilft nicht, da auf meinem Arduino2560 LINKS UND RECHTS die gleichen Pin Nummern stehen.
Auf meinem steht auf der linken Seite eben NICHT A0, A1, .... sondern 0,1,2 ...

auf deinem Board steht also links nur 0
Dann schaust du auf das Bild ... und siehst dass neben der linken 0 eine A0 steht, und zwar in der Farbe, die in der Legende wieder als Arduino IDE vermerkt ist.

übrigens ist das am Bild in #4 auch so. Am PCB steht nur 0. Daneben steht das ist A0.

mroschk:
warum schickst du irgendwelche Links zu einem Arduino UNO ?

Weil Du bockig bist und wegen Deinem Unverständnis über das Kompatibilitätsmapping den Hintergrund in Erfahrung bringen solltest, warum Interrupt 0 beim UNO INT0 ist und beim Mega INT4.

Die Quelle hilft nicht, da auf meinem Arduino2560 LINKS UND RECHTS die gleichen Pin Nummern stehen.
Auf meinem steht auf der linken Seite eben NICHT A0, A1, .... sondern 0,1,2 ...

Gott! Die Quelle hilft!
Stell Dir vor, es gibt auch Boards die sind garnicht beschriftet.

Weil Du mit Deinem Nachbau nicht klarkommst, muss ich mir das nicht antun.
Gehe in den offiziellen Arduino-Shop und kauf Dir einen originalen ARDUINO MEGA - fertig.

Kauf Dir ein Einsteigerbuch.

mroschk:
Mittlerweile ist klar, das es die ROSA NUMMERN sind...ok.

Für digitale Pins, ja. Ich hatte vergessen dass die "analogen Pins" Grün sind.

Selbst wenn auf deinem Board die "analogen" Pins nur von 0-N bezeichnet sind sollte da aber daneben deutlich "Analog [In]" stehen. Wie auf dem Bild auf der Seite auch. Dann ist klar dass man da in der IDE ein 'A' davor schreibt.
Auf Standard Arduino Boards ist das 'A' auch auf der Platine drauf

Nun im Bild 2, mit dem Text, steht Pin 2 wäre Interrupt 0 und Pin 3 wäre wohl Interrupt 1:Wenn in der Anleitung auf der oben schon mal verlinkten Seite mit Pin 2 und Pin 3 die rosa Pin Nummern gemeint sind steht dahinter aber bei Pin2 "INT4" und bei Pin3 "INT5".

Das ist so historisch gewachsen und liegt daran dass die IDE mit vielen unterschiedlichen Prozessoren umgehen muss. Die müssen alle gleich behandelt werden, aber sind intern ganz anders aufgebaut. Wie ein paar andere Dinge hätte man das vielleicht besser lösen können, aber jetzt kann man es nicht mehr ändern.

So gibt es "Konflikte" zwischen den Interrupt Nummern in der IDE, sowieso den Pin Nummern und den Interrupt Bezeichnungen des Prozessors.

Sowas könnte theoretisch auch das Routing der Leiterbahnen kommen. Angefangen hat es mit dem UNO und da hat man nur INT0 und INT1. Der Mega sollte dazu aber direkt Pin-kompatibel sein. Vielleicht war es einfacher dafür INT4 und INT5 zu nehmen. Auf dem Prozessor sind INT4/5 link, aber INT0-3 unten:

Das ist Spekulation aber so kann sowas entstehen. Und die Arduino Umgebung ist eigentlich dafür ausgelegt dass sie Leute so wenig wie möglich mit dem eigentlichen Prozessor auseinandersetzten müssen

Hier wird das ganz unten erklärt:

INT.0 bis INT.N ist was die IDE bei attachInterrupt() als Bezeichnung möchte. Darunter sind die Pins auf dem Arduino Board. Wie die Interrupts wirklich auf dem Prozessor heißen ist eigentlich egal. Das braucht man nur wenn man das direkt per Hand programmiert.
Und es gibt heute mit digitalPinToInterrupt() eine Funktion die das umrechnet. Wenn man das heute nochmal machen müsste würde man das wahrscheinlich gleich so machen. Aber man kann den alten Kram nicht entfernen weil dann viele Programme nicht mehr laufen würden