XMEGA und READPRODUCTIONROW Probleme

  • 1
  • 2
  • 3
  • 4
  • Page 2 of 4
Merlin
Administrator
Avatar
Gender:
Age: 24
Posts: 1409
Registered: 03 / 2005
Subject:

Re: XMEGA und READPRODUCTIONROW Probleme

 · 
Posted: 17.07.2020 - 20:45  ·  #9
Presumably, though

Code
 bCalLow: = ReadProductionRow ($20);
 bCalHigh: = ReadProductionRow ($21);


does not depend on DSC file
pvs-deck
PowerUser
Avatar
Gender:
Age: 53
Homepage: pvs-deck.de
Posts: 1341
Registered: 02 / 2009
Subject:

Re: XMEGA und READPRODUCTIONROW Probleme

 · 
Posted: 22.07.2020 - 15:24  ·  #10
Hallo Leute,

rage war mal so nett und es mit echter Hardware getestet. Das Problem scheint hier nicht die Routine von AVRco zu sein. Bei den XMegas sind dort wohl keine Kalibrierungswerte mehr eingetragen :-(

Also kann man das so wohl vergessen. Ich werde mir jetzt mal einen sehr genauen Widerstand von 10kOhm besorgen und eine Kalibrierungsfunktion erstellen. Das UserRow kann man ja leider nur mit einem Programmer oder über dem Bootloader schreiben oder?

Ich würde dann nach der Kalibrierung, die Abweichung / Korrektur im EEPROM Bereich schreiben, mit einem extra CMD in den Bootloader springen und diese beiden Bytes gerne in den UserRow schreiben.
Ich hoffe nur, das ich dies mit recht wenig Code im Bootloader machen kann. Ich habe da nur noch ein paar Bytes frei (127 Bytes).

Thorsten
Thomas.AC
Benutzer
Avatar
Gender: n/a
Age: 43
Posts: 308
Registered: 07 / 2013
Subject:

Re: XMEGA und READPRODUCTIONROW Probleme

 · 
Posted: 23.07.2020 - 21:06  ·  #11
Bei meinen getesteten xmega32A4 und xmega128A1U stehen Werte drin. Hab das nicht simuliert sonder mit dem debugger ausgelesen.
rage
Benutzer
Avatar
Gender: n/a
Age: 65
Homepage: processanalytik.de
Posts: 237
Registered: 02 / 2007
Subject:

Re: XMEGA und READPRODUCTIONROW Probleme

 · 
Posted: 25.07.2020 - 09:19  ·  #12
Guten Morgen,
ich habe das mit unseren aktuellen Platinen getestet. Alle xmega384C3 und xmega256A3U haben an den entscheidenden Stellen ein 00 zu stehen. Zum einen mit den Funktionen von AvrCo gestetet und zum anderen mit der angehangenen Unit. Bei beiden kam das selbe raus. Mit dem Programmer wollte ich das auch gegentesten, aber ich habe keine Funktion gefunden welche die Productionsrow liest? Hab ich da was übersehen Thomas?

cu rage

Code
Unit NVMSignature;

interface
// global part

{ $W+}                  // enable/disable warnings for this unit

uses ;

{--------------------------------------------------------------}
{ Const Declarations }
const
     NVM_CMD_READ_CALIB_ROW:Byte=$02;
     NVM_CMD_NO_OPERATION  :Byte = $00;    //(0x00<<0)  // Noop/Ordinary LPM
{$IDATA}
{--------------------------------------------------------------}
{ Type Declarations }
type

{--------------------------------------------------------------}
{ Var Declarations }
var

{--------------------------------------------------------------}
{ functions }
Function ReadProduktRowEx(Value:Byte):Byte;


implementation
// local part

{--------------------------------------------------------------}
{ Type Declarations }
type

{--------------------------------------------------------------}
{ Const Declarations }
const

{--------------------------------------------------------------}
{ Var Declarations }
{$IDATA}
var
   ReturnByte,SignaturAdr:Byte;

{--------------------------------------------------------------}
{ functions }

//; On entry temp must contain the address of the calibration byte to read.
//; Calibration byte returned in temp.
Function ReadProduktRowEx(Value:Byte):Byte;
Begin
  SignaturAdr:=Value;
  PushAllRegs;
ASM;
Read_calibration_byte:
  LDS  R20, NVMSignature.SignaturAdr           ; Point Z to required signature byte
  mov  ZL, R20           ; Point Z to required signature byte
  clr  ZH
  ldi  R20, NVMSignature.NVM_CMD_READ_CALIB_ROW
  sts  NVMCMD, R20         ; Load command into NVM Command register.
  lpm  R20, Z
        STS     NVMSignature.ReturnByte,R20
;Resets NVM to no operation and return
NVM_CMD_NO_OP:
  ldi  r21, NVMSignature.NVM_CMD_NO_OPERATION        ; Prepare NVM command code in R20.
  sts  NVMCMD, r21                               ; Set NVM command to No Operation so that LPM reads Flash.
endasm;
  PopAllRegs;
  Return(ReturnByte);
end;


initialization
// at StartUp

// finalization          // optional
// at System_ShutDown
end NVMSignature.
Thomas.AC
Benutzer
Avatar
Gender: n/a
Age: 43
Posts: 308
Registered: 07 / 2013
Subject:

Re: XMEGA und READPRODUCTIONROW Probleme

 · 
Posted: 26.07.2020 - 22:30  ·  #13
Hi rage,
bestätige bitte kurz, dass du die Adressen $20 und $21 ausgelesen hast und nicht versehentlich 20 und 21.

Ich teste morgen noch einmal an einem dritten Board mit xmega, dass mir zur Verfügung steht.

Ich glaube allerdings nicht, das die Kalibrierung mit den Werten aus der Production row viel bringt. Ich vermute, dass etwas anderes die Ursache für die Ungenauigkeit bei Thorsten ist.

Gruß Thomas
rage
Benutzer
Avatar
Gender: n/a
Age: 65
Homepage: processanalytik.de
Posts: 237
Registered: 02 / 2007
Subject:

Re: XMEGA und READPRODUCTIONROW Probleme

 · 
Posted: 27.07.2020 - 08:17  ·  #14
Guten Morgen Thomas,
das kann ich bestätigen, siehe folgenden Code;
Code

Procedure Test PROW;
    uCount:Byte;
    a:Array[0..$37] of Byte;
    B:Array[0..$37] of Byte;
begin
  For uCount:=0 to $37 do
    a[uCount]:=ReadProductionRow(Word(uCount));
  endfor;
  For uCount:=0 to $37 do
    b[uCount]:=ReadProduktRowEx(uCount);
  endfor;
end;

Ich habe bis $37 alles gelesen und verglichen ob beide gleich sind.

LG Ralf
pvs-deck
PowerUser
Avatar
Gender:
Age: 53
Homepage: pvs-deck.de
Posts: 1341
Registered: 02 / 2009
Subject:

Re: XMEGA und READPRODUCTIONROW Probleme

 · 
Posted: 27.07.2020 - 11:09  ·  #15
Quote by Thomas.AC

Hi rage,
bestätige bitte kurz, dass du die Adressen $20 und $21 ausgelesen hast und nicht versehentlich 20 und 21.

Ich teste morgen noch einmal an einem dritten Board mit xmega, dass mir zur Verfügung steht.

Ich glaube allerdings nicht, das die Kalibrierung mit den Werten aus der Production row viel bringt. Ich vermute, dass etwas anderes die Ursache für die Ungenauigkeit bei Thorsten ist.

Gruß Thomas


Hallo Thomas,

bei 10 getesteten XMEGAs 384C3 erhalte ich immer "00" Mit Deinem Code.

Code
    if IO.IN_SERV_R then 
      DebugOut('SERV'); 
      dumpProdRow;
      DebugOut('ADCACAL0:'+ByteToHex(prodRow.ADCACAL0));
      DebugOut('ADCACAL1:'+ByteToHex(prodRow.ADCACAL1));
      
      DebugOut('TEMPSENSE0:'+ByteToHex(prodRow.TEMPSENSE0));
      DebugOut('TEMPSENSE1:'+ByteToHex(prodRow.TEMPSENSE1));
      
      DebugOut('ADCBCAL0:'+ByteToHex(prodRow.ADCBCAL0));
      DebugOut('ADCBCAL1:'+ByteToHex(prodRow.ADCBCAL1));
      
    endif; 


Ergebnis, mir ist klar das es beim 384C3 keinen Wert für ADCBCAL0/1 gibt, aber ich wollte hier ein paar Werte ausgeben inkl. TEMOSENSE0/1

Code
SERV
ADCACAL0:00
ADCACAL1:00
TEMPSENSE0:6D
TEMPSENSE1:09
ADCBCAL0:00
ADCBCAL1:00


Ich habe noch ein STK600 im Homoffice liegen, dort habe ich noch ältere XMEGAs 128/256, ich teste es mal mit diesen.

Quote by Thomas.AC

...
Ich glaube allerdings nicht, das die Kalibrierung mit den Werten aus der Production row viel bringt. Ich vermute, dass etwas anderes die Ursache für die Ungenauigkeit bei Thorsten ist.
...


Ich habe ein recht kleines Messfenster ADC 3100 bis ca. 3700 bei meiner Schaltung, dementsprechend habe ich schon bei geringen Abweichungen deutliche Messfehler. Deswegen benötige ich die ADCACAL0/1 Werte.

Thorsten
Attachments
Curve
Filename: 27-07-_2020_10-54-31.png
Filesize: 80.72 KB
Title: Curve
Information: Curve
Download counter: 138
rage
Benutzer
Avatar
Gender: n/a
Age: 65
Homepage: processanalytik.de
Posts: 237
Registered: 02 / 2007
Subject:

Re: XMEGA und READPRODUCTIONROW Probleme

 · 
Posted: 27.07.2020 - 12:53  ·  #16
Guten Tag,
ich habe das auch nochmal mit anderen CPUs getestet. Bei einem Board mit xmega32e5 steht genauso $00 drin und bei einem Board mit einem xmega128A4U steht $0444 drin. Aber hierzu mal
https://www.mikrocontroller.net/topic/337355#3709946 lesen. Ich weiß nicht in wie weit das sachlich richtig ist, deckt sich aber mit meinen Tests.
cu Ralf

P.S. @Thomas.AC
Du hast geschrieben
Quote
Bei meinen getesteten xmega32A4 und xmega128A1U stehen Werte drin. Hab das nicht simuliert sonder mit dem debugger ausgelesen.
. Hast Du das mit dem ISP3-X ausgelesen?
  • 1
  • 2
  • 3
  • 4
  • Page 2 of 4
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: 15   141   156 · Page-Gen-Time: 0.028051s · Memory Usage: 2 MB · GZIP: on · Viewport: SMXL-HiDPI