Hallo,
bei Verwendung des ADC_B beim Xmega bekomme ich falsche Werte und konnte festgestellen,
dass der Treiber die Bitgruppe muxpos im ADCBCH0MUXCTRL Register anscheinend falsch setzt.
Ich 'trace' das besagte Register in der Systick callback, da der Treiber an Systick gekoppelt ist, wenn mehr als 4 Eingänge eines ADC verwendet werden.
Im angehängten Bild sieht man die, im TraceArray gespeicherten, Werte.
ich erhalte für die Bitgruppe muxpos ...,5,5,1,2,3,4,5,5,5,0,1,2,3,4,5,5,...
Das sieht falsch aus.
Wenn mein Stimulation richtig ist, dann schließe ich auf einen Bug.
[Edit]
Bei meiner Stimulation gehe ich davon aus, dass der Treiber bei jedem Systick muxpos ändert, ist meine Annahme richtig?
Gruß
Thomas
program adcbTST; // f_cpu = 32 MHz
Device = xmega128A1U, VCC = 3.3;
Define_Fuses
Override_Fuses;
NoteBook = A;
COMport = USB;
FuseBits5 = [BODLEVEL1, BODLEVEL2, BODACT0]; // BOD=2.8V if USB variant
//ProgFuses = true;
//ProgEEprom = true;
Import SysTick, ADC_B;
Define
OSCtype = extXTAL=8000000, PLLmul=4, prescA=1, prescB=1, prescC=1, faildet;
SysTick = 10;
StackSize = 256, iData;
FrameSize = 256, iData;
ADCprescB = 128;
ADCrefB = REF100;
ADCchansB = [0..7]; // ich verwende den ganzen Port
implementation
{$IDATA}
// Globale Variabeln
var
traceArray : array[0..15] of byte; // size = 16 bytes
traceCount : byte;
procedure OnSysTick;
begin
// traceCount and 0x0F ist kleiner 16, array out of bounds nicht möglich
traceArray[traceCount and $0F] := ADCBCH0MUXCTRL;
traceCount := traceCount + 1;
end;
{-------------------------------------------------------------------------------
Main Program
-------------------------------------------------------------------------------}
begin
EnableInts($87);
loop
// im Hardware Debugger manuell stoppen und traceArray analysieren
endloop;
end adcbTST.
bei Verwendung des ADC_B beim Xmega bekomme ich falsche Werte und konnte festgestellen,
dass der Treiber die Bitgruppe muxpos im ADCBCH0MUXCTRL Register anscheinend falsch setzt.
Ich 'trace' das besagte Register in der Systick callback, da der Treiber an Systick gekoppelt ist, wenn mehr als 4 Eingänge eines ADC verwendet werden.
Im angehängten Bild sieht man die, im TraceArray gespeicherten, Werte.
ich erhalte für die Bitgruppe muxpos ...,5,5,1,2,3,4,5,5,5,0,1,2,3,4,5,5,...
Das sieht falsch aus.
Wenn mein Stimulation richtig ist, dann schließe ich auf einen Bug.
[Edit]
Bei meiner Stimulation gehe ich davon aus, dass der Treiber bei jedem Systick muxpos ändert, ist meine Annahme richtig?
Gruß
Thomas
Code
program adcbTST; // f_cpu = 32 MHz
Device = xmega128A1U, VCC = 3.3;
Define_Fuses
Override_Fuses;
NoteBook = A;
COMport = USB;
FuseBits5 = [BODLEVEL1, BODLEVEL2, BODACT0]; // BOD=2.8V if USB variant
//ProgFuses = true;
//ProgEEprom = true;
Import SysTick, ADC_B;
Define
OSCtype = extXTAL=8000000, PLLmul=4, prescA=1, prescB=1, prescC=1, faildet;
SysTick = 10;
StackSize = 256, iData;
FrameSize = 256, iData;
ADCprescB = 128;
ADCrefB = REF100;
ADCchansB = [0..7]; // ich verwende den ganzen Port
implementation
{$IDATA}
// Globale Variabeln
var
traceArray : array[0..15] of byte; // size = 16 bytes
traceCount : byte;
procedure OnSysTick;
begin
// traceCount and 0x0F ist kleiner 16, array out of bounds nicht möglich
traceArray[traceCount and $0F] := ADCBCH0MUXCTRL;
traceCount := traceCount + 1;
end;
{-------------------------------------------------------------------------------
Main Program
-------------------------------------------------------------------------------}
begin
EnableInts($87);
loop
// im Hardware Debugger manuell stoppen und traceArray analysieren
endloop;
end adcbTST.
Attachments
Filename: | adc_b bug.png |
Filesize: | 128.43 KB |
Title: | adc bug |
Download counter: | 132 |