Bienvenue aux nouveaux arrivants sur FantasPic !

- Pensez à lire les règles durant votre visite, il n'y en a pas beaucoup, mais encore faut-il les respecter .
- N’hésitez pas à faire des remarques et/ou suggestions sur le Forum, dans le but de l'améliorer et de rendre vos prochaines visites plus agréables.
- Vous pouvez regarder votre "panneau de l'utilisateur" afin de configurer vos préférences.
- Un passage par "l'utilisation du forum" est recommandé pour connaître les fonctionnalités du forum.

--- L’équipe FantasPic ---
Forum général sur l'Assembleur !

Modérateur : mazertoc

Thermocouple MAX6675
Temps-x
Avatar de l’utilisateur
Expert
Expert
Messages : 2596
Enregistré en : juillet 2016
Localisation : Terre

#1 Message par Temps-x » ven. 24 avr. 2020 03:10

Bonjour tout le forum,

Pour finir mon projet sur Impression de PCB, avec plastifieuse, géré par microcontrôleur ICI , il me fallait un capteur de tempèrature, j'en avait essayé plusieurs, mais j''arrivais pas à les mettre au point .

Je me suis alors tourné vers le Max6675, et là surprisse :eek: impeccable, les températures étaient correctes, et linéaires.

J'en profite pour vous le présenté dans la même occasion, sur comment le mettre en fonction.

Module Max6675
Max6675.jpg

MaX6675 au prix de 2,10 euros, voici son datasheet

Caractéristique du Max6675

- Mesure de température 0°C à +1024°C
- Résolution 0.25 °C.
- Alimentation 3 volts à 5 volts
- Capable de détecter si sa sonde est débranché
- Protocole de communication mode SPI
- Obligation d'utiliser une sonde de type K


Il fallait aussi la sonde de type K qui va avec, au prix de 0,40 euro
Sonde thermocouple-3.jpg


Je me suis aperçu à la réception de cette sonde que le fils était coupé, pour la réparer j'ai torsadé les deux fils l'un sur l'autre, et sa fonction très bien comme ça.

Pour visionner la tempèrature j'ai utilisé l'écran Nokia 5110, voici son datasheet

Pour gérer tout ça je me suis servi d'un microcontrôleur Pic18F26K22, voici son datasheet

Mise en fonction du Max6675

Sur ce module on n'a rien à envoyer, il faut juste lire les informations, pour faire cela, j'ai utilise le mode SPI bit bang, ce qui le rends compatible pour la plupart des microcontrôleurs Pic18Fxxxx, Pic16Fxxxx, Pic12Fxxxx

Code : Tout sélectionner

#DEFINE sck    LATA,6                 ; RA6 ==> horloge de synchronisation du Max6675
#DEFINE so     PORTA,7                ; RA7 ==> renvois les informations du Max6675
#DEFINE cs     LATC,0                 ; RC0 ==> activer ou désactiver la transmission du Max6675
 


Schéma

Schéma.jpg


Vidéo de test du Max6675

https://youtu.be/3zWBqQH5rco

Le code

Le code ASM a été écrit avec jens file Editor 3.95

Code : Tout sélectionner

;***********************************************************************************************

    Errorlevel-302                        ; Supprime le message "Ensure that bank bits are correct" 

    radix dec                             
; par defaut en mode décimal

    list p
=18f26K22                       ; processeur utilisé                  
    
#include <p18f26K22.inc>              ; Définitions des constantes

;***********************************************************************************************

;
 CONFIG11H
     CONFIG FOSC 
= INTIO67 
     CONFIG FCMEN 
= OFF 
     CONFIG IESO 
= OFF
; CONFIG2L
     CONFIG PWRTEN 
= OFF 
     CONFIG BOREN 
= OFF 
     CONFIG BORV 
= 190
; CONFIG2H
     CONFIG WDTEN 
= OFF 
     CONFIG  WDTPS 
= 1
; CONFIG3H
     CONFIG CCP2MX 
= PORTC1                         
     CONFIG PBADEN 
= OFF
     CONFIG CCP3MX 
= PORTC6
     CONFIG HFOFST 
= OFF
     CONFIG T3CMX 
= PORTC0
     CONFIG P2BMX 
= PORTC0
     CONFIG MCLRE 
= INTMCLR
; CONFIG4L
     CONFIG STVREN 
= OFF 
     CONFIG LVP 
= OFF 
     CONFIG XINST 
= OFF 
     CONFIG DEBUG 
= OFF
; CONFIG5L
     CONFIG CP0 
= OFF 
     CONFIG CP1 
= OFF 
     CONFIG CP2 
= OFF 
     CONFIG CP3 
= OFF
; CONFIG5H
     CONFIG CPB 
= OFF 
     CONFIG CPD 
= OFF
; CONFIG6L
     CONFIG EBTR0 
= OFF
; CONFIG6H
     CONFIG EBTR1 
= OFF
; CONFIG7L
     CONFIG EBTR2 
= OFF
; CONFIG7H
     CONFIG EBTR3 
= OFF

;*************************************** assignations ***************************************** 

#DEFINE rst    LATA,5                 ; RA5 ==> reset de l'écran Nokia
#DEFINE clk    LATA,4                 ; RA4 ==> horloge de synchronisation de l'écran Nokia 
#DEFINE din    LATA,3                 ; RA3 ==> entrée des données de l'écran Nokia 
#DEFINE dc     LATA,2                 ; RA2 ==> sélection du mode  de l'écan Nokia : commande = 0, donnée = 1
#DEFINE ce     LATA,1                 ; RA1 ==> activer ou désactiver la transmission de l'écran Nokia
           

#DEFINE sck    LATA,6                 ; RA6 ==> horloge de synchronisation du Max6675
#DEFINE so     PORTA,7                ; RA7 ==> renvois les informations du Max6675
#DEFINE cs     LATC,0                 ; RC0 ==> activer ou désactiver la transmission du Max6675
                                      ; 
#DEFINE led1   LATC,4                 ; RC4 ==> led verte, témoin de mise en fonction de l'appareil

#DEFINE buzzer LATC,7                 ; RC7 ==> alarme pour prévenir fils de débranché 

;********************************* "déclaration des variables" *********************************

     CBLOCK H'20'                          ; bank0  
      loop1               
:1
      loop2               
:1
      loop3               
:1
      loop4               
:1
      loop5               
:1                    
      loop6               
:1    
      loop7               
:1
      loop8               
:1      
      loop9               
:1
    
      bits                
:1

      étalonner           
:1  

      position            
:1

      passage             
:1

      durée               
:1              ; utilisé pour macro : tempo  

      lecture             
:1              ; utilisé pour macro : print
      lettre              
:1
      phrase              
:1

      virgule             
:1

      vide                
:1              ; utilisé pour macro : espace

      res8                
:1
      res16               
:1

      unité               
:
      dizaine             
:1
      centaine            
:1         
      millieme            
:1  
      dix_millieme        
:1

      temps               
:2
      tmps                
:1

      adresse_low         
:
      adresse_hig         
:1

      donner              
:
 
    ENDC

;********************************** "déclaration des macros" ***********************************
;*************************
 "Macro pour se positionner dans un tableau" ************************* 
tableau MACRO adresse

      movlw UPPER
(adresse)                ; 
      movwf TBLPTRU                       
;
      movlw HIGH(adresse)                 ;
      movwf TBLPTRH                       ; 
      movlw LOW
(adresse)                  ;
      movwf TBLPTRL                 
     
    ENDM

;************************** Macro pour écrit dans l'eeprom  ************************************ 
ecriture_eeprom MACRO valeur1,valeur2,valeur3,valeur4 

      local nombre2,good_bye2
                                           
      movlw valeur4
  
      btfss WREG,0                        ; valeur4 = 0 que pour les nombres 
      bra nombre2                         ; valeur4 = 1 que pour les variables

      movf valeur1,W                      ; adresse du poids fort 
      movwf adresse_hig                   ;
                          
      movf valeur2,W                      ; adresse du poids faible
      movwf adresse_low                   ;

      movf valeur3,W                      ; donnée à écrire dans l'
eeprom
      movwf donner                        
;

      bra good_bye2

nombre2
      movlw valeur1                       
; 
      movwf adresse_hig                   
; 

      movlw valeur2                       
;
      movwf adresse_low                   ;
 
      movlw valeur3                       
;
      movwf donner                        ;


good_bye2
      call eeprom_ecriture 

    ENDM

;*************************** Macro pour lire dans l'eeprom  ************************************ 
lecture_eeprom MACRO valeur1,valeur2,valeur3

      local nombre3,good_bye3

      movlw valeur3
  
      btfss WREG,0                        ; valeur3 = 0 que pour les nombres 
      bra nombre3                         ; valeur3 = 1 que pour les variables

      movf valeur1,W                      ; adresse du poids fort 
      movwf adresse_hig                   ;
                          
      movf valeur2,W                      ; adresse du poids faible
      movwf adresse_low                   ;

      bra good_bye3

nombre3
      movlw valeur1
      movwf adresse_hig

      movlw valeur2
      movwf adresse_low

good_bye3
      call eeprom_lecture

    ENDM
                                  
;************************** "Macro pour se positionner sur l'
écran" **************************** 
locate MACRO hauteur,largeur

      movlw hauteur                       ; hauteur de l'écran 0 à 5 
      movwf loop8                         ;
                          
      movlw largeur                       ; largeur de l'écran 0 à 84
      movwf loop9                         ; 
 
      rcall position_nokia                ;
      
    ENDM

;************************** "
Macro pour afficher le texte sur l'écran" **************************** 
print MACRO longueur,emplacement

      movlw longueur                      ; longueur de la donnée 
      movwf phrase                        ;  
                                          ;  
      movlw emplacement                   ;  
      movwf lecture                       ; emplacement du départ de la donnée à lire

      rcall affiche_nokia                 ; 

    ENDM

;********************* "Macro pour effacer les caractères par un espace " **********************  
espace MACRO valeur1, valeur2

      local nombre6,good_bye6

      movlw valeur2
  
      btfss WREG,0                        ; valeur2 = 0 que pour les nombres 
      bra nombre6                         ; valeur2 = 1 que pour les variables

      movf valeur1,W                      ; 
      movwf vide                          ; nombre d'
espace souhaité

      bra good_bye6                       
;

nombre6
      movlw valeur1                       
; 
      movwf vide                          
; nombre d'espace souhaité


good_bye6
     call supprime_lettre


    ENDM

;** "Macro pour faire une durée de temps, qui peut aller de 10 ms minimum  à 2550 ms maximum "** 
tempo MACRO valeur1, valeur2 

      local nombre7,good_bye7

      movlw valeur2
  
      btfss WREG,0                        ; valeur2 = 0 que pour les nombres 
      bra nombre7                         ; valeur2 = 1 que pour les variables

      movf valeur1,W                      ; 
      movwf durée                         ; durée du temps, qui dépend de la valeur1 

      bra good_bye7                       ;

nombre7
      movlw valeur1                       ; 
      movwf durée                         ; durée du temps, qui dépend de la valeur1

good_bye7
      call _10ms

    ENDM

;******************************* "adresse de depart après reset" *******************************
    ORG H'
0'
      bra debut

    ORG H'
8'
      retfie 

    ORG H'
18'                                  
      retfie 

debut
;***************** "configuration de la bank sélectionné du microcontrôleur" *******************

      movlw B'
00000000'          
      movwf BSR

;******************** "configuration de l'
oscillateur du microcontrôleur" ********************** 

      movlw B'01110100'                   ; oscillateur à 16 Mhz, fréquence stable si PLL (16 * 4)= 64 Mhz
;     movlw B'01100100'                   ; oscillateur à 8 Mhz, fréquence stable si PLL (8 * 4) = 32 Mhz
;     movlw B'01010010'                   ; oscillateur à 4 Mhz, fréquence stable  
;     movlw B'01000010'                   ; oscillateur à 2 Mhz, fréquence stable  
;     movlw B'00110010'                   ; oscillateur à 1 Mhz, fréquence stable  

      movwf OSCCON
      
      movlw B'00000000'                   ;
      movwf OSCCON2                       ;

;**************************** configuration du registre OSCTUNE ********************************

      movlw B'00000000'                   ; bit 6 à 1 : PLL * 4
      movwf OSCTUNE                       ; bit 6 à 0 : PLL désactivé
                                         
;*************************** configuration du registre ANSELA ********************************** 

      movlw B'00000001'                   ; en mode numérique : 2(RA0)
      movwf ANSELA                        ; en mode E/S       : 3(RA1), 4(RA2), 5(RA3), 7(RA5) 

;**************************** configuration du registre ANSELB ********************************* 

      movlw B'00000000'                   ; en mode numérique : 
      movwf ANSELB                        ; en mode E/S       : 21(RB0), 22(RB1) 23(RB2), 24(RB3), 25(RB4), 26(RB5)  
             
;**************************** configuration du registre ANSELC ********************************* 

      movlw B'00000000'                   ; en mode numérique :
      movwf ANSELC                        ; en mode E/S       : 13(RC2),  14(RC3), 15(RC4), 16(RC5), 17(RC6), 18(RC7)  

;*************************** configuration du registre ADCON0 ********************************** 

      movlw B'00000000'                   ; b0 = ADON mise en service le convertiseur 0 = arrêt : 1 = marche   
      movwf ADCON0                        ; b1 = GO/DONE indique la fin de la conversion analogique, et permet de lancer la conversion
                                          ; b2 à b6 = réglage de la sélection du canal

;*************************** configuration du registre ADCON1 ********************************** 

      movlw B'00000000'                   ; b2 à b3 = 00 : sélection de la tension de reférence, Vref+ = Vss   
      movwf ADCON1                        ; b0 à b1 = 00 : sélection de la tension de reférence, Vref- = Vdd 
                                          
;*************************** configuration du registre ADCON2 ********************************** 

      movlw B'00110110'                   ; b0 à b2 = FOSC/64
      movwf ADCON2                        ; b3 à b5 = 16 TAG 
                                          ; 
                                          ; b7 = détermine si le résultat de la conversion
                                          ; sera justifié à droite = 1 ou à gauche = 0  

;************************* configuration du registre CM1CON0 & CM2CON0 *************************

      movlw B'00000000'                   ; comparateur 1 off
      movwf CM1CON0 

      movlw B'00000000'                   ; comparateur 2 off
      movwf CM2CON0 

;*********************** "
configuration du pwm du microncontrôleur" ****************************

      movlw D'255'                        ; réglage du "
débordement" de TMR2 
      movwf PR2                           ; PR2 D'255' donc fréquence à 1950 Hz avec prédiviseur à 4

                                  
      movlw B'00000101'                   ; "
prédiviseur à 4" bit zéro à 1, bit un à 0 
      movwf T2CON                         ; "
timer on", bit deux à 1 (mise en route du timer2. 0 : arrêt. 1 : marche)
                                          ; "
postdiviseur à 1" bit trois à 0, bit quatre à 0, bit cinq à 0, bit six à 0
                                          ; dans registre de contrôle
                                         
      movlw B'00001100'                   ; "
1100" 4 bits mode pwm 
      movwf CCP1CON                       ; "
00" 2 bits pour variation du rapport cyclique(RC2) 
      movwf CCP2CON                       ; "
00" 2 bits pour variation du rapport cyclique(RC1) 

;***************** configuration des registres TRISA & TRISB & TRISC & TRISE ******************* 

      movlw B'10000001'                   ; RA0(2), RA1(3), RA2(4), RA3(5), RA4(6), RA5(7), RA6(10), RA7(9)  
      movwf TRISA                         ; 

      movlw B'11111111'                   ; RB0(21), RB1(22), RB2(23), RB3(24), RB4(25), RB5(26), RB6(27), RB7(28)
      movwf TRISB                         ; 

      movlw B'00000000'                   ; RC0(11), RC1(12), RC2(13), RC3(14), RC4(15), RC5(16), RC6(17), RC7(18)     
      movwf TRISC                         ; 

      movlw B'00001000'                   ; RE3(1) 
      movwf TRISE                         ;

                                          ; VSS(8), VSS(19), VDD(20) 
                                                   
;**************************** configuration du registre INTCON2 ******************************** 

      movlw B'00000000'                   ; B7 = 0 résistances en service
      movwf INTCON2                       ;

;**************************** configuration du registre WPUB *********************************** 
                                        
      movlw B'11111111'                   ; tirage de résistance sur        : RB0(21), RB1(22), RB2(23), RB3(24), RB4(25), RB5(26), RB6(27), RB7(28)  
      movwf WPUB                          ; pas de tirage de résistance sur :

;**************************** configuration du registre INTCON *********************************      

      movlw B'00000000'                   ; 
      movwf INTCON                        ; interruption hors service 

;************************************ départ du programme **************************************

      clrf CCPR1L                         ; sortie du pwm(RC2) 
      clrf CCPR2L                         ; sortie du pwm(RC1) 

      clrf PORTA
      clrf PORTB
      clrf PORTC
   
      clrf LATA
      clrf LATB 
      clrf LATC

;**************************** "
 témoin visuel de mise en fonction" *****************************

      movlw D'2'                          ; pour 2 clignotements
      movwf loop5
clignote
      bsf led1   
      tempo 100,0                         ; macro : temps, chiffre(0) ou varible(1)
                                          ; 1000 ms temps de visionnage

      bcf led1   
      tempo 100,0                         ; macro : temps, chiffre(0) ou varible(1)
                                          ; 1000 ms temps de visionnage

      decfsz loop5,F
      bra clignote  

;*********************************************************************************************** 

      rcall ini_nokia                     ; initiation de l'écran Nokia 
      
;***********************************************************************************************

      bsf cs                              ; transmission hors fonction

;***********************************************************************************************

      movlw D'1'                          ; 1 lettre à lire par défaut
      movwf phrase                        ;

      movlw D'255'                        ; désactiver la virgule
      movwf virgule                       ;      

;***********************************************************************************************

      rcall cls_nokia                     ; efface l'écran

;***********************************************************************************************

      locate 0,0                          ; macro : se placer à la hauteur de l'écran, se placer à la largeur de l'écran
      print 14,0                          ; macro : longueur de la donnée, emplacement du départ de la donnée à lire
                                          ; affiche : "
**************"

      locate 1,0                          ; macro : se placer à la hauteur de l'écran, se placer à la largeur de l'écran
      print 14,14                         ; macro : longueur de la donnée, emplacement du départ de la donnée à lire
                                          ; affiche : "
 Test Max6675 "

      locate 2,0                          ; macro : se placer à la hauteur de l'écran, se placer à la largeur de l'écran
      print 14,28                         ; macro : longueur de la donnée, emplacement du départ de la donnée à lire
                                          ; affiche : "
Sur Fantas-Pic"   

      locate 3,0                          ; macro : se placer à la hauteur de l'écran, se placer à la largeur de l'écran
      print 14,42                         ; macro : longueur de la donnée, emplacement du départ de la donnée à lire
                                          ; affiche : "
   Temps-x    "

      locate 4,0                          ; macro : se placer à la hauteur de l'écran, se placer à la largeur de l'écran
      print 14,56                         ; macro : longueur de la donnée, emplacement du départ de la donnée à lire
                                          ; affiche : "
  100%  ASM   "

      locate 5,0                          ; macro : se placer à la hauteur de l'écran, se placer à la largeur de l'écran
      print 14,0                          ; macro : longueur de la donnée, emplacement du départ de la donnée à lire
                                          ; affiche : "
**************"

      tempo 255,0                         ; macro : temps, chiffre(0) ou varible(1)
                                          ; 2550 ms temps de visionnage
     
;***********************************************************************************************

      rcall cls_nokia                     ; efface l'écran

;***********************************************************************************************

      locate 0,0                          ; macro : se placer à la hauteur de l'écran, se placer à la largeur de l'écran
      print 14,0                          ; macro : longueur de la donnée, emplacement du départ de la donnée à lire
                                          ; affiche : "
**************"

      locate 1,0                          ; macro : se placer à la hauteur de l'écran, se placer à la largeur de l'écran
      print 14,14                         ; macro : longueur de la donnée, emplacement du départ de la donnée à lire
                                          ; affiche : "
 Test Max6675 "

      locate 2,0                          ; macro : se placer à la hauteur de l'écran, se placer à la largeur de l'écran
      print 14,0                          ; macro : longueur de la donnée, emplacement du départ de la donnée à lire
                                          ; affiche : "
**************"

;***********************************************************************************************
affiche_max6675

      locate 3,0                          ; macro : se placer à la hauteur de l'écran, se placer à la largeur de l'écran  
      print 14,98                         ; macro : longueur de la donnée, emplacement du départ de la donnée à lire
                                          ; affiche : "
              "

      locate 4,0                          ; macro : se placer à la hauteur de l'écran, se placer à la largeur de l'écran  
      print 14,98                         ; macro : longueur de la donnée, emplacement du départ de la donnée à lire
                                          ; affiche : "
              "

      locate 5,0                          ; macro : se placer à la hauteur de l'écran, se placer à la largeur de l'écran  
      print 14,98                         ; macro : longueur de la donnée, emplacement du départ de la donnée à lire
                                          ; affiche : "
              "

      locate 4,10                         ; macro : se placer à la hauteur de l'écran, se placer à la largeur de l'écran
      print 11,112                        ; macro : longueur de la donnée, emplacement du départ de la donnée à lire
                                          ; affiche : "
Température"

;*********************************************************************************************** 

      clrf donner+0                       ;  
      clrf donner+1                       ;

      clrf res8                           ;
      clrf res16                          ;

      bcf STATUS,C                        ; mettre carry à zérro 

;*********************************************************************************************** 

      movlw D'16'                         ; 16 bits + carry
      movwf bits

      bcf cs                              ; transmision en fonction
     
rotation     
      bsf sck                             ; état haut de l'horloge 
      btfsc so                            ; lecture de la broche
      bsf donner+1,7                      ; inscrire les données
      nop
      nop 
      nop
      bcf sck                             ; état bas de l'horloge
 
      rlcf donner+0,F                     ; sauver la donnée 
      rlcf donner+1,F                     ;
     
      decfsz bits,F                   
      bra rotation

      bsf cs                              ; transmision hors fonction

      rlcf donner+0,F                     ; inclure carry 
      rlcf donner+1,F                     ;                                                             

;***********************************************************************************************

      btfsc donner+0,2                    ; contrôler si le thermocouple est débranché
      bra alarme                          ; 

;***********************************************************************************************

      btfsc donner+0,5                    ; réorganisation de l'ordre des bits  
      bsf res8,0                            
      btfsc donner+0,6                    ;
      bsf res8,1
      btfsc donner+0,7                    ;
      bsf res8,2

      btfsc donner+1,0                    ;
      bsf res8,3
      btfsc donner+1,1                    ;
      bsf res8,4
      btfsc donner+1,2                    ;
      bsf res8,5
      btfsc donner+1,3                    ;
      bsf res8,6
      btfsc donner+1,4                    ;
      bsf res8,7

      btfsc donner+1,5                    ;
      bsf res16,0
      btfsc donner+1,6                    ;
      bsf res16,1
        
;***********************************************************************************************

      rcall conversion                    ; conversion 16 bits vers ascii

;***********************************************************************************************

      locate 5,25                          ; macro : se placer à la hauteur de l'écran, se placer à la largeur de l'écran           

;***********************************************************************************************

      rcall supprime_zero                 ; suprimer les zéros qui sont à gauches et affiche le nombre

;***********************************************************************************************

      movlw D'46'                         ; affiche le caractère du code ascii 46
      rcall lettre_nokia                  ; qui représente la virgule 

      movlw B'00011000'                   ; récuperer les chiffres après la virgule
      andwf donner+0,W                    ;
 
      rrncf WREG,W                        ; rotation sans carry pour réajustement des valeurs                                                            
      rrncf WREG,W                        ;                                                             
      rrncf WREG,W                        ;                                                             

      mullw D'25'                         ; multiplier par 25(qui représente la résolution)  

      movf PRODL,W                        ; récupérer le résultat das W
      movwf res8                          ;

      clrf res16                          ; ne sera pas utilisé  

      rcall conversion                    ; conversion 16 bits vers ascii
      rcall supprime_zero                 ; suprimer les zéros qui sont à gauches et affiche le nombre   

;***********************************************************************************************

      movlw D'248'                        ; affiche le caractère du code ascii 248 
      rcall lettre_nokia                  ; qui représente le degrés 

      movlw D'67'                         ; affiche le caractère du code ascii 67  
      rcall lettre_nokia                  ; qui représente le C majuscule

      movlw D'3'                          ; 
      rcall supprime_lettre               ; évite d'effacer l'écran

      bsf led1                            ; témoin de passage
      tempo 100,0                         ; macro : temps, chiffre(0) ou varible(1)
                                          ; 1000 ms temps de visionnage

      bcf led1                            ; témoin de passage
      tempo 100,0                         ; macro : temps, chiffre(0) ou varible(1)
                                          ; 1000 ms temps de visionnage

      bra affiche_max6675  
     
;***********************************************************************************************  
alarme
      locate 3,0                          ; macro : se placer à la hauteur de l'écran, se placer à la largeur de l'écran
      print 14,70                         ; macro : longueur de la donnée, emplacement du départ de la donnée à lire
                                          ; affiche : "
 Erreur sonde "

      locate 4,0                          ; macro : se placer à la hauteur de l'écran, se placer à la largeur de l'écran
      print 14,84                         ; macro : longueur de la donnée, emplacement du départ de la donnée à lire
                                          ; affiche : "
  d‚branch‚   "

      bsf buzzer

      tempo 120,0                         ; macro : temps, chiffre(0) ou varible(1)
                                          ; 1200 ms temps pour entendre l'arlarme
      bcf buzzer

      tempo 120,0                         ; macro : temps, chiffre(0) ou varible(1)
                                          ; 1200 ms temps pour entendre l'arlarme
      bra affiche_max6675

;***********************************************************************************************
numériser
      bsf ADCON0,ADON                     ; on lance l’acquisition (charge du condensateur)
      nop             
      nop                                 ; tempo pour charge du condensateur
      nop
      bsf ADCON0,GO                       ; lancer la conversion A/D

      btfsc ADCON0,GO                     ; si le bit GO est à 1 on va à la ligne 1        
      bra $-D'2'                          ; conversion n'est pas terminer     
      bcf ADCON0,ADON                     ; fin de conversion, éteindre convertisseur

      movf ADRESH,W                       ; sauver la valeur qui vient d'être numérisé
      movwf res8                          ; dans la variable "
res8
                                            
      return     

;******************* "
initialisation de l'écran Nokia en mode SPI bit bang" ********************     
ini_nokia
      bsf ce                              ; arrêt de transmition des données  
      nop
      bcf rst                             ; 
      nop
      bsf rst                             ; remise à zéro
;-----------------------------------------------------------------------------------------------                                         
      movlw 0x21                          ; commandes étendues du lcd (0x21)
      movwf loop8      
      call command_nokia 
;-----------------------------------------------------------------------------------------------
      movlw 0xB1                          ; réglage du contraste du lcd (0xB1) à (0xBF)
      movwf loop8                         ; 
      call command_nokia
;-----------------------------------------------------------------------------------------------
      movlw 0x20                          ; Valider la modification (0x20)
      movwf loop8
      call command_nokia
;-----------------------------------------------------------------------------------------------
      movlw 0x0C                          ; vidéo en mode normal 0x0C ou 0x0D pour mode négatif
      movwf loop8
      rcall command_nokia                
;-----------------------------------------------------------------------------------------------               
      movlw 0x01                          ; effacer l'
écran
      movwf loop8
      rcall command_nokia  
;-----------------------------------------------------------------------------------------------

      return

;************************ "affiche la lettre ou le texte sélectionné" ************************** 
affiche_nokia    
      
      tableau info                        
; macro : qui permets de se positionner à l'adresse demandé

      bcf STATUS,C                        ; pour additionner, mettre carry à zéro pour

      movf lecture,W                      ;
      addwf TBLPTRL,F                     ;                   

      btfsc STATUS,C                      ; si retenu ajouter à l'
adresse high
      incf TBLPTRH
,F                      ; 

      incf lecture
,F                      ; lecture pour le prochain passage 

      tblrd
*                              ; effectue la lecture de l’octet pointé par TBLPTR 
                      
      movf TABLAT
,W                       ; transfére le caractère récupéredans TABLAT vers W

lettre_nokia                        
      movwf lettre                        
; transfére le caractère récupére dans "lettre"
      mullw D'5'                          ; multiplier W par 5, résultat dans PRODH PRODL                                        
    
      movlw D
'5'                          ; 5 passages pour créer un caractère
      movwf passage

      tableau ascii                       
; macro  : qui permets de se positionner à l'adresse demandé
      
      bcf STATUS,C                        ; pour additionner, mettre carry à zéro pour
                                          ; ne pas avoir d'
erreur sur l'addition  
      movf PRODL,W                        ;
      addwf TBLPTRL,F                     ; se positionner à l'
adresse low                               

      btfsc STATUS
,C                      ; si retenu ajouter à l'adresse high
      incf TBLPTRH,F                      ; 

      movf PRODH,W                        ;
      addwf TBLPTRH,F                     ; se positionner à l'
adresse high   
ret2
      tblrd
*+                             ; effectue la lecture, et ensuite incrémente TBLPTR

      movff TABLAT
,loop8                  ; transfére la donnée récupére dans "loop8"
      rcall donner_nokia                  ;

      decfsz passage,F                    ;
      bra ret2                            ;

      movlw B'00000000'                   ; avance d'un pixel sur la largeur(correspond à barre espace)  
      movwf loop8                         ;
      rcall donner_nokia                  ;

      decfsz phrase,F                     ; "phrase" est la longueur du texte
      bra affiche_nokia                   ; 

      incf phrase,F                       ; préparation au cas ou il faudrait lire un caractére  

      return 

;*********************"efface l'
écran & position le curseur au début" ************************** 
cls_nokia

      movlw D'2'                          ; pour effacement complet de l'écran, soit 504 octets
      movwf loop1

      movlw D'248'
      movwf loop2

      locate 0,0                          ; macro de positionnement hauteur, largeur                                            
cls
      movlw B'00000000' 
      movwf loop8
      rcall donner_nokia                  ; effacer les données existantes

      decfsz loop2,F      
      bra cls
      decfsz loop1,F      
      bra cls
      
      locate 0,0                          ; macro de positionnement hauteur, largeur   
     
      return

;*******************************"
Ecran Nokia 5110, 504 octets" ********************************* 
pixel_nokia 
      movlw D'2'                          ; pour la lecture complet de l'écran, soit 504 octets
      movwf loop1                         ;

      movlw D'248'                        ; 
      movwf loop2

lire_graphique
      tblrd*+                             ; effectue la lecture, et ensuite incrémente TBLPTR

      movff TABLAT,loop8                  ; transfére la donnée récupére dans "
loop8"
      rcall donner_nokia                 ;

      decfsz loop2,F
      bra lire_graphique
      decfsz loop1,F
      bra lire_graphique

      return

;*********************************************************************************************** 
command_nokia
      bcf dc                              ; DC = 0  en mode commande
      bra envoi_nokia                          

;*********************************************************************************************** 
donner_nokia
      bsf dc                              ; DC = 1 en mode donnée
      bra envoi_nokia                     ;     

;*********************************************************************************************** 
envoi_nokia
      bcf ce                              ; marche

      movlw D'8'                          ; envoie de 8 bits 
      movwf bits

ev1_nokia
      btfss loop8,7                       ; 1 lecture sur le bit 7
      bra ev2_nokia
      bsf din                             ; envoie 1
      bsf clk                             ; 
      bcf clk                             ;
      bra ev3_nokia
ev2_nokia
      bcf din                             ; envoie 0
      bsf clk                             ; 
      bcf clk                             ; 
ev3_nokia
      rlncf loop8,F                       ; rotation des bits à gauche sans carry
      decfsz bits,F
      bra ev1_nokia
     
      bsf ce                              ; arrét

      return

;************************************ "
position de y et x" ************************************* 
position_nokia                                   
      bsf loop8,6                         ; y = 0, à 5 = B'01000 Y2 Y1 Y0' hauteur de l'écran
      rcall command_nokia                 ; 

      bsf loop9,7                         ; x = 0, à 83 = B'1 X6 X5 X4 X3 X2 X1 X0' largeur de l'écran
                                          ;  
      movf loop9,W                        ;
      movwf loop8                         ;    
      rcall command_nokia                 ;

      return
;************************************** "
convertion" ******************************************* 
conversion
           
      clrf unité                  
      clrf dizaine              
      clrf centaine             
      clrf millieme             
      clrf dix_millieme         

; "
16 bits"

b16_7
      btfss res16,7
      goto b16_6

      movlw D'3'                          ; 32768  
      addwf dix_millieme,F
      movlw D'2'                          ;  2768  
      addwf millieme,F
      movlw D'7'                          ;   768
      addwf centaine,F                 
      movlw D'6'                          ;    68
      addwf dizaine,F                 
      movlw D'8'                          ;     8
      addwf unité,F                 

b16_6
      btfss res16,6
      goto b16_5

      movlw D'1'                          ; 16384  
      addwf dix_millieme,F
      movlw D'6'                          ;  6384  
      addwf millieme,F
      movlw D'3'                          ;   384
      addwf centaine,F                 
      movlw D'8'                          ;    84
      addwf dizaine,F                 
      movlw D'4'                          ;     4
      addwf unité,F                 

b16_5
      btfss res16,5
      goto b16_4

      movlw D'8'                          ; 8192  
      addwf millieme,F
      movlw D'1'                          ;  192
      addwf centaine,F                 
      movlw D'9'                          ;   92
      addwf dizaine,F                 
      movlw D'2'                          ;    2
      addwf unité,F                 

b16_4
      btfss res16,4
      goto b16_3            

      movlw D'4'                          ; 4096  
      addwf millieme,F
      movlw D'0'                          ;  096
      addwf centaine,F                 
      movlw D'9'                          ;   96
      addwf dizaine,F                 
      movlw D'6'                          ;    6
      addwf unité,F                 

b16_3
      btfss res16,3
      goto b16_2

      movlw D'2'                          ; 2048  
      addwf millieme,F
      movlw D'0'                          ;  048
      addwf centaine,F                 
      movlw D'4'                          ;   48
      addwf dizaine,F                 
      movlw D'8'                          ;    8
      addwf unité,F                 

b16_2
      btfss res16,2
      goto b16_1

      movlw D'1'                          ; 1024  
      addwf millieme,F
      movlw D'0'                          ;  024
      addwf centaine,F                 
      movlw D'2'                          ;   24
      addwf dizaine,F                 
      movlw D'4'                          ;    4
      addwf unité,F                 

b16_1
      btfss res16,1
      goto b16_0

      movlw D'5'                          ;  512
      addwf centaine,F                 
      movlw D'1'                          ;   12
      addwf dizaine,F                 
      movlw D'2'                          ;    2
      addwf unité,F                 

b16_0
      btfss res16,0
      goto b8_7

      movlw D'2'                          ;  256
      addwf centaine,F                 
      movlw D'5'                          ;   56
      addwf dizaine,F                 
      movlw D'6'                          ;    6
      addwf unité,F                 

;***********************************************************************************************

; "
8 bits"

b8_7
      btfss res8,7
      goto b8_6

      movlw D'1'                          ;  128
      addwf centaine,F                 
      movlw D'2'                          ;   28
      addwf dizaine,F                 
      movlw D'8'                          ;    8
      addwf unité,F                 

b8_6
      btfss res8,6
      goto b8_5            

      movlw D'6'                          ;   64
      addwf dizaine,F                 
      movlw D'4'                          ;    4
      addwf unité,F                 

b8_5
      btfss res8,5
      goto b8_4

      movlw D'3'                          ;   32
      addwf dizaine,F                 
      movlw D'2'                          ;    2
      addwf unité,F                 

b8_4
      btfss res8,4
      goto b8_3            

      movlw D'1'                          ;   16
      addwf dizaine,F                    
      movlw D'6'                          ;    6
      addwf unité,F                 

b8_3
      movlw B'00001111'                   ; 8, 4, 2, 1
      andwf res8,W    
    
      addwf unité,F     

;-----------------------------------------------------------------------------------------------

      movlw D'5'                          ; 5 variables à traiter
      movwf loop6
       
      lfsr FSR0,unité                     ; pointer  à l'adresse de la variable "
unité

assembler
      movf INDF0,W                        ; récupérer la valeur dans W 
      movwf tmps                          ; transmettre dans la variable "
tmps"
 
      incf FSR0L,F                        ; variable suivante
      movf INDF0,W                        ; récupérer la valeur dans W 
      movwf temps                         ; transmettre dans la variable "
temps"

;***********************************************************************************************
tr0      
      movf tmps,W
      sublw D'10'                         ; retir 10 de W
      btfsc STATUS,Z                      ; 
      goto tr1                            ; 
      btfss STATUS,C                      ; 
      goto tr1                            ; 
      goto tr2                            ; 
tr1
      movlw D'10'                         ;
      subwf tmps,F                        ;
      incf temps,F                        ; 
      bra tr0                       

;*********************************************************************************************** 
tr2
      movf temps,W
      movwf INDF0                         ; nouvelle valeur à cette adresse

      decf FSR0L,F                        
      movf tmps,W      
      movwf INDF0                         ; nouvelle valeur à cette adresse

      movlw D'48'                         ; convertir en format ASCII 
      addwf INDF0,F                       

      incf FSR0L,F                        ; variable suivante 

      decfsz loop6,F                      ;
      goto assembler                
      
      return

;************************** "
ne pas suprimer les zéros qui à gauche" *************************** 
suprime_pas_zero
      movlw D'5'                        ; 5 variables à traiter
      movwf loop6    
    
      lfsr FSR0,dix_millieme            ; 
      bra imprime_ecran
      
;*************************** "
suprime les zéros qui sont à gauches" **************************** 
supprime_zero     
      movlw D'5'                        ; 5 variables à traiter
      movwf loop6    
    
      lfsr FSR0,dix_millieme            ; pointer à l'adresse de la variable "
dix_millieme"     

cherche_zero
      movf INDF0,W        
      xorlw D'48'
      btfss STATUS,Z     
      goto imprime_ecran
      decf FSR0L,F
      decfsz loop6,F
      goto cherche_zero

      movlw '0'                           ; tout est à zéro
      rcall lettre_nokia
      return 

; "
écrit les données sur l'écran"

imprime_ecran
      movf loop6,W
      xorwf virgule,W                     ; emplacement de la virgule si activé 
      btfss STATUS,Z                      ;
      goto imprime_2

      movlw '
.'                           ; on mets la virgule
      rcall lettre_nokia                  ; affiche à l'
écran

imprime_2
      movf INDF0
,W          
      rcall lettre_nokia            
      decf FSR0L
,F
      decfsz loop6
,F
      goto imprime_ecran

      return

;************** "ajouter un espace, surtout utilisé pour effacer des caractères" *************** 
supprime_lettre
      movwf loop6                         
; représente le nombre de caractére à effacé 

ajout_espace
      movlw 
' '                              
      rcall lettre_nokia                  
; espace d'éffacement, et évite un effacement d'écran 

      decfsz loop6
,F
      bra ajout_espace

      return

;**************** "pause de 10 millisecondes pour 18F avec horloge de 16 Mhz" ****************** 
_10ms
      movlw D
'241'
      movwf loop1

      movlw D
'52'
      movwf loop2

      decfsz loop1
      bra 
$-D'2'
      decfsz loop2
      bra 
$-D'6'

      decfsz durée,F
      bra _10ms    

      return

;****************************** "pour écrit dans l'eeprom" ************************************* 
eeprom_ecriture
      movf adresse_hig
,W                  ; adresse du poid fort
      movwf EEADRH                        
;

      movf adresse_low,W                  ; adresse du poid faible
      movwf EEADR                         
; 

      movf donner
,W                       ;
      movwf EEDATA                        ; écriture de la donnée
 
      bcf EECON1
,EEPGD                    ; préparation à l'autorisation 
      bcf EECON1,CFGS                     ; access eeprom

      bsf EECON1,WREN                     ; Enable writes   
 
      bcf INTCON,GIE                      ; couper les interruptions

      btfsc INTCON,GIE                    ; contrôl si les interruptions sont bien coupés
      bra $-D'
2'                          ; remonte à la ligne 2 jusqu'a coupures des interruptions 

      movlw H
'55'                         ; séquence spécifique (c'est comme ça, il faut le savoir)
      movwf EECON2                        ; séquence spécifique
      movlw H'
AA'                         ; séquence spécifique
      movwf EECON2                        ; séquence spécifique

      bsf EECON1,WR                       ; lance une opération d'
écriture

      btfsc EECON1
,WR                     ; on attend que l'operation d'ecriture soit finie (de l'ordre de la ms
      bra $-D'
2'                          ; remonte à la ligne 2 jusqu'a fin d'écriture

      bcf EECON1, WREN                    ; interdiction de l'
écriture

      return

;******************************** "pour lire dans l'eeprom" ************************************ 
eeprom_lecture
      movf adresse_hig
,W                  ; adresse du poid fort
      movwf EEADRH                        
;

      movf adresse_low,W                  ; adresse du poid faible
      movwf EEADR                         
; 

      bcf EECON1
,EEPGD                    ; préparation à la lecture
      bcf EECON1
,CFGS                     ; access EEPROM
      bsf EECON1
,RD                       ; lecture de l'EEPROM

      movf EEDATA,W                       ; la valeur lue dans l'
éeprom est placée dans W 

      return

;*********************************************************************************************** 
;************************* "affichage des phrases, 255 octets maximum" *************************
;***********************************************************************************************
 
    ORG H
'8E00' 
                    
info
       db 
"**************"               ; longueur 14 départ 0
       db 
" Test Max6675 "               ; longueur 14 départ 14
       db 
"Sur Fantas-Pic"               ; longueur 14 départ 28
       db 
"   Temps-x    "               ; longueur 14 départ 42 
       db 
"  100%  ASM   "               ; longueur 14 départ 56 


       db 
" Erreur sonde "               ; longueur 14 départ 70 
       db 
"  d‚branch‚   "               ; longueur 14 départ 84
       db 
"              "               ; longueur 14 départ 98
       db 
"Temp‚rature"                  ; longueur 11 départ 112 

;***************************** "table des caractères ASCII" ************************************
    ORG H'9000'

ascii                           
     db 0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
     db 0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
     db 0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
     db 0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
     db 0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
     db 0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
     db 0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
     db 0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
     db 0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
     db 0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
     db 0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x5F,0x00,0x00,0x00,0x07,0x00,0x07,0x00,0x14
     db 0x7F
,0x14,0x7F,0x14,0x24,0x2A,0x7F,0x2A,0x12,0x26,0x16,0x08,0x34,0x32,0x76,0x49
     db 0x55
,0x22,0x50,0x00,0x00,0x05,0x03,0x00,0x00,0x1C,0x22,0x41,0x00,0x00,0x41,0x22
     db 0x1C
,0x00,0x14,0x08,0x3E,0x08,0x14,0x08,0x08,0x3E,0x08,0x08,0x00,0x50,0x30,0x00
     db 0x00
,0x08,0x08,0x08,0x08,0x08,0x00,0x60,0x60,0x00,0x00,0x20,0x10,0x08,0x04,0x02
     db 0x3E
,0x51,0x49,0x45,0x3E,0x00,0x42,0x7F,0x40,0x00,0x42,0x61,0x51,0x49,0x46,0x21
     db 0x41
,0x45,0x4B,0x31,0x18,0x14,0x12,0x7F,0x10,0x27,0x45,0x45,0x45,0x39,0x3C,0x4A
     db 0x49
,0x49,0x30,0x01,0x01,0x79,0x05,0x03,0x36,0x49,0x49,0x49,0x36,0x06,0x49,0x49
     db 0x29
,0x1E,0x00,0x36,0x36,0x00,0x00,0x00,0x56,0x36,0x00,0x00,0x00,0x08,0x14,0x22
     db 0x41
,0x14,0x14,0x14,0x14,0x14,0x41,0x22,0x14,0x08,0x00,0x02,0x01,0x51,0x09,0x06
     db 0x3E
,0x41,0x49,0x55,0x5E,0x7E,0x11,0x11,0x11,0x7E,0x7F,0x49,0x49,0x49,0x36,0x3E
     db 0x41
,0x41,0x41,0x22,0x7F,0x41,0x41,0x22,0x1C,0x7F,0x49,0x49,0x49,0x41,0x7F,0x09
     db 0x09
,0x09,0x01,0x3E,0x41,0x49,0x49,0x3A,0x7F,0x08,0x08,0x08,0x7F,0x00,0x41,0x7F
     db 0x41
,0x00,0x20,0x41,0x41,0x3F,0x00,0x7F,0x08,0x14,0x22,0x41,0x7F,0x40,0x40,0x40
     db 0x40
,0x7F,0x02,0x0C,0x02,0x7F,0x7F,0x04,0x08,0x10,0x7F,0x3E,0x41,0x41,0x41,0x3E
     db 0x7F
,0x09,0x09,0x09,0x06,0x3E,0x41,0x51,0x21,0x5E,0x7F,0x09,0x19,0x29,0x46,0x46
     db 0x49
,0x49,0x49,0x31,0x01,0x01,0x7F,0x01,0x01,0x3F,0x40,0x40,0x40,0x3F,0x1F,0x20
     db 0x40
,0x20,0x1F,0x3F,0x40,0x3C,0x40,0x3F,0x63,0x14,0x08,0x14,0x63,0x07,0x08,0x70
     db 0x08
,0x07,0x61,0x51,0x49,0x45,0x43,0x00,0x7F,0x41,0x41,0x00,0x02,0x04,0x08,0x10
     db 0x20
,0x00,0x41,0x41,0x7F,0x00,0x04,0x02,0x01,0x02,0x04,0x40,0x40,0x40,0x40,0x40
     db 0x00
,0x01,0x02,0x04,0x00,0x20,0x54,0x54,0x54,0x78,0x7F,0x48,0x44,0x44,0x38,0x38
     db 0x44
,0x44,0x44,0x20,0x38,0x44,0x44,0x48,0x7F,0x38,0x54,0x54,0x54,0x18,0x08,0x7E
     db 0x09
,0x01,0x02,0x08,0x54,0x54,0x54,0x3C,0x7F,0x08,0x04,0x04,0x78,0x00,0x44,0x7D
     db 0x40
,0x00,0x20,0x40,0x44,0x3D,0x00,0x7F,0x10,0x28,0x44,0x00,0x00,0x41,0x7F,0x40
     db 0x00
,0x7C,0x04,0x18,0x04,0x78,0x7C,0x08,0x04,0x04,0x78,0x38,0x44,0x44,0x44,0x38
     db 0x7C
,0x14,0x14,0x14,0x08,0x08,0x14,0x14,0x18,0x7C,0x7C,0x08,0x04,0x04,0x08,0x48
     db 0x54
,0x54,0x54,0x20,0x04,0x3F,0x44,0x40,0x20,0x3C,0x40,0x40,0x20,0x7C,0x1C,0x20
     db 0x40
,0x20,0x1C,0x3C,0x40,0x38,0x40,0x3C,0x44,0x28,0x10,0x28,0x44,0x0C,0x50,0x50
     db 0x50
,0x3C,0x44,0x64,0x54,0x4C,0x44,0x00,0x08,0x36,0x41,0x00,0x00,0x00,0x7F,0x00
     db 0x00
,0x00,0x41,0x36,0x08,0x00,0x08,0x08,0x2A,0x1C,0x08,0x08,0x1C,0x2A,0x08,0x08
     db 0x1E
,0xA1,0xE1,0x21,0x10,0x3D,0x40,0x40,0x20,0x7D,0x38,0x56,0x55,0x54,0x18,0x20
     db 0x56
,0x55,0x56,0x78,0x20,0x55,0x54,0x55,0x78,0x20,0x54,0x55,0x56,0x78,0x20,0x54
     db 0x55
,0x54,0x78,0x0E,0x51,0x71,0x11,0x08,0x38,0x56,0x55,0x56,0x18,0x38,0x55,0x54
     db 0x55
,0x18,0x38,0x54,0x55,0x56,0x18,0x00,0x45,0x7C,0x41,0x00,0x00,0x46,0x7D,0x42
     db 0x00
,0x00,0x45,0x7E,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
     db 0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38
     db 0x46
,0x45,0x46,0x38,0x38,0x45,0x44,0x45,0x38,0x38,0x45,0x46,0x44,0x38,0x3C,0x42
     db 0x41
,0x22,0x7C,0x3C,0x40,0x41,0x22,0x7C,0x0C,0x51,0x50,0x51,0x3C,0x00,0x00,0x00
     db 0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
     db 0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
     db 0x20
,0x54,0x56,0x55,0x78,0x00,0x46,0x7D,0x40,0x00,0x38,0x44,0x46,0x45,0x38,0x3C
     db 0x42
,0x41,0x20,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
     db 0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
     db 0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
     db 0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
     db 0x55
,0x00,0x55,0x00,0x55,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
     db 0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
     db 0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
     db 0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
     db 0x00
,0x00,0x00,0x00,0x00,0x00,0x15,0x16,0x7C,0x16,0x15,0x00,0x00,0x00,0x00,0x00
     db 0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
     db 0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
     db 0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
     db 0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
     db 0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
     db 0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
     db 0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
     db 0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
     db 0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
     db 0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
     db 0x00
,0x00,0x00,0x00,0x00,0xF8,0x54,0x54,0x54,0x28,0x00,0x00,0x00,0x00,0x00,0x00
     db 0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0x40
     db 0x40
,0x20,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
     db 0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
     db 0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
     db 0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
     db 0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
     db 0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x05,0x02,0x00,0x00,0x38,0x44,0x48
     db 0x30
,0x4C,0xF8,0x54,0x54,0x54,0x28,0x38,0x44,0x4C,0x54,0x24,0x28,0x54,0x54,0x44
     db 0x20
,0x58,0x64,0x04,0x64,0x58,0x44,0x3C,0x04,0x7C,0x44,0x63,0x55,0x49,0x41,0x41

DATAEE ORG H
'F00000'
                       
    DE 0x00
,0x00

    End


Fichier code : Max6675(Code).zip
Fichier à mettre dans le Pic : Max6675(Hex).zip

==> A+
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Modifié en dernier par Temps-x le dim. 14 juin 2020 12:42, modifié 21 fois.
:roll: Les requins, c'est comme le langage ASM, c'est le sommet de la chaîne alimentaire. :wink:

Thermocouple MAX6675
paulfjujo
Avatar de l’utilisateur
Expert
Expert
Messages : 2589
Âge : 73
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#2 Message par paulfjujo » ven. 24 avr. 2020 20:08

bonsoir Temps-X

:+1: Belle demonstration !
de quoi redonner l'envie à se remettre à l'ASM .. surtout avec le 18F26K22 ( qui est mon préféré).

existe-t-il une version couple J ?
MAX66xx

en principe les 2 fils du thermocouple sont brasés au bout avec un petit chalumeau pour former une petite boule ..
Aide toi, le ciel ou FantasPic t'aidera

Thermocouple MAX6675
Gérard
Avatar de l’utilisateur
Expert
Expert
Messages : 1640
Âge : 65
Enregistré en : septembre 2015
Localisation : Alsace - Haut-Rhin

#3 Message par Gérard » ven. 24 avr. 2020 20:34

Bonjour à tous,

Je ne connaissais pas le MAX 6675. Existe-t-il une version I2C? Je préfère au bus SPI.

Merci pour ton partage. Mais moi, pas envie d'asm ... :sifflotte:
Le 18/04/19 je suis devenu papy de jumeaux, le 01/09/23 une petite cousine des jumeaux est née.

Thermocouple MAX6675
Temps-x
Avatar de l’utilisateur
Expert
Expert
Messages : 2596
Enregistré en : juillet 2016
Localisation : Terre

#4 Message par Temps-x » sam. 25 avr. 2020 00:59

Bonsoir paulfjujo, Gérard, et tout le forum,

paulfjujo a écrit :Source du messagesurtout avec le 18F26K22 ( qui est mon préféré)


C'est devenu aussi mon pic préféré, car on n'est plus gêné au niveau, mémoire Programme, Sdram, Eeprom, de plus facile à configurer quand on a l'habitude :-D

paulfjujo a écrit :Source du message existe-t-il une version couple J en MAX66xx ?


Le Max6675 utilise seulement la sonde du type k, par contre pour 2 euros de plus existe le MAX31855, qui fait pas mal de sonde.

Seule la dernière lettre défini la sonde quand doit utiliser, regarde l'image ci-dessous.

MAX31855-2.jpg


paulfjujo a écrit :Source du message en principe les 2 fils du thermocouple sont brasés au bout avec un petit chalumeau pour former une petite boule ..


Exacte... et normalement c'est calibré en usine... :roll: mais dans mon cas elle était coupé :cry: pour la réparer j'ai torsadé le bout, et sa fonction très bien comme ça. :razz:

Gérard a écrit :Source du message Je ne connaissais pas le MAX 6675. Existe-t-il une version I2C?

A ma connaisance, j'ai pas vu de version pour I²C

Gérard a écrit :Source du message Mais moi, pas envie d'asm ...

:roll:
paulfjujo a écrit :Source du message de quoi redonner l'envie à se remettre à l'ASM


Je compte sur toi paulfjujo pour motiver Gérard Merci !

==> A+
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
:roll: Les requins, c'est comme le langage ASM, c'est le sommet de la chaîne alimentaire. :wink:

Thermocouple MAX6675
JJE
Passioné
Passioné
Messages : 399
Âge : 83
Enregistré en : novembre 2017
Localisation : Picardie

#5 Message par JJE » dim. 26 avr. 2020 11:05

bonjour à Gérard et vous autres,
Pour info, j'ai souvenir d'avoir testé le MCP6808 de Mictochip et le DS1621 de Maxim, je crois avec succès, c'est au moins sûr pour le MCP6808 qui sont deux circuits de même fonction en I2C.
Dans mon foutoir, je ne retrouve pas le DS1621 pour refaire un essai et voir où j'en étais. Mais ces essais sont en ASM :-)

Bravo à temps-x
Cordialement

JJE

C'est pas parcequ'on n'a rien à dire qu'il faut fermer sa G....e

Thermocouple MAX6675
paulfjujo
Avatar de l’utilisateur
Expert
Expert
Messages : 2589
Âge : 73
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#6 Message par paulfjujo » dim. 26 avr. 2020 15:38

bonjour JJE et à tous,

L'inconvenient du DS1621 , est que le sensor/capteur de temperature est enfoui dans le DIP8
et a donc un temps de reponse assez long et qu'on ne peut pas le placer ou on veut vraiment,

ce qu'apporte le thermocouple + la vitesse de réponse

j'en ai utilisé qui faisait à peine 0.5mm de diametre , ou 1mm dans une gaine inox
ou en version souple comme celui de temps X..

Nota : on ne peut pas"Calibrer " un thermocouple ..
on soude les 2 fils d'alliage Fe Ct (couple J) ou Chrome Alumel et on obtient un thermocouple ..
Apres pour avoir un thermocouple ETALON , ( par tri ..) il faut allonger la monnaie ..
Dans ma boite, c'est un chaudronier (habile) et habilité pour, qui les préparait ( jusqu'à 250 d'affilé !),
on les verifiait ensuite dans un four de calibration et pont de mesure milivoltmetre MECI ,vers la temperature d'utilisation .
ça c'etait avant de passer principalement aux PT100 3 fils et 4 fils ..
Aide toi, le ciel ou FantasPic t'aidera

Thermocouple MAX6675
Gérard
Avatar de l’utilisateur
Expert
Expert
Messages : 1640
Âge : 65
Enregistré en : septembre 2015
Localisation : Alsace - Haut-Rhin

#7 Message par Gérard » dim. 26 avr. 2020 16:42

JJE a écrit :bonjour à Gérard et vous autres,
Pour info, j'ai souvenir d'avoir testé le MCP6808 de Mictochip et le DS1621 de Maxim, je crois avec succès, c'est au moins sûr pour le MCP6808 qui sont deux circuits de même fonction en I2C.
Dans mon foutoir, je ne retrouve pas le DS1621 pour refaire un essai et voir où j'en étais. Mais ces essais sont en ASM :-)

Bravo à temps-x



Bonjour,
JJE, es-tu sûr de la référence MCP6808? Je ne trouve pas chez Microchip.
Le 18/04/19 je suis devenu papy de jumeaux, le 01/09/23 une petite cousine des jumeaux est née.

Thermocouple MAX6675
JJE
Passioné
Passioné
Messages : 399
Âge : 83
Enregistré en : novembre 2017
Localisation : Picardie

#8 Message par JJE » dim. 26 avr. 2020 19:49

Bonsoir Gérard,
Oui, je viens de rouvrir le datasheet que j'avais téléchargé et c'est bien de chez Microchip le voici :

MCP9808.rar
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Cordialement

JJE

C'est pas parcequ'on n'a rien à dire qu'il faut fermer sa G....e

Thermocouple MAX6675
Gérard
Avatar de l’utilisateur
Expert
Expert
Messages : 1640
Âge : 65
Enregistré en : septembre 2015
Localisation : Alsace - Haut-Rhin

#9 Message par Gérard » dim. 26 avr. 2020 20:23

JJE a écrit :Bonsoir Gérard,
Oui, je viens de rouvrir le datasheet que j'avais téléchargé et c'est bien de chez Microchip le voici :

MCP9808.rar


C'était une faute de frappe 6808 pour 9808
Le 18/04/19 je suis devenu papy de jumeaux, le 01/09/23 une petite cousine des jumeaux est née.

Thermocouple MAX6675
Temps-x
Avatar de l’utilisateur
Expert
Expert
Messages : 2596
Enregistré en : juillet 2016
Localisation : Terre

#10 Message par Temps-x » dim. 26 avr. 2020 21:20

Bonsoir tout le monde,

C'est bien beau tout ses contrôleurs de tempèrature que vous me faite voir, mais il ne dépasse pas les 150 °C

Hors pour mon projet,.. il me fallait un capteur pouvant contrôler des températures de plus de 200°C, à pas chère de préférence :-D

Le Max6675 réponds bien à ma demande, puisse qu'il peut contrôler des températures de 0°C à 1024°C.

paulfjujo a écrit :Source du message Nota : on ne peut pas"Calibrer " un thermocouple ..
on soude les 2 fils d'alliage Fe Ct (couple J) ou Chrome Alumel et on obtient un thermocouple ..
Apres pour avoir un thermocouple ETALON , ( par tri ..) il faut allonger la monnaie ..


Ok, j'en sait un peu plus.... merci..., je comprends maintenant pourquoi le thermocouple fonctionne une fois les fils réunis.

==> A+
:roll: Les requins, c'est comme le langage ASM, c'est le sommet de la chaîne alimentaire. :wink:


Retourner vers « Langage ASM »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 41 invités