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)
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?
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....
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.
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)
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.
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