Bonjour
voici un petit programme sur un 20M2 qui me permet de lire 4 DS18b20 et un potar, les résultats sont envoyés sur un lcd 2004 I2C.
Tout fonctionne correctement, mais le temps de réaction est plutot long.
Par ex: si je met un bouton poussoir, le temps d'acquisition peut aller jusqu'a environ 1 seconde.
Le souci va être quand je vais devoir piloter un moteur et verifier ses positions...
Existe t'il une solution, si ce n'est de diviser les taches sur plusieurs picaxes?
Le prog n'est surement pas optimal, je débute et ce sont des morceaux de prog que j'ai "piqué" a droite et a gauche, et assemblé a ma sauce.
Merci de vos réponses
voici un petit programme sur un 20M2 qui me permet de lire 4 DS18b20 et un potar, les résultats sont envoyés sur un lcd 2004 I2C.
Tout fonctionne correctement, mais le temps de réaction est plutot long.
Par ex: si je met un bouton poussoir, le temps d'acquisition peut aller jusqu'a environ 1 seconde.
Le souci va être quand je vais devoir piloter un moteur et verifier ses positions...
Existe t'il une solution, si ce n'est de diviser les taches sur plusieurs picaxes?
Le prog n'est surement pas optimal, je débute et ce sont des morceaux de prog que j'ai "piqué" a droite et a gauche, et assemblé a ma sauce.
Merci de vos réponses
Code:
'picaxe 20M2
; SCL sur B.7
; SDA sur B.5
DirsC=%00001111 'C0 a C3 en sorties
pullup%1111000000000000 'pullup sur c4 a c7
symbol rsbit=bit0
symbol cpt=b1
symbol car=b2
symbol dat=b3
symbol valid=pinC.6
symbol led=C.0
symbol tempair=w10
symbol tempch1=w11
symbol tempch2=w12
symbol tempch3=w13
symbol potar= w9 'pin b6
setfreq M32
; Initialisation I2C 4 bits , etc ********
hi2csetup i2cmaster,%01001110, i2cslow_32, i2cbyte
; Initialisation LCD *********
for cpt=0 to 5
lookup cpt,($33,$32,$28,$c,$6,$01),car
gosub EnvoiByteCommInit
next
pause 100 ;temps init du LCD
' ========================================================
; Affichage texte ***********************
car= 128 'curseur d?but ligne1
gosub EnvoiByteComm
for cpt=0 to 19
lookup cpt,("Ch1 ? C= ?"),car
GOSUB EnvoiByteData
next
car= 192 'curseur ligne2
gosub EnvoiByteComm
for cpt=0 to 19
lookup cpt,("Ch2 ? C= ?"),car
GOSUB EnvoiByteData
next
car= 148 'ligne 3
gosub EnvoiByteComm
for cpt=0 to 19
lookup cpt,("Ch3 ? C= ?"),car
GOSUB EnvoiByteData
next
car= 212 'ligne 4
gosub EnvoiByteComm
for cpt=0 to 8
lookup cpt,("Air ?"),car
GOSUB EnvoiByteData
next
'==================================================
do' boucle affichage variables
' affichage temperature chambre 1
car=132 'ligne 1 colonne 6
gosub EnvoiByteComm
'debug
readtemp12 b.4,tempch1
tempch1=tempch1-13 'ajustement temp
w5=tempch1
gosub decomp
tempch1=w5
bintoascii tempch1,b4,b4,b4,b5,b6
for cpt=0 to 3
lookup cpt,(b4,b5,".",b6),car
gosub EnvoiBytedata
next
' affichage temperature chambre 2
car=196 'ligne2 colonne 6
gosub EnvoiByteComm
'debug
readtemp12 b.3,tempch2
'tempch2=tempch2-13 'ajustement temp
w5=tempch2
gosub decomp
tempch2=w5
bintoascii tempch2,b4,b4,b4,b5,b6
for cpt=0 to 3
lookup cpt,(b4,b5,".",b6),car
gosub EnvoiBytedata
next
' affichage temperature chambre 3
car=152 'ligne colonne 6
gosub EnvoiByteComm
'debug
readtemp12 b.2,tempch3
'tempch3=tempch3-13 'ajustement temp
w5=tempch3
gosub decomp
tempch3=w5
bintoascii tempch3,b4,b4,b4,b5,b6
for cpt=0 to 3
lookup cpt,(b4,b5,".",b6),car
gosub EnvoiBytedata
next
'affichage temperature air conduit
car=216 'ligne colonne 6
gosub EnvoiByteComm
'debug
readtemp12 b.1,tempair
'tempair=tempair-13 'ajustement temp
w5=tempair
gosub decomp
tempair=w5
bintoascii tempair,b4,b4,b4,b5,b6
for cpt=0 to 3
lookup cpt,(b4,b5,".",b6),car
gosub EnvoiBytedata
next
if valid=0 then
high led
else low led
endif
'================================ Potar consigne
car=143 'curseur ligne4
gosub EnvoiByteComm
readadc10 B.0,potar
potar=potar*50/102
bintoascii potar,b4,b4,b4,b5,b6
for cpt=0 to 3
lookup cpt,(b4,b5,".",b6),car
gosub EnvoiBytedata
next
' ==================================== Valid consigne CH2
loop
'do loop ;boucle d'arret programme
' decomposition temp DS18B20
decomp:
w8=w5/16
w7=w5//16
w7=625*w7/1000
w5=w8*10+w7
return
; Sub envoi vers LCD via I2C *************
EnvoiByteCommInit:
pause 15
EnvoiByteComm:
rsbit=0
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