Forum: Mikrocontroller und Digitale Elektronik ADS1112 (ADC) Multiplexer funktioniert nicht richtig


von Tim (Gast)


Lesenswert?

Hallo,

ich versuche gerade den ADS1112 vernünftig zum laufen zu bekommen aber 
scheitere daran den Multiplexer so einzustellen, das dann auch der 
richtige Eingang gemessen und beim Lesen ausgelesen wird. Vom Prinzip 
her schreibe ich erst ins Config Register welchen Eingang ich gerne 
nutzen möchte, sende dann Restart mit dem letzten bit 1, also Lesen. 
Lese dann die Daten aus. Anschließend sende ich weider die Adresse mit 
Schreiben, und wähle den anderen Eingang aus. Danach lese ich die Daten. 
Zuletzt wird I2C-Stop Condition gesendet. Das Problem ist, dass die 
Eingänge nicht vernünftig umgeschaltet werden. Ich kriege Werte die 
garnicht auf dem Eingang liegen. Habe auch schon versucht anstatt ein 
"Continue" zu senden, den I2C Bus zu stoppen und mit Start erneut zu 
beginnen. Funktioniert aber auch nicht. Die Werte lasse ich mir per UART 
ausgeben.
Ich weiß absolut nicht mehr weiter - arbeite jetzt an dem Problem seit 2 
Tagen. Habt ihr eine Idee ?

Und zwar sieht mein Code so aus:

  UART_init();

  I2C_Init();
  I2C_Start(0x9C);  //Slave Adress, Schreiben

  //Messeingang: AIN0
  ADC_configByte = 0x4C;

  I2C_Write(ADC_configByte);//Config Register: Messeingang AIN0, 
Continues Conversion

  //nop(300000); //wenn aktiviert, funktioniert es

  I2C_Continue(0x9D); //Lesen

  //Lesen der Daten 1
  ADC_value = I2C_Read();
  ADC_value = (ADC_value << 8) + I2C_Read();
  ADC_configByte = I2C_LastRead();

  UART_sendLeerzeichen();
  UART_sendLeerzeichen();
  UART_sendChar(0x31);
  UART_sendLeerzeichen();

  wert_ausgabe_int(ADC_value);

  //nop(300000);

  I2C_Continue(0x9C); // Schreiben

  //Messeingang: AIN1
  ADC_configByte = 0x6C; //Schreiben

  I2C_Write(ADC_configByte);  //Config Register: Messeingang AIN1, 
Continues Conversion

  //nop(300000);

  I2C_Continue(0x9D);

  //Lesen der Daten 1
  ADC_value = I2C_Read();
  ADC_value = (ADC_value << 8) + I2C_Read();
  ADC_configByte = I2C_LastRead();

  //Daten nur ausgeben, falls Daten noch nicht gelesen wurden

  UART_sendLeerzeichen();
  UART_sendLeerzeichen();
  UART_sendChar(0x32);
  UART_sendLeerzeichen();

  wert_ausgabe_int(ADC_value);


  I2C_Stop();

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.