Forum: Mikrocontroller und Digitale Elektronik Texas AD ADS8556 will nicht messen! Serieller Betrieb


von Philipp F. (philipp5054)


Lesenswert?

Hallo Gemeinde,
ich versuche nun seite geschlagenden 2 Stunden etwas mit dem ADS8556 zu 
messen. Ich bekomme auch Werte doch leider sind die nicht Plausibel und 
ändern sich beim ändern der Spannung nicht. Bitte schaut mal in den Code 
und gebt mir nen Tip.
Danke schon mal im vorraus.

typedef union conv_ {
  unsigned long int w;
  unsigned char b[4];
} CONVERTW;


void InitADHardware(void)
{
  //Ein-/Ausgänge einstellen
  DDRD |= ((1 << SCLK));                             // Port für SCLK 
als Ausgang einstellen
  DDRB |= ((1 << FS) | (1 << SDO) | (1 << CONVST)); // Port für FS, SDO, 
CONvST als Ausgang einstellen
  //löschen
  DDRD &= ~((1 << BUSY) | (1 << SDI_A) | (1 << SDI_B) | (1 << SDI_C)); 
// Port für BUSY,SDI_A,SDI_B,SDI_C als Eingang einstellen
  SET_FS();
  SET_SCLK();
  CLEAR_CONVST();
}

void FirstConversion(void)
{
  CONVERTW val;             // declare UNION for easy conversion
  val.w=0;
  unsigned long int uiConv_A_Buffer=0;
  unsigned long int uiConv_B_Buffer=0;
  unsigned long int uiConv_C_Buffer=0;
  unsigned char i;
  unsigned long int Configuration=0xE20503FF;

  SET_CONVST();
  while(PIND & (1<<BUSY)) ;
  //SET_SCLK();
  //CLEAR_SCLK();
  CLEAR_FS();
  for (i=0;i<32;i++) {
    CLEAR_SCLK();
    //if (Configuration & (1 << 31)){
    if((Configuration >> 31)!=0){
    PORTB |= ((1 << SDO));
    }
    else {
    PORTB &= ~((1 << SDO));
    }
    Configuration = (Configuration << 1);
    SET_SCLK();
    // Read AD Port A *******************************
    if (PIND & (1 << SDI_A)) {
    uiConv_A_Buffer++;
    uiConv_A_Buffer = (uiConv_A_Buffer << 1);
    }
    else {
    uiConv_A_Buffer = (uiConv_A_Buffer << 1);
    }
    // Read AD Port B *******************************
    if (PIND & (1 << SDI_B)) {
    uiConv_B_Buffer++;
    uiConv_B_Buffer = (uiConv_B_Buffer << 1);
    }
    else {
    uiConv_B_Buffer = (uiConv_B_Buffer << 1);
    }
    // Read AD Port C *******************************
    if (PIND & (1 << SDI_C)) {
    uiConv_C_Buffer++;
    uiConv_C_Buffer = (uiConv_C_Buffer << 1);
    }
    else {
    uiConv_C_Buffer = (uiConv_C_Buffer << 1);
    }
    // **********************************************

  }
  //Ende Sequenz
  SET_FS();
  SET_SCLK();
  CLEAR_CONVST();
  val.w = uiConv_A_Buffer;
  usart_write("\n");
  usart_write_char(val.b[3]);
  usart_write_char(val.b[2]);
  usart_write_char(val.b[1]);
  usart_write_char(val.b[0]);

  val.w = uiConv_B_Buffer;
  //usart_write("B:");
  usart_write_char(val.b[3]);
  usart_write_char(val.b[2]);
  usart_write_char(val.b[1]);
  usart_write_char(val.b[0]);

  val.w = uiConv_C_Buffer;
  //usart_write("C:");
  usart_write_char(val.b[3]);
  usart_write_char(val.b[2]);
  usart_write_char(val.b[1]);
  usart_write_char(val.b[0]);

}

von Philipp F. (philipp5054)


Lesenswert?

Kennt keiner das Teil und kann mir biiiiitte helfen?

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.