-         

Ergebnis 1 bis 5 von 5

Thema: Timer im CTC-Mode

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    19.02.2010
    Beiträge
    67

    erledigt: Timer im CTC-Mode

    Anzeige

    Hallo Forum,

    ich möchte mit einem ATMega32 im CTC-Mode mit Timer0 einen 1 ms - Takt zu erzeugen.
    Mit Taktfrequenz=16MHz würde ich einen Prescaler von 64 nutzen und den Vergleichswert auf 249 stellen.

    f.1ms = 16MHz / (Prescaler * (OCR0+1))

    der auf das wesentliche reduzierte Programm-Code:

    Code:
    $regfile = "M128def.dat"
    $crystal = 16e6
    $hwstack = 128
    $swstack = 128
    $framesize = 128
    
    Led Alias Portc.0 : Config Led = Output : Led = 1
    
    '### Timer0 - Zeittakt 1ms #####################################################
    Tccr0 = &B00001011                                          'CTC-Mode, Prescaler=64
    Ocr0 = 249                                                  'Vergleichswert
    Timsk.ocie0 = 1                                             'Output Compare Interrupt enable
    On Oc0 Isr_timer0
    Dim Timer0_cnt As Word
    Dim Pulse_out As Byte
    '###############################################################################
    
    Enable Interrupts
    
    
    Do
      If Pulse_out = 1 Then
            Pulse_out = 0
            Led = 0
            Waitms 50
            Led = 1
      End If
    Loop
    End
    
    Isr_timer0:
       Incr Timer0_cnt
       If Timer0_cnt = 10000 Then
             Timer0_cnt = 0
             Pulse_out = 1
       End If
    Return
    Zum Test mit Stoppuhr wollte ich nun alle 10 Sekunden eine LED aufblitzen lassen.
    Tatsächlich geschieht dies aber in 5-Sekunden-Intervallen.

    Warum treten die Interrupts doppelt so schnell auf wie erwartet/errechnet?

    besten Dank

    BoGe-Ro
    Geändert von BoGe-Ro (27.06.2011 um 11:36 Uhr)

  2. #2
    Erfahrener Benutzer Roboter Genie Avatar von Searcher
    Registriert seit
    07.06.2009
    Ort
    NRW
    Beiträge
    1.410
    Blog-Einträge
    101
    Hallo,
    würd sagen, der Prescaler ist falsch gesetzt. Für 64 müßte es Tccr0 = &B00001100 heißen. Gegenwärtig ist er auf 32 und damit läuft der Timer doppelt so schnell.

    Gruß
    Searcher
    Hoffentlich liegt das Ziel auch am Weg
    ..................................................................Der Weg zu einigen meiner Konstruktionen

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    19.02.2010
    Beiträge
    67
    Hallo Searcher,

    bei dem Wert für das Register TCCR0 habe ich mich an folgender Tabelle orientiert. (Datenblatt ATMega32, Seite 82)

    Klicke auf die Grafik für eine größere Ansicht

Name:	Prescaler.JPG
Hits:	18
Größe:	35,2 KB
ID:	19183
    Meiner Meinung nach Prescaler = 64.

    Gruß BoGe-Ro

  4. #4
    Erfahrener Benutzer Roboter Genie Avatar von Searcher
    Registriert seit
    07.06.2009
    Ort
    NRW
    Beiträge
    1.410
    Blog-Einträge
    101
    Oh ha,
    hatte Deine Erläuterung nicht genau genug gelesen und nach

    $regfile = "M128def.dat"

    im Mega128 Datenblatt nachgeschaut. Für Mega32 solltest Du $regfile ändern?

    Gruß
    Searcher
    Hoffentlich liegt das Ziel auch am Weg
    ..................................................................Der Weg zu einigen meiner Konstruktionen

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    19.02.2010
    Beiträge
    67
    ohhh - mea culpa!

    Du hast natürlich recht und trotz meiner falschen Beschreibung richtig verstanden und erklärt.

    Das Projekt soll auf einem ATMega32 laufen, die Vortests unternehm ich zur Zeit auf einem ATMega128.
    Somit habe ich das falsche Datenblatt offen .

    Besten Dank für deine Hilfe!

Ähnliche Themen

  1. CTC Mode
    Von Thorsten im Forum C - Programmierung (GCC u.a.)
    Antworten: 6
    Letzter Beitrag: 22.09.2006, 12:55
  2. Kummer mit CTC (mode 4)
    Von robocat im Forum Assembler-Programmierung
    Antworten: 3
    Letzter Beitrag: 30.08.2006, 21:53
  3. POWER-DOWN MODE bei AVR?
    Von Rasuth im Forum AVR Hardwarethemen
    Antworten: 8
    Letzter Beitrag: 12.08.2006, 03:22
  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. Timer/Counter2 wake up Microcontrolle von Power-Save Mode
    Von janboejle im Forum AVR Hardwarethemen
    Antworten: 0
    Letzter Beitrag: 15.06.2005, 15:47

Stichworte

Berechtigungen

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