Gast
#523381
Hey, Ich versuche einen 10bit ADW mit meinem MCU über den SPI auszulesen. Ich weiß, dass ich ihm erst 8bit schicken muss damit er wandelt. Dann kann ich mit nem schreiben einer 0 auf das SPDR die ersten 8bits abholen und mit einem erneuten schreiben einer 0 auf SPDR die 2. 8 bits. So weit so gut, denn das Ding zeigt mir immer nur 11111111 11111111 an. Das kann garnicht sein denn im Datenblatt heisst es: Das Ergebnis kommt mit einer "leading zero". Ich hab das ganze im AVR Studio noch mal simuliet und da ist mit aufgefallen, dass dach dem ich SPDR=0; gesetzt habe, das SPDR im nächsten Takt wieder den vorrangegangenen wert annimmt. Ist das normal? ist das der Fehler? oder kann mir jemand sagen wo hier der Fehler liegt?? Ich hänge hier noch mal meinen code dran.... int read_max(void) { unsigned int ReHigh, ReLow, tot; spi_on(); ----------(/SS = 0) _delay_us(100); SPDR=0xae;-------(code für den AD: Kanal 4, eigener Takt) loop_until_bit_is_set(SPSR, SPIF); ReHigh=SPDR; _delay_ms(100); SPDR=0; !!!! Nach diesem Befehl nimmt SPDR wieder den vorrangegangenen Wert an!!! loop_until_bit_is_set(SPSR, SPIF); ReHigh=SPDR; _delay_us(100); SPDR=0; loop_until_bit_is_set(SPSR, SPIF); ReLow=SPDR; _delay_us(100); spi_off(); tot=(unsigned int)((ReHigh*256+ReLow)/8); return tot; } Wäre super wenn mir jemand helfen könnt ich bin hier am verzweifeln!! MfG loki