- 3D-Druck Einstieg und Tipps         
Ergebnis 1 bis 2 von 2

Thema: 1 Sek. Verzögerung in Assembler für ATTiny15 ???

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Benutzer Stammmitglied
    Registriert seit
    18.08.2005
    Beiträge
    86

    1 Sek. Verzögerung in Assembler für ATTiny15 ???

    Hallo zusammen,

    ich bin blutjunger Anfänger auf dem Gebiet der AVR-Programmierung in Assembler.

    Deshalb habe ich auch folgendes Problem ;o)

    Ich habe ein Prg. (vielen Dank an alle Teilnehmer der Foren) erstellt. Wenn der Komparator nun schaltet, wird dei Interrupt ANA_COMP ($007) gesetzt.
    Soweit sogut!

    Nun soll die Routine "Delay" das Singal am Port B2 um eine Sek. z.b. verzögern. Es können aber auch 892,5ms sein, es geht hier nicht um genaue Werte.

    Da schwierige ist, das Port B2 retriggerbar sein soll.
    Also, wenn der Interrupt das "Delay" auslöst und es kommt während der Delayzeit erneut ein Interrupt, dann soll die Zeit neu gestartet werden.

    Ein retriggerbares Monoflop also.
    Ich habe diese Frage auch in ein weiteres Forum gesetzt, denn ich muss mich langsam mit der Umsetzung des Problems beeilen. Sitze nun bald schon 24 Stunden an dieser einen Sache.

    Wäre net, wenn mir bitte jemand helfen könnte.

    Danke im Voraus und Grüße

    popi

    Code:
    .include "tn15def.inc"       ; Definitionsdatei einbinden
    
    rjmp Init
    .org $007 					;ana_comp vector adres
    rjmp ANA_COMP 				;interrupt handler
    
    
    Init:
    		ldi r16,0b00001011
    		nop
    		nop
    		out ACSR,r16		;analogue comp interrupt enable
    		sei 				;global interrupt enable
    
    Main:	ldi r16, 0x00    	; 0b11111100 in r16 laden
    		out PORTB, r16      ; r16 ins IO-Register PORTB ausgeben
     		;reti
    		rjmp Main			; Sprung zur Marke "ende" -> Endlosschleife
    
    ANA_COMP:
    		ldi r16, 0x04       ; 0xFF ins Arbeitsregister r16 laden
    		out DDRB, r16       ; Inhalt von r16 ins IO-Register DDRB ausgeben
    		ldi r16, 0x04    	; 0x04 in r16 laden
    		out PORTB, r16   	; r16 ins IO-Register PORTB ausgeben
    		ldi r17, 0xff		; r17 auf 255 für Delay setzen
    		rcall Delay
    		ldi r16, 0x00    	; 0b11111100 in r16 laden
    		out PORTB, r16      ; r16 ins IO-Register PORTB ausgeben
     		reti
    
    Delay:
    		dec r17				; Vermindert Inhalt in r17 um 1
    		brne Delay  		; Sprung nur, wenn r17 nun nicht 0 ist.
    		ret
    <pre> pre ist gut gemeint. Im Forum aber bitte "code" (PicNick) </pre>

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    06.02.2005
    Ort
    Hamburg
    Alter
    38
    Beiträge
    4.255
    Hast du noch einem Timer frei? Dann könntest du dessem Zählregister im Analog-Int so vorladen, dass er nach eine Sekunde überläuft und seinerseits einen Interrupt auslöst (wo dann der Port gesetzt und der Tiemr gestoppt wird). Und wenn während dieser Sekunde eine neuer Analog-Int reinkommt, wird der Timer wieder neu gestartet und läuft wieder eine Sekunde lang durch...

Berechtigungen

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

Labornetzteil AliExpress