- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 15 von 15

Thema: ATMega16 und Timer Verständnisproblem

  1. #11
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    19.02.2005
    Alter
    36
    Beiträge
    470
    Anzeige

    Praxistest und DIY Projekte
    Und du hast vergessen das, wenn der Timer Hochgezäht hat wieder von 0 anfängt und nicht mehr bei 34286 , das muss der aber wissen, also schreib die Timervorgabe nochmals in die Interruptroutine, dann müsstes passen

  2. #12
    Neuer Benutzer Öfters hier
    Registriert seit
    09.07.2006
    Ort
    Schönstedt
    Alter
    38
    Beiträge
    20
    Ich hab es jetzt mal so gemacht wie teslanikola vorgeschlagen hat und hab dem Timer die Werte nocheinmal übergeben. Aber es hat sich leider nicht geändert, die Sekunde ist immer noch zu lang.

    Code:
     .include"m16def.inc"
    
    
    .def   isreg   = r15
    .def   wr0   = r16
    .def   iwr0   = r17
    .def   prescaler = r18
    .def   second = r19
    
    
    .list
       rjmp   init
       .org   OC1Aaddr
       rjmp   Timerinterrupt
    
    
    Timerinterrupt:
    
    	ldi   wr0, 1<<WGM12^1<<CS12 ; Festlegen des Teilers 265
       	out   TCCR1B, wr0
       	ldi   wr0, high( 34286 ) ;Festlegen des Timervorgabewertes
       	out   ocr1ah, wr0
       	ldi   wr0, low( 34286 ) ;Festlegen des Timervorgabewertes
       	out   ocr1al, wr0
       	out   tcnt1l, wr0
    
       	inc   second
       	reti
    
    init:
       ldi   wr0, 0xFF
       out   ddrb, wr0
    
       ldi   wr0, high( ramend )
       out   sph, wr0
       ldi   wr0, low( ramend )
       out   spl, wr0
    
       ldi   wr0, 1<<WGM12^1<<CS12 ; Festlegen des Teilers 265
       out   TCCR1B, wr0
    
       ldi   wr0, high( 34286 ) ;Festlegen des Timervorgabewertes
       out   ocr1ah, wr0
       ldi   wr0, low( 34286 ) ;Festlegen des Timervorgabewertes
       out   ocr1al, wr0
       out   tcnt1l, wr0
    
       ldi   wr0, 1<<OCIE1A
       out   TIMSK, wr0
       sei
    
    main:
       ldi   second, 0
    
    _mai1:
       cpi   second, 60
       breq   main
       out   PORTB, second
       rjmp   _mai1

    @Michael
    Mit dem was du geschrieben hast, kann ich leider nichts anfangen. Kannst du mir erklären was du meinst?

  3. #13
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    19.02.2005
    Alter
    36
    Beiträge
    470
    teste mal nur ob die Interrupt zeitig aufgerufen wird und lass das MAIN mal wech, der interrupt müsste jede sekunde kommen, dh wenn du ne LED blinken läst blinkt die 1 mal in 2 sek ( 1sec an 1 sec aus )

    PS haste ICQ? wen ja Suche nach XXXXXXXXXXXXXXXXX, das bin ich und komm online

  4. #14
    Neuer Benutzer Öfters hier
    Registriert seit
    09.07.2006
    Ort
    Schönstedt
    Alter
    38
    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

  5. #15
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    19.02.2005
    Alter
    36
    Beiträge
    470
    Bitte bitte, ich findes wichtig ASM-Anfängern zu helfen obwohl ich selbst no Anfänger bin, ASM ist fürn anfang etwas gewöhnungsbedürftig, aber eine der besten Sprachen ever!

Seite 2 von 2 ErsteErste 12

Berechtigungen

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

Labornetzteil AliExpress