- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Seite 31 von 53 ErsteErste ... 21293031323341 ... LetzteLetzte
Ergebnis 301 bis 310 von 524

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

  1. #301
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    30.09.2004
    Ort
    In der Nähe von Esslingen am Neckar
    Beiträge
    706
    Anzeige

    Praxistest und DIY Projekte
    Ok hex erstellt! Auf was klicke ich bei PonyProg?
    Gruß Michi

  2. #302
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    01.11.2003
    Ort
    Freiburg im Breisgau
    Alter
    36
    Beiträge
    2.624
    Lieber Michi!
    Schau mal bitte hier http://www.s-huehn.de !
    Ansonsten gibt es hier im Forum auch schon einiges dazu!


    *edit*
    Genauer http://s-huehn.de/elektronik/avr-prog/avr-prog.htm

  3. #303
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.05.2005
    Ort
    Issum
    Alter
    53
    Beiträge
    2.236
    War etwas schwierig zu erklären, aber eigentlich ist es ja nicht schwer! *lol*
    Das glaub ich Dir gerne!!!

    Hast Du zu meinem bisherigen Werk noch was zu ergänzen!?
    Eigentlich nicht, nur um den ganzen Streß mit cp cpc aus dem Weg zu gehen, hätte ich doch einen Nullterminierten String genommen.

    Und einen großen Nachteil, hat man ja auch, wenn man diese methode anwendet,
    man muß immer genau wissen, wieviele Zeichen man hat, aber das hat ja Thomas schon mal gesagt.

    Aber um den Umgang mit dem Z-Pointer zu zeigen wirklich gut.

    Gruß Sebastian

  4. #304
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    01.11.2003
    Ort
    Freiburg im Breisgau
    Alter
    36
    Beiträge
    2.624
    Hi Sebastian!
    Natürlich hätt's die Null-Variante auch getan, von mir aus könnten wir auch umsteigen, wenn's für euch verständlicher ist!?

    @ Thomas:
    Warum hast Du TCNT0 mit time0 255-90 vorgeladen?

  5. #305
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    30.09.2004
    Ort
    In der Nähe von Esslingen am Neckar
    Beiträge
    706
    Haaaaaaalllllllllloooo,
    juuuuuhuuuuuuuuu meine Led leuchtet!!!!!! Danke
    Gruß Michi

  6. #306
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.05.2005
    Ort
    Issum
    Alter
    53
    Beiträge
    2.236
    von mir aus könnten wir auch umsteigen
    Nein Florian, lass es so wie es ist, kann man später machen, aber so mittendrin alles umzuschmeißen ist nicht gut, glaube ich.

  7. #307
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    01.11.2003
    Ort
    Freiburg im Breisgau
    Alter
    36
    Beiträge
    2.624
    Hi Sebastian!
    Was würde man nur machen, wenn man einen Wert von 0 bräuchte?
    Dann wäre meine Möglichkeit besser, oder?

  8. #308
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.05.2005
    Ort
    Issum
    Alter
    53
    Beiträge
    2.236
    Was würde man nur machen, wenn man einen Wert von 0 bräuchte?
    Sicherlich, ich habe auch nicht gesagt, daß Deine Möglichkeit schlecht ist, es hängt alles davon ab was man machen will.

    So ist es gut, jetzt haben wir ja den Vergleichoperator kennengelernt.

    @Thomas,
    dieses 256 - 90 ist ja noch vom allem Programm geblieben ?
    Wir wollen keine Sekunde erzeugen.

  9. #309
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    29.07.2005
    Ort
    Berlin
    Alter
    40
    Beiträge
    289
    Zitat Zitat von Florian
    @ Thomas:
    Warum hast Du TCNT0 mit time0 255-90 vorgeladen?
    Weil ich den Prescaler nun auf 1024 habe und so besser auf eine Sekunde komme. Jede Sekunde soll er also nun den nächsten Ton laden. Hier der Code.
    Code:
    ;Programm
    ;CDurTonleiter rauf und runter spielen
    .include "m8def.inc"
    
    .def tmp = r16               	;Mein Universallregister
    .def zaehlerSek = r17			;Mein Zählregister
    .def zaehlerTon = r18			;Mein Zählregister, um zu prüfen, ob alle Töne geladen wurden
    .def lpm_reg = r0				;Mein lpm-Register
    
    .equ time0 = 256-90				;Damit wird der Timer0 vorgeladen
    .equ daten_laenge = 4			;Anzahl der Werte
    
    .org 0x000
       	rjmp reset					;Interruptvektor "reset:"
    
    .org OVF2addr
    	rjmp pruefSek				;Interruptvektor "ladeTon:"
    
    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
    
    	;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, time0				;Hier wird der Timer vorgeladen
    	out TCNT0, tmp
    	ldi tmp, (1<<TOIE0)			;Hier werden Interrupts nach Timer0 Überlauf eingeschaltet
    	out TIMSK, tmp				;Register TIMSK ist dafür zuständig
    
    	;Z-Register mit daten1 füllen
       	ldi ZH, HIGH(tonleiter1 * 2)
       	ldi ZL, LOW(tonleiter1 * 2)
    
    	ldi zaehlerSek, 0b00000000	;ZählerSek auf 0 setzen		
    
       	sei                    		;Interrupts zulassen
    
    main:
    	cpi zaehlerSek, 0b00010100	;wenn ZählerSek != 40 ist
    	brne main					;dann immer wieder zu "main:" springen
    
    pruefTonleiter:
    	clr zaehlerSek				;Zähler auf 0 setzen
    	cpi zaehlerTon, 0b11111111	;Wenn ZählerTon != 255 ist
    	brne ladeTon				;dann spring zu "ladeTon:"
    	rjmp main					;sonst wieder zurück zu "main:"
    
    pruefSek:
    	push tmp					;tmp sichern
    	in tmp, SREG				;SREG sichern
    	push tmp
    		inc zaehlerSek			;ZählerSek um 1 erhöhen
    		ldi tmp, time0			;Hier wird der Timer vorgeladen
    		out TCNT0, tmp
    	pop tmp						;SREG wiederholen
    	out SREG, tmp
    	pop tmp						;tmp wiederholen
    	reti						;wieder dahin, wo du hergekommen bist
    
    ladeton:
    	clr zaehlerSek				;Zähler wieder auf 0 setzen
    	lpm						;Daten von tonleiter1: holen
    	mov tmp, lpm_reg		;erstes Byte in tmp verschieben
    	adiw ZL,1				;Z um 1 erhöhen, nächstes Byte
    	ldi tmp, LOW  ((tonleiter1 * 2) + daten_laenge)	;vergleiche LOW-Byte
    	cp ZL, tmp
    	ldi tmp, HIGH ((tonleiter1 * 2) + daten_laenge) ;vergleiche HIGH-Byte
    	cpc ZH, tmp
    	breq endeTon			;springe zu "endeTon:", wenn letztes Byte ausgelesen
    	rjmp main				;wieder zurück zur "main:"
    
    endeTon:
    	ldi zaehlerTon, 0b11111111	;ZählerTon auf 255 setzen -> keine weiteren Wert
    								;mehr von "tonleiter1:" holen
    	rjmp main					;wieder zurück zu "main:"
    
    tonleiter1:
    	.db 28, 16, 14, 0			;Werte zum Vorladen des Timers für die Töne
    								;c', a' und c''
    Bitte auch prüfen, ob ich das Sichern von tmp und SREG über den Stack richtig gemacht habe, nicht das es hinterher daran liegt.
    Also das Programm macht nun folgendes:
    Er zählt hoch bis 1 Sekunde, dann prüft er, ob alle Töne schon geladen worden sind, wenn nicht, lädt er den nächsten Ton. Ist er beim letzten Ton angekommen, setzte er ein Register auf 255 und somit weiß ich dann, dass alle Töne geladen worden sind.

    Hoffe mal, das ist das was du wolltest

    Gruß
    Thomas

    [edit]
    Wir wollen keine Sekunde erzeugen? Aber wenn wir eine Tonleiter machen, dann muss doch irgendwo festgelegt sein, in welchem Abstand der neue Ton kommen soll, oder?

  10. #310
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    01.11.2003
    Ort
    Freiburg im Breisgau
    Alter
    36
    Beiträge
    2.624
    dieses 256 - 90 ist ja noch vom allem Programm geblieben ?
    Wir wollen keine Sekunde erzeugen.
    Achja!
    Gibt es schon ein Update?

Seite 31 von 53 ErsteErste ... 21293031323341 ... LetzteLetzte

Berechtigungen

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

Solar Speicher und Akkus Tests