Accueil Ti-Gen Foire Aux Questions Chat sur le chan #tigcc sur IRC
Liste des membres Rechercher Aide
Bienvenue Invité !   Se connecter             Mes sujets   
Administrer
0 membre(s) et 1 visiteur(s) actif(s) durant les 5 dernières minutes Utilisateurs actifs : Aucun membre + 1 visiteur
Avant de poster sur le forum, il y a des régles de bases à respecter pour une bonne entente et un respect de tous.
Veuillez lire la charte du forum.
  :: Index » Forum TiZ80 » Algorithmie et optimisation » Programme electronique (19 réponse(s))
./POST DE DEPART (post n°0)   Marquer comme non lu.
Benjy Ecrit le: Lundi 3 octobre 2005 à 19:46 Déconnecté(e)    Voir le profil de Benjy Envoyer un email à Benjy Visiter le site WEB de Benjy Envoyer un message privé à Benjy  


Voila je pense me lancer dans la realisation d'un programme du style electron. Seulement je ne voit pas comment faire pour le systeme des fils et tout ca. C'est a dire pour une porte ca va apres si on en met une deuxieme comment amener la sortie de la premiere sur le deuxieme. Deja ca! Merci de votre aide.
Le langage C y'a pas mieux!!!
    
./Post n°1   Marquer comme non lu.
Jfg Ecrit le: Lundi 3 octobre 2005 à 20:11 Déconnecté(e)    Voir le profil de Jfg Envoyer un email à Jfg Visiter le site WEB de Jfg Envoyer un message privé à Jfg  


A quoi ça sert de vouloir programmer qlqchose quand on cherche pas tout seul les réponses ?
Kill Mario
    
./Post n°2   Marquer comme non lu.
Benjy Ecrit le: Lundi 3 octobre 2005 à 20:27 Déconnecté(e)    Voir le profil de Benjy Envoyer un email à Benjy Visiter le site WEB de Benjy Envoyer un message privé à Benjy  


Eu ici c'est pas ceux qui cherche de l'aide qui pose les questions? Si je demande c'est que je me suis pose la question et que j'ai pas trouve!
Le langage C y'a pas mieux!!!
    
./Post n°3   Marquer comme non lu.
Jfg Ecrit le: Lundi 3 octobre 2005 à 21:40 Déconnecté(e)    Voir le profil de Jfg Envoyer un email à Jfg Visiter le site WEB de Jfg Envoyer un message privé à Jfg  


Ok, mais je doute de toute façon que tu comprennes ce que l'on va te raconter.
Moi, j'essayerais d'utiliser un système de pointeurs qui lient les composant entre eux (dans les 2 sens).
Kill Mario
    
./Post n°4   Marquer comme non lu.
Onur Ecrit le: Mardi 4 octobre 2005 à 03:13 Déconnecté(e)    Voir le profil de Onur Envoyer un email à Onur Visiter le site WEB de Onur Envoyer un message privé à Onur  


Tu fais des structures qui corresponderont à un composant ou à un fil. La simulation d'un signal qui passe à travers ces trucs pourra se faire en appelant une fonction qui en change les champs. En gros tu fais comme si cétait de l'orienté objet mais en C donc sans les fonctions membres etc.. avec un systeme de pointeur vers des fonctions je pense que tu en aura besoin.

Quand on dit que le C++ peut etre utile dans certains cas pour la TI....
Je ne veux pas faire quelque chose de bien, je cherche l'excellence:ETP Studio...


et autres projets à finir avant 2010
    
./Post n°5   Marquer comme non lu.
Benjy Ecrit le: Mardi 4 octobre 2005 à 08:01 Déconnecté(e)    Voir le profil de Benjy Envoyer un email à Benjy Visiter le site WEB de Benjy Envoyer un message privé à Benjy  


Jfg si tu pense que je n'ai pas comprit je vais resumer ce que j'ai comprit et comment je vait proceder. Donc pour chaque circuit placer correspond une structure. Et en suite pour les liers entre elle quand on place un fil le fil represente dans le programme un pointeur qui se trouve en sortie du circuit qui pointe vers l'entrée de l'autre. C'est bien ca! C'est donc comme ca que je vait proceder mais je ne voyait pas ca comme ca au debut merci de votre aide.
Le langage C y'a pas mieux!!!
    
./Post n°6   Marquer comme non lu.
Sasume Ecrit le: Mardi 4 octobre 2005 à 09:08 Déconnecté(e)    Voir le profil de Sasume Envoyer un email à Sasume Visiter le site WEB de Sasume Envoyer un message privé à Sasume  

Quel est le problème ?
Tu fais le graphe du circuit, et pour l'évaluer, tu appliques les opérations de chaque noeud. Note : c'est peut-être plus simple de commencer par la sortie.
    
./Post n°7   Marquer comme non lu.
Benjy Ecrit le: Mardi 4 octobre 2005 à 15:50 Déconnecté(e)    Voir le profil de Benjy Envoyer un email à Benjy Visiter le site WEB de Benjy Envoyer un message privé à Benjy  


Commencer par la sortie?? Ben comment cela est possible on ne sait pas ce que l'on aura en sortie!
Le langage C y'a pas mieux!!!
    
./Post n°8   Marquer comme non lu.
Sasume Ecrit le: Mardi 4 octobre 2005 à 15:59 Déconnecté(e)    Voir le profil de Sasume Envoyer un email à Sasume Visiter le site WEB de Sasume Envoyer un message privé à Sasume  

Evaluer la sortie revient à évaluer chacune des entrées de la dernière porte, ce qui revient à évaluer encore d'autres entrées, etc... jusqu'aux signaux connus. C'est pour ne pas propager l'évaluation dans des endroits qui ne servent à rien. Mais je ne sais pas si en pratique c'est vraiment plus intéressant.
    
./Post n°9   Marquer comme non lu.
geogeo Ecrit le: Mardi 4 octobre 2005 à 17:33 Déconnecté(e)    Voir le profil de geogeo Envoyer un email à geogeo Visiter le site WEB de geogeo Envoyer un message privé à geogeo  


En électronique j'en doute car on ne peut savoir à l'avance le résultat d'un ensemble de portes logiques donc il faut forcément commencer par l'entrée. En gros dans la dernière porte logique on ne peut évaluer à l'avance la tension qui sera appliquée à chacune de ses entrées....

Le pb est que l'arbre sera à l'envers, c'est-à-dire qu'au début il y aura une racine par entrées. Pour commencer faudrait faire des connecteurs logiques binaire. Donc chaque noeud représente une porte logique. Déjà si tu arrives à créer ton arbre représentant ton circuit, tu auras fait une bonne partie du boulot je pense. Pour évaluer le cricuit c'est autre chose, tu parcours la première entrée, tu arrives à un noeud, celui-ci contient un pointeur vers la deuxième entrée, dedans tu as sont état (0 ou 1), tu évalues suivant la porte et tu stockes le résultat dans le noeud de la porte. Tu parcours la branche la plus haute, tu arrives à un autre noeud contenant l'adresse d'un autre noeud avec l'état de l'entrée....

En gros tu as une structure de ce genre.


struct
{
  porte *output;
  porte *input0;
  porte *input1;
  BOOL tension;
} porte;


Une entrée donc une racine aura input0 et input1 à NULL mais output pointera sur une entrée d'une porte logique. tension représente l'état du fil.
Le but est de parcourir ton arbre et de modifier à chaque noeud la variable tension. input0 peut être inutile mais input1 permet de récupérer l'état de tension à la sortie d'une porte logique. C'est difficle par écrit d'expliquer tout ça mais si tu te débrouilles bien tu dois être capable de savoir si une entrée n'est pas utilisée ou encore de connaitre les portes logiques inutiles, de trouver des cours circuit c'est à dire une entrée d'une porte reliée à un noeud de sortie d'une autre porte, de trouver des erreurs de conceptiuon dans le circuit et enfin de faire des portes logiques à plus de 2 entrées.
Webmaster du site.
Programmeur sur TI68K. Arkanoid, Nebulus, GFA-Basic.

Plus d'informations sur GFA-Basic (un langage Basic pour TI68K).
http://www.tigen.org/gfabasic
    
./Post n°10   Marquer comme non lu.
Benjy Ecrit le: Mardi 4 octobre 2005 à 18:10 Déconnecté(e)    Voir le profil de Benjy Envoyer un email à Benjy Visiter le site WEB de Benjy Envoyer un message privé à Benjy  


Oui enfin deja je vai commencer la trame. Par contre pour les portes vous me conseillez d'utilisez des sprite ou bien de dessiner a chaque fois?
Le langage C y'a pas mieux!!!
    
./Post n°11   Marquer comme non lu.
Jfg Ecrit le: Mardi 4 octobre 2005 à 18:40 Déconnecté(e)    Voir le profil de Jfg Envoyer un email à Jfg Visiter le site WEB de Jfg Envoyer un message privé à Jfg  


ça ne veut rien dire ta question. tu peux très bien utiliser des sprites et tout redessiner à chaque fois.
Kill Mario
    
./Post n°12   Marquer comme non lu.
Benjy Ecrit le: Mardi 4 octobre 2005 à 18:46 Déconnecté(e)    Voir le profil de Benjy Envoyer un email à Benjy Visiter le site WEB de Benjy Envoyer un message privé à Benjy  


Ben ce que je veut savoir c'est ce qui est le mieux. Moin lourd!!
Le langage C y'a pas mieux!!!
    
./Post n°13   Marquer comme non lu.
Sasume Ecrit le: Mardi 4 octobre 2005 à 19:30 Déconnecté(e)    Voir le profil de Sasume Envoyer un email à Sasume Visiter le site WEB de Sasume Envoyer un message privé à Sasume  

geogeo :
En électronique j'en doute car on ne peut savoir à l'avance le résultat d'un ensemble de portes logiques donc il faut forcément commencer par l'entrée. En gros dans la dernière porte logique on ne peut évaluer à l'avance la tension qui sera appliquée à chacune de ses entrées....
Après un moement de réflexion, je persiste à penser que cette méthode est pourtant la plus simple à coder. Mais je pense que tu l'as mal comprise.
Supposons que le logiciel permette d'utiliser 3 types de composants : des générateurs de tension (continue, carrée, rectangulaire, ...), des portes logiques binaires (des composants avec une sortie qui dépend de deux entrée), et des oscilloscopes (permettant d'effectuer les analyses).
Un cicruit est composé de ces différents types de composants, reliés par des fils. On a donc une structure de graphe.
L'objectif est de pouvoir connaître l'affichage produit par les oscillos au cours du temps.
Chaque oscillo peut être vu comme la racine d'un arbre binaire (pour simplifier on ignorera les sytèmes bouclés comme les bascules dans notre analyse, mais on peut assez facilement étendre notre système pour gérer ce cas, qui est laissé en exercice au lecteur avisé) dont chaque arc est un fil, chaque noeud est une porte logique, et enfin chaque feuille est un générateur.
Bon, maintenant que les bases sont posées, voyons comment on peut connaître la valeur de l'affichage de chaque oscillo.
Deux approches :
1. On part des générateurs (on considère pour simplifier que les valeurs délivrées sont booléennes, pas besoin de masse etc...) et on explore le graphe en largeur en appliquant les opérations des portes à chaque niveau, jusqu'à arriver aux oscillos, avec la bonne valeur.
2. On part des oscillos et on tente de déterminer la valeur boolenne du fil en entrée. Celle-ci est inconnue au départ, il faut donc remonter vers la source qui est soit une porte logique, soit un générateur. Si c'est un générateur, on s'arrête, on connaît sa valeur. Si c'est une porte logique, pour déterminer la valeur de sa sortie celle-ci doit connaître la valeur de chacune de ses entrées, elle applique donc le même processus que précédemment pour le déterminer, jusqu'à arriver à la source.

La première solution est probablement plus efficace en temps de calculs, mais elle est moins simple à écrire (parcours en largeur d'un graphe) que la seconde qui présente l'avantage d'être extrêmement simple à écrire (récursivité) et remarquablement élégante (mais elle est peut-être un peu lourde à cause de la récursivité justement).

Voilà mon point de vue ;)
Je vais y re-réfléchir, je trouve ça marrant.
    
./Post n°14   Marquer comme non lu.
geogeo Ecrit le: Mardi 4 octobre 2005 à 20:01 Déconnecté(e)    Voir le profil de geogeo Envoyer un email à geogeo Visiter le site WEB de geogeo Envoyer un message privé à geogeo  


Je ne comprend pas ton truc, la méthode 1 est la méthode que j'ai énoncée de façon maladroite en disant que chaque résultatde porte logique devait être conservé dans tension dans la porte logique elle-même. On part du générateur on arrive à une porte logique, on connait l'état d'une entrée, pour l'autre entrée on va en arrière histoire de tomber sur le noeud précédent et de regarder tension. On connait ainsi létat de l'autre entrée, on applique la porte, on sauve la valeur dans tension....

Dans ta conclusion tu dis que la méthode 1 est la meilleur c'est à dire partir des entrées (des générateurs) et que la 2 est fastidieuse mais simple c'est à dire partir des sorties (oscilloscopes).

En tout cas pleins de solutions existent, le graph représentant le circuit peut être amené en opérations logiques (notation postfixe) mais cela posera pb pour la logique séquentielle.
Webmaster du site.
Programmeur sur TI68K. Arkanoid, Nebulus, GFA-Basic.

Plus d'informations sur GFA-Basic (un langage Basic pour TI68K).
http://www.tigen.org/gfabasic
    
./Post n°15   Marquer comme non lu.
geogeo Ecrit le: Mardi 4 octobre 2005 à 20:45 Déconnecté(e)    Voir le profil de geogeo Envoyer un email à geogeo Visiter le site WEB de geogeo Envoyer un message privé à geogeo  


Arf on s'en brouille en fin de compte, on parle de la même chose mais on n'oriente pas les graphes de la même façon. Mon idée est comme la tienne partie des générateurs (racines) jusqu'au oscillos (feuilles).
Sauf que je détail en disant qu'en partant d'une racine (générateur) et en connaissant son état) arrivé à une porte logique il faut repartir en arrière pour la deuxième entrée, regarder le noeud qui contient l'état, appliquer la porte logique, sauvegarder le résultat dans celle-ci, parcourir le fil, remonter à une autre porte logique....
Il est clair qu'en parcourant l'arbre de cette façon on aura aucune surprise, il sera inutile de faire plus d'un retour en arrière pour connaitre la tension elle sera forcément donnée, si c'est pas le cas une erreur de conception existe dans le circuit.
Webmaster du site.
Programmeur sur TI68K. Arkanoid, Nebulus, GFA-Basic.

Plus d'informations sur GFA-Basic (un langage Basic pour TI68K).
http://www.tigen.org/gfabasic
    
./Post n°16   Marquer comme non lu.
Sasume Ecrit le: Mardi 4 octobre 2005 à 21:17 Déconnecté(e)    Voir le profil de Sasume Envoyer un email à Sasume Visiter le site WEB de Sasume Envoyer un message privé à Sasume  

geogeo :
Je ne comprend pas ton truc, la méthode 1 est la méthode que j'ai énoncée de façon maladroite en disant que chaque résultatde porte logique devait être conservé dans tension dans la porte logique elle-même. On part du générateur on arrive à une porte logique, on connait l'état d'une entrée, pour l'autre entrée on va en arrière histoire de tomber sur le noeud précédent et de regarder tension. On connait ainsi létat de l'autre entrée, on applique la porte, on sauve la valeur dans tension....

Mais que fais-tu si en revenant en arrière tu ne tombes pas sur un générateur, mais sur une porte logique ? Ton idée revient au même qu'à l'idée n°2 de mon post précédent, mais en moins bien fichu.

Dans ta conclusion tu dis que la méthode 1 est la meilleur c'est à dire partir des entrées (des générateurs) et que la 2 est fastidieuse mais simple c'est à dire partir des sorties (oscilloscopes).
fastidieuse mais simple #confus#
Ces deux termes sont contradictoires je trouve. L'idée n° 2 est facile à implémenter, mais elle est peut-être alourdie par la surchage due à la récursivité.
En même temps, elle est aussi soulagée par le fait de ne calculer que ce qui est nécessaire (par exemple, si tu as deux générateurs, un relié à un circuit énorme et l'autre relié directement à l'oscillo, on ne s'embêtera pas à évaluer le circuit énorme).

En tout cas pleins de solutions existent, le graph représentant le circuit peut être amené en opérations logiques (notation postfixe) mais cela posera pb pour la logique séquentielle.

Euh à quoi tu penses et quel en serait l'utilité ?

Arf on s'en brouille en fin de compte, on parle de la même chose mais on n'oriente pas les graphes de la même façon.

#non# on ne parle pas de la même chose. Ta solution est un hybride des deux que j'ai proposées.

Il est clair qu'en parcourant l'arbre de cette façon on aura aucune surprise, il sera inutile de faire plus d'un retour en arrière pour connaitre la tension elle sera forcément donnée, si c'est pas le cas une erreur de conception existe dans le circuit.

Euh, tu es sûr ? Je ne pense pas.
    
./Post n°17   Marquer comme non lu.
geogeo Ecrit le: Mardi 4 octobre 2005 à 21:41 Déconnecté(e)    Voir le profil de geogeo Envoyer un email à geogeo Visiter le site WEB de geogeo Envoyer un message privé à geogeo  


Mais que fais-tu si en revenant en arrière tu ne tombes pas sur un générateur, mais sur une porte logique ? Ton idée revient au même qu'à l'idée n°2 de mon post précédent, mais en moins bien fichu.


Arf j'avais pas vu ce pb en détail, en effet ça ne fonctionne pas mon truc.

Euh à quoi tu penses et quel en serait l'utilité ?


L'utilité dépend de la complexité qu'il veut rendre à son programme, si son objectif est d'évaluer un circuit en logique combinatoire pour n'afficher qu'un oscillo ou encore un résultat suivant les entrées alors il peut tout simplement à la manière d'une opération genre not((1 and 0) or 1)... ramener son circuit à 1 0 and 1 or not (notation postfixe). Et avec une pile, évaluer l'expression.


Webmaster du site.
Programmeur sur TI68K. Arkanoid, Nebulus, GFA-Basic.

Plus d'informations sur GFA-Basic (un langage Basic pour TI68K).
http://www.tigen.org/gfabasic
    
./Post n°18   Marquer comme non lu.
Sasume Ecrit le: Mardi 4 octobre 2005 à 22:05 Déconnecté(e)    Voir le profil de Sasume Envoyer un email à Sasume Visiter le site WEB de Sasume Envoyer un message privé à Sasume  

Je ne vois vraiment pas l'intérêt puisque de toute façon on a déjà un arbre avec le circuit. La notation postfixé devient reedondante.
    
./Post n°19   Marquer comme non lu.
Kevin Kofler Ecrit le: Mardi 4 octobre 2005 à 23:22 Déconnecté(e)    Voir le profil de Kevin Kofler Envoyer un email à Kevin Kofler Visiter le site WEB de Kevin Kofler Envoyer un message privé à Kevin Kofler  


L'évaluation récursive en partant des sorties marche très bien pour un circuit statique où le temps n'intervient pas, mais dès qu'on a qqch. de dynamique comme un circuit à horloge, des effets de mémoire (flip-flops, latches, ...) etc., on dépasse le domaine de la logique booléenne statique et on ne peut plus bêtement évaluer récursivement en partant des sorties, il faut forcément propager en partant des entrées, et tenir compte du temps aussi (ce qui permet de modeler un circuit instable comme une horloge qui passe sans arrêt 0->1->0). Il faut aussi mettre une vitesse de simulation raisonnable pour un tel cas (pas trop lent, mais pas tellement rapide qu'on ne voit rien).
Membre de l'équipe de TIGCC: http://tigcc.ticalc.org
Mainteneur du portage Linux/Unix de TIGCC: http://tigcc.ticalc.org/linux/
Membre de l'équipe de CalcForge: http://www.calcforge.org:70/

Participez à la reprise de Ti-Gen!
    
  :: Index » Forum TiZ80 » Algorithmie et optimisation » Programme electronique (19 réponse(s))
Pages : 1/1     « [1] » »|

.Répondre à ce sujet
Les boutons de code
[B]old[I]talic[U]nderline[S]trikethrough[L]ine Flip Hori[Z]ontallyFlip [V]erticallySha[D]ow[G]low[S]poilerCode [G][C]ite
Bullet [L]istList Item [K] Link [H][E]mail[P]icture SmileysHelp
Couleurs :
Saisissez votre message
Activer les smileys
     

Forum de Ti-Gen v3.0 Copyright ©2004 by Geoffrey ANNEHEIM
Webmaster: Kevin KOFLER, Content Admins: list, Server Admins: Tyler CASSIDY and Kevin KOFLER, DNS Admin: squalyl
Page générée en 62.76ms avec 18 requetes