- fchao-Sinus-Wechselrichter AliExpress         
Seite 16 von 53 ErsteErste ... 6141516171826 ... LetzteLetzte
Ergebnis 151 bis 160 von 524

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

  1. #151
    Erfahrener Benutzer Robotik Einstein Avatar von SprinterSB
    Registriert seit
    09.06.2005
    Ort
    An der Saar
    Beiträge
    2.802
    Anzeige

    Powerstation Test
    @Florian:

    Bitte, bitte

    Ich hör auf 'Georg' und 'Johann', aber Johann ist ok.
    Vorerst wirst du mich eh nicht mehr ansprechen, denn ich bin ab morgen im Urlaub *freu*.
    Disclaimer: none. Sue me.

  2. #152
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    29.07.2005
    Ort
    Berlin
    Alter
    40
    Beiträge
    289
    Hmm..ich komm nicht klar Ich kann doch nicht 2mal das Register TIMSK belegen, dann laufen die Timer doch falsch. Ich muss ja für Timer0 UND für Timer2 das Register TIMSK beschreiben, aber dann läuft ja alles falsch.

  3. #153
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    01.11.2003
    Ort
    Freiburg im Breisgau
    Alter
    36
    Beiträge
    2.624
    Hallo Johann!
    Viel Spass im Urlaub! ;o)

    Hallo Thomas!
    Im Datenblatt findest Du eine Beschreibung der jeweiligen Timer!
    Dort steht dann z.B. auf Seite70 das:
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken timer0.jpg   timer0_139.jpg  

  4. #154
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    29.07.2005
    Ort
    Berlin
    Alter
    40
    Beiträge
    289
    Axo, ok, jetzt versteh ich, wie die 1024 zustande kommen.
    Und zum TIMSK: Überschreibt er das nicht? Also weiß der Controller von selbst, wo das hin soll?

    Und was ich grad getestet hab. Ich hab das letzte Programm genommen, wo die LED im Sekundentakt blinkt. Hab anstelle von Timer0 den Timer2 genommen, sonst nichts geändert, und dann blinkt die LED nimmer im Sekundentakt, sondern schneller. Also es gibt dann wohl doch einen Unterschied zwischen Timer0 und Timer2.

    Man ej, heut ist echt ein scheiß Tag, bekomm gar nichts hin... GEZ nervt, kein Geld und programmieren klappt heut auch nicht.

    [edit]
    Ahh, bei Timer2 muss der Prescaller anders gesetzt werden, da wolltet ihr mir wohl einen Streich spielen

    Aber mit dem TIMSK ist immer noch ein wenig komisch.
    Ok, TOIE0 = 0
    und TOIE2 = 6
    Also schreibt er ja wohl das richtige Bit auf 1. Aber trotzdem blinkt die LED nimmer, wenn ich den zweiten Timer auf TIMSK setze.

  5. #155
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    01.11.2003
    Ort
    Freiburg im Breisgau
    Alter
    36
    Beiträge
    2.624
    Hallo Thomas!
    Könntest Du Dir wieder angewöhnen die Codes bzw. Codesegmente zu posten!? ;o)
    Man ej, heut ist echt ein scheiß Tag, bekomm gar nichts hin... GEZ nervt, kein Geld und programmieren klappt heut auch nicht.
    Meine Güte, Du Armer, Du tust mir ja Leid! *schmunzel*
    Ja, ja, die liebe GEZ! ;o)
    Seit einer aus unserer Straße einen wegen Hausfriedensbruch angezeigt hat, kommt niemand mehr vorbei! *g* *ganz brav GEZ bezahl*

    Kleiner Vorschlag!
    Du versuchst mal Dir die Register im Datenblatt nzusehen, ich sage Dir die Seiten und Du sagst mir, wozu die ganzen Register gut sind, ok!? ;o)
    Ohne diese register kann man das ganze nicht umsetzen, außer man heißt Sebastian, der bekommt das auch so nebenbei hin! *g*

  6. #156
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    29.07.2005
    Ort
    Berlin
    Alter
    40
    Beiträge
    289
    Also ich post einfach mal den ganzen Code erstmal:
    Code:
    .include "m8def.inc"
    
    .equ time0_1 = 256-4		;Damit wird der Timer0 vorgeladen - für 1KHz
    .equ time0_2 = 256-1		;Damit wird der Timer0 vorgeladen - für 4KHz
    .equ time2 = 256-90			;Damit wird der Timer2 vorgeladen
    .equ Summer = PB2			;Summer an B.2
    .def tmp = r16				;Mein Universallregister
    .def statusreg = r17		;Mein Statusregister
    .def zaehler = r18			;Mein Zählregister
    
    .org 0x000
    	rjmp reset				;Interruptvektor "reset:"
    
    .org OVF2addr
    	rjmp pruefZaehler		;Interruptvektor für Timer2 Überlauf, hier spring
    							;das Programm hin, wenn der Timer überläuft
    
    .org OVF0addr
    	rjmp blabla
    
    
    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
    	cbi PORTB, Summer			;B.2 auf LOW stellen -> LED aus am Anfang
    
    	;Timer Register werden belegt, hier Timer 2
    	ldi tmp, (1<<CS22) | (1<<CS21) | (1<<CS20)	;Prescaler ist 1024
    	out TCCR2, tmp					;Register TCCR2 ist für den Prescaller zuständig
    	ldi tmp, (1<<TOIE2)				;Hier werden Interrupts nach Timer2 Überlauf eingeschaltet
    	out TIMSK, tmp					;Register TIMSK ist dafür zuständig
    	ldi tmp, time2					;Hier wird der Timer vorgeladen und zwar mit 255-90
    	out TCNT2, tmp
    
    	;Timer Register werden belegt, hier Timer0
    	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, time0_1				;Hier wird der Timer vorgeladen
    	out TCNT0, tmp
    	sei								;Interrupts zulassen
    
    loop:
    	cpi zaehler, 0b00101000		;Wenn Zählregister != 40 ist
    	brne loop					;dann spring wieder zurück zu "loop:"
    
    zeitum:
    	clr zaehler					;Zählregister auf 0 setzen
    	sbic PINB, Summer				;überspringe, wenn B.2 = 0 ist (LED aus?)
    	rjmp zeitum1				;wenn B.2 = 1, dann spring zu "zeitum1:"
    
    zeitum0:
    	sbi PORTB, Summer				;B.2 = 1 setzen -> LED an
    	rjmp loop					;wieder zur loop springen
    
    zeitum1:
    	cbi PORTB, Summer				;B.2 auf 0 setzen -> LED aus
    	rjmp loop					;wieder zur loop springen
    
    pruefZaehler:
    	in statusreg, SREG			;SREG sichern
    	inc zaehler					;Zählregister um 1 erhöhen
    	ldi tmp, time2				;Hier wird der Timer vorgelaen und zwar mit 255-90
    	out TCNT2, tmp				;Er läuft 90 mal durch, bevor ein Interrupt auftritt
    	out SREG, statusreg			;SREG wiederholen
    	reti						;wieder zurück, wo du hergekommen bist
    
    blabla:
    	in statusreg, SREG
    	ldi tmp, time0_1
    	out TCNT0, tmp
    	out SREG, statusreg
    	reti
    Hab zwar schon alles in Summer geändert, aber zum testen hab ich trotzdem erstmal noch an der LED angeschlossen. So, wie jetzt der Code ist, blinkt die LED gar nicht. Wenn ich allerdings das hier auskommentiere, dann gehts:
    Code:
    ;Timer Register werden belegt, hier Timer0
    	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, time0_1				;Hier wird der Timer vorgeladen
    	out TCNT0, tmp
    Und das will in mein kleine Köpfchen nicht rein

    Mit deinem Vorschlag bin ich zufrieden, aber ich bezweifle, dasses was bringt *g*

    Gruß
    Thomas

    PS: Sorry, dass mein letzter Post so durcheinander war

  7. #157
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    01.11.2003
    Ort
    Freiburg im Breisgau
    Alter
    36
    Beiträge
    2.624
    Hallo Thomas!
    Sei nicht unglücklich, das Leben geht weiter, wohl oder übel auch mit GEZ! ;o)

    Mir ist als erstes aufgefallen, dass Du zweimal das TIMSK mit ldi -> out füllst!
    Somit überschriebst Du ja das erste Mal befüllen!
    Probiers mal mit einmal ldi temp , (1 << TOIE0) | (1 << TOIE2) ; out TIMSK , temp ;
    Ansonsten hat das keinen Sinn!
    Ich hoffe Du hast verstanden, worum es geht!?

    Kleine Aufgabe:
    Wie könntest Du die beiden Bits trotzdem getrennt setzen?

  8. #158
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    29.07.2005
    Ort
    Berlin
    Alter
    40
    Beiträge
    289
    Aaaaaaaaaaaaaaaaahhhhhhhhhhhhhhhhhhhhh schmarn!
    Ich hasse diese Editierfunktion für Moderatoren! ;o)
    Ich habe versucht noch etwas zu retten! (siehe unten)

    Tschuldigung!
    Florian (Moderator)


    Huhu Florian! ;o)
    ... wenn man nicht weiß, wie man die Rechnung zahlen soll ...
    Genau das war mein Problem.

    Richtig?
    ldi tmp, (1<<TOIE0)
    out TIMSK, tep
    ldi tmp (1<<TOIE2)
    or TIMSK, tmp

  9. #159
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    01.11.2003
    Ort
    Freiburg im Breisgau
    Alter
    36
    Beiträge
    2.624
    Hi Thomas! ;o)
    Scheint Dir ja schon wieder besser zu gehn! *freu*
    wenn man nicht weiß, wie man die Rechnung zahlen soll
    Au, das ist natürlich mistig! :o( *s__t*
    Genau das war mein Problem.
    Na dann kanns ja weiter gehn! ;o)
    ldi tmp, (1<<TOIE0)
    out TIMSK, tep
    ldi tmp (1<<TOIE2)
    or TIMSK, tmp
    Tut mir Leid, aber selbst wenn ich die ganzen Fehler übersehe, funktioniert das nicht!
    TIMSK ist leider kein vergleichbares Register!
    Richtig?
    Nein! ;o)

    [ Auf diese and & Co. wollte ich garnicht zielen, schau mal in der Instruction Set Summary nach, da gibt es zwei schöne Befehle! ]

    *edit*:
    Nachdem ich Dir ausversehen Deinen Text gekillt habe, habe ich auch noch Mist erzählt, der Befehl funktioniert da ja nicht, da es außerhalb der Reichweite ist! *'tschuldigung*
    Heute ist wohl auch nicht mein Tag! :o(

  10. #160
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    29.07.2005
    Ort
    Berlin
    Alter
    40
    Beiträge
    289
    Mein schöner Beitrag? :P *g*

    Meinst du vlt. den Befehl sbr? Aber wenn du sagst, dass TIMSK kein Register ist, dann wird sbr wohl auch falsch sein. sbi isses aber auch nicht. Hmm, andere Befehle kamen für mich auch nicht in Frage.
    Aber wenn TIMSK ein vergleichbares Register wäre, würde es so mit "or" gehen, oder?

    [edit]
    Außerhalb welcher Reichweite?

Seite 16 von 53 ErsteErste ... 6141516171826 ... LetzteLetzte

Berechtigungen

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

12V Akku bauen