Hallo, ich versuche mit einem ATmega 168 auf einer Arduino Plattform über SPI mit einem ADC zu kommunizieren. Leider bekomme ich dabei komische Werte aus. Ich lese ein Register aus, in welchem eigentlich der Wert 0 stehen sollte. Ich bekomme auch am Anfang den Wert 0 zurück doch nach kurzer Zeit kommt auf einmal der Wert 255 zurück und dann mal 128 und dann wieder 0. Also die Werte schwanken wenn man so möchte. An der Verdrahtung kann es nicht liegen, da das ganze auf eine EVAL-Platine ist. Also denk ich eher an den Code. Anbei der Code.
1 | #include "SPI.h" |
2 | |
3 | int ss=10; |
4 | unsigned long adcValue; |
5 | |
6 | void setup(){ |
7 | pinMode(ss, OUTPUT); |
8 | SPI.begin(); |
9 | SPI.setDataMode(SPI_MODE2); |
10 | SPI.setClockDivider(SPI_CLOCK_DIV32); |
11 | SPI.setBitOrder(MSBFIRST); |
12 | Serial.begin(9600); |
13 | }
|
14 | |
15 | void loop() |
16 | {
|
17 | digitalWrite(ss,LOW); |
18 | delayMicroseconds(10); |
19 | SPI.transfer(0x0F); |
20 | delayMicroseconds(5); |
21 | adcValue = SPI.transfer(0x0); |
22 | digitalWrite(ss,HIGH); |
23 | Serial.print("analog value ="); |
24 | Serial.println(adcValue); |
25 | Serial.print('\n'); |
26 | delay(1000); |
27 | }
|
Was mache ich Falsch?