Forum: Mikrocontroller und Digitale Elektronik Max 6675 SPI Temperatur auslesen


von David (Gast)


Lesenswert?

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

von mr. mo (Gast)


Lesenswert?

Ist das zum Üben oder warum benutzt du nicht SPI? Ansonsten wäre noch 
ein Logic-Analyzer hilfreich.

von David (Gast)


Lesenswert?

Ja, das ist zum Üben gedacht.

Ein Logic-Analyzer wurde bereits benutzt, der Eingang A3 (DO) gibt 
nichts zurück. (Warum?)
Die beiden Ausgänge CLK und CS erfüllen ihre Aufgabe wie vom Max6675 
Datenblatt gefordert.

von Johannes S. (Gast)


Lesenswert?

steht das wirklich so im Programm: Ctemp = v * 0, 25;
besser wäre: Ctemp = v * 0.25f;

von David (Gast)


Lesenswert?

Das Problem ist ja, er gibt (laut Logic Analyzer) an A3 (DO) nur 0en 
aus.

von mr. mo (Gast)


Lesenswert?

David schrieb:
> Die beiden Ausgänge CLK und CS erfüllen ihre Aufgabe wie vom Max6675
> Datenblatt gefordert.

Dann sollte der Chip aber nach 16 Takten auf CLK irgendwas rausgetaktet 
haben. Hast du ein Screenshot vom LA? Schaltplan evtl. Foto vom Aufbau?

von David (Gast)


Lesenswert?

mr. mo schrieb:
> David schrieb:
>> Die beiden Ausgänge CLK und CS erfüllen ihre Aufgabe wie vom Max6675
>> Datenblatt gefordert.
>
> Dann sollte der Chip aber nach 16 Takten auf CLK irgendwas rausgetaktet
> haben. Hast du ein Screenshot vom LA? Schaltplan evtl. Foto vom Aufbau?

Mit einer bereits fertigen Bibliothek hat es funktioniert/funktioniert 
es. Aufbau Fehler und Hardware Versagen kann ausgeschlossen werden.

von Wolfgang (Gast)


Lesenswert?

David schrieb:
> A4=VCC
> A5=GND

Das ist nicht ernst gemeint, oder?

Was haben VCC bzw. Gnd an A4 bzw. A5 zu suchen.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.