- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Seite 47 von 53 ErsteErste ... 374546474849 ... LetzteLetzte
Ergebnis 461 bis 470 von 524

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

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

    E-Bike
    @Sebastian: Das weiß ich ja eben nicht genau, hab nochmal genau untersucht. Also es kam auch vor, dass ich länger gewartet habe (halbe Minute) und das es dann trotzdem nicht ging, also die rote LED leuchtet dann einfach.
    je länger ich warte, desto wahrscheinlicher ist es, dass es dann wieder funktioniert.
    Denkst du, dass an meinem Board etwas kaputt ist?

    Gruß
    Thomas

  2. #462
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    30.09.2004
    Ort
    In der Nähe von Esslingen am Neckar
    Beiträge
    706
    Hi,
    freut mich auch dass ich es verstanden habe!! Es was einfacher als ich dachte!! Stimmt das jetzt auch was ich da geschrieben habe? Was glaub ich mein Problem war: Ich dachte der Ausdruck (tonleiter1 * 2) wird von Byte zu Byte größer was ja eben falsch ist! Ich denk mal ihr benutzt den Ausdruck damit man später nur daten_laenge verändern und nicht überall im Code wo ldi tmp, LOW ((tonleiter1 * 2) + daten_laenge) und ldi tmp, HIGH ((tonleiter1 * 2) + daten_laenge) vorkommt! Assembler macht langsam echt Spaß! Damit lernt man echt was über den Controller! Und nicht solche Highlevel Befehle wie bei Bascom!
    Gruß Michi

  3. #463
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.05.2005
    Ort
    Issum
    Alter
    53
    Beiträge
    2.236
    Hmmm, hört sich komisch an, ich hab mir das Myavr Board angeguckt, finde die Resetbeschaltung etwas komisch ohne Pullup Widerstand einfach an dem Parport....
    oder habe ich da was an den Augen ?
    Was ich tippe, daß da noch ein Kondensator geladen ist, und der Mega weiterhin läuft.
    Ich würde mal folgendes versuchen:
    1 Stück Draht und wenn der Stecker gezogen ist !!!!! einfach die zwei Anschlüße von C6
    kurzschließen, vielleicht hilft das.
    Aber ich übernehme keine Haftung, wenn was ist!

  4. #464
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    29.07.2005
    Ort
    Berlin
    Alter
    40
    Beiträge
    289
    Aber glaub gar nicht, dass wir schon am Ende sind So wie ich das sehe, gibt es noch sooooooooooo viele Befehle *g*

    Gruß
    Thomas

  5. #465
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.05.2005
    Ort
    Issum
    Alter
    53
    Beiträge
    2.236
    freut mich auch dass ich es verstanden habe!! Es was einfacher als ich dachte!! Stimmt das jetzt auch was ich da geschrieben habe? Was glaub ich mein Problem war: Ich dachte der Ausdruck (tonleiter1 * 2) wird von Byte zu Byte größer was ja eben falsch ist!
    nein der Bleibt konstant, das einzigste was sich verändert ist der Z zeiger, aber nur nach adiw oder sbiw !

    Assembler macht langsam echt Spaß! Damit lernt man echt was über den Controller! Und nicht solche Highlevel Befehle wie bei Bascom!
    Da hast Du recht, man muß sich aber vor den Augen halten, welche Leistung die
    Bascom Entwickler erbracht haben, damit aus einem Eizeiler, Maschinencode entsteht.

    Es ist auch manchmal ganz nützlich über den Tellerrand zu schauen!

    Gruß Sebastian

  6. #466
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    29.07.2005
    Ort
    Berlin
    Alter
    40
    Beiträge
    289
    Zitat Zitat von izaseba
    Ich würde mal folgendes versuchen:
    1 Stück Draht und wenn der Stecker gezogen ist !!!!! einfach die zwei Anschlüße von C6
    kurzschließen, vielleicht hilft das.
    Aber ich übernehme keine Haftung, wenn was ist!
    Ich hab bei PortC eh nur von 0 - 5. Wüsste also eh nicht, welche ich da genau verbinden soll. Ich denk, ich lass das lieber, nicht dass da wirklich noch was kaputt geht, dann wende ich mich lieber gleich an den Support, dann sind die wenigstens schuld und ich bekomm nen neues, falls es kaputt geht
    Kann man das denn vlt. irgendwie Softwaremäßig lösen?
    Komisch ist ja auch, dass es nicht bei jedem Programm ist.

    Gruß
    Thomas

  7. #467
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.05.2005
    Ort
    Issum
    Alter
    53
    Beiträge
    2.236
    Ich hab bei PortC eh nur von 0 - 5
    ich meinte eigentlich Kondensator 6 und nicht PortC
    dann lass das wirklich lieber, und frag bei Myavr nach, ich schaue mir das Programm von Dir an.

    P.S. bei einem Lauflicht sind die Befehle lsl register, lsr register, rol register, ror register, vielleicht noch swap register sehr nützlich, schade daß Du nur 3 LED's hast.

    Schaue Dir die Befehle an und dann wirst Du sehen, wie einfach ein Lauflicht gemacht wird,
    also sim an,ein register mal mit 10101010 beladen, und schauen was passiert, andere Werte auch ausprobieren !

    Gruß Sebastian

    Edit: achja und schön SREG und Carry dabei beobachten !!!
    dann sagst Du uns hier was rol und ror machen

  8. #468
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    29.07.2005
    Ort
    Berlin
    Alter
    40
    Beiträge
    289
    Ok, hab grad ne mail an Support geschrieben, scheinen ja sehr nett zu sein
    Mal schaun, was dann als Antwort kommt. Die Befehle hab ich ja noch nie gehört, werd sie mir gleich anschauen, muss also meine Ampel noch ein wenig warten

    Gruß
    Thomas

  9. #469
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    29.07.2005
    Ort
    Berlin
    Alter
    40
    Beiträge
    289
    Hey, die Befehle gefallen mir
    Hab das nun auch gleich umgesetzt:
    Code:
    ;Dieses Programm produziert ein Lauflicht. Jede halbe Sekunde geht die
    ;nächste LED an.
    ;Das Programm läuft in einer Endlosschleife durch.
    .include "m8def.inc"
    
    .equ time1 = 65536-1800			;Damit wird der Timer1 vorgeladen, für die halbe Sekunde
    
    .def tmp = r16					;Mein Universallregister
    .def statusLED = r17			;In diesem Register wird gespeichert, welche LED gerade leuchtet
    
    .org 0x000
    	rjmp reset					;Interruptvektor "reset:"
    
    .org OVF0addr
    	rjmp hSekEnde				;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
    
    	ldi tmp, 0b11111111
    	out DDRB, tmp					;PortB als Ausgang
    	ldi statusLED, 0b00000010
    	out PORTB, statusLED			;Am Anfang soll LED1 leuchten
    
    	;Timer Register für halbe Sekunde werden belegt, hier Timer1
    	ldi tmp, (1<<CS12) | (1<<CS10)	;Prescaler ist 1024
    	out TCCR1B, tmp
    	ldi tmp, HIGH(time1)			;Für den Timer1 (16Bit) benötigen
    	out	TCNT1H, tmp					;wir 2 Register, in denen wir den Wert
    	ldi tmp, LOW(time1)				;für die 1/2 speichern ->
    	out TCNT1L, tmp					;"TCNT1H" und TCNT2L"
    	ldi tmp, (1<<TOIE1)				;Hier werden Interrupts nach Timer1 Überlauf eingeschaltet
    	out TIMSK, tmp					;Register TIMSK ist dafür zuständig
    
    	sei								;Interrupts zulassen
    
    main:
    	rjmp main						;Immer wieder die main durchlaufen
    
    ;Jede halbe Sekunde wird geprüft, welche LED an ist und dementsprechen die
    ;nächste LED angemacht. Die aktuelle wird dabei natürlich ausgeschaltet
    hSekEnde:
    	push tmp						;tmp-Register auf Stack sichern
    	in tmp, SREG
    	push tmp						;SREG auf Stack sichern
    	;TIMER1 wird neu geladen
    	ldi tmp, HIGH(time1)	;Für den Timer1 (16Bit) benötigen
    	out	TCNT1H, tmp			;wir 2 Register, in denen wir den Wert
    	ldi tmp, LOW(time1)		;für die 1 Sekunde speichern ->
    	out TCNT1L, tmp			;"TCNT1H" und TCNT2L"
    		cpi statusLED, 0b00001000	;Leuchtet die 3. LED?
    		breq wiederholen			;Wenn JA...
    		lsl statusLED				;Wenn NEIN, Register "statusLED" mit 2 multiplizieren
    									;dadurch verschieben sich alle Bits um 1 nach link ->
    									;nächste LED blinkt
    		rjmp ende
    
    wiederholen:
    	ldi statusLED, 0b00000010		;Wieder erste LED leuchten lassen
    
    ende:
    	out PORTB, statusLED			;nächste LED leuchtet
    	pop tmp
    	out SREG, tmp					;SREG wiederherstellen
    	pop tmp							;tmp wiederherstellen
    	reti							;springe wieder dahin, wo du hergekommen bist
    Funktioniert alles wunderbar. Mit diesem Code hab ich auch nicht mehr das Problem, dass ab und zu das Lauflicht nicht mehr geht. Ich kann das Netzteil an und ausschalten wie ich will, das Lauflicht geht immer.
    Komisch naja...ich hab dem Support ja meinen Code mitgeschickt, vlt. ist ja daran doch was nicht in Ordnung.

    PS: Hab durch die neuen Befehle 8 Zeilen gespart Hört sich wenig an, aber bei Assembler muss man ja "sparsam" sein

  10. #470
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.05.2005
    Ort
    Issum
    Alter
    53
    Beiträge
    2.236
    Assembler muss man ja "sparsam" sein




    Nebenbei hast Du auch gelernt, wie man Multiplikation und Division durch zwei im Assembler
    macht .

Seite 47 von 53 ErsteErste ... 374546474849 ... LetzteLetzte

Berechtigungen

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

LiFePO4 Speicher Test