Stepper und Int2Str - Bug?

bovist
Benutzer
Avatar
Gender:
Age: 64
Homepage: shop.keyboardpartn…
Posts: 34
Registered: 03 / 2006
Subject:

Stepper und Int2Str - Bug?

 · 
Posted: 04.03.2012 - 10:51  ·  #1
Hallo,

ich habe einen einfachen Parser für eine Schrittmotorsteuerung mit ATmega168 geschrieben, der etwa auf den Befehl "POS=1000" über serInp den Schrittmotor per StepDestCW etc. anlaufen lässt. Das funktioniert gut.

Jetzt habe ich aber das seltsame Phänomen, dass eine LongToStr- oder Int2Str-Wandlung zur Klartext-Ausgabe der aktuellen Position über serOut nicht mehr funktioniert (liefert nichts oder wilde Zeichenketten), sobald der Motor auch nur einen Schritt gelaufen ist - unabhängig, ob der Motor überhaupt dranhängt (dachte erst an Spikes oder dgl.), ob er läuft oder wieder steht.

Konnte den Fehler soweit lokalisieren:

Im Assemblerfile gibt es bspw. die Routine

Code
SYSTEM.StepDestCW_X:
                        SET
                        BLD       Flags2, _STEPDEST
                        BLD       Flags2, _STEPCW
                        RJMP      SYSTEM.StepAutoStart

Macht man testweise daraus:

Code
SYSTEM.StepDestCW_X:
                        SET

                        RET      ; testweise eingefügt

                        BLD       Flags2, _STEPDEST
                        BLD       Flags2, _STEPCW
                        RJMP      SYSTEM.StepAutoStart

läuft der Motor zwar nicht, aber der Fehler ist weg. Bei

Code
SYSTEM.StepDestCW_X:
                        SET
                        BLD       Flags2, _STEPDEST
                        BLD       Flags2, _STEPCW

                        RET     ; testweise eingefügt

                        RJMP      SYSTEM.StepAutoStart

läuft der Motor zwar auch nicht (klar!), aber der Int2Str-Fehler ist da! Scheint also nur mit FLAGS2 zu tun zu haben.

Kann es daran liegen, dass der Compiler das Register FLAGS2 auf der gleichen Stelle mit den Flags _F64StrInt und _STEPCW belegt?

Gruß, cm
bovist
Benutzer
Avatar
Gender:
Age: 64
Homepage: shop.keyboardpartn…
Posts: 34
Registered: 03 / 2006
Subject:

Re: Stepper und Int2Str - Bug?

 · 
Posted: 04.03.2012 - 12:29  ·  #2
Workaround: FLAGS2 vor irgendeiner IntToStr-Wandlung manuell auf null setzen, sobald der Motor steht:


Code

    if StepMode=StepStop then
      if WasBusyFlag then
        FLAGS2:=0;
        serprompt(Ready); // benutzt ByteToStr!
        WasBusyFlag:= false;
      endif;
    endif;


Bleibt aber das Problem, das keine ByteToStr/IntToStr/LongToStr funktionieren, solange der Motor läuft, d.h. FLAGS2-Bits _STEPCW und _STEPDEST vom Stepper-Treiber belegt sind.

Alternative: FLAGS2-Bits im Assemblerfile ummappen:

_STEPCW .EQU 006h ; const GEÄNDERT!
_F64StrInt .EQU 004h ; const
_STEPDEST .EQU 007h ; const GEÄNDERT!
_F64StrFrac .EQU 005h ; const
_FREQCNTFLAG .EQU 006h ; const
_AUTOACK .EQU 007h ; const

Ich weiß aber nicht, ob das nicht irgendwelche Nebeneffekte hat... Außerdem vergisst man das Ummappen im ASM-File leicht, daher nicht der Weisheit letzter Schluss.

Ach ja: Compiler ist rev 4.99.73.

Gruß, cm
rh
Administrator
Avatar
Gender:
Location: Germany
Age: 24
Homepage: e-lab.de
Posts: 5558
Registered: 03 / 2002
Subject:

Re: Stepper und Int2Str - Bug?

 · 
Posted: 04.03.2012 - 17:23  ·  #3
Hallo cm,

das Problem liegt daran dass zwei Stepper Flags und zwei F64Str Flags die identische Position in Flags2 haben. Das wurde vor vielen Jahren deshalb so gemacht um bei den damaligen kleinen AVRs, 8515 etc, Speicher zu sparen. Ich hatte niemals damit gerechnet dass während eines Step Laufs Float Strings generiert werden würden. Ich werde das zum nächsten WE update ändern und dem Stepper ein separates Flag Byte zuweisen.

rolf
bovist
Benutzer
Avatar
Gender:
Age: 64
Homepage: shop.keyboardpartn…
Posts: 34
Registered: 03 / 2006
Subject:

Re: Stepper und Int2Str - Bug?

 · 
Posted: 04.03.2012 - 17:31  ·  #4
Rolf, heute ist SONNTAG! Das nenn' ich einen Service...

Da lag ich also richtig. In der Tat brauche ich eine Klartext-Abfrage von Parametern (sind allerdings nur Integer/LongInts, Floats brauche ich nicht) über Serport, während der Stepper noch läuft. Dachte ich mir schon, dass das ein Relikt aus alten Zeiten ist - der Stepper-Treiber ist ja schon ein paar Tage älter.

Gruß, Carsten
Selected quotes for multi-quoting:   0

Registered users in this topic

Currently no registered users in this section

The statistic shows who was online during the last 5 minutes. Updated every 90 seconds.
MySQL Queries: 15 · Cache Hits: 14   81   95 · Page-Gen-Time: 0.021305s · Memory Usage: 2 MB · GZIP: on · Viewport: SMXL-HiDPI