Thermocouple MAX31855k et picaxe

PieM

Senior Member
Bonjour,

Ayant à réaliser un programmateur-régulateur pour four de céramiste, je me suis intéressé à un ampli avec correction de soudure froide destiné aux sondes type K (-200 à 1250°C)
C'est le MAX31855 Doc ici

On le trouve sous une forme plus facile à utiliser http://www.adafruit.com/products/269
Il est interfaçable ainsi sous tension de 5V.
La liaison avec le µC se fait par liaison série SPI.
Les données sont contenues dans un ensemble de 32 bits.

Afin de l'utiliser avec des Picaxes non pourvus de la fonction shiftin, la solution bit-banging est ici retenue.
Compte tenu de l'appli, bien que décelées, les températures négatives (en complément à 2) ne sont pas affichées, pas plus que les décimales.

La lecture se fait sous forme de deux fois 16bits dans b1 b0 et b3 b2 permettant ainsi de récupérer les bits de signe des température de sonde, et ambiante, ainsi que les bits de défauts:
connexion de sonde ouverte
court circuit sonde avec Gnd
court circuit sonde avec Vcc (non utilisé ici)

Ci joint la partie programme concernant la lecture des températures:

Code:
'##############################################
' Ampli thermocouple K  Max31855K -
' V01-Utilisation pour T positive 
' Détection défaut de sonde
' PieM 20140511
' Afficheur série ELCD204BLB
'##############################################

#picaxe 14M2
#no_data

'*********** symboles **************************

symbol clk = C.0		' clock 
symbol dat = pinC.1		' data 
symbol Cs = C.2		' chip select
symbol Aff = C.4		' Out afficheur serie

symbol compt = b10		' compteur
symbol V_fr = w0		' var temperature soudure froide	
symbol V_ch = w1		' var temperature thermocouple
symbol T_fr = w2		' temperature soudure froide
symbol T_ch = w3		' temperature thermocouple

'******** accueil ********************************
gosub FAC	'effacement afficheur

serout Aff, T4800,($A1,6,0,$A2,"BONJOUR", 0)
serout Aff, T4800,($A1,2,3,$A2,"Soft ThermoK-V01",0)
pause 3000
gosub FAC
'*************************************************
main:
do
	Low Cs 
	V_ch = 0					'Transfert BITS 31 a 16  MSB first
	for compt = 0 to 15	; 
	  	V_ch = V_ch * 2 + dat	' shift << 1 et ecriture bit data 
	 	pulsout clk,1			' pulse clock 
	next compt

	V_fr = 0 
	for compt = 0 to 15			'Transfert BITS 15 a 0 MSB First
	  V_fr = V_fr * 2  + dat		; 
	  pulsout clk,1		
	next compt
	high Cs
	

	T_fr = V_fr *2/512	' temp fr en deg C (shifts: << 1  et >> 9 )
	T_ch = V_ch *2/32	' temp ch en deg C (shifts: << 1  et >> 5 )
	
	'detection température négative : pas d'affichage.
	if bit15= 1 or bit31= 1then
		serout Aff, T4800,($A1,0,0,$A2,"Temp negative!     ",0): pause 1000
	endif 
	
	'affichage des températures
	serout Aff, T4800,($A1,0,0,$A2,"Thermosonde: ", #T_ch,223,"C  ", 0)
	serout Aff, T4800,($A1,0,1,$A2,"T. Ambiante: ", #T_fr,223,"C  ", 0)
	
	b0 = b0* 16 			' 4 shifts gauche pour eliminer les MSB.
	if b0>0 then 			' détection bits de defaut sur sonde
	gosub decod_def : endif	' décodage et affichage
	
loop
'====================================
FAC:
serout Aff, T4800,($A3,$01)
serout Aff, T4800,($A3,$0C)
pause 150
return
'====================================
decod_def:
gosub FAC

if bit4 = 1 then
serout Aff, T4800,($A1,0,0,$A2,"Circuit ouvert!    ",0): endif 'circuit ouvert
if bit5 = 1 then 
serout Aff, T4800,($A1,0,3,$A2,"Court Circuit Gnd! ",0): endif 'CC avec Gnd

pause 1000 
gosub FAC
return
 
Top