Gast
#687397
Hallo zusammen Irgendwie druckt wieder mal der Schuh :o) Versuche schon den ganzen Tag mein Gyro zum laufen zu bewegen, aber es will nicht so recht. Hier mal der Code. Es handelt sich um einen ADIS16250 von Analog Device. Programmieren tue ich auf einem MSP430 mit mspgcc und Eclipse. Dachte mir ich lese zuerst mal die Spannung aus, die kann ich gut überprüfen. Die Adresse für die Spannung ist 0x03 float ADIS16250_Read_spannung12bit(unsigned short address) { unsigned int result = 0; // Variable für Messwert float result_temp = 0; // Variable für Resultat definieren P6OUT &= 0xF7; // setze Chip select P6.3 low TXBUF0 = address; // Sende Adresse while ((IFG1 & UTXIFG0) == 0); // USART0 TX buffer ready? while ((IFG1 & URXIFG0) == 0); // USART0 RX buffer ready? char dummy = RXBUF0; // RXBUF0 auslesen (somit: löschen TXBUF0 = 0x00; // Sende Dummy Byte um SCLK zu generieren while ((IFG1 & UTXIFG0) == 0); // USART0 TX buffer ready? while ((IFG1 & URXIFG0) == 0); // USART0 RX buffer ready? dummy = RXBUF0; P6OUT |= 0x08; // setze chip select high delay(100); P6OUT &= 0xF7; // setze chip select low TXBUF0 = 0x00; // Sende Dummy Byte um SCLK zu generieren while ((IFG1 & UTXIFG0) == 0); // USART0 TX buffer ready? while ((IFG1 & URXIFG0) == 0); // USART0 RX buffer ready? result = RXBUF0; // erhalte MSB des Sensors result = result << 8; // Shifte MSB um 8 nach links TXBUF0 = 0x00; // Sende Dummy Byte um SCLK zu generieren while ((IFG1 & UTXIFG0) == 0); // USART0 TX buffer ready? while ((IFG1 & URXIFG0) == 0); // USART0 RX buffer ready? result |= RXBUF0; // erhalte LSB des Sensors P6OUT |= 0x08; // Setze P6.3 high (Chip Select ADIS16250 löschen) result &= 0x0FFF; // maskiere oberste 4 bit mit 0 result_temp = result; // resultat als float abspeichern result_temp = (result_temp * 0.001832); // Counts in Volt umrechnen return result_temp; } Hier dann noch wie ich den SPI initialisiert habe: void init_spi_0(void) { U0CTL |= SWRST; P3SEL = 0x0E; // Port 3 fur SPI verwenden U0CTL = CHAR + SYNC + MM; // SPI-Modus (8-bit, Master) U0TCTL = CKPL + SSEL0 + STC; // (polarity, ACLK, 3-wire) U0BR0 = 0x02; // SPICLK = ACLK/2 entspricht 500kHz U0BR1 = 0x00; U0MCTL = 0x00; ME1 |= USPIE0; // Modul aktivieren U0CTL &= ~SWRST; // SPI aktivieren } Ich bekomme ganz komische Werte Werte, meist 7.5….Volt. Das würde heissen es sind alles „1er“. Manchmal bekomme auch auch genau die Hälfte, 3.75….. und dann wieder 0. Schön immer in der selben Reihenfolge. Habe echt keinen Plan mehr wo ich noch suchen soll. Irgendwas verstehe ich an dem Datenblatt falsch. Wäre toll wenn ihr mir helfen könntet. Gruss reflection