Guten Tag Community,
ich stehe vor einem Problem, und zwar dass ich bei dem MAX31856 Baustein
zwar eine "Wertartige" Rückgabe bekomme, diese sich aber bei einer
Temperaturänderung kein bisschen ändert, sie schwankt nur Generell ein
bisschen.
Als erstes schicke ich dem MAX31856 folgende Werte:
1 | SPI_write(0x8103);
|
2 |
|
3 | SPI_write(0x8081);
|
hier das Datenblatt dazu:
https://datasheets.maximintegrated.com/en/ds/MAX31856.pdf
Ab Seite 18 sind die Register beschrieben und welche Werte was bewirken.
SPI_write sieht von der Funktion aus wie die erste Hälfte von folgender
SPI_read Funktion:
1 | uint32_t SPI_read(uint8_t address, uint8_t bits)
|
2 | {
|
3 |
|
4 | uint8_t i;
|
5 | uint32_t data=0;
|
6 | P0_9_reset(); //CS
|
7 | simple_delay(5);
|
8 |
|
9 | for (i = 8; i; i--)
|
10 | {
|
11 | P0_8_reset(); //Clock
|
12 | if(address & 0x80)
|
13 | {
|
14 | P0_6_set();
|
15 | }
|
16 | else
|
17 | {
|
18 | P0_6_reset();
|
19 | }
|
20 | simple_delay(10);
|
21 | address = address << 1;
|
22 | P0_8_set(); //Clock
|
23 | P0_6_reset(); //MOSI
|
24 | simple_delay(10);
|
25 | }
|
26 | for (i = bits; i>0; i--)
|
27 | {
|
28 | data = data << 1;
|
29 |
|
30 | P0_8_reset(); //Clock
|
31 |
|
32 | simple_delay(10);
|
33 |
|
34 | P0_8_set(); //Clock
|
35 |
|
36 | if(P0_7_read())
|
37 | {
|
38 | data |= 1;
|
39 | }
|
40 | simple_delay(10);
|
41 |
|
42 | }
|
43 | P0_9_set(); //CS
|
44 | simple_delay(5);
|
45 | return(data);
|
46 | }
|
P0_X_set() und reset sind aus der GPIO.h und setzen nur das
entsprechende Registerbit. simple_delay() ist einfach testweise eine
while Schleife, welche die Anzahl der Durchläufe bekommt. Zwischen jeder
24 Bit Abfrage auf 0x0C wird 400000 Durchläufe gewartet, was auf dem
Oszi etwas über 200ms beträgt, was mehr als Genug für einen neuen Wert
sein sollte.
Hat jemand eine Idee, was das Problem auslösen könnte? Wenn noch
Informationen meinerseits fehlen sollten, reiche ich die natürlich noch
nach.
Sonst sehe ich immer nur Lösungen mit dem Arduino, aber mit diesem
Controller sollte das doch eigentlich genau so gut gehen.
Edit: AVDD und GVDD sind Gebrückt und werden mit einem Netzteil mit 3,3V
versorgt. GNDs sind auch alle gebrückt.
Edit2: Ich sehe grad, auf dem Oszi sind die Bezeichnungen für Miso und
Mosi vertausch, also ich schicke dem MAX das "0x0C" und bekomme das
erste Signal auf dem Oszi zurück, welches sich aber bei einer
Temperaturänderung nicht ändert.
Besten Dank im Voraus und Gruß,
Dennis