XADC Zybo / ZC701 - AUX updated nicht

OP #6636184
Lesenswert?

Hallo,
ich habe hier ein Zybo Board (Zynq 7010) und programmiere es Bare-Metal.
Jetzt wollte ich eine AUX (AD6) verwenden über den XADC. Also habe ich 
im Block-Design ein XADC Wizard IP Core eingefügt, den AD6P_P/N 
ausgewählt und die Pins im IO Planner entsprechend verbunden.
Jetzt habe ich ein Beispiel auf Basis des xadc polling Beispiels 
erstellt. In einer Schleife frage ich die XADCPS_CH_TEMP und 
(XADC_CH_AUX_MIN + 6) ab (500ms Interval). Der Wert vom XADCPS_CH_TEMP 
ändert sich, der AD6 bleibt immer gleich. Nach einem Reset ändert sich 
der AD6 (der Wert der dann aber ausgegeben wert stimmt, nur wird er eben 
nicht aktualisiert). Jemand eine Idee woran das liegen kann?
Im Wizard habe ich Continuous ausgewählt und alle Alarme deaktiviert.
1
int xadc_init(){
2
  XAdcPs_Config *ConfigPtr;
3

4
  int Status;
5

6
  ConfigPtr = XAdcPs_LookupConfig(XADC_DEVICE_ID);
7
  if (ConfigPtr == NULL) {
8
    return XST_FAILURE;
9
  }
10
  XAdcPs_CfgInitialize(XAdcInstPtr, ConfigPtr, ConfigPtr->BaseAddress);
11

12
  Status = XAdcPs_SelfTest(XAdcInstPtr);
13
  if (Status != XST_SUCCESS) {
14
    return XST_FAILURE;
15
  }
16
  XAdcPs_SetSequencerMode(XAdcInstPtr, XADCPS_SEQ_MODE_SAFE);
17

18

19
  return 0;
20
}
21

22
int xadc_read(int channel){
23
  int val = 0;
24
  val = XAdcPs_GetAdcData(XAdcInstPtr, channel);
25
  return val;
26
}
27
...
28
//in der main
29
while(1){
30
 val = xadc_read(XADCPS_CH_TEMP);
31
 xil_printf("xadc Temp: %d\r\n", val);
32

33
 val = xadc_read(XADC_CH_AUX_MIN + 6);
34
 xil_printf("xadc AUX: %d\r\n", val);
35
}
(Firma: www.elpra.de) Persönliche Seite #6636741
Lesenswert?

Alles ohne Gewaehr, weil ich schon ewig nicht mehr den XADC benutzt habe 
und gerade keinen alten Code da habe zum nachschauen.

Schau dir mal das Kapitel ueber den Channel Sequencer in UG480 an. Da 
wuerde ich vermuten, liegt der Hund begraben.

Versuch mal die XAdcPs_SetSequencerMode Zeile durch
1
XAdcPs_SetSequencerMode(XAdcInstPtr, XADCPS_SEQ_MODE_SAFE);
2
XAdcPs_SetSeqInputMode(XAdcInstPtr, XADCPS_SEQ_CH_AUX06);
3
XAdcPs_SetSequencerMode(XAdcInstPtr, XADCPS_SEQ_MODE_CONTINPASS);

zu ersetzen.

Was mir noch auffaellt: Bist du sicher das XADC_CH_AUX_MIN stimmt und 
nicht XADCPS_CH_AUX_MIN lauten muss? Ich wuerde hier eigentlich einen 
Error zur Compilezeit erwarten.
OP #6636821
Lesenswert?

Hallo Tobias,
danke für deine Antwort.
Habe das gerade mal getestet, hat aber leider keine Änderung gebracht.

> Was mir noch auffaellt: Bist du sicher das XADC_CH_AUX_MIN stimmt und
> nicht XADCPS_CH_AUX_MIN lauten muss? Ich wuerde hier eigentlich einen
> Error zur Compilezeit erwarten.
gut gesehen, aber ich hatte mir die DEFINEs für meinen "xadc_drv.h" 
nochmal dupliziert und leicht unbenannt damit ich kein Redefine habe. 
Hätte ich mal erwähnen sollen...Ist beides 16, also offset zu den AUX 
Channels
1
xadc AUX:  13756
2
xadc Temp: 41470
3
xadc AUX:  13756
4
xadc Temp: 41574
5
xadc AUX:  13756
6
xadc Temp: 41532
7
xadc AUX:  13756
8
xadc Temp: 41654
9
xadc AUX:  13756
10
xadc Temp: 41602
11
xadc AUX:  13756
12
xadc Temp: 41596
13
xadc AUX:  13756
OP #6636900
Lesenswert?

So, ich noch mal.
Der Tipp mit dem Sequencer hat zumindest insofern geholfen, als dass ich 
dann den XADC Wizard von Single Channel auf Channel Sequencer gestellt 
habe und dann scheint es zu gehen.

EDIT:
Ach ich sehe gerade... hätte ich vermutlich den SequencerMode auf 
XADCPS_SEQ_MODE_SINGCHAN stellen müssen!? Ja vermutlich

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren