- 3D-Druck Einstieg und Tipps         
Seite 8 von 53 ErsteErste ... 67891018 ... LetzteLetzte
Ergebnis 71 bis 80 von 524

Thema: Tutorial für alle Assembler-Anfänger _

  1. #71
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    29.07.2005
    Ort
    Berlin
    Alter
    40
    Beiträge
    289
    Anzeige

    E-Bike
    Ok, ist wirklich nicht viel. Aber wie bekomme ich denn raus, wie oft ich die 15,4 ms wiederholen muss, damit 1 Sekunde raus kommt. 65*15,4 = 1001. Wären also 1 Sekunde, aber das stimmt ja nicht.

    [edit]
    0,25 µs

  2. #72
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.05.2005
    Ort
    Issum
    Alter
    53
    Beiträge
    2.236
    Aber wie gesagt langsam, keiner will hier schnell was machen,
    Der Anfang wa echt super, lass Dich mit sowas nicht durcheinander bringen.

    Denke mal mit ->Interrupt-> zaehler +1 -> hab ich 65? -> nein -> lade timer neu -> raus aus den interrupt/ ->ja -> schaue nach ob led an/aus -> schalte sie um -> leere zaehler -> lade timer neu -> verlasse Interrupt

  3. #73
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    01.11.2003
    Ort
    Freiburg im Breisgau
    Alter
    36
    Beiträge
    2.624
    Hallo Sebastian!
    Sehr anschauliche Erklährung, sehr schön!

  4. #74
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    29.07.2005
    Ort
    Berlin
    Alter
    40
    Beiträge
    289
    Hmm...ich find das logisch. Seh da leider nirgends nen Logikfehler :/

  5. #75
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.05.2005
    Ort
    Issum
    Alter
    53
    Beiträge
    2.236
    Thomas, in meiner Erklärung oben habe ich was fett markiert......

  6. #76
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    01.11.2003
    Ort
    Freiburg im Breisgau
    Alter
    36
    Beiträge
    2.624
    So, ich muss dann mal gehn, zu na Party! ;o)
    Ich komme morgen dann wieder und schaue mir eure Fortschritte an! *g*

    Tschüss und viel Erfolg weiterhin!

  7. #77
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    29.07.2005
    Ort
    Berlin
    Alter
    40
    Beiträge
    289
    Ahh, haste geändert. Nun gut. Also den Timer lädt ja immer neu, wenn der Befehl "reti" kommt? Oder? Und er muss ja den Timer neuladen, wenn er das Interrupt auslöst, damit er dann wieder von 0 zählt.
    Versteh leider nicht, wo der Fehler ist

  8. #78
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.05.2005
    Ort
    Issum
    Alter
    53
    Beiträge
    2.236
    Thomas,
    Was ist Dein aktueller Code, das was oben steht?
    Wenn nicht, dann Poste mal das was Du jetzt hast, sonst reden wir aneinander vorbei.

    Gruß Sebastian

  9. #79
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    29.07.2005
    Ort
    Berlin
    Alter
    40
    Beiträge
    289
    Das hier ist mein aktueller Code:
    Code:
    .include "m8def.inc"
    
    .equ time = 255 -254		;Damit wird der Timer vorgeladen
    .equ sperre = 7
    .equ LED = PB2				;LED an B.2
    .def tmp = r16				;Mein Universallregister
    .def status = r17			;Mein Statusregister, ob LED an oder aus ist
    .def zaehler = r18			;Mein Zählregister
    
    .org 0x000
    	rjmp reset				;Interruptvektor "reset:"
    
    .org OVF0addr
    	rjmp pruefZaehler		;Interruptvektor für Timer0 Überlauf, hier springt
    							;das Programm hin, wenn der Timer überläuft
    
    reset:
    	;Stack einrichten
    	ldi tmp, HIGH(RAMEND)		;HIGH-Byte der obersten RAM-Adresse
    	out SPH, tmp
    	ldi tmp, LOW(RAMEND)		;LOW-Byte der obersten RAM-Adresse
    	out SPL, tmp
    
    	sbi DDRB, LED				;B.2 als Ausgang
    	cbi PORTB, LED				;B.2 auf LOW stellen -> LED aus am Anfang
    	cbr status, (1<<sperre)		;Statusregister r17.7 = 0 setzen (LED aus)
    
    	;Timer Register werden belegt, hier Timer 0
    	ldi tmp, (1<<CS02) | (1<<CS00)	;prescaler ist 1024
    	out TCCR0, tmp					;Register TCCR0 ist für den Prescaller zuständig
    	ldi tmp, (1<<TOIE0)				;Hier werden Interrupts nach Timer0 Überlauf eingeschaltet
    	out TIMSK, tmp					;Register TIMSK ist dafür zuständig
    	ldi tmp, time					;Hier wird der Timmer vorgelaen und zwar mit 255-254
    	out TCNT0, tmp					;Er läuft 254 mal durch, bevor ein Interrupt auftritt
    	sei								;Interrupts zulassen
    
    loop:
    	rjmp loop					;Immer wieder selbst aufrufen -> Endlosschleife
    
    pruefZaehler:
    	inc zaehler					;Zählregister um 1 erhöhen
    	cpi zaehler, 0b01000001		;Wenn Zählregister = 65 ist
    	breq zeitum					;spring zu "zeitum:" wenn zaehler = 65
    	reti
    
    zeitum:
    	clr zaehler					;Zählregister auf 0 setzen
    	push tmp					;Rette Universallregister
    	in tmp, SREG				;Rette Statusregister
    	push tmp
    	sbrs status, sperre			;überspringe, wenn r17.7 = 1 ist (LED an?)
    	rjmp zeitum0				;zu "zeitum0:" springen
    	sbrc status, sperre			;überspringe, wenn r17.7 = 0 ist (LED aus?)
    	rjmp zeitum1				;zu "zeitum1:" springen
    
    zeitum0:
    	sbr status, (1<<sperre)		;r17.7 = 1 setzen (LED an)
    	sbi PORTB, LED				;B.2 = 1 setzen -> LED an
    	rjmp zeitum2
    
    zeitum1:
    	cbr status, (1<<sperre)		;r17.7 = 0 setzen (LED aus)
    	cbi PORTB, LED				;B.2 auf 0 setzen -> LED aus
    	rjmp zeitum2
    
    zeitum2:
    	pop tmp						;stelle SREG wieder her
    	out SREG, tmp
    	pop tmp						;stelle Universalregister wieder her
    	reti						;die Interrupt-Routine wird verlassen
    								;und es wird weiter im Hauptprogramm gearbeitet
    Hab nur das "reti" vorhin eingefügt.

  10. #80
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.05.2005
    Ort
    Issum
    Alter
    53
    Beiträge
    2.236
    Der Fehler ist ganz einfach,
    Du mußt den Timer im Interrupt neu laden, sonst fängt er
    immer bei null an und nicht bei time also kurz vor reti den Timer
    neu laden, es ist auch schlecht, daß wir 2 retis hier haben, so ist es sehr unsauber,
    aber dazu kommen wir später, jetzt wollen wir eine sekunde haben!
    Du bist Dir 100% sicher daß Du 4 MHz quarz hast?

    Gruß Sebastian

    P.S.
    Die Aufgabe ist eigentlich schon gelöst weil unser Ziel ja war daß Du
    mit Interrupts und Timer arbeitest und das hast Du ja schon gelöst.

Seite 8 von 53 ErsteErste ... 67891018 ... LetzteLetzte

Berechtigungen

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

LiFePO4 Speicher Test