communication alleatoire entre deux picaxes..

spheris

Senior Member
#1
Bonjour,

J'ai un PC avec un com 1 serie 9b qui communique par le cable de prog avec un 8M2.

l'idée du programme est de commuter une 30 aines de relais avec une simple liaison série.

Le programme envoi un caractère ASCII (exemple 'A' pour allumer le relais 1, 'a' pour l'éteindre.)
le programme du picaxe de redirection est le suivant :

main:
serrxd [200], b1
serout B.0,T4800,(b1) 'picaxe 1
serout B.1,T4800,(b1) 'picaxe 2
serout B.2,T4800,(b1) 'picaxe 3
serout B.3,T4800,(b1) 'picaxe 4
goto main

et le programme du picaxe 1 est le suivant :

main:
serin [300], C.1, T4800, b1
select case b1
case "A"
high B.0
case "a"
low B.0
case "B"
high B.1
case "b"
low B.1
case "C"
high B.2
case "c"
low B.2
case "D"
high B.3
case "d"
low B.3
case "E"
high B.4
case "e"
low B.4
case "F"
high B.5
case "f"
low B.5
case "G"
high B.6
case "g"
low B.6
case "H"
high B.7
case "h"
low B.7
case "Z" 'arrete tout
outpinsB = %00000000
end select
goto main

Malheureusement, je suis limité à 128 caractères ASCII (soit 63 relais et un état neutre à 0)
Quand j'essaye d'envoyer 2 données soit :
serout B.0,T4800,(b1,b2)
(bien entendu la réception aussi est configurée pour recevoir les 2 données)
cela ne fonctionne pas, je ne reçois pas correctement les données et je ne sais pas écrire le code du picaxe de réception.
pouriez-vous me donner des pistes de réflexion, pourquoi cela ne fonctionne pas et, comment pourrais-je étendre à plus de 128 commandes.
Merci pour vos réponses.
;)
 

MGU

Senior Member
#3
Bonjour,

Avant de rentrer dans les détails, il faut avoir une idée globale du problème.

A vous lire, il est d'abord question de 30 relais, puis ensuite de 63 relais,et enfin de 128 commandes, voire plus....

C'est quoi finalement le problème? Pour commander 30 relais, quatre octets et quatre PCF 8574 suffisent .

MM
 

PieM

Senior Member
#4
Dans la commande depuis le terminal PC, il suffit d'envoyer un qualificatif représentant le N° du picaxe, suivi de la valeur de outpins de ce picaxe.
terminal : "picaxe2", %00110010
et dans les picaxes, serrxd ( "picaxe2"), outpinsB . car à mon avis le 08M n'est pas utile si on relie tous les serial input des picaxes.
Mais si les picaxes ne servent qu'à ça, effectivement il vaut mieux utiliser des PCF 8574 !
 

BESQUEUT

Senior Member
#5
Malheureusement, je suis limité à 128 caractères ASCII (soit 63 relais et un état neutre à 0)
Quand j'essaye d'envoyer 2 données soit :
serout B.0,T4800,(b1,b2)
(bien entendu la réception aussi est configurée pour recevoir les 2 données)
cela ne fonctionne pas, je ne reçois pas correctement les données et je ne sais pas écrire le code du picaxe de réception.
pouriez-vous me donner des pistes de réflexion, pourquoi cela ne fonctionne pas et, comment pourrais-je étendre à plus de 128 commandes.
Merci pour vos réponses.
;)
1) merci de mettre votre programme entre balises CODE.
2) à mon humble avis, il manque un qualificatif. Selon vous, comment le Picaxe récepteur sait quel est le premier (et donc le second) octet émis...
En d'autres termes, votre réveil fait il :
TIC TAC TIC TAC TIC TAC TIC TAC TIC TAC
ou bien :
TAC TIC TAC TIC TAC TIC TAC TIC TAC TIC (comme tous les réveils militaires, mais c'est un autre sujet...)

3) Comme PieM, si le Picaxe ne sert qu'à ça, on peut utiliser un registre a décalage bien moins cher qu'un PCF.
 
Last edited:

spheris

Senior Member
#6
MGU, merci pour votre réponse j'ignorais l'existence de ce genre de CI PCF8574.128 commandes ( 64 allumages,et 64 extinctions pour 64 relais, je n'en utilise que 30.

--------------------------------------

PieM, dans mon exemple cela serait-il ce code là :
Emission:
Code:
serout B.0,T4800,("picaxe1"),b1
réception:
Code:
serin [300], C.1, T4800,("picaxe1"), b1
-----------------------------------

BESQUEUT,
J'ai bien saisi l'idée d'un top départ de com , mais je ne sais comment le coder.
Pourriez-vous m'aiguiller?
J'opte plutôt pour une horloge Russe qui fait : DIK TAT, DIK TAT, DIK TAT,.... mais c'est aussi une autre histoire :)
Enfin pour résumer, oui les Picaxes ne servent qu'à cela.

nb: Comment relier toutes les serial IN ? Directement sans resistance de tirage?
 

PieM

Senior Member
#7
Il faudrait en savoir un peu plus comme demandé en #3.
Quelle architecture topographique des éléments entre eux (distances).
le type de liaison en dépend, bien entendu.
les PCF se trouvent à 1€, mais sont en liaison I2C donc limitée en longueur.
Si les relais sont proches les uns des autres vous pouvez utiliser 2 x ça et vous faites tout avec un picaxe 40
 

spheris

Senior Member
#8
PieM,
tous les picaxes sont sur la meme carte pcb de 150x100
ils sont environ a 5 cm l'un de l'autre.

pour ce qui est du TIC TAC ou TAC TIC, comment puis-je avoir un dialogue sans perte?
il a lieu toujours dans le même sens (le maitre envoi aux esclaves une commande.
 

PieM

Senior Member
#9
Je ne parlais pas seulement des picaxes.
Je ne comprends toujours pas pourquoi 5 picaxes pour 30 relais alors qu'on peut tout faire avec un 40X2 ou 2 x 20M2
pas trop compris non plus l'histoire des Tic tac !!
Si un seul picaxe, (40X2) le PC envoie un serout b1,b2,b3,b4
et en réception, le picaxe va affecter les différents bytes aux ports de sortie.
serin xxx, bauds, outpinsA, outpinsB , outpinsB , outpinsC
Si plusieurs picaxes, tous les serin sont liés au TX du PC et les ordres deviennent:
serout ("picaxe1", b1,b2)
serout ("picaxe2", b1,b2)
etc...
en reception, sur le picaxe1: serin xxx, bauds, ("picaxe1"), outpinsB, outpinsC
et pour l'autre serin xxx, bauds, ("picaxe2"), outpinsB, outpinsC
etc ...
 

BESQUEUT

Senior Member
#10
TIC TAC
Explication donnée au sujet du dysfonctionnement de
serout B.0,T4800,(b1,b2)
donné en #1

Il faut tenir compte du fait qu'une partie du message peut être perdu.
Si TIC représente un octet, et TAC l'autre, en l'absence de qualifieur, il est impossible pour le récepteur de savoir si le premier octet reçu est un TIC ou un TAC : c'est du pile ou face.
Si on gagne, on peut avoir plusieurs réceptions OK, puis un nombre impair d'octets perdus et ça merdouille.
D’où le comportement qui semble aléatoire.
Avec 256 valeurs possibles pour chaque octet, on peut commander 128 relais en ON/OFF et donc se passer de qualifieur.
Sinon, il faut utiliser la méthode PieM, et si la fiabilité du bidule est primordiale, utiliser une forme de checksum.
 

jojojo

Senior Member
#11
Hello.

Bien qu'en mode filaire, pourquoi ne pas utiliser RFIN / RFOUT ?
Huit octets transmis, zéro erreur garantis.
(14M2 minimum, mais bon ...).

Le débit est plus faible, mais, ça ne semble pas critique, ici.
 
Top