- 3D-Druck Einstieg und Tipps         
Ergebnis 1 bis 10 von 15

Thema: ATMega16 und Timer Verständnisproblem

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    09.07.2006
    Ort
    Schönstedt
    Alter
    39
    Beiträge
    20
    Hallo Leute,
    nach dem sich teslanikola sich bereit erklärt gestern seinen Nachmittag zu opfern, konnte mein Problem gelöst werden. Die Codes die ich oben gepostet habe, haben nicht viel mit einem normalen Timer zu tun, da sie mehr für PWM gedacht sind.

    Ich danke allen die sich bei der Lösung des Problems beteiligt haben, aber vor allem teslanikola

    Ich hoffe den Code den ich anhänge kann jedem Helfen, der auch mit den Gleichen Problemen zu kämpfen hat wie ich

    Code:
     ;-------------------------------------------------------------
     ;--                                                         --
     ;--  Assembler-Code für einen 16Bit-Timer für den ATMega16  --
     ;--                                                         --
     ;--  dieser Timer ist für eine Taktfrequenz von 1MHz        --
     ;--  ausgelegt ( interne Taktung des ATMega16 )             --
     ;--                                                         --
     ;-------------------------------------------------------------
     
     .include"m16def.inc"			; Einbinden der Definitionsdatei
    
    .def   tmp   = r16				; Festlegen des Arbeitsregisters
    .equ   Timervorgabewert = 49911 ; Festlegung des Timervorgabewertes
    
    .list
       	rjmp   init
       	.org   OVF1addr 
       	rjmp   Timerinterrupt
       
    
    
    ;-- Initalisierung ------------------------
    init:
      	ldi   tmp, 0xFF
       	out   ddrb, tmp
    
       	ldi   tmp, high( ramend )
       	out   sph, tmp
       	ldi   tmp, low( ramend )
       	out   spl, tmp
    
       	ldi   tmp, 1<<CS11^1<<CS10 	; Festlegen des Teilers 64
       	out   TCCR1B, tmp
    	ldi   tmp, high( Timervorgabewert ) 	;Festlegen des Timervorgabewertes
       	out   tcnt1h, tmp
       	ldi   tmp, low( Timervorgabewert ) 		;Festlegen des Timervorgabewertes
       	out   tcnt1l, tmp
    
       	ldi   tmp, 1<<TOIE1
       	out   TIMSK, tmp
    
    	ldi tmp, 0x00
        out DDRD, tmp
    
       	sei
    
    ;-- Hauptroutine ----------------
    main: rjmp main					; Hauptroutine ausgeführt als Endlosschleife
    
    
    ;-- Timerinterruptroutine -------
    Timerinterrupt:
    	
    	;-- Erneute wertübergabe dan den Timer
    	ldi   tmp, high( Timervorgabewert ) ;Festlegen des Timervorgabewertes
       	out   tcnt1h, tmp
       	ldi   tmp, low( Timervorgabewert ) ;Festlegen des Timervorgabewertes
       	out   tcnt1l, tmp
    	;---
    	
    
    	;---------------------------------------
    	;-- Hier kommt das rein was durch den --
    	;-- Timer ausgelöster werden soll     --
    	;---------------------------------------
    		;-- Beispiel: Veränderung einer LED
    		sbis PinB,0
    		rjmp SetLED
    		rjmp ResLED
    		;---
    	;---------------------------------------
    
    
    ;-- Unterroutinen für die LED-Veränderung --
    ;-- Pin Setzen -----------------
    SetLED:
    	sbi PORTB,0
    	reti
    
    ;-- Pin Rücksetzen -------------
    ResLED:
    	cbi PORTB,0
    	reti
    mfG Tim
    Angehängte Dateien Angehängte Dateien

Berechtigungen

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

Labornetzteil AliExpress