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
 
 

Mesure température et humidité par capteur SHT30
affichage sur LCD I2C




Les capteurs SHT30, SHT31, SHT35 ont la même datasheet , les différences portent sur les tolérences.
Ce sont des cousins des SI7020, voir cette page ou celle-ci.

Les différences:
Les paramètres des formules sont légèrement différents.
Deux adresses I2C possibles suivant la connexion sur la plaquette d'une pin AD à VDD ou VCC (0V ou 5V). Sur 7bits: $44 ou $45
Les adresses picaxes doivent être codées sur 8 bits, avec le bit R/W
 
 7 bits   8 bits décimal
$44 = %1000100 %10001000 = $88 136
$45 = %1000101 %10001010 = $8A 138


Le code est celui fourni par le forum picaxe anglais, allégé pour ne garder que le stricte nécessaire. (Pas de controle CRC, de RAZ, etc). La fréquence horloge est laissée à 4MHz, c'est moins rapide, c'est tout.


Le code:
;essai SHT31 MM 18/08/2018
;LCD 1602 I2C
;SHT31 Connection Diagram
;
;
V+ ----------.----.---.----.-------------- V+
;              |   .|. .|.   |
; PICAXE-08M2  |   | | | |   |     SHT31
; .---------.  |   |_| |_|   |   .-------.
; |      V+ |--'    |   |    `---| VIN   |
; | SDA C.2 |-------^---|--------| SDA   |
; |         |---        |       -| RST   |
; | SCL C.1 |-----------^--------| SCL   |
; |      0V |--.   2 x 4K7   .---| ADR   |
; `---------'  |   Internal  |  -| ALR   |
;              |             }---| GND   |
;              |             |   `-------'
; 0V ----------^-------------^-------------- 0V



#picaxe 08M2

Symbol SDA     = C.2    ; I2C   SDA
Symbol SCL     = C.1    ; I2C   SCK
symbol rsbit=bit0
symbol deci=b1        ;valeurs décimales
symbol sign=b2
symbol cpt=b3        ;compteur
symbol car=b4
symbol dat=b5
symbol mil=b6
symbol cen=b7
symbol unit=b8
symbol decim=b9
symbol centi=b10
symbol virg=b11
symbol crc=b12
;w13= (b27,b26) lecture registre température SHT
symbol tempe=w11        ;valeur à afficher
symbol HR=w12    ;lecture registre HR
virg=","
pause 500    ;stabilistu=ion LCD
;**** macro affichage texte ****************
    #macro text(posi,deb,fin)
        car=posi:gosub EnvoiByteComm    ;position curseur
        for cpt=deb to fin                    
            read cpt,car                ;texte
            gosub EnvoiBytedata             
        next
    #endmacro
;******Entrée des données texte en EEPROM ***********
    data 0,(51,50,40,12,6)        ;initialisation LCD 4 bits
    data $10,("Tempe=        ßC")
    data $20,("Humid=        % ")
;**** Initialisation LCD I2C .*************
    hi2csetup i2cmaster,%01001110, i2cslow, i2cbyte
    for cpt=0 to 4
        read cpt,car        
        gosub EnvoiByteCommInit
    next
;**** affichage texte fixe ****************
    car=1:gosub EnvoiByteComm    ;raz afficheur
    text(128,$10,$1F)    ;macro texte
    text(192,$20,$2F)

;**** boucle principale lecture SHT30 ************************************
    do    
        hi2csetup i2cmaster,$88,i2cfast,i2cbyte    ;adresse I2C SHT
        HI2cOut ( $24, $00 )        ;SingleShot
      Pause 50    
        hi2cin (b27,b26,b12,b25,b24,b12)        ;(b27,b26) c'est w13, registre température         
        sign=" "                ;pas de signe, à priori        
        tempe=w13**17500-4500   ;valeur mémorisée dans tempe
        if w13<=16852  then        ;on est dans les valeurs négatives
            tempe=-tempe            ;idem complément à 2
            sign="-"                    
        endif                    
        pause 1000   
        HR=HR**10000        ;valeur mémorisée dans HR
        pause 1000    
        gosub affich            ;vers affichage
    loop
;***** sub affichage *****************************    
affich:    
    hi2csetup i2cmaster,$4E, i2cslow, i2cbyte    ;adresse I2C LCD
    car=134:gosub EnvoiByteComm    ;position curseur
    bintoascii tempe,mil,cen,unit,decim,centi        ;décomposition en chiffres ascii
    for cpt=0 to 6
        lookup cpt,(sign,mil,cen,unit,virg,decim,centi),car
        gosub EnvoiByteData
    next
    car=199 :gosub EnvoiByteComm    ;position curseur
    bintoascii HR,mil,cen,unit,decim,centi
    for cpt=0 to 5
        lookup cpt,(mil,cen,unit,virg,decim,centi),car
        gosub EnvoiByteData
    next
    return
;***** Sub envoi LCD via I2C *************
EnvoiByteCommInit:    ;sans la pause , ça fonctionne aussi
   pause 15
EnvoiByteComm:
   rsbit=0            ;val de la broche RS du LCD   pour une commande
EnvoiBytedata:
;1ère moitié
    dat=car & $F0 | %1000 | rsbit ;%1000 pour l'éclairage
    hi2cout (dat)
    pause 2        
    dat=dat | %1100
    hi2cout (dat)    ;pulse sur E cad P2
    pause 2            ;pause 2 pour 32 MHz
    dat=dat | %1000    ;fin pulse
    hi2cout (dat)
    pause 2    
;2ème moitié
    dat=car & $0F * 16 | %1000 | rsbit
    hi2cout (dat)
    pause 2
    dat=dat | %1100
    hi2cout (dat)
    pause 2
    dat=dat | %1000 & %1011
    hi2cout (dat)    
    rsbit=1
    return            




 



Créer un site
Créer un site