Hallo,
ich versuche (leider vergeblich) Temperaturen über den SPI Sensor "Max
6675" auszulesen. Ich finde den Fehler einfach nicht, beim Auslesen via
seriellen Monitor (Arduino) wird immer nur "0.00" ausgegeben, warum auch
immer.
A1= CLK
A2=CS
A3=DO
A4=VCC
A5=GND
Hier mein Code:
1 | #include "stdlib.h"
|
2 | #include "util/delay.h"
|
3 | int v = 0;
|
4 | float Ctemp;
|
5 |
|
6 |
|
7 | void setup(void) {
|
8 | Serial.begin(9600);
|
9 | while (!Serial);
|
10 | pinMode(A1, OUTPUT);
|
11 | pinMode(A2, OUTPUT);
|
12 | pinMode(A3, INPUT);
|
13 | pinMode(A4, OUTPUT);
|
14 | pinMode(A5, OUTPUT);
|
15 | digitalWrite(A2, HIGH);
|
16 | digitalWrite(A1, LOW);
|
17 | digitalWrite(A4, HIGH);
|
18 | digitalWrite(A5, LOW);
|
19 | }
|
20 |
|
21 | void loop(void) {
|
22 | delay(500);
|
23 | v = spiRead();
|
24 | if (v == -1) {
|
25 | Serial.println ("Sensor fehlt");
|
26 | }
|
27 | else {
|
28 | Ctemp = v * 0, 25;
|
29 | Serial.println(Ctemp);
|
30 |
|
31 | }
|
32 | }
|
33 |
|
34 | int16_t spiRead(void) {
|
35 | int16_t value = 0;
|
36 | int8_t i;
|
37 | digitalWrite(A2, LOW);
|
38 | delayMicroseconds(1);
|
39 | digitalWrite(A1, HIGH);
|
40 |
|
41 | delayMicroseconds(1);
|
42 | digitalWrite(A1, LOW);
|
43 |
|
44 | for (i = 14; i >= 0; i--) {
|
45 | digitalWrite(A1, HIGH);
|
46 |
|
47 | delayMicroseconds(1);
|
48 | value += digitalRead(A3) << i;
|
49 |
|
50 | digitalWrite(A1, LOW);
|
51 | delayMicroseconds(1);
|
52 | }
|
53 | digitalWrite(A2, HIGH);
|
54 | delayMicroseconds(1);
|
55 | if ((value & 0x04) == 0x04) return -1;
|
56 |
|
57 | return value >> 3;
|
58 | }
|
Ich hoffe, dass ihr mir weiterhelfen könnt, auch das Erhöhen der Delays,
führte nicht zum Erfolg.
Gruß,
David