Electromag1 Circuits électroniques et Picaxes

Petit site pour ceux qui bricolent en électronique en général et sur les PICAXES en particulier.
Les PICAXES sont des microprocesseurs (PIC de Microship) programmables en BASIC. Pleins de qualités, pas chers, ultra faciles à programmer.
Tout (ou presque) est sur le site du distributeur Gotronic (voir les liens).
Les pages  seront ajoutées ou modifiées petit à petit.
Dans le but d'améliorer ce blog, communiquez moi vos remarques et les erreurs que vous pouvez constater.
Pour me contacter: Envoyez un mail à l'adresse : mag1mic@free.fr .  Tout message reçoit une réponse
Pour retourner au menu, Cliquer sur "LISTE DES PAGES", ici ou en haut de la colonne de gauche
Pour laisser un message, allez dans le "LIVRE D'OR"
Bonne visite
 
 

Thermocouple MAX31855K et picaxe 08M2



Datasheet du MAX31855

Après le test du MAX6675, voici son remplaçant, avec un registre de 32 bits au lieu de 16 pour lire la température du thermocouple de -270 à + 1372°C (type K) et de la température interne du driver.

La lecture du registre 32 bits se fait en deux fois, pour extraire deux variables de 16 bits. Ces variables contiennent les informations de température: thermocouple et interne avec des bits d'alarmes diverses: court circuit, coupure, défauts divers (voir datasheet).
Après avoir fait un peu de tri, on peut afficher les températures:


 
Comparaison avec
un thermomètre  de référence                      
on voit un peu mieux
le petit circuit avec le driver MAX31855

Doit manquer un peu de  glace...

Le code:
La fonction SPIIN n'est pas disponible sur la version M2 des picaxes. Elle est remplacée par une macro pour lire le registre du MAX31855 et extraire les deux variables de 16 bits.
Il faut un peu manipuler ces variables, traiter les valeurs négatives, afficher les températures et ajouter quelques alarmes.
Rien de très compliqué.

;lecture thermocouple par MAX31855 MM 24072016
;La broche SO va prendre successivement la valeur de chaque bit du registre.
; scanné poids fort en tête
;

#picaxe 08M2
#no_data
symbol CLK=C.1        ; pulse horloge
symbol CSB=C.2        ;demande lecture  _____/
symbol SO=pinC.3        ;bit de donnée serial out
symbol def1=bit0
symbol def2=bit1
symbol cpt=b1
        ;b2,b3,b4,b5,b6,b7,b8 chiffres affichage
symbol sig=b9            ;signe valeur
symbol decim=w10        ;décimales
symbol varw=w13            ;var temporaire
symbol tempint=w12        ;tempé interne
symbol temptherm=w11    ;tempé thermocouple    
setfreq M4                
symbol baud=N2400_4
;*****************************
#macro spin(varw)        ;macro SPIIN
    varw = 0
    for cpt = 1 to 16
        varw=varw * 2 + SO        ;décalage à gauche + SO (0 ou 1)    
        pulsout CLK,1            ;pulse horloge     
    next cpt    
#endmacro
;************************************
    pause 500
    serout C.0,baud, (254,1)
    ;serout C.0,baud, (254,131,"Temp",1,"rature")
    high CSB    ;première conversion
debut:
    Do    
        pause 5000        ;1 mesure par 5 secondes
        low CSB            ;lecture registre            
        spin(temptherm)    ;exécution macro 16 premiers bits (poid fort en tête
        spin(tempint)      ;seonde moitié du registre
        high CSB                ;nouvelle conversion
        ;temptherm=%0000011001001100    ;test 100,75 °C
        ;tempint=  %0001100100000000    ;test 25 °C
;*****defaut **********************
        def2=tempint//2            ;isol bit défaut
        def1=temptherm//2        ;isol bit défaut
        if def1>0 or def2>0 then erreur
;**** temp thermocouple ******************************        
        sig=" "
        temptherm=temptherm/4    ;suppression des 2 derniers bits
        if temptherm>=$2000 then    ;test 1er bit des 14 bits pour valeur négative
            sig="-"
            temptherm = not temptherm + 1  ;complément à 2 pour valeur "positive"      
        endif        
        decim=temptherm//4        ;mémo des 2 décimales
        temptherm=temptherm/4    ;suppression des décimales-> val entière
        temptherm=temptherm//4096    ;on garde les 12 derniers bits        
        bintoascii temptherm,b4,b4,b5,b6,b7        
        decim= decim*25        ;valeur des décimales en 1/4 de degré
        bintoascii decim,b2,b2,b3 ;découpage pour affichage      
        serout C.0,baud, (254,128,"Ttc ",sig,b4,b5,b6,b7,",",b2,b3,"  ßC ")
;**** temp interne ****************    
        sig=" "    
        tempint=tempint/16        ;supp 4 derniers bits ->val entière    
        if tempint>= 1023 then    ;c'est une valeur négative!
            sig="-"
            tempint= not tempint + 1 ;complément à 2 pour valeur "positive"
        endif
        decim=tempint//16
        tempint=tempint/16
        tempint=tempint//256
        decim=decim*625
        bintoascii decim,b2,b2,b3,b4,b5        
        bintoascii tempint,b6,b6,b6,b7,b8
          serout C.0,baud, (254,192,"Tint ",sig,b6,b7,b8,",",b2,b3,b4,b5,"ßC")            
    loop
erreur:
        serout C.0,baud, (254,1,254,128,"     ERREUR")
        if def1=1 then
        serout C.0,baud, (254,194,"PAS DE SONDE")
        else
        serout C.0,baud, (254,193,"DEFAUT INTERNE")
        endif
        pause 1000
        goto debut

 



Créer un site
Créer un site