pin-Belegungstabelle Mega 2560?

hallo, ich suche eine pin-Belegungstabelle für den Mega 2560 , unter "Produkte ist aber keine Tabell zu finden. (Bisschen unübersichtlich gestaltet, finde ich.)

Hätte vllt jemand einen Link, bitte? 8)

(Aktuell interessiert mich, ob pins 20, 21 und 53,54 besondere Zusatzfunktionen haben)

Hier ist der Mega: http://greentechhobby.com/images/Arduino/ArduinoMega.pdf

UNO: http://tallerarduino.files.wordpress.com/2013/06/arduino-uno-pinout.png

aaah - 20/21 sind also 5V und 54/55 GND? gut zu wissen, Gottseidank :grin:

und danke für die wieder ungeschlagen schnelle Antwort 8)

noch ne Frage: leider sieht man nicht auf dem Bild, welche pins für Timer verwendet werden. stimmt das hier, wie ich es notiert habe...? // timer 0 (pin 13, 4) 1 ( pin 12, 11) 2 ( pin 10, 9) 3 ( pin 5, 3, 2) 4 ( pin 8, 7, 6)

war das alles an timern? auf welche beiden kann man am leichtesten verzichten? timer 2? und welcher noch ? evtl. 3? wieso verbrauchen timer 3+4 jeweils ganze 3 pins?

Hallo Hawe,

leider ist die Seite von pighixxx immer noch nicht wieder online. Hab auf anhieb nur das ältere Pinout raussuchen können http://www.cs.ou.edu/~fagg/classes/general/atmel/ArduinoMega.pdf

Auf welchen Timer du verzichten kannst kommt drauf an. Das musst du sehen, wie es mit deinen Libarys aussieht.

Schau dir folgende Seite mal an http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial/Die_Timer_und_Z%C3%A4hler_des_AVR Dass Timer3 und 4 jeweils 3 Pins verbrauchen liegt daran, dass es 16bit Timer sind mit 2 Registern.

Das sieht man. Die Timer Ausgänge sind die OCnX Pins. OC = Output Compare

z.B. OC1B = Timer 1, Kanal B OC0A = Timer0, Kanal A

Und die "verbrauchen" diese Pins nicht. Das sind die Pins die von einem Timer angesteuert werden können. Man kann alle Pins auch als normale digitale I/Os verwenden.

Was zu welchem Timer gehört hatten wir schon in dem anderen Thread: timer 0 -> 13, 4 timer 1 -> 12, 11 timer 2 -> 10, 9 timer 3 -> 5, 3, 2 timer 4 -> 8, 7, 6

Pin 13 kann dabei wohl theoretisch von Timer0 und Timer1 angesteuert werden. Praktisch aber von Timer0 auf dem Arduino. Da sieht man dann auch dass Timer1 als 16 Bit Timer genauso drei Ausgänge hat wie 3-5. Aber einer wird aus irgendeinem Grund mit Timer0 geteilt.

Andere Libs verwenden meistens Timer1 oder Timer2, da die auch auf dem Atmega328 vorhanden sind. Daher ist es nicht verkehrt 3-5 zu verwenden. Du kannst aber auch 1 oder 2 nehmen wenn du sonst nichts hast, das darauf läuft.

Was auf dem Bild etwas komisch ist dass RX/TX als PWM Pins bezeichnet sind....

was meinst du mit 3-5 ? timer doch wohl nicht, also pins - aber wird dann timer 3 nicht nur teilweise lahmgelegt, so dass dann sowieso auch pin2 frei wäre?

Serenifly: Was auf dem Bild etwas komisch ist dass RX/TX als PWM Pins bezeichnet sind....

Richtig. Handelt sich wie gesagt um eine alte Version. Hatte mir die aktuellen Layouts irgendwann mal gesichert, aber leider nicht wieder gefunden. Gerade ein anderes Bild gefunden in nicht zu erkennender Auflösung. Dort sind Rx/Tx keine PWM Pins mehr.

Die ist aktueller http://marcusjenkins.com/wp-content/uploads/2014/06/mega2.pdf

HaWe:

  • aber wird dann timer 3 nicht nur teilweise lahmgelegt, so dass dann sowieso auch pin2 frei wäre?

Frei für was? Diese Sonderfunktionen sind völlig unabhängig von der Funktion als digitale I/Os.

Du solltest dir vielleicht mal grob anschauen wie die Timer generell funktionieren. PWM ist etwas komplexer, aber vereinfacht gesagt, zählt ein Zähler hoch und wird ständig mit einem Wert in einem Vergleichsregister (Output Compare Match Register) verglichen. Wenn der Wert gleich ist wird automatisch ein Ausgang umgeschaltet. In dem man den Wert im Vergleichsregister ändert beeinflusst man den Schaltzeitpunkt. Timer0 und Timer2 haben zwei dieser Vergleichsregister (und somit 2 Ausgangspins). Timer 1 und 3-5 haben jeweils drei Vergleichsregister (oder genau genommen 3 mal 2, da es 16 Bit Timer sind) . Und das schalten der Pins geschieht völlig automatisch ohne dass ein Interrupt den Code unterbricht.

Man kann also auf einem Timer unabhängig voneinander zwei bis drei unterschiedliche PWM Werte einstellen. Und wenn ein Pin PWM macht, dann kann man den den anderen immer noch als normale I/O verwenden.

Wo es da eben zu Konflikten kommt ist wenn eine andere Lib einen bestimmten Timer verwendet um z.B. Software Serial Timing zu machen oder Servos zu steuern. Da hilft ein Blick in die Lib um zu sehen was die verwenden. Bei manchen kann man auch einfach umschalten (z.B. IrRemote)

pins frei für pwm-Motoren ntl, ich brauche jede Menge davon, aber immer hängt sich da so ein blöder timer mit rein!!

eigtl brauche allermindestens 6 oder besser noch 8- 10 pwm-pins. Timer will ich aber auch keine verschenken, gerade wegen aller möglichen libs.

Wenn dir keine anderen Libs reinpfuschen hast du 12 PWM Pins. Wenn du z.B. Timer1 durch den Encoder belegst hast du immer noch 10

Es gibt aber auch externe PWM Controller: http://www.exp-tech.de/Shields/Adafruit-16-Channel-12-bit-PWM-Servo-Driver-I2C-interface-PCA9685.html https://learn.adafruit.com/16-channel-pwm-servo-driver 16 Kanäle, 12 Bit, I2C Interface

Oder als Shield: http://www.ebay.de/itm/Adafruit-Compatible-16-Channel-12-bit-PWM-Servo-shield-I2C-interface-PCA9685-/310954190548?pt=LH_DefaultDomain_0&hash=item48665066d4

nee, ich habe ja meinen Arduino Mega extra für mehr interne pwm-Controller gekauft, und die will ich jetzt auch effektiv nutzen.

Also zurück zur Ausgangsfrage:

pins 44-46 ist klar, die nehme ich als erstes. Und dann?

Nachdem du/ihr euch ja am besten mit den gängigen libs auskennt: welche libs verwenden am häufigsten welche Timer? Servos oder Schrittmotoren-libs z.B. brauche ich nicht, ich verwende ausschließlich meine eigenen Encodermotoren - für die ich die pwms brauche.

Ergänzung: was noch dran soll: ein Grafik-Display (SPI-Bus), plus evtl ein USB-Master-Shield.

Wie schon gesagt, am häufigsten werden von Libs Timer1 und Timer2 verwendet, da die auch auf dem Atmega328 existieren und man dann einfach programmieren kann ohne im Code zwei verschiedene Prozessoren berücksichtigen zu müssen. Timer2 wird vor allem gerne verwendet, da er mehr Prescaler Optionen als die 16 Bit Timer hat. Deshalb hat man mit Timer3 bis Timer5 erst mal potentiell am wenigsten Konflikte.

Mit PWM auf Timer0 bis du auch auf der sicheren Seite, da darauf der millis() Zähler läuft und der somit nie von anderen Libs verwendet wird. millis() und PWM gehen dabei gleichzeitig.

wieso Timer 5? die gehen doch nur bis 4...?

timer 0 -> 13, 4 timer 1 -> 12, 11 timer 2 -> 10, 9 timer 3 -> 5, 3, 2 timer 4 -> 8, 7, 6

Mhh, fällt mir erst jetzt auf dass der in der Tabelle gar nicht aufgeführt ist. :o Der ist in der Arduino IDE aber implementiert: http://arduino.cc/en/Reference/AnalogWrite

On the Arduino Mega, it works on pins 2 - 13 and 44 - 46

44-46 ist Timer5. Den hattest du ja selbst erwähnt:

pins 44-46 ist klar, die nehme ich als erstes.

Dann stimmt das oben mit 10-12 Pins nicht :) Die drei Pins hatte ich da nicht mitgezählt :o

aaaa-ha! :)

dann hab ich also schon Timer 5 ausgebremst (3 pwms) dann nehme ich Timer 0 dazu (+2 pwms) und dann noch Timer 4 (+3 pwms) Summe= 8

das geht dann ja 8)

mille grazie! :)

Hi, this is the new version: http://pighixxx.com/megapdf.pdf and the processor: http://pighixxx.com/atmega2560v3_0.pdf

That's kinda ugly and hard to read. I'll stick with the old version.

Hallo, Serenifly, nun hab´Dich mal nicht so... Das ist mehr als man erwarten. Da steckt viel Herzblut drin. Ich sage mal Danke schön. Gruß und Spaß Andreas

Von mir gibt es Dank für die vorherige Version. Die ist wirklich schön praktisch :slight_smile: