Pages: [1]   Go Down
Author Topic: [Mega2560] Timer?  (Read 2277 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 12
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hi Leute!
Ich habe einen Arduino Mega 2560. Ich habe gehört, dass ich auf dem AVR Interrupts Timer-gesteuert auslösen kann, z.B. alle 30ms. Das muss wohl über Zähler gehen.
Kann ich alle Timer nutzen, ohne mit den Standard-Funktionen (keine extra Libs) in Konflikt zu kommen? Ich könnte mir vorstellen, dass Serial und PWM auch Timer nutzen könnten.
Logged

Neuss
Offline Offline
Full Member
***
Karma: 1
Posts: 200
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ich habe einen Arduino Mega 2560. Ich habe gehört, dass ich auf dem AVR Interrupts Timer-gesteuert auslösen kann, z.B. alle 30ms. Das muss wohl über Zähler gehen.
Hallo BlazeX,
da hast du richtig hingehört und deine Annahme ist auch richtig smiley-wink
Quote
Kann ich alle Timer nutzen, ohne mit den Standard-Funktionen (keine extra Libs) in Konflikt zu kommen? Ich könnte mir vorstellen, dass Serial und PWM auch Timer nutzen könnten.
PWM nutzt alle Timer (0 bis 5) auf dem 2560, wenn du alle PWM-Ausgänge (PWM2 bis PWM13) benutzt. Wenn du nicht alle PWM-Ausgänge benötigst, kannst du die unbenutzten Timer für dich verwenden.
Auf jeden Fall werden aber alle Timer bei Start des Programms mit bestimmten Werten initialisiert (in der Funktion init() in wiring.c), aber das kann man im eigenen Programmcode später wieder "zurechtbiegen".
Timer 0 wird für interne Funktionen wie micros() und ähnliche verwendet. Da sollte man wohl auch nichts anpacken, wenn man nicht Verzögerungen und Zeiten durcheinander bringen will.

Serial benötigt meines Wissens nach keinen Timer, da die Baudrate intern aus dem Systemtakt gebildet wird. Siehe Atmel Datenbuch für 2560 und auch Datei HardwareSerial.cpp.

Wenn es zur Sache gehen soll, gibt es über google sicherlich viele Grundlageninformationen und Beispiele zur Programmierung, u.a. auch hier:

http://www.rn-wissen.de/index.php/Timer/Counter_%28Avr%29

und die "Kollegen" bei mikrocontroller.net haben auch viele hilfreiche Tutorials und Grundlagenartikel.

Gruß
Wolfgang
« Last Edit: June 22, 2011, 08:27:19 am by voithian » Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 12
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Aham danke erstmal.
Und wie bekomme ich heraus, welche Timer für welchen PWM-Pin benutzt werden?
Logged

Neuss
Offline Offline
Full Member
***
Karma: 1
Posts: 200
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Und wie bekomme ich heraus, welche Timer für welchen PWM-Pin benutzt werden?

Da gibt es zwei Möglichkeiten:
Hier
http://arduino.cc/en/uploads/Main/arduino-mega2560-schematic.pdf
im Schaltplan nachsehen, welcher PWM-Pin von Steckerleiste PWMH und PWML zu welchem Pin des Controllers geht.
Die Pin-Bezeicnung am Controller (z.B. OC0A, OC0B, OC1A, OC1B, OC2A, OC2B, OC3A, ...) gibt die Nummer des Timers an, über den das PWM-Signal erzeugt wird.

oder

in der nachfolgenden Tabelle
https://spreadsheets.google.com/spreadsheet/pub?key=0AtfNMvfWhA_ccnRId19SNmVWTDE0MEtTOV9HOEdQa0E&gid=0
ganz am Ende nachsehen. Da gibt es die Antwort von einem netten Menschen (nicht ich!) bereits fertig geliefert.

Korrektur meines Reply #1: Timer 5 scheint nicht für PWM verwendet zu werden.
« Last Edit: June 22, 2011, 10:59:28 am by voithian » Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 12
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Danke!
Dann kann ich ja erstmal Timer5 benutzen.

Mal eine grundsätzliche Frage: So ein Timer hat keinen festen Pin, oder? Also wenn ich den Timer1 zum Beispiel benutze, kann ich die Pins 11 und 12 trotzdem als digitale Ein- und Ausgänge nutzen? Oder dürfen die dann garnicht benutzt werden.
Und was hat es mit OC?? auf sich?
Logged

Neuss
Offline Offline
Full Member
***
Karma: 1
Posts: 200
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Mal eine grundsätzliche Frage: So ein Timer hat keinen festen Pin, oder? Also wenn ich den Timer1 zum Beispiel benutze, kann ich die Pins 11 und 12 trotzdem als digitale Ein- und Ausgänge nutzen?
Richtig. Da hängt alles davon ab, wie du den Timer benutzt. Du kannst den Timer so programmieren, dass er beispielsweise mit dem Systemtakt oder dem geteilten Systemtakt (durch 8, 64, 256, 1024, usw. ) bis zu einem vorgegebenen Wert hochzählt und dann bei Erreichen des Wertes einen Interrupt erzeugt. Dieser Interrupt wird dann in deinem Programm in einer Interrupt-Serviceroutine (ISR) behandelt.
Das alles erfolgt intern im Controller und keiner der PWM-Pins ist davon betroffen (können also weiterhin als Aus-/Eingang benutzt werden).

Andererseits kann der Timer so programmiert werden, dass beim Erreichen eines bestimmten Zählerstandes ein Ausgang gesetzt oder umgeschaltet wird. Dann kann der entsprechende Pin natürlich nicht mehr als allgemeiner Ein-/Ausgang benutzt werden und steht auch nicht für PWM zur Verfügung.
Quote
Oder dürfen die dann garnicht benutzt werden.
Doch, siehe oben.
Quote
Und was hat es mit OC?? auf sich?
OC0A/OC0B/OC1A/OC1B,...OC5A/B/C sind die Ausgangssignale bei der zweiten oben beschriebenen Betriebsart. OC steht für "Output Compare", weil so ein Ausgang immer dann gesetzt oder umgeschaltet (toggle) wird, wenn der Vergleich des hochlaufenden Zählers mit einem in Programm vorgegebenen festen Wert eine Übereinstimmung ergibt.

Nochmals zu Klarstellung: wenn du nur einen Interrupt alle x Millisekunden erzeugen willst, brauchst du die ganzen OCx Ausgänge nicht! Siehe Fall 1 oben. Dann kannst du (fast) beliebige Dinge in der Interrupt-Service-Routine ausführen, vorausgesetzt die Dinge dauern nicht allzu lange.

Ansonsten der Tipp für weitere Schritte: Tutorials und Datenbuch lesen, weil es doch ein wenig umständlich wäre, alle Einzelheiten hier zu behandeln.




« Last Edit: June 22, 2011, 12:44:00 pm by voithian » Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 12
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Danke für die Erklärung!
Tutorials werde ich lesen. Letzte Frage: Gibt es ein Datenbuch / Handbuch für den Mega2560?
Logged

Cologne
Offline Offline
Sr. Member
****
Karma: 11
Posts: 496
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Da fallen mir spontan nur die englischen Datenblätter direkt von Atmel ein. Auf der Seite http://www.atmel.com/dyn/products/product_docs.asp?category_id=163&family_id=607&subfamily_id=760&part_id=3632 findest du auch einige Applikation Notes.
Auf Deutsch kenne ich leider Literatur.
Logged

Neuss
Offline Offline
Full Member
***
Karma: 1
Posts: 200
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

http://www.atmel.com/dyn/resources/prod_documents/doc2549.pdf

Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 12
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Danke! Ihr seid super!

Mitlerweile habe ich Timer5 (16Bit) dazu bewegt, eine LED mit 10Hz zu togglen.
Mit Prescaler 256 bis 6250-1 zählen, das macht bei 16 MHz 10 Hz.

Mit diesen Tutorials habe ich es geschafft:
http://www.mikrocontroller.net/articles/AVR-Tutorial:_Timer
http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial/Die_Timer_und_Z%C3%A4hler_des_AVR
http://diyundso.de/?page=7
http://www.uni-koblenz.de/~physik/informatik/MCU/Timer.pdf
Logged

Pages: [1]   Go Up
Jump to: