Bonjour Piem et à toute la communauté
Je vous remercie pour tous vos très bons conseils, ils me permettent d'avancer mon projet.
Maintenant j'ai besoin de gérer au moins 12 cantons pour le moment. Donc j'utilise encore un 20X2 et des PCF8574A. J'ai repris le programme du clavier 16 touches que j'ai modifié pour gérer 16 entrée/sorties. Le truc fonctionne très bien pour 8 entrées sorties, mais pour 16, je ne comprends pas ce qu'il faut faire pour utiliser le 2ème PCF8574A pour passer à 16 entrées/sorties.
Pourriez vous m'aider pour comprendre le fonctionnement avec 2 pcf 8574 que j'ai en stock.
Par avance merci.
Code pour 8 entrées/sorties.
essai de code pour 16 entrées/sorties:
View attachment 21154
Je vous remercie pour tous vos très bons conseils, ils me permettent d'avancer mon projet.
Maintenant j'ai besoin de gérer au moins 12 cantons pour le moment. Donc j'utilise encore un 20X2 et des PCF8574A. J'ai repris le programme du clavier 16 touches que j'ai modifié pour gérer 16 entrée/sorties. Le truc fonctionne très bien pour 8 entrées sorties, mais pour 16, je ne comprends pas ce qu'il faut faire pour utiliser le 2ème PCF8574A pour passer à 16 entrées/sorties.
Pourriez vous m'aider pour comprendre le fonctionnement avec 2 pcf 8574 que j'ai en stock.
Par avance merci.
Code pour 8 entrées/sorties.
Code:
#picaxe 20x2
#no_data
Symbol io_adr = $70 'I2C addresse du 1er PCF8574AP en ecriture
Symbol io_adr2 = $72'I2C addresse du 2eme PCF8574AP en lecture
Symbol io_adr3 = $77 'i2c addresse du 3eme pcf8574ap en lecture
symbol io_adr4 = $79 'i2c addresse du 4eme pcf8574ap en lecture
symbol flag=bit0
symbol cpt=b1
symbol poidsfaible = b2
symbol num_capteur = b3
symbol octetlu = b4
symbol var_temp=b5
symbol temp = b9
symbol capteurmini=b10
symbol capteurmaxi=b11
symbol capteur=b12
hi2csetup i2cmaster, io_adr,i2cfast,i2cbyte 'addresse du 1er pcf8574ap en ecriture
hi2cout [io_adr],(%11111111)
hi2cout [io_adr2],(%11111111)
hi2cout [io_adr3],(%00000000)
hi2cout [io_adr4],(%00000000)
num_capteur=255
capteurmini=0:capteurmaxi=16
'capteur=0
num_capteur=255
capteurmini=0:capteurmaxi=16 '--->8
gosub lectouche
sertxd("num capteur : ",#num_capteur,13,1)
var_temp =num_capteur '-1 // 8 ; var_temp devient 0 ? 7
var_temp = dcd var_temp ; met le bit n? (var_temp) ? 1
if num_capteur <9 then : hi2cout [io_adr3],(var_temp)
elseif num_capteur <17 then : hi2cout [io_adr4],(var_temp)
endif
pause 200
reset
lectouche:
do
poidsfaible=%00000000 ;init ? xxxx0001
for cpt=1 to 8 ;scann sur bits poids faible
pause 20
temp=not poidsfaible or %00000000 ;
hi2cout [io_adr],(temp) ;envoi octet
pause 20
hi2cin [io_adr],(octetlu) ;test sur retour octet
if octetlu <=254 and flag=0 and octetlu <> temp then ;pins < 11111111 (255) c?d une touche appuyee, premier passage
pause 20
lookdown octetlu,(254,253,251,247, 239,223,191,127),num_capteur
sertxd("temp: ",#temp,"octet lu: ",#octetlu,"num capteur: ",#num_capteur,13,1)
flag=1
elseif octetlu > 254 and flag=1 then ;relachement touche
pause 20
flag=0
if num_capteur <=capteurmaxi and num_capteur>=capteurmini then retour
pause 20
endif
poidsfaible=poidsfaible*2 ;decalage du 0 a gauche (futur 1...)
next
loop
retour:
return
Code:
#picaxe 20x2
#no_data
symbol io_adr = $70 'i2c addresse du 1er pcf8574ap en ecriture
symbol io_adr2 = $72'i2c addresse du 2eme pcf8574ap en ecriture
symbol io_adr3 = $77 'i2c addresse du 3eme pcf8574ap en lecture
symbol io_adr4 = $79 'i2c addresse du 4eme pcf8574ap en lecture
symbol flag=bit0
symbol cpt=b1
symbol poidsfaible = b2
symbol num_capteur = b3
symbol octetlu = b4
symbol var_temp=b5
symbol temp = b9
symbol capteurmini=b10
symbol capteurmaxi=b11
symbol capteur=b12
hi2csetup i2cmaster, io_adr,i2cfast,i2cbyte 'addresse du 1er pcf8574ap en ecriture
hi2cout [io_adr],(%11111111)
hi2cout [io_adr2],(%11111111)
hi2cout [io_adr3],(%00000000)
hi2cout [io_adr4],(%00000000)
num_capteur=255
capteurmini=0:capteurmaxi=16 '--->8
gosub lectouche
sertxd("num capteur : ",#num_capteur,13,1)
var_temp =num_capteur '-1 // 8 ; var_temp devient 0 ? 7
var_temp = dcd var_temp ; met le bit n? (var_temp) ? 1
if num_capteur <9 then : hi2cout [io_adr3],(var_temp)
elseif num_capteur <17 then : hi2cout [io_adr4],(var_temp)
endif
pause 200
reset
lectouche:
do
poidsfaible=%00000000 ;init ? xxxx0001
for cpt=1 to 16 ;scann sur bits poids faible
pause 20
temp=not poidsfaible or %00000000 ;
if cpt<9 then
hi2cout [io_adr],(temp) ;envoi octet
elseif cpt>8 then
hi2cout [io_adr2],(temp) ;envoi octet
pause 20
end if
if cpt<9 then
hi2cin [io_adr],(octetlu) ;test sur retour octet
elseif cpt>8 then
hi2cin [io_adr2],(octetlu) ;test sur retour octet
end if
if octetlu <=254 and flag=0 and octetlu <> temp then ;pins < 11110000 (240) c?d une touche appuyee, premier passage
pause 20
lookdown octetlu,(254,253,251,247,239,223,191,127,246,245,243,239,231,215,183,119),num_capteur
sertxd("temp: ",#temp,"octet lu: ",#octetlu,"num capteur: ",#num_capteur,13,1)
flag=1
elseif octetlu > 254 and flag=1 then ;relachement touche
pause 20
flag=0
if num_capteur <=capteurmaxi and num_capteur>=capteurmini then retour
pause 20
endif
next
loop
retour:
return