Hallo Willi,
danke für deine Antwort.
Da gebe ich dir Recht, aber die Zeit ist auch nicht das Problem (das war nur meine erste Vermutung). Betreibst du deine Module an 5V?
Ich lese im Hauptprogramm die Temperatur alle 500ms aus und in deinem Programm jede Sekunde und trotzdem bekomme ich so wilde Werte das da auch mit Filtern nichts zu machen ist. (Im Hauptprogramm ist ein Filter drin)
Selbst die Referenztemperatur passt überhaupt nicht mehr...
Hier mal dein angepasster TestCode und ein paar Werte (bei Raumtemperatur ca. 22°C):Atmega328P_MAX31855.TXT
Code:
'*******************************************************************************.
'*******************************************************************************
'******************************** MAX31855 *************************************
'*******************************************************************************
'************************** 25.08.2020 by CYBORG *******************************
'*******************************************************************************
'*******************************************************************************
$regfile = "m328pdef.dat"
$crystal = 8000000
$hwstack = 40
$swstack = 40
$framesize = 40
Baud = 9600
'*************************** UART - Interrupt **********************************
Dim Iuart As Integer
On Urxc Onrxd 'Interrupt-Routine setzen
Enable Urxc 'Interrupt URXC einschalten
Enable Interrupts 'Interrupts global zulassen
'************************* I2C - DISPLAY 1602 **********************************
$lib "YwRobot_Lcd_i2c.lib" 'My I2C driver for the LCD
Const Pcf8574_lcd = &H4E 'Defines the address of the I/O expander for LCD
Dim Lcd_backlight As Byte
Lcd_backlight = 1 'Hintergrundbeleuchtung einschalten (1/0)
Config Scl = Portc.5 'Configure I2C SCL
Config Sda = Portc.4 'Configure I2C SDA
Config Lcd = 16 * 2 'nicht unbedingt nötig
Config I2cdelay = 1
Waitms 300 'warte bis Kondensator bei Ta0 geladen, auch für LCD-Init!
'**************************** SPI - MAX31855 ************************************
Config Spi = Hard , Interrupt = Off , Data_Order = Msb , Master = Yes , Polarity = High , Phase = 1 , Clockrate = 16 , Noss = 1
Spiinit
Config Portb.3 = Output
Max_cs Alias Portb.3
Max_cs = 1
Dim Text11 As String * 40
Dim Temp_s As Single
Dim Element As Integer
Dim Element_l As Byte At Element Overlay
Dim Element_h As Byte At Element + 1 Overlay
Dim Referenz As Integer
Dim Referenz_l As Byte At Referenz Overlay
Dim Referenz_h As Byte At Referenz + 1 Overlay
print "Start"
Locate 1 , 1
Lcd "Start"
wait 1
'**************************** HAUPTSCHLEIFE ************************************
Do
Max_cs = 0
Spiin Element_h , 1
Spiin Element_l , 1
Spiin Referenz_h , 1
Spiin Referenz_l , 1
Max_cs = 1
cls
Text11 = Bin(referenz)
print text11
Locate 1 , 8
Lcd Text11
Text11 = Bin(element)
print text11
Locate 1 , 1
Lcd Text11
Shift Referenz , Right , 4
Temp_s = Referenz \ 16
Text11 = Fusing(temp_s , "#.#")
print text11
Locate 2 , 1
Lcd Text11
Shift Element , Right , 2
Temp_s = Element \ 4
Text11 = Fusing(temp_s , "#.#")
print text11
Locate 2 , 8
Lcd temp_s
waitms 1000
Loop
end
'**************************** UART - Interrupt *********************************
Onrxd:
Iuart = Udr
Print "+++ Empfangen: " ; Iuart
Select Case Iuart
'RESET
Case 123
Print "+++ Reset: " ; Iuart
Goto &H3C00 'M328
Case Else
Print "+++ Unbekannter Befehl: " ; Iuart
End Select
Return
Lesezeichen