- 3D-Druck Einstieg und Tipps         
Seite 20 von 53 ErsteErste ... 10181920212230 ... LetzteLetzte
Ergebnis 191 bis 200 von 524

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

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

    E-Bike
    Ach shit, sry
    *selbst ne Ohrfeige geb* So, nu bin ich wieder da. Also Ton kommt erstmal. Nun werd ich mal eine LED am anderen Pin mit einem weiteren Timer zum blinken bringen.

  2. #192
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.05.2005
    Ort
    Issum
    Alter
    53
    Beiträge
    2.236
    sbis PINB, Summer ;überspringe, wenn B.2 = 0 ist
    cbi PORTB, Summer ;wenn B.2 = 1 ist, dann auf 0 setzen
    sbic PINB, Summer ;überspringe, wenn B.2 = 1 ist
    sbi PORTB, Summer ;wenn B.2 = 0 ist, dann auf 1 setzen

    ldi tmp, time0_1 ;Hier wird der Timer vorgeladen
    out TCNT0, tmp
    out SREG, statusreg ;SREG wiederholen
    reti ;wieder zurück, wo du hergekommen bist
    schaue mal hier:
    Code:
    sbis PINB, Summer  
    rjmp umschalten1
    cbi PORTB,Summer
    rjmp umschalten2
    umschalten1:
    sbi PORTB,Sumer
    umschalten2:
    ldi tmp, time0_1    
       out TCNT0, tmp
       out SREG, statusreg  
    reti
    Ich finde das besser...

  3. #193
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.05.2005
    Ort
    Issum
    Alter
    53
    Beiträge
    2.236
    Thomas, nicht weinen!

    Du darfst Dich nicht unterdruck setzen!
    Immer cool bleiben, und langsam,
    keiner will hier in einer Woche einen Profi aus Dir machen!
    Leute studieren um das zu verstehen, wir machen das nur, weil es uns
    Spaß macht, und es soll auch so bleiben!!!

    So, Nase Putzen und Tränen wegwischen!!!




  4. #194
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    29.07.2005
    Ort
    Berlin
    Alter
    40
    Beiträge
    289
    Dein Code gefällt mir auch besser
    Mir fehlt einfach noch die Routine, in Assembler zu programmieren. Also die ganze Logik dahinter, aber das kommt ja mit der Zeit dann.

  5. #195
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.05.2005
    Ort
    Issum
    Alter
    53
    Beiträge
    2.236
    Mir fehlt einfach noch die Routine, in Assembler zu programmieren
    Und die bekommst Du, nur wenn Du programmierst!

  6. #196
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    29.07.2005
    Ort
    Berlin
    Alter
    40
    Beiträge
    289
    \/
    Habs nu hinbekommen. Also die "Teilaufgabe". Es piept und die LED blinkt im Sekundentakt:
    Code:
    .include "m8def.inc"
    
    .equ time0_1 = 256-2			;Damit wird der Timer0 vorgeladen
    .equ time2 = 256-90				;Damit wird der Timer2 vorgeladen
    .equ Summer = PB2				;Summer an B.2
    .equ LED = PB5					;LED an B.5
    .def tmp = r16					;Mein Universallregister
    .def statusreg = r17			;Mein Statusregister
    .def zaehlerLED = r18			;Mein Zählregister
    
    .org 0x000
    	rjmp reset					;Interruptvektor "reset:"
    
    .org OVF2addr
    	rjmp timerLED
    
    .org OVF0addr
    	rjmp timerSummer			;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, Summer				;B.2 als Ausgang
    	sbi DDRB, LED					;B.5 als Ausgang
    	sbi PORTB, Summer				;B.2 auf HIGH stellen
    	sbi PORTB, LED					;B.5 auf HIGH stellen
    
    	ldi zaehlerLED, 0b00000000			;Zähler auf 0 setzen
    
    	;Timer Register werden belegt, hier Timer 0
    	ldi tmp, (1<<CS02)				;Prescaler ist 512
    	out TCCR0, tmp					;Register TCCR0 ist für den Prescaller zuständig
    	ldi tmp, time0_1				;Hier wird der Timer vorgeladen
    	out TCNT0, tmp
    
    	;Timer Register werden belegt, hier Timer 2
    	ldi tmp, (1<<CS22) | (1<<CS21) | (1<<CS20) ;Prescaler ist 1024
    	out TCCR2, tmp					;Register TCRR2 ist für den Prescaller zuständig
    	ldi tmp, time2					;Hier wird der Timer vorgeladen
    	out TCNT2, tmp
    
    	ldi tmp, (1<<TOIE0) | (1<<TOIE2);Hier werden Interrupts nach Timer0 Überlauf eingeschaltet
    	out TIMSK, tmp					;Register TIMSK ist dafür zuständig
    
    	sei								;Interrupts zulassen
    
    loop:
    	cpi zaehlerLED, 0b00101000	;Wenn Zählerregister != 40 ist
    	breq pruefLED				;dann zu "pruefLED:" springen
    	rjmp loop					;immer wieder zu "loop:" springen
    
    pruefLED:
    	clr zaehlerLED				;Zählerregister auf 0 setzen
    	sbis PORTB, LED				;überspring, wenn B.5 = 1 ist
    	rjmp umschaltenLED			;wenn B.5 = 0 ist, dann spring zu "umschaltenLED:"
    	cbi PORTB, LED				;wenn B.5 = 1 ist, dann B.2 auf 0 setzen
    	rjmp loop					;wieder zurück zu "loop:"
    
    umschaltenLED:
    	sbi PORTB, LED				;wenn B.5 = 0 ist, dann auf 1 setzen
    	rjmp loop					;wieder zurück zu "loop:"
    
    timerSummer:
    	in statusreg, SREG			;SREG sichern
    
    	sbis PINB, Summer			;überspringe, wenn B.2 = 1 ist
    	rjmp umschaltenSummer1		;wenn B.2 = 0 ist, dann spring zu "umschalten1:"
    	cbi PORTB, Summer			;wenn B.2 = 1 ist, dann B.2 auf 0 setzen
    	rjmp umschaltenSummer2		;zu "umschalten2:" springen
    
    umschaltenSummer1:
    	sbi PORTB, Summer			;wenn B.2 = 0 ist, dann auf 1 setzen
    
    umschaltenSummer2:
    	ldi tmp, time0_1			;Hier wird der Timer vorgeladen
    	out TCNT0, tmp
    	out SREG, statusreg			;SREG wiederholen
    	reti						;wieder zurück, wo du hergekommen bist
    
    timerLED:
    	in statusreg, SREG			;SREG sichern
    	inc zaehlerLED				;Zählerregister um 1 erhöhen
    	ldi tmp, time2				;Hier wird der Timer2 vorgeladen
    	out TCNT2, tmp
    	out SREG, statusreg			;SREG wiederholen
    	reti
    Nu werd ich erstmal was essen

  7. #197
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    01.11.2003
    Ort
    Freiburg im Breisgau
    Alter
    36
    Beiträge
    2.624
    Herzlichen Glückwunsch!

  8. #198
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.05.2005
    Ort
    Issum
    Alter
    53
    Beiträge
    2.236
    Na bravo, es sieht sehr ordentlich aus viel besser hätte man das nicht machen können.

    Jetzt hast Du 2 Timer die völlig unabhängig voneinander laufen, und vor allem 2 Interruptsroutinen!

    Und Du warst schon fast fertig mit den Nerven.
    Aber eins kannst Du mir glauben, es ging mir mal auch nicht besser.

    Und vor allem siehst Du jetzt daß du den PB2 sehr schnell hin und her schalten mußt,
    und nicht wie Du mal hattest PB2 auf 1 und fertig.

    Jetzt gilt es die beiden Timer irgendwie miteinander zu Verknüpfen !

    Da wir jetzt ganz kleine Schritte gehen wollen, benutzen wir die LED um zu schauen, ob Sekunde um ist oder nicht.

    als erstes weise am Anfang die andere Frequenz zu, wie war das nochmal?
    .equ Timer0_2 = 256 -4 ? kannst mich als faul bezeichnen, aber ich habe keine Lust jetzt nachzuschauen.

    als nächstes gehst Du in Deine timerSummer Routine und zwar zum Label timerSummer2:

    dort schauen wir erstmal nach ob die LED an ist:
    Code:
    sbis PORTB,LED
    rjmp timerSummer3 ;wenn aus gehen wir nach timerSummer3
     ldi tmp, time0_1         ;Hier wird der Timer für 1KHZ geladen??? 
     out TCNT0, tmp 
    rjmp timerSummer4
    timerSummer3:
     ldi tmp, time0_2         ;Hier wird der Timer für 4KHZ geladen??? 
     out TCNT0, tmp
    timerSummer4:
     out SREG, statusreg         ;SREG wiederholen
    reti
    So ich habe es nicht ausprobiert, es müßte aber gehen (hoffe ich)

    Einfach oder?
    Ich hoffe, Du kannst nachvollziehen, warum wir gerade an dieser Stelle nachschauen,
    ob die Sekunde um ist.

    Probiere es so aus, ich bin selber gespannt.

    Gruß Sebastian

  9. #199
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    29.07.2005
    Ort
    Berlin
    Alter
    40
    Beiträge
    289
    Das funktioniert ja wunderbar Und das beste, hab alles verstanden
    Hab den Timer2 (für die LED) mal auf 0,5 Sekunden gestellt, nun hört sich das an wie eine Polizeisirene *gg*
    Ich hoffe, Du kannst nachvollziehen, warum wir gerade an dieser Stelle nachschauen,
    ob die Sekunde um ist.
    Ich kann es mir denken. Denn bei timerSummer2 sind die letzten Schritte, bis der Timer vom Summer wieder von vorn anfängt zu zählen. Sonst wär es denk ich nicht genau synchron mit der LED, oder?

    Gruß
    Thomas

    [edit]
    Irgendwie nerven die Töne meine Freundin *gg* Musste deshalb leider auf niedrigere Frequenzen umsteigen *gg*
    Nun hab ich nen Polizeitauto *freu wie ein kleines Kind* \/ *g*

  10. #200
    Neuer Benutzer Öfters hier
    Registriert seit
    04.08.2005
    Beiträge
    22
    Nacht,

    die Sierene habe ich jetzt auch hingekriegt.
    Nun habe ich einen Polizei-Asuro

    Musste den Summer aber gegen GND anschliessen.

    Anbei meine Version der Lösung.
    Es macht echt Spaß mit dem Assembler zu programmieren!

    Best wishes
    Angehängte Dateien Angehängte Dateien

Seite 20 von 53 ErsteErste ... 10181920212230 ... LetzteLetzte

Berechtigungen

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

LiFePO4 Speicher Test