Forum: Mikrocontroller und Digitale Elektronik MSP430 & MCP3208 Kanäle überschneiden sich


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Florian R. (Gast)


Lesenswert?

Hallo Zusammen,

ich möchte mit einem MSP430-F5529 Microcontroller einen ADC MCP3208 über 
SPI auslesen. Gesendet werden zuerst 2 x 8 Bit die das 
Startbit/Single-Ended/Control-Bits enthalten. Das Ansprechen des ADC 
funktioniert soweit. Das Problem ist, dass sich die Kanäle überlagern:
CH0:3113
CH1:4094
CH2:3112
CH3:4094
CH4:802
CH5:1419
CH6:803
CH7:1418

CH0&CH2
CH1&CH3
CH4&CH6
CH5&Ch7

Betrieben werden im Moment nur CH0,CH1,CH6,CH7. Ich möchte aber gerne 
alle Kanäle betreiben.
Folgender Code habe ich geschrieben. Der CS Port wird vor und nach dem 
Funktionsaufruf passend gesetzt. Die Funktion wird über eine 
For-Schleife aufgerufen und die jeweiligen Adressen gesetzt.
unsigned int SPI_send(unsigned char addr1,unsigned char addr2)
{
    UCB0IFG &= ~(UCTXIFG|UCRXIFG); 
//Flags löschen
    UCB0TXBUF = addr1; 
//Sende 1. Byte
    while ((UCB0IFG & UCTXIFG)==0); 
//Warte bis Wert gesendet wurde
    while ((UCB0IFG & UCRXIFG)==0); 
//Warte bis RX fertig ist
    UCB0TXBUF = addr2; 
//sende 2. Byte
    while ((UCB0IFG & UCTXIFG)==0); 
//Warte bis Wert gesendet wurde
    while ((UCB0IFG & UCRXIFG)==0); 
//Warte bis RX fertig ist
    data1 = (UCB0RXBUF&0x0F); 
//Empfangenen Wert in Variable speichern
    while ((UCB0IFG & UCTXIFG)==0);
    UCB0TXBUF = 0x00; 
//sende 3. Byte
    while ((UCB0IFG & UCTXIFG)==0); 
//Warte bis Wert gesendet wurde
    while ((UCB0IFG & UCRXIFG)==0); 
//Warte bis RX fertig ist
    data2 = UCB0RXBUF; 
//Empfangenen Wert in Variable speichern
  rcv=(((int)data1)<<8)+(int)data2;
  return rcv;

Hat jemand eine Idee an was es liegen könnte? Es sieht so aus als ob das 
Control-Bit D1 durch das vorherige Control-Bit D2 überschrieben wird.

Beitrag #6384646 wurde von einem Moderator gelöscht.
von Florian (Gast)


Lesenswert?

Nein

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.