-
        

Ergebnis 1 bis 3 von 3

Thema: Problem mit Timer des Atmega32

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    18.11.2012
    Beiträge
    6

    Problem mit Timer des Atmega32

    Anzeige

    Hallo zusammen,

    ich möchte mit einem Microcontroller (Atmega 32) eine IR-Led mit 36kHz anzusteuern. Dazu wollte ich einen Timer verwenden. Der Atmega 32 läuft mit dem internen 8Mhz Quarz.
    Timer0 ist ein 8 Bit Timer, zählt also von 0-255, und verzweigt beim Überlauf in das Unterprogramm. Bei einem Prescaler von 1 wird das Unterprogramm also 31 250 mal pro Sekunde aufgerufen. Damit das Unterprogramm mit 72 000 Hz aufgerufen wird, muss der Timer also schon bei 145 starten. (8 000 000/ 111 = 72 072 256-111= 145) Im Unterprogramm wird dann der Zustand des Ausgangs zwischen low und high geändert und die Led sollte mit 36khz blinken.
    Stimmt das soweit oder habe ich schon hier ein Verständnisproblem?
    In Bascom habe ich das angefügte Programm geschrieben, allerdings messe ich jetzt mit einem Multimeter zwischen dem Pin D.5 und Masse des Atmega eine Frequenz von 23,4 khz. Wo liegt hierbei das Problem ? Oder hat mein Multimeter einfach eine "Macke" ?
    An einem Atmega 8 habe ich das gleiche Problem, dieser läuft mit einem externen 8Mhz Quarz.

    $regfile = "m32def.dat"
    $crystal = 8000000
    $framesize = 32
    $swstack = 32
    $hwstack = 32

    Config Portd.5 = Output

    Config Timer0 = Timer , Prescale = 1
    Enable Timer0
    On Timer0 Isr_von_timer0 '
    Enable Interrupts
    Timer0 = 145

    Do
    '....Hauptprogramm
    Loop
    End

    Isr_von_timer0:
    Timer0 = 145
    Toggle Portd.5

    Return

    Ich hoffe ihr könnt mir weiterhelfen.
    Im Voraus schon mal danke für eure Mühe:)
    Alexj96

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.02.2006
    Beiträge
    1.112
    Hallo Alexj96,
    eine solch hohe Frequenz wirst du mit einer 8MHz Taktfrequenz nicht per Interrupt schaffen.
    Dazu dauert die Register Speicherung und das Zurückladen viel zu lange.
    Es wäre auch sowieso nicht der richtige Ansatz um eine IR LED anzusteuern. Du musst ja auch noch Zeit haben, aufgrund der Daten den Timer an und auszuschalten.
    Dafür ist der CTC Modus besser geeignet:
    Config Portb.3 = Output
    Config Timer0 = Timer , Prescale = 1 , Clear_timer = 1 , Compare = Toggle
    Ocr0 = 110

    oder für PortD.5 mit Timer1:
    Config PortD.5= Output
    Config Timer1 = Timer , Prescale = 1 , Clear_timer = 1 , Compare A = Toggle
    Ocr1a = 110

    Beides ergibt recht genau 36KHz. Du erzeugst damit die Frequenz komplett in Hardware, also ohne eine Zeile Code zu verbrauchen. Jetzt kannst du dich darum kümmern, per Software den Timer ein und auszuschalten.

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    18.11.2012
    Beiträge
    6
    Vielen Dank for_ro, du hast mir sehr weitergeholfen, ich werde es morgen ausprobieren (:
    Jetzt habe ich auch den Artikel im RN-Wissen gefunden (:

    PS: Allerdings möchte ich die Led erst einmal nicht benutzen um Daten zu senden, sondern um einen "Leitstrahl" aufzubauen, mit dem ein Roboter seinen Weg zur Ladestation finden soll.

Ähnliche Themen

  1. Problem mit Timer
    Von Skynet im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 16
    Letzter Beitrag: 08.09.2011, 08:30
  2. Problem mit Timer
    Von MechMac im Forum C - Programmierung (GCC u.a.)
    Antworten: 6
    Letzter Beitrag: 29.08.2010, 13:48
  3. Ersatz des atmega8 mit einem atmega32
    Von inka im Forum Asuro
    Antworten: 102
    Letzter Beitrag: 24.01.2008, 15:00
  4. Speicherplatz des ATmega32 + Display an ATmega32
    Von Rob.Anfänger im Forum AVR Hardwarethemen
    Antworten: 6
    Letzter Beitrag: 19.11.2006, 02:59
  5. Problem mit Timer
    Von The Man im Forum C-Control II
    Antworten: 0
    Letzter Beitrag: 18.07.2006, 19:11

Stichworte

Berechtigungen

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