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érarure et humidité

GY-21 et LCD1602 I2C avec picaxe 08M2


Cette page est une alternative à l'utilisation du capteur I2C GY-21 déjà traité avec un afficheur LCD série. L'afficheur utilse ici une interface I2C à bas cout.
Le GY-21 et le LCD I2C utilisent les mêmes broches dédiées à l'I2C du picaxe 08M2. Restent donc 3 broches libres pour d'autres extensions.

Le schéma:

Le résultat:


 
Le code:
 
;essai GY-21 08/08/18
;RH(%)=(125*S/2**16)-6
;T(°C)=(175.72*S/2**16)-46,85
;LCD 1602 I2C
#picaxe 08M2
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
;w13= (b27,b26) lecture registre SI7021
symbol tempe=w12        ;valeur à afficher
symbol HR=w11
virg=","
setfreq M16
pause 500
;**** 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
;**** Initialisation LCD I2C .*************
hi2csetup i2cmaster,%01001110, i2cfast_16, i2cbyte
;** Entrée des données texte en "data" ***********
data 0,(51,50,40,12,6)        ;initialisation LCD 4 bits
data $10,("Tempe=        ßC")
data $20,("Humid=        % ")
;***** Initialisation LCD *********
    for cpt=0 to 4
        read cpt,car        
        gosub EnvoiByteCommInit
    next
;**** affichage texte fixe ****************
    car=1:gosub EnvoiByteComm    ;raz afficheur
    text(128,$10,$1F)
    text(192,$20,$2F)
;**** boucle principale ************************************
    do    
        hi2csetup i2cmaster,$80,i2cfast_16,i2cbyte
        hi2cout ($E3)        ;température
        hi2cin (b27,b26)        ;(b27,b26) c'est w13            
        sign=" "                ;pas de signe, à priori        
        tempe=w13**17575-4685    ;valeur mémorisée dans tempe
        if w13<=17473  then        ;on est dans les valeurs négatives
            tempe=-tempe            ;idem complément à 2
            sign="-"                    
        endif                    
        pause 1000
       hi2cout ($E5)        ;humidité
        hi2cin (b27,b26)            
        HR=w13**12500-600        ;valeur mémorisée dans H
        pause 1000    
        gosub affich            ;vers affichage
    loop
;***** sub affichage *****************************    
affich:    
    hi2csetup i2cmaster,%01001110, i2cfast_16, i2cbyte
    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