Equations booléennes

ECRITURE D'EQUATIONS BOOLEENNE

  • Examples d'équations boléennes

    Votes: 0 0.0%
  • Equations booléennes complexes

    Votes: 0 0.0%

  • Total voters
    0
  • Poll closed .

Philix

New Member
Bonjour,
Je salue la communauté Picaxe francophone.
Je suis un papy féru d'automatisme qui veut que son petit fils puisse commander son réseau de trains électriques via un pupitre manuel en toute sécurité.
Ceci implique plus d'une centaine d'entrées (commandes manuelles sur le pupitre, infos de position d'aiguilles et de présence de convois sur le circuit) ainsi qu'autant de sorties pour commander la manœuvre des aiguilles ou les arrêts de convoi.
A partir d'un Picaxe 40X2, j'ai conçu un circuit (dont j'ai commencé les tests) permettant de contrôler jusqu'à 8 cartes de 8 blocs de 2 Octets, 1 d'entrées et un de sorties.
Les tests sur une première carte, m'ont donné satisfaction : les entrées sont bien prises en compte, octet par octet aussi bien que les commandes des sorties.:)
Je me heurte à un problème de programmation : certaines commandes telles que celles d'arrêt de convoi sont fonction des informations (entrées) d'occupation de voies et de position d'aiguilles, etc. Ces informations issues d'un octet Bxy sont réunies dans B1 à b3, les commandes en B0. Ceci devrai me permettre de programmer bit à bit (de 0 à 31). Je n'ai pas réussi, jusqu'à présent, à trouver comment écrire ces équations booléennes.:confused:
Où pourrais-je trouver des exemples ?
Je vous remercie d'avance de votre coopération.
Bien à vous,
Philix
Philix is offline Reply With Quote
 

PieM

Senior Member
Bonjour,

Heureux petit fils ...

Si les commandes sont toutes contenues dans b0, elles sont directement accessibles individuellement par bit0, bit1,....bit7.
On peut accéder directement aux autres bits des bytes b1 à b3 qui vont être bit8, bit9, ... bit 31.

donc, par exemple, si l'équation booléenne est : bit2 = bit9 * bit13 + bit21, elle serait traduite par:

bit2 = bit9 & bit 13 | bit21

théoriquement, il serait possible d'utiliser les parenthèses avec les X2 mais ça ne marche toujours pas... :(

l'équivalent de bit2 = bit9 * (bit13 + bit21) serait donc
bit2 = bit13 | bit21 : bit2= bit2 & bit9

Il sera sans doute possible d'utiliser aussi l'état des entrées globalement:
select w1 (soit b2 et b3)
case %0001101010011101
....................


Je ne sais si ça répond bien à la question ?

Cordialement
 

Philix

New Member
Equations booléennes (suite)

Merci PieM pour ta prompte réponse. Je vais essayer avec les signes, au lieu de termes AND, OR ou NOR.
Hourra!
L'équation "bit0 = bit24 & bit17 | bit18 &/ bit24" est acceptée par la syntaxe !
Je vais continuer les essais.
Merci encore et à bientôt
Philix
 

portfolio

New Member
Bonsoir
je suis aussi un papi qui a déjà cogité, et réalisé quelque trucs d'essai, pour le train electrique (en hard et aussi en soft)
je viens de me lancer dans la découverte du picaxe 20x2 et évidemment....
j'ai fait une commande de moteur (accel decel av/ar avec 3 boutons)
je projette aussi de faire quelque logique mais je trouve que le nb d'entrées/sorties risque d'être plus qu'insuffisant
ou y aurait-il une astuce ?
Salutations
 

PieM

Senior Member
Bonjour,

Bienvenue :)

Concernant les sorties, il suffit d'utiliser un décodeur 4 lignes vers 16 tel que le 74HC/HCT4514. Activer une sortie revient à écrire son numéro sous forme binaire. Mais ce multiplexage conduit à avoir une sortie non permanente. Tout va dépendre donc du type d'interface (relais statique ou pas) qui lui, pourra voir son entrée équipée d'un circuit RC-diode pour maintenir le signal à l'état haut pendant la période de multiplexage.

Un port de Picaxe pourrait donc fournir ainsi 32 sorties.

Concernant les entrées, il y a peut être une astuce avec un SN 74150 qui permettrait un multiplexage. Il conduirait à utiliser 4 sorties pour l'adresse, et une entrée pour le signal.
Donc, en mettant par exemple deux circuits adressés en parallèle ( A1, A2, A3, A4 commun) et les entrées signal (output W) sur deux entrées séparées, il est possible d'avoir 32 entrées en occupant seulement 4 sorties picaxe et deux entrées.
Ajouter 16 entrées ne conduirait qu'à une seule entrée de plus. Un port de picaxe permet ainsi de contrôler 64 entrées.

Une autre solution serait d'utiliser un HEF4067B qui est bidirectionnel.

Je ne sais si c'est bien clair ! :confused:

Je vous ferai un petit schéma de principe, le cas échéant.
 
Last edited:

zebulon

Member
Bonjour,

Juste une idée en ce qui concerne les entrées.
Si le PICAXE utilisé possède des ports ADC, il est possible également, à la manière du pilotage des claviers matricés d'avoir au moins 16 entrées ouvert/fermé par pin utilisable en ADC ( en choisissant judicieusement les résistances à mettre pour chaque entrée, on doit pouvoir encore faire mieux).
Personnellement - mais je ne dois pas être le seul -, j'utilise un clavier 12 touches sur 1 port ADC.

Dans ton cas, avec un 20X2, il y a 11 ports ADC, donc ça fait pas mal de possiblités.
Avec 3 ports ADC, tu gères déjà au minimum 36 entrées et tu as 8 pins disponibles pour multiplexer les sorties comme expliqué dans le message de PieM.

Voici un exemple d'un digicode que j'ai réalisé. Pour gérer les 12 touches (ou 12 interrupteurs ce qui revient au même), il te faut 7 résistances et 1 port ADC dispo.

Le "drivers" :
clavier et interface.jpg
L'ensemble clavier + drivers :
interface clavier seul.jpg
fil rouge = +5V , fil noir = masse , fil bleu = vers un port ADC du PICAXE.

Et un exemple de code (pour un 18M2) pour te montrer la simplicité :
Code:
symbol kbd_pin =C.0
symbol scancode = B0 ' Valeur lue sur ADC

symbol touche = B1 ' Valeur de touche
kbd_scan:

	let touche = 0


	readadc kbd_pin, scancode
	select scancode

            case > 168 : touche = "1"

	    case > 157 : touche = "4"

	    case > 147 : touche = "7"

	    case > 135 : touche = "*"

	    case > 124 : touche = "2"

	    case > 118 : touche ="5"

	    case > 112 : touche = "8"

	    case > 105 : touche = "0"

	    case > 098 : touche = "3"

	    case > 094 : touche = "6"

	    case > 091 : touche = "9"

	    case > 085 : touche = "#"

	endselect

	if scancode <> 0 then

		pause 300

		'sertxd(#scancode,13,10)

	endif
	

	return
S'il te faut plus d'info, n'hésite pas à demander.

A+,
Guillaume
 
Last edited:

PieM

Senior Member
Bonjour Zebulon,


Le problème avec cette méthode, c'est que ça ne permet de décoder qu'une seule info: une seule touche à la fois ne peut être actionnée sur le clavier.

Dans le cas présent, si l'on veut connaître l'état de plusieurs entrées, chose probable sur un réseau train électrique, on est est obligé d'avoir recours à un multiplexage... :)
 

zebulon

Member
Bonjour PieM,

En choisissant judicieusement des résistances assez précises, genre 1% et avec quelques expérimentation, on doit pouvoir tester même le cas de plusieurs touches enfoncer simultanément.
Il faut faire une table de vérité et se pencher un peu plus en profondeur sur le problème (ce que je n'ai pas fait).
Genre 1, 2, 4, 8, 16, 32, 64 à la manière des puissances de 2 des valeurs des bits d'un octets, mais en utilisant des valeurs possibles de résistance.

Ou alors en utilisant 1 résistance différente par bouton comme ça, on est sur d'avoir des valeurs différentes quelque soit la combinaison de touches.

Ce n'est qu'une idée.
A+,
Guillaume
 
Last edited:

portfolio

New Member
Bonsoir
un grand merci pour vos réactions
et vos bonnes idées
va effectivement falloir que je me recable des décodeurs ...
je suis d'accord avec la dernière remarque de PieM
Cordialement
 

BESQUEUT

Senior Member
Personnellement, en sortie, j'utilise le 74HCT4094 qui permet de créer avec 3 fils autant de sorties que l'on veut (8 par puce) pour quelques centimes.
De plus, les sorties restent stables même en cas d'arrêt du PICAXE (il faut quand même que le 74HCT soit alimenté (ne rêvons pas...)) et la bascule est franche.
Sinon, il y a le bus I2C en entrée et en sortie sur seulement 2 fils, mais c'est un peu plus cher.
 
Last edited:
Top