mikrocontroller.net

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


Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sorry unter:
http://www.xilinx.com/support/documentation/boards...
Kapitel 10 Seite 75.

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
keine Tipps !!!!

Autor: Günter -.. (guenter)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Jörg (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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)?

Autor: Duke Scarring (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

}

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich habe alles probiert, aber vergeblich!!!!!

Autor: Duke Scarring (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich möchte ersmal fragen, ob das Programm in Ordnung ist????

Autor: Duke Scarring (Gast)
Datum:

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

Duke

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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)???

Autor: Duke Scarring (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Alucard Ntchouayang (birdman)
Datum:

Bewertung
0 lesenswert
nicht 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.......

Autor: Torsten Landschoff (bluehorn)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mein Tipp: Guck mal unter 
http://www.xilinx.com/products/boards/s3estarter/r... 
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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.