- 12V Akku mit 280 Ah bauen         
Seite 13 von 14 ErsteErste ... 311121314 LetzteLetzte
Ergebnis 121 bis 130 von 136

Thema: Anfänger mit STK500 und Assembler

  1. #121
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    08.12.2005
    Beiträge
    535
    Anzeige

    LiFePo4 Akku selber bauen - Video
    robo_wolf,

    ich vermute stark, dass Du es mit einer der AVR-Gemeinheiten zu tun hast, vor der ich Dich schon lange hätte warnen müssen:
    Code:
      adiw  xh:xl,KONSTANTE ; mit KONSTANTE >= 64
    geht nicht. Diese Anweisung kann Konstanten nur bis 63 verarbeiten. Um ENDADR auszurechnen musst Du eine reguläre 2-Byte-Addition benutzen .

    Ciao,

    mare_crisium

  2. #122
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    02.11.2005
    Ort
    Bayern
    Alter
    55
    Beiträge
    310
    mare_crisium,
    muss mich korrigieren...
    habe nun bei der Prozedur FIFO8_WRITE
    Code:
    FIFO8_WRITE:
    ....
    ;
    ; brge -> -64 = k = +63
    	mov yl,r17
    	mov yh,r18
    ;
    	sub yl,yh
    	clr yh		; 
        andi yl,0x3F ; ist nie groesser 63
    ; brge -> -64 = k = +63
        cp yh,yl
    	brge FIFO8_WR_EXIT	; Sprung, wenn FIFO voll ist
    ....
    diese Zeilen eingefuegt.
    Es gefaellt mir aber noch nicht so richtig.
    ### Silvio ###

  3. #123
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    08.12.2005
    Beiträge
    535
    robo_wolf,

    ich fürchte, in Deinem zweiten Posting hast Du Dich ein bisschen vergaloppiert . Dein erstes Posting (Heute, 14.05. um 09:30) bezieht sich auf Zeile 122 Deines Moduls "FIFO8.asm"
    Code:
    ...
    FIFO8_CREATE:
    ...
    ; FIFOkapazität speichern
    	std z+FIFO8_CTRL_CAP,r16	; Kapazität speichern
    ; WRADR und RDADR auf Anfang setzen; ANFADR und ENDADR in RAM schreiben
        mov xl,zl
    	mov xh,zh
    	adiw xh:xl,FIFO8_CTRL_LNG ; FIFO-Steuerung ueberspringen - auf erstes FIFO-Byte zeigen
        std z+FIFO8_CTRL_WRADR_LOW,xl
        std z+FIFO8_CTRL_WRADR_HIGH,xh
        std z+FIFO8_CTRL_RDADR_LOW,xl
        std z+FIFO8_CTRL_RDADR_HIGH,xh
    ;
        std z+FIFO8_CTRL_ANFADR_LOW,xl
        std z+FIFO8_CTRL_ANFADR_HIGH,xh
    ; !!! ACHTUNG:
        adiw xh:xl,FIFO8_CAP ; ENDADR berechnen
    
    ; Über diese Zeile beschwert sich der Assembler, wenn FIFO8_CAP
    ; grösser als 64 ist. Deshalb musst Du sie durch
       ldi r16,FIFO8_CAP
       add xl,r16
       clr r16
       adc xh,r16
    ; ersetzten. Dann klappt's auch mit Kapazitäten > 64. 
       ...
    Das Problem Deines zweiten Postings verstehe ich nicht. Natürlich darf FIFO_CAP grösser als 64 sein! Du musst nur zum Berechnen von ENDADR eine anderen Weg gehen (siehe oben) !

    Ciao,

    mare_crisium

  4. #124
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    02.11.2005
    Ort
    Bayern
    Alter
    55
    Beiträge
    310
    Guten Abend mare_crisium,
    ...der 2.Teil bezieht sich auch auf das Posting von 09:30
    >>>>
    brge FIFO8_WR_EXIT ; Sprung, wenn FIFO voll ist
    <<<<
    Auch hier trifft das Problem mit dem k > 64 zu.
    In der Version V02
    Code:
    ; prüfen, ob FIFO8 voll ist
    	ldd r17,z+FIFO8_CTRL_CAP ; FIFOzähler mit FIFOkapazität vergleichen
    	ldd r18,z+FIFO8_CTRL_ZHLR ; 
    
    /* KOMMENTAR_BEGINN!!!
    ...
    	cp r18,r17			; 
    ...
    hier stimmt was noch nicht. Das zweite Byte wird nicht mehr geschrieben.
    KOMMENTAR_ENDE !!!
    */
    	cp r18,r17			; 
    	brge FIFO8_WR_EXIT	; Sprung, wenn FIFO voll ist
    wenn FIFOkapazität(r17) >64 ist reagiert das Programm anders als wenn <64 ist.
    < 64 tut es wie gewuenscht und
    > 64 springt er gleich zu FIFO8_WR_EXIT:
    ### Silvio ###

  5. #125
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    08.12.2005
    Beiträge
    535
    robo_wolf,

    ich habe versucht, das Problem nachzuvollziehen, krieg's aber nicht hin . Sowohl in Deiner ersten Version (mit den notwendigen Korrekturen) als auch in der Version _V02 schreibt er klaglos in FIFOs mit Kapazität >64, bis sie voll sind. Ich nehme an, dass Du inzwischen in Deinem Programm kräftig umgebaut hast - musst den aktuellen Stand 'mal posten!

    Ciao,

    mare_crisium

  6. #126
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    02.11.2005
    Ort
    Bayern
    Alter
    55
    Beiträge
    310
    mare_crisium,
    bin ratlos...
    FIFO8_V02.asm ist unveraendert die Version von Dir.
    Bei LernPrgrm_FIFO_TEST_V02.asm habe ich doch nur die
    .equ FIFO_FROM_SERIAL_CAP = 211 anstatt die 23 geschrieben.
    Die anderen Aenderungen sind in einer V03 gemacht...
    Hier noch der Codeabschnitt....beim Aufruf von FIFO8_WRITE.
    Ist FIFO_FROM_SERIAL_CAP <64 fuellt sich der RAM, bei >64 springt er zum Ende der Prozedur (FIFO8_WR_EXIT.
    Code:
    ; Hauptprogramm
    ;	
    
    ; Jetzt füllen wir mal FIFO_FROM_SERIAL mit 1,2,3,4 ... bis sie voll ist
    	clr r16
    	ldi zl,low(FIFO_FROM_SERIAL)
    	ldi zh,high(FIFO_FROM_SERIAL)
    	
    RS_00:
    	inc r16
    	rcall FIFO8_WRITE
    	brts RS_00			; wenn Schreiben erfolgreich, weiter schreiben
    
    ; so jetzt ist sie voll
    Angehängte Dateien Angehängte Dateien
    ### Silvio ###

  7. #127
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    08.12.2005
    Beiträge
    535
    robo_wolf,

    der Grund für das Problem besteht darin, dass der ATmega beim Vergleichen von "signed integer"-Werten ausgeht. Wenn Bit7 von FIFO_CAP gesetzt ist, stellt das für ihn eine negative Zahl dar. Wenn jetzt der Zähler auch 0x00 ist - die Kapazität ist auf alle Fälle kleiner. Deshalb führt er das Programm auf direktem Weg zum EXIT.

    Die Lösung des Problems habe ich in _V03 eingebaut (nicht ohne Kommentar ). Ich hoffe, das Wochenende ist gerettet!

    Ciao,

    mare_crisium
    Angehängte Dateien Angehängte Dateien

  8. #128
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    02.11.2005
    Ort
    Bayern
    Alter
    55
    Beiträge
    310
    mare_crisium,
    jaaa ... ist gerettet.
    Was mich ein wenig gewundert hat, das es bei Dir funktioniert hat....(eventuell ein Wert zwischen 63 und 127 gewaehlt?)

    Ich habe mir schon eine Loesung mit der Abfrage auf das ZERO-Flag ausgedacht.
    Das wird ja bei Gleichheit der Werte von r17 und r18 gesetzt.
    Aber die CARRY-Flag-Loesung ist "runder". (ganz ohne Zweifel)
    Was ich Dich, vor Deinem heutigen Posting, noch fragen wollte:
    Was passiert eigentlich bei einer Compare-Anweisung.
    Wie findet der Vergleich statt? Substraktion der Werte mit Beruecksichtung des Vorzeichens(Bit7)?
    Naja... mit der Info wollte ich dann auf Fehler- bzw. Loesungssuche.



    PS. bevor ich es vergesse:
    Was haelst Du davon fuer die RS232 Kommunication STK500 - PC, einen neuen Thread zu eroeffnen.
    ### Silvio ###

  9. #129
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    08.12.2005
    Beiträge
    535
    robo_wolf,

    freut mich für Dein Wochenende!

    Ich hatte den Fehler nicht bemerkt, weil ich nicht mit Kapazität > 127 experimentiert hatte. An dem Ganzen kann man gut sehen, wie leicht einem sowas durch die Lappen gehen kann und wie schwer es ist, gründlich zu testen !

    Die Anweisung "cp Rd,Rr" führt tatsächlich eine Subtraktion aus. Die Registerinhalte werden als Werte in 2er-Komplement-Darstellung behandelt - dadurch bekommt Bit7 seine Bedeutung als Vorzeichen.

    Das mit dem neuen Thread ist eine gute Idee; vielleicht gibt's dafür ja noch mehrere Interessenten. Aber lass' uns die FIFO noch hier fertigmachen.

    Ciao,

    mare_crisium

  10. #130
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    02.11.2005
    Ort
    Bayern
    Alter
    55
    Beiträge
    310
    Guten Abend mare_crisium,
    - weiter am FIFO -
    habe in den Code nun noch die beiden Prozeduren FIFO8_FLUSH und FIFO8_GETCOUNT eingefuegt.
    Leider weis ich nicht genau wo und wann sie aufzurufen sind.
    FIFO8_GETCOUNT kann bei jedem MAIN-Durchlauf aufgerufen werden...
    FIFO8_FLUSH setzt ein Fehlverhalten voraus. Dieses muss erst erkannt werden, bevor der FIFO resetet wird.
    Kannst Du mir da noch ein paar Infos geben?
    Angehängte Dateien Angehängte Dateien
    ### Silvio ###

Seite 13 von 14 ErsteErste ... 311121314 LetzteLetzte

Berechtigungen

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

fchao-Sinus-Wechselrichter AliExpress