Skalierung der Anzeige klappt nur für den linken Kanal

Alles rund um das ACV-Modul und seine Tochterplatine
Antworten
Mino
träumt vom eigenen c't-Lab
träumt vom eigenen c't-Lab
Beiträge: 6
Registriert: 27.04.2013, 18:48

Skalierung der Anzeige klappt nur für den linken Kanal

Beitrag von Mino »

Hallo,
ich habe gerade versucht, bei meinem ACV die Skalierung zu ändern, um die Spannung in Millivolt korrekt anzeigen zu lassen. Leider wirkt der "SCL" Befehl über die serielle Schnittstelle mit den im Syntax-Dokument von Carsten Meyer angegebenen Parametern ausschließlich auf den linken Kanal, der rechte Kanal bleibt völlig unbeeinflusst. Hat jedman schon mal damit Erfahrung gemacht oder dieses Problem vielleicht schon behoben?

besten Dank schon mal

Michael
Mino
träumt vom eigenen c't-Lab
träumt vom eigenen c't-Lab
Beiträge: 6
Registriert: 27.04.2013, 18:48

Re: Skalierung der Anzeige klappt nur für den linken Kanal

Beitrag von Mino »

Soviel habe ich mittlerweile mit Hilfe von ParamBackupRestore.vi rausgefunden: die Werte für den linken Kanal sind in den Parametern 200 bis 207 (8 Messbereiche), die für den rechten Kanal scheinbar in 210 bis 217. Bloß kann man in letztere nicht speichern, weder per serieller Schnittstelle noch per vi. Da scheint wohl ein Schreibschutz drauf zu sein. Weiß jemand, wie man den entfernt?

besten Dank!
Mino
träumt vom eigenen c't-Lab
träumt vom eigenen c't-Lab
Beiträge: 6
Registriert: 27.04.2013, 18:48

Re: Skalierung der Anzeige klappt nur für den linken Kanal

Beitrag von Mino »

Es ist sogar noch interessanter: Speichert man beispielsweise einen Parameter in 217, dann landet der in 207, 217 wird nicht geändert.
psclab38
kann c't-Lab-Konstrukteure konstruieren
kann c't-Lab-Konstrukteure konstruieren
Beiträge: 942
Registriert: 25.01.2008, 23:34

Re: Skalierung der Anzeige klappt nur für den linken Kanal

Beitrag von psclab38 »

Hallo Michael,

wie Du der geringen Anzahl von Beiträgen zum ACV entnehmen kannst, haben nicht viele Leute diese Baugruppe. Ich versuche aber mal so zu "helfen".
Mino hat geschrieben:Es ist sogar noch interessanter: Speichert man beispielsweise einen Parameter in 217, dann landet der in 207, 217 wird nicht geändert.
Wenn man in den Original-Quellcode schaut, dann fällt einem nach ein paar Blicken auf, daß da was nicht stimmt.

Code: Alles auswählen

procedure ParseGetParam

    200..207:
      ParamInt:=integer(ADCscalesL[myIndex]);
      |
    210..217:
      ParamInt:=integer(ADCscalesR[myIndex]);
      |
Das ist noch ok. Aber hier:

Code: Alles auswählen

procedure ParseSetParam

        200..207:
          ADCscalesL[myIndex]:=word(ParamInt);
          |
        210..217:
          ADCscalesL[myIndex]:=word(ParamInt);
          |
für links und rechts wird beidesmal das Array für links ADCscalesL beschrieben. Damit wäre Dein Problem bestätigt. Ob das alles ist, kann ich jetzt auf die Schnelle nicht beurteilen.

Leider hat von uns keiner den kommerziellen Compiler. Ob sich der Aufruf im Hexfile patchen läßt, kann ich nicht sagen.

Tut mir leid.

Viele Grüße
Paul
Benutzeravatar
ompf
kann c't-Lab-Module konstruieren
kann c't-Lab-Module konstruieren
Beiträge: 168
Registriert: 19.01.2008, 13:03
Wohnort: Dortmund

Re: Skalierung der Anzeige klappt nur für den linken Kanal

Beitrag von ompf »

Dem Assemblerfile lässt sich entnehmen, dass der Compiler doof genug war, die beiden cases nicht zusammenzufassen. ADCscalesL wird im Label ACV._L0271 geschrieben, ADCscalesR in ACV._L0275.

Du musst also die folgende Struktur finden und darin die Parameter der beiden LDI-anweisungen ändern.

Code: Alles auswählen

ACV._L0271:
                        .BLOCK    795
                        .LINE     795
                        LDI       _ACCCLO, ACV.ADCscalesL AND 0FFh
                        LDI       _ACCCHI, ACV.ADCscalesL SHRB 8
                        PUSH      _ACCCLO
                        PUSH      _ACCCHI
                        LDD       _ACCA, Y+000h
                        MOV       _ACCB, _ACCA
                        CLR       _ACCA
                        LSL       _ACCB
                        ROL       _ACCA
                        POP       _ACCCHI
                        POP       _ACCCLO
                        ADD       _ACCCLO, _ACCB
                        ADC       _ACCCHI, _ACCA
                        LDS       _ACCB, ACV.ParamInt
                        LDS       _ACCA, ACV.ParamInt+1
                        MOVW      _ACCALO, _ACCB
                        CALL      SYSTEM._WriteEEp16
                        .ENDBLOCK 796
                        .BRANCH   20,ACV._L0260
                        JMP       ACV._L0260 
Die beiden LDIs müsste als "EA E0 F0 E0" codiert sein. Der neue Wert ist dann "EA E1 F0 E0". Die Bytefolge kommt viermal vor, die letzte ist die richtige.

Ich hab's nicht ausprobiert, daher ohne Gewähr...


Gruß
Patrick
Mino
träumt vom eigenen c't-Lab
träumt vom eigenen c't-Lab
Beiträge: 6
Registriert: 27.04.2013, 18:48

Re: Skalierung der Anzeige klappt nur für den linken Kanal

Beitrag von Mino »

an beide antwortenden Forumsteilnehmer: Ganz herzlichen Dank. Ich habe eure Tipps erst jetzt gesehen, da ich das ctlab zwar produktiv einsetze, aber die Anzeige (noch) nicht verwende, weil sie bislang eben rechts nur Hausnummern anzeigt. Ich werde mal versuchen, das Assembler-File zu patchen - Abenteuer muss sein.

Michael
Antworten