-         

Ergebnis 1 bis 5 von 5

Thema: RN-Control Timer

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    28.12.2011
    Beiträge
    15

    RN-Control Timer

    Anzeige

    SMARTPHONES & TABLETS-bis zu 77% RABATT-Kostenlose Lieferung-Aktuell | Cool | Unentbehrlich
    Hallo Forummitglieder,

    Ich benutze das RN-Control Board. Ich habe im RN-Wissen nach Bascom + Timer gesucht aber dort wird ein anderes Microcontrollerboard benutzt. Das Board in der Anleitung hat $crystal = 8000000 und das RN-Control BOard $ = 16000000. Hier ist die Anleitung :

    http://www.rn-wissen.de/index.php/Bascom_und_Timer

  2. #2
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    27
    Beiträge
    3.517
    Blog-Einträge
    9
    Die Angabe $crystal hat nur was für die Bascom-Internen Berechnungen wie die Baudrate und die Zeiten für den Wait Befehl zu tun. Mit dem Timer an sich hat das nichts zu tun.

    Und ja in der Anleitung wird ein Mega8 verwendet. Aber du kannst die Grundeinstellungen des Mega8 aus der Anleitung auch Problemlos für dein Mega32 aus dem RN-Control verwenden, da der Timer für alle AVRs in Bascom gleich eingestellt wird. Du musst nur gucken welcher Timer in welchem Mikrocontroller vorhanden ist (du kannst z.B. keinen Timer2 in einem Mikrocontroller aktivieren der nur Timer0 und Timer1 hat. Aber da wird dir Bascom dann eine Fehlermeldung ausgeben falls du es doch machst).
    Schaut ruhig mal auf meiner Homepage vorbei :
    http://kampis-elektroecke.de

    Oder folge mir auf Google+:
    Daniel Kampert

    Es gibt 10 Arten von Menschen. Die einen können Binär, die anderen nicht.

    Gruß
    Daniel

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    28.12.2011
    Beiträge
    15
    Hättest du vielleicht eine Idee wo ich nachgucken könnte welche Timer es im RN-Control gibt und ab welcher zahl sie in das ISR wechseln.

    Danke im voraus

  4. #4
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    27
    Beiträge
    3.517
    Blog-Einträge
    9
    Also auf dem RN-Control selber befindet sich kein Timer. Der Timer ist in dem Mikrocontroller der sich auf dem RN-Control befindet. Auf dem RN-Control befindet sich ein Mega32 und laut Datenblatt von Atmel:

    http://www.atmel.com/dyn/resources/p...ts/doc2503.pdf

    Besitzt dieser Mikrocontroller drei Timer (Timer0-Timer2).
    In diesem Datenblatt wird auch erklärt wie der Timer funktioniert, aber um dies zu verstehen brauchst du ein paar Kenntnisse über den inneren Aufbau eines Controllers
    Im Grunde funktioniert ein Timer so:
    Du hast eine Taktquelle(diese kann je nach Einstellung des Timers ein externer Takt sein wie ein Quarz o.ä. oder ein Impuls von einem Taster z.B.).
    Dieser Timer kann entweder 8-Bit oder 16-Bit sein (bei einem Mega32 ist der Timer0 und der Timer2 8-Bit groß und der Timer1 16-Bit). Je nachdem wie groß der Timer ist kann er unterschiedlich weit zählen. Bei 8-Bit kann er bis 255 zählen und bei 16-Bit bis 65535. Den Takt vom Taktgeber z.B. vom Quarz kann man durch einen Vorteiler, dem sogenannten Prescaler, teilen lassen. Ein 16MHz Takt wird bei einem Prescalter von 16 z.B. auf 1MHz runtergeteilt. Anschließend zählt der Zähler bei jeder steigenden oder fallenden Flanke, je nach Einstellung, um 1 hoch. Das heißt ein Zähler der mit 16MHz betrieben wird und einen Vorteiler von 16 besitzt zählt in 1 Sekunde bis 1 Million (1MHz = 1 Million Hertz). Bei jedem Überlauf eines Timers, also wenn der Zähler wieder auf 0 wechselt, weil er bis zu seinem maximum gezählt hat, wird ein Timerinterrupt-Bit gesetzt und der Mikrocontroller springt in eine so genannte "Timer Interrupt Service Routine" kurz Timer ISR. Ein 8-Bit Timer springt also in eine ISR wenn er von 255 auf 0 springt.
    Wenn du jetzt z.B. jede Sekunde eine LED blinken lassen willst sieht dein Code so aus:

    Code:
    $regfile = "m32def.dat"
    $crystal = 8000000
    
    Config Portd = Output                     
    
    Config Timer1 = Timer , Prescale = 256    
    Enable Timer1                             
    On Timer1 Isr_von_timer1                  
    Enable Interrupts
    Timer1 = 34285                            
    
    Do
     '....Hauptprogramm
    Loop
    End
    
    Isr_von_timer1:                            
    Timer1 = 34285                             
    Toggle Portd.0                             
    
    Return
    Die Berechnung des Timers erfolgt so:
    Der Takt am Controller beträgt 8MHz (bedingt durch das Quarz NICHT durch $crystal = 8000000). Das heißt das Quarz schwingt 8000000x in der Sekunde. Der Prescaler von 256 teilt den Takt dann durch 256 auf 31250 runter. Das heißt in 1 Sekunde zählt der Timer bis 31250. Da du aber den Timer1, also einen 16-Bit Timer, benutzt und dieser eigentlich bis 65535 zählt bevor er in eine ISR springt musst du den Timer mit einem Wert vorladen.
    Dieser berechnet sich ganz einfach aus dem Maximalen Timerwert - Timerwert den du durch das runterteilen errechnet hast.
    Das wäre folgende Rechnung:
    65535 - 31250 = 34285
    Das vorladen machst du dann mit:

    Timer1 = 34285

    Die Timer-ISR kennzeichnest du dann mit:

    Isr_von_timer1:
    Und diesen Namen legst du mit:

    On Timer1 Isr_von_timer1: fest. Statt Isr_von_timer1 kannst du natürlich jeden anderen Namen nehmen den du willst.
    Da du das RN-Control benutzt und an dem Mega32 ein 16MHz Quarz sitzt musst du die Werte natürlich anpassen um auf 1 Sekunde zu kommen, weil der Controller ein bischen schneller arbeitet als in dem Beispiel.

    Hoffe deine Fragen zum Timer wurden jetzt ausreichend beantwortet falls nicht einfach melden.
    Gute Nacht
    Schaut ruhig mal auf meiner Homepage vorbei :
    http://kampis-elektroecke.de

    Oder folge mir auf Google+:
    Daniel Kampert

    Es gibt 10 Arten von Menschen. Die einen können Binär, die anderen nicht.

    Gruß
    Daniel

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    28.12.2011
    Beiträge
    15
    Vielen Dank

Ähnliche Themen

  1. Timer 1 in zwei 8 bit Timer
    Von Martinius11 im Forum C - Programmierung (GCC u.a.)
    Antworten: 3
    Letzter Beitrag: 26.11.2010, 00:58
  2. C167 Drehzahlberechnung mit Timer 3 od. Timer 3 & 4?
    Von cieks0301 im Forum Software, Algorithmen und KI
    Antworten: 5
    Letzter Beitrag: 13.03.2009, 11:37
  3. Timer und PWM
    Von Spongebob85 im Forum C - Programmierung (GCC u.a.)
    Antworten: 16
    Letzter Beitrag: 11.11.2007, 10:43
  4. PWM mit Timer 0 und 2 geht, aber nicht mit Timer 1 (mega64)
    Von popi im Forum C - Programmierung (GCC u.a.)
    Antworten: 3
    Letzter Beitrag: 14.06.2006, 17:00
  5. Discovery Bot oder RN-Control 1.4 vs. C-Control
    Von Xtreme im Forum Vorstellung+Bilder+Ideen zu geplanten eigenen Projekten/Bots
    Antworten: 14
    Letzter Beitrag: 06.06.2005, 19:15

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •