1 | #include "SPI.h" |
2 | |
3 | int ss=10; |
4 | unsigned long adcValue; |
5 | |
6 | void setup(){ |
7 | pinMode(ss, OUTPUT); |
8 | |
9 | SPI.setDataMode(SPI_MODE2); |
10 | SPI.setClockDivider(SPI_CLOCK_DIV32); |
11 | SPI.setBitOrder(MSBFIRST); |
12 | SPI.begin(); |
13 | Serial.begin(9600); |
14 | }
|
15 | |
16 | void loop() |
17 | {
|
18 | adcValue = spi_read(0x17); |
19 | // Serial.println(adcValue);
|
20 | delay(1000); |
21 | }
|
22 | |
23 | unsigned long spi_read ( char read_command ) { |
24 | digitalWrite (ss,LOW); |
25 | unsigned char b2,b1,b0; |
26 | delayMicroseconds(50); |
27 | SPI.transfer (read_command); |
28 | delayMicroseconds(5); |
29 | b2 = SPI.transfer(0x00); |
30 | b1 = SPI.transfer(0x00); |
31 | b0 = SPI.transfer(0x00); |
32 | Serial.println(b2, BIN); |
33 | Serial.println(b1, BIN); |
34 | Serial.println(b0, BIN); |
35 | digitalWrite (ss,HIGH); |
36 | return (unsigned long) b2<<16 | (unsigned long) b1<<8 | (unsigned long) b0; |
37 | }
|
Hallo Habe einen SPI ADC den ich auslese. Hatte da mit schwankenden Werten zu kämpfen. Nun habe ich mir mal die Binär-Werte angeschaut die über das SPI-Transfer ankommen am ATmega 168. b2 ist immer 0 und b1 sowie b0 sind mal 8 Bit lang und mal auch nur 4 Bit lang. Also gehe ich davon aus, dass ein Fehler in der SPI Routine dran Schuld sein muss. Ist mein Programm falsch? Arbeite mit Arduino. Suche bei Goolge und allen Foren ergeben das gleiche vorgehen bei dem Programm. Aber Hardware kann doch nicht falsch sein oder?