Forum: FPGA, VHDL & Co. A/D-Wandler Xlinx-Board


von Gast (Gast)


Lesenswert?

Hallo zusammen,

ich habe ein Xlinx-Board Spartan-3E Starter Kit.
ich habe ein kleines Programm geschrieben, und möchte damit testen, ob 
der ADC (LTC1407A) richtig wandelt, ich kann mit meinem Logic analysator 
keine SDO Daten sehen außer mein clock und mein befehl zum ADC 
(ADC_conv). der SDO Pin von ADC ist immer auf 1.
Die 8-Bit (SDI), die ich zum Vorverstärkung schicke, kann ich auch 
sehen.
Was mache ich den falsch????
Danke im Voraus.

P.S.: auf Xilinx seite ist ein fehler im Doko. ADC und Vorverstärkung 
sind vertaucht.

http://www.xilinx.com/support/documentation/boards...
Kapitel 10 Seite 75.

von Gast (Gast)


Lesenswert?


von Gast (Gast)


Lesenswert?

keine Tipps !!!!

von Günter -. (guenter)


Lesenswert?

Liegt vielleicht daran das du nicht genug Informationen geliefert hast. 
Lese doch mal deine Fehlerbeschreibung durch und versetze dich dann in 
die Lage von jemanden der nicht deine Hardwarebeschreibung kennt.

Welche Hilfe könntest du denn dann geben?

Die allgemeinen Tipps die mir einfallen sind:

1. Funktioniert die Hardwarebeschreibung in der Simulation?
2. Synthesiert die Hardwarebeschreibung und weist du genau was hinter 
etwaigen Warnungen steht? Sind die Warnungen unbedeutend für die 
Funktion?
3. Ist in dem UCF-File die Pinbelegung richtig gewählt?

von Gast (Gast)


Lesenswert?

Danke erstmal,

alles scheint in Ordnung zu sein
Die Hardwarebeschreibung Funktioniert in der Simulation, und
ich habe die Pinbelegung in UCF-File kontrolier, die sind in Ordnung.
das problem ist, dass der ADC keine Daten auf dem SPI-Bus schickt.
Auf dem SPI-Bus kann ich nur mein Clock und den Befehl für die 
convertierung sehen. SDO vom ADC ist immer auf High.

von Jörg (Gast)


Lesenswert?

Hast du berücksichtigt, dass der SPI-Bus vom Amplifier und vom ADC
gemeinsam genutzt werden?
Ist dein Clock-Signal zum Amplifier eine 10MHz-Clock (siehe Spec),
die Clock des ADC eine 50MHz-Clock?
Hast du mal versucht, die Amp-Spannung am Amplifier-Ausgang zu messen
(einfach mal konst. Spannung am Eingang anlegen)?

von Duke Scarring (Gast)


Angehängte Dateien:

Lesenswert?

@Gast:

Was passiert denn an Pin 10 (CONV)?
Sehen Deine Diagramme auf dem Logic Analyzer so aus, wie im Datenblatt 
Seite 9 und 10? Lies Dir auch mal Seite 16 durch, die Datenblätter von 
LT sind nicht die schlechtesten.

Duke

von Gast (Gast)


Lesenswert?

der Amplifier funktioniert sehr gut. Ich habe die Spannung am Ausgang 
gemessen und gerechnet, ist in Ordnung.
in Pin 10 sieht es genau wie im DatenBlatt.
das befehl geht normalerweise zu einer Diode, aber ich habe die Pine 
geändert im .ucf File. P11 in "fpga_0_LEDs_8Bit_GPIO_d_out_pin<0>".
ich habe den Byte zum Amplifier mit der funktion "XSpi_mSendByte" 
geschickt.

so sieht ein Teil meines Program aus.
int main (void)
{
  int i;
  xil_printf("Timer Test\n\r");
  XStatus Status;
  XGpio_Initialize(&GpioOutput,XPAR_LEDS_8BIT_BASEADDR);
  XGpio_SetDataDirection(&GpioOutput, 1, 0x0);
   XGpio_DiscreteWrite(&GpioOutput, 1, 0x0);





  Xuint8   NumBytesRcvd, mfg_id, did_up, did_low, error, SF_sr;
  Xuint16  sector_select, page_select;
  Xuint16  spi_control_reg;

// Initialisierung

  Initialize_Spi_Controller(XPAR_SPI_FLASH_BASEADDR);




  send_data[0] = 4;
  send_data[1] = 6;
  send_data[2] = 10;
  send_data[3] = 12;
  XSpi_Set_Enable(XPAR_SPI_FLASH_BASEADDR);

  // Assert the select line manually to the SPI Flash ?????
 XSpi_mSetSlaveSelectReg(XPAR_SPI_FLASH_BASEADDR, SPI_FLASH_SELECT);
 XSpi_mSetSlaveSelectReg(XPAR_SPI_FLASH_BASEADDR, SPI_NONE_SELECT);
  // Transfer the op-code and retrieve the ID
  spi_transfer(send_data,recv_data,4);



Status = XTmrCtr_Initialize(&TimerCounterInst, 
XPAR_XPS_TIMER_1_DEVICE_ID);
  TmrInit(&InterruptController,&TimerCounterInst,
                              XPAR_XPS_TIMER_1_DEVICE_ID,
                              XPAR_XPS_INTC_0_XPS_TIMER_1_INTERRUPT_INTR,
                              0);
  while(1)
  {
     i++;
    i--;
  }
  return 0;
/************************** Timer event 
handler**************************/
void TimerCounterHandler(void *CallBackRef, Xuint8 TmrCtrNumber)
{

         XGpio_DiscreteWrite(&GpioOutput, 1, 0xFF);// ADC_Conv 
XGpio_DiscreteWrite(&GpioOutput, 1, 0x00);// ADC_Conv

}

von Gast (Gast)


Lesenswert?

ich habe alles probiert, aber vergeblich!!!!!

von Duke Scarring (Gast)


Lesenswert?

Dann laß doch mal jemand anderes auf die Schaltung gucken. Oder mach mal 
einen Screenshoot vom Timing mit Deinem Logic Analyzer und stell ihn 
hier rein.

Duke

von Gast (Gast)


Lesenswert?

ich möchte ersmal fragen, ob das Programm in Ordnung ist????

von Duke Scarring (Gast)


Lesenswert?

Offenbar nicht, sonst würde es ja wie gewünscht funktionieren.

Duke

von Gast (Gast)


Lesenswert?

und Duke hast du einen Vorschlag!!!
ist das nicht richtig, was ich gemacht habe (die Adresse von einem LED 
geändert und stattdessen die Adresse vom ADC "im .ucf-File" 
eingegeben)???

von Duke Scarring (Gast)


Lesenswert?

Schau doch mal nach einer Referenzimplementierung für Dein Board, wo 
auch der ADC verwendet wird. Da schaust Du Dir mit Deinem Logicanalyzer 
ein funktionierendes Timing an. (Und stellst mal ein Bild davon rein.) 
Da spielst Du Dein Design auf und machst wieder ein Aufzeichnung mit dem 
Logicanalyzer (die auch hier reinstellen). Dann kann man mal 
vergleichen.

Duke

von Alucard N. (birdman)


Lesenswert?

Hallo !
hast du CS auf low gesetzt ?
wenn ja , danach muss du warten bevor du irgenwas in  mit SDI startet
versuch mal 20 us zu warten wenn das klappt reduziert diese und probiert 
einfach nochmal usw.......

von Torsten L. (bluehorn)


Lesenswert?

Mein Tipp: Guck mal unter 
http://www.xilinx.com/products/boards/s3estarter/reference_designs.htm 
nach dem "PicoBlaze Processor Amplifier and A/D Converter Controller" 
Design. Funktionierte bei mir einwandfrei. Auch mein eigener Code konnte 
mit dem ADC sprechen, aber da ich den @ work geschrieben habe, kann ich 
den nicht einfach hier posten...

Grüsse aus Dresden, Torsten

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.