Problème 08M2

Quattro

Member
Bonsoir à tous et très bonne année!

Je suis un nouveau dans l'utilisation sur Picaxe.

Je me suis orienté sur l'utilisation d'un Picaxe 08M2 afin de pouvoir gérer deux veilleuses en tête de lits superposés pour enfants.
Mon projet est d'avoir deux veilleuses indépendantes, avec chacune son bouton poussoir afin de lancer une tempo X (partons sur 1 Heure) pour que celles-ci s'éteignent automatiquement. Je me laisse la possibilité avec un appuis long (prenons 3 secondes) de pouvoir éteindre la veilleuse quand même dans l'idée ou l'enfant n'en voudrait plus pour dormir ou encore qu'il l'allume pour aller aux WC et l'éteigne à son retour.

Je programme en Organigramme!
Voici les I/O :
C.1 ( I ) = BP lit n*1
C.2 ( O ) = Led lit n*1
C.3 ( I ) = BP lit n*2
C.4 ( O ) = Led lit n*2

Le fonctionnement doit être identique mais il doit bien être indépendant lit n*1 par rapport à lit n*2!

J'ai donc fais mes débuts en programmation sur Picaxe, après plusieurs essais je suis arrivé à un programme (demi programme) qui fonctionne très bien sur une voie (lit) en simulation sur Picaxe Editor6.
Par contre, après transfert, je m’aperçois que le fonctionnement n'est pas correct.
Lorsque je donne une impulsion (C.1) j'allume bien ma led (C.2) et commence ma tempo, si je fais un appuis long (C.1) la led (C.2) se coupe bien.
Mais bizarrement, si je donne une impulsion (C.1) j'allume bien la led (C.2) mais si je donne une impulsion sur C.3 cela m'éteint (C.2) et ceci que j'ai écris un demi programme (juste fonctionnement C.1 et C.2) ou le programme complet (C.1 à C.4)...

Je ne comprends pas pourquoi j'ai ce problème!
J'ai un deuxième problème aussi, c'est que si je fais une simulation du programme "complet" (C.1 à C.4), ma simulation ne fonction pas, le programme reste figé sur mes Waits alors que comme écris plus haut le demi programme (juste C.1 et C.2) fonctionne parfaitement en simulation et que le programme complet correspond au double du demi programme!

Si quelqu'un a une idée svp, je suis preneur!
Peut-être un problème avec l'électronique ?
J'utilise des transistor 2N2222A pour faire le relais par rapport au 90mA max des pins du Picaxe.
J'utilise des petits relais avec inverseurs pour les signaux de mes entrées C.1 et C.2.
J'ai travaillé le programme pour avoir seulement 4 "Start".

Je mets le programme en pièce jointe (NOTA: les variables de temps ne sont pas respectées afin de pouvoir valider mes essais)
Merci par avance de votre aide et de vos critiques!


Cordialement.
 

Attachments

MGU

Senior Member
Bonjour,

Si tu commences, je t'encourage vivement à regarder la programmation des picaxes en basic, toute autre méthode limite gravement les possibilités pour une simplification illusoire. Les logigrammes et le blockly sont destinés (bêtement) à l'éducation nationale.
On progresse très vite en basic, sans limitation.

Pourquoi un appui long pour éteindre avant la limite? Pourquoi pas un appui pour allumer, un extinction auto si pas d'appui et extinction si appui pendant la tempo. C'est plus simple.
La limite de courant par sortie est de 20mA. 90mA, c'est le total max du courant pour plusieurs sorties.
Quel est le courant des veilleuses? Le gain d'un transistor en commutation est de 10 (20max).
Un petit programme en basic ?
En plus de la doc, il y a pas mal de tutos, entre autres:
Il y aussi d'autres pages:

Sans réponse, je poste ma solution basic (très simple) demain

MM
 
Last edited:

PieM

Senior Member
mais si je donne une impulsion sur C.3 cela m'éteint (C.2) et ceci que j'ai écris un demi programme (juste fonctionnement C.1 et C.2) ou le programme complet (C.1 à C.4)...
Bonjour et bienvenue,
En général quand des sorties sont commandées alors qu'elles ne devraient pas l'être, c'est que le picaxe est parasité. Le condo de découplage de l'alim existe ? Relais alimetés par le 5V ?
Concernant l'organigramme, il est assez confus: il n'y a pas besoin de 4 starts pour ce programme!
En représentation, une décision doit avoir une entrée et deux sorties Oui/Non. Il ne doit pas y avoir 4 connections comme sur votre schéma.
Voila comment cela a été traduit au niveau du code basic pour le picaxe. Tempo.bas.txt
Pas très cool !!

Sinon, le problème est effectivement assez simple;
- si appui BPA, si compteurA à 0 on allumeA et on démarre le compteurA
- si compteurA > temps ou (compteurA en cours et appui BPA), on éteintA et RAZ compteurA
idem pour B
Deux compteurs sont donc activés indépendamment: La variable timer est utilisée pour envoyer un pulse sur chaque compteur actif, toutes les minutes par exemple.
 

Attachments

Last edited:

MGU

Senior Member
Bonjour,
Quand on voit la transcription du flowchart en basic, ...ça donne pas envie.
Avec deux tempos en parallèle, time est difficilement utilisable. Le temps est divisé en périodes de 200ms, avec deux compteurs indépendants.
Je soumets donc ce code aux critiques, il y a deux tâches identiques, aux variables près:
Code:
;Double tempo MM 06/01/20
;tempo 60 mn = 18000 x 200ms
;sorties sur C.1 et C.2
;C.3 poussoir pour C.1 , appuyé => pinC.3=0
;C.4 poussoir pour C.2
;programme des deux tempo en pseudo multitâches
;Placer C.3 et C.4 niveau haut avant simulation (pullup)

#picaxe 08M2
#no_data
#simtask all  ;pour visu simulation
symbol t1=w13  ;variable temps compteur 1
symbol t2=w12  ;variable temps compteur 2
symbol pous1=pinC.3
symbol pous2=pinC.4
symbol sort1=C.1
symbol sort2=C.2
symbol tmax=10     ; pause 200ms => 3600 x 5 =18000 (=10 pour la simulation)

start0: ;tempo veilleuse 1
    pullup %11000        ;pullup sur C.3,C.4  ;voir doc pullup
    do
        do loop while pous1=1    ;attente appui
        do loop while pous1=0    ;attente relâchement
        high sort1
        t1=0    ;RAZ compteur
        do
            pause 200
            inc t1     ;comptage périodes de 200ms
        loop while t1<tmax and pous1=1    ;sortie par fin de tempo ou appui poussoir
        do loop while pous1=0    ;si arrêt par appui, on attend le relâchement
        low sort1
    loop

start1: ;tempo veilleuse 2
    do
        do loop while pous2=1    ;attente appui
        do loop while pous2=0    ;attente relâchement
        high sort2
        t2=0
        do
            pause 200
            inc t2
        loop while t2<tmax and pous2=1
        do loop while pous2=0
        low sort2
    loop
MM
 

Quattro

Member
Bonjour à tous,

Un grand merci à vous pour ces informations !
Je me remettrai dessus ce weekend surement et reviendrait vers vous par la suite.

Bonne journée et encore merci.
 

BESQUEUT

Senior Member
Bonjour,
Quand on voit la transcription du flowchart en basic, ...ça donne pas envie.
Avec deux tempos en parallèle, time est difficilement utilisable. Le temps est divisé en périodes de 200ms, avec deux compteurs indépendants.
Je soumets donc ce code aux critiques, il y a deux tâches identiques, aux variables près:
Code:
;Double tempo MM 06/01/20
;tempo 60 mn = 18000 x 200ms
;sorties sur C.1 et C.2
;C.3 poussoir pour C.1 , appuyé => pinC.3=0
;C.4 poussoir pour C.2
;programme des deux tempo en pseudo multitâches
;Placer C.3 et C.4 niveau haut avant simulation (pullup)

#picaxe 08M2
#no_data
#simtask all  ;pour visu simulation
symbol t1=w13  ;variable temps compteur 1
symbol t2=w12  ;variable temps compteur 2
symbol pous1=pinC.3
symbol pous2=pinC.4
symbol sort1=C.1
symbol sort2=C.2
symbol tmax=10     ; pause 200ms => 3600 x 5 =18000 (=10 pour la simulation)

start0: ;tempo veilleuse 1
    pullup %11000        ;pullup sur C.3,C.4  ;voir doc pullup
    do
        do loop while pous1=1    ;attente appui
        do loop while pous1=0    ;attente relâchement
        high sort1
        t1=0    ;RAZ compteur
        do
            pause 200
            inc t1     ;comptage périodes de 200ms
        loop while t1<tmax and pous1=1    ;sortie par fin de tempo ou appui poussoir
        do loop while pous1=0    ;si arrêt par appui, on attend le relâchement
        low sort1
    loop

start1: ;tempo veilleuse 2
    do
        do loop while pous2=1    ;attente appui
        do loop while pous2=0    ;attente relâchement
        high sort2
        t2=0
        do
            pause 200
            inc t2
        loop while t2<tmax and pous2=1
        do loop while pous2=0
        low sort2
    loop
MM
Pas testé, mais ça semble OK : sobre et de bon gout.

Pour finasser, j'aime bien définir un symbol pour l'état des poussoirs, ce qui évite les commentaires et permet une logique inversée si nécessaire :
symbol Enfonce=0
symbol Relache=1
 

MGU

Senior Member
Bonjour,
Pas testé non plus. Mais il y a un avantage à ne pas utiliser "time": Le simulateur fonctionne...
On peut toujours faire mieux.
Pour un nouveau venu qui n'a jamais fait de basic, je préfère tout commenter, même si ça semble évident.
Un petit dessin, pour fixer les idées:
23463

MM
 

Quattro

Member
Bonjour,
Pas testé non plus. Mais il y a un avantage à ne pas utiliser "time": Le simulateur fonctionne...
On peut toujours faire mieux.
Pour un nouveau venu qui n'a jamais fait de basic, je préfère tout commenter, même si ça semble évident.
Un petit dessin, pour fixer les idées:
View attachment 23463

MM
Bonjour MGU,
Merci pour vos retours.
Oui merci de prendre même les bases car je ne suis pas non plus un crac en électronique et informatique.
Je n'ai pas mis de résistance en amont des bases des transistors
J'ai mis des résistances de 330 Ohms en série avec les leds
Sur ton schéma tu donnes une information 0Vdc ?
Apres plusieurs tests et recherches j'ai été obligé de mettre des inverseurs comme décrit initialement. donc info 5Vdc etat 1 et 0Vdc pour l'etat 0
C.5 n'a pas de potentiel dans mon projet alors que le tient si.
J'ai C.0 qui est au potentiel 0Vdc par contre car idem j'avais vu sur une doc que C.0 ne devait pas être sans potentiel...
 

Quattro

Member
Bonjour et bienvenue,
En général quand des sorties sont commandées alors qu'elles ne devraient pas l'être, c'est que le picaxe est parasité. Le condo de découplage de l'alim existe ? Relais alimetés par le 5V ?
Concernant l'organigramme, il est assez confus: il n'y a pas besoin de 4 starts pour ce programme!
En représentation, une décision doit avoir une entrée et deux sorties Oui/Non. Il ne doit pas y avoir 4 connections comme sur votre schéma.
Voila comment cela a été traduit au niveau du code basic pour le picaxe. Tempo.bas.txt
Pas très cool !!

Sinon, le problème est effectivement assez simple;
- si appui BPA, si compteurA à 0 on allumeA et on démarre le compteurA
- si compteurA > temps ou (compteurA en cours et appui BPA), on éteintA et RAZ compteurA
idem pour B
Deux compteurs sont donc activés indépendamment: La variable timer est utilisée pour envoyer un pulse sur chaque compteur actif, toutes les minutes par exemple.
Bonjour PieM,

Non je n'ai pas mis de condensateur. C'est celui qui est en parallèle de mon circuit? Quelle valeur faudrait-il?
Les relais sont alimentés avec le même 5Vdc oui mais uniquement lors de l'appuis d'un des boutons poussoir!
Je m'en sers comme d'inverseur pour mes entrées comme expliqué à MGU.
J'ai monté une diode de roue libre sur chaque relais!
 

Quattro

Member
Pas testé, mais ça semble OK : sobre et de bon gout.

Pour finasser, j'aime bien définir un symbol pour l'état des poussoirs, ce qui évite les commentaires et permet une logique inversée si nécessaire :
symbol Enfonce=0
symbol Relache=1
Bonjour Besqueut,

Merci pour le programme je vais regarder cela!
Justement je ne comprends pas trop. Je pense que les différents types de programmation sont une représentations visuelles et plus conviviales. Mais pour moi ce qui est transféré au Picaxe c'est une conversion en Basic ! Normalement si ma simulation fonctionne en logigramme, je devrai traduire cela en Basic qui fonctionne également en transférant le programme dans la puce 08M2... Non?

Bon, visiblement je n'aurai pas le choix que de me mettre au Basic... J'étais plus parti facilement sur le logigramme étant donné que j'ai fais des études en automatisme, forcement cela se rapproche pas mal d'un grafcet...
 

MGU

Senior Member
Apres plusieurs tests et recherches j'ai été obligé de mettre des inverseurs comme décrit initialement. donc info 5Vdc etat 1 et 0Vdc pour l'etat 0
J'ai C.0 qui est au potentiel 0Vdc par contre car idem j'avais vu sur une doc que C.0 ne devait pas être sans potentiel...
C.0 est une sortie, elle ne doit jamais être reliée directement au 0V, ni à Vcc
Dans le programme, il y a la commande "pullup %11000" qui relie les entrées C.3 et C.4 au +Vcc par une résistance. Quand le poussoir est appuyé, ces entrées passent à 0V. Pas besoin d'inverseur.
Les deux condos de découplage sur l'alim +5V valent 100µF et 100nF. Le 100nF est à placer au plus près des broches alim du picaxe

Je n'ai pas mis de résistance en amont des bases des transistors
Il en faut une de 1k
C.5 n'a pas de potentiel dans mon projet alors que le tient si.
Si le picaxe est programmé sur place, les résistances fixe le potentiel de C.5 à 0V. Si le picaxe est programmé ailleurs et transplanté sur un support, il faut relié C.5 à 0V, directement ou par une R de 10k.
J'ai mis des résistances de 330 Ohms en série avec les leds
ca se calcule. La résistance en série avec la led dépend de la tension d'alim, de la tension Vf de la diode (ft couleur) et du courant Id diode nécessaire (voir datasheet de la diode) . R= (Vcc -Vf)/Id
.
Sur ton schéma tu donnes une information 0Vdc ?
Le 0V est représenté pas les barres horizontales en gras (représentation standard)

Maintenant, fais le montage du schéma #8, avec le programme basic #5 et si il y a un pb, on en reparle. Et si pas de pb, on en reparle aussi.
J'ai peur qu'avec le logigramme, le programme inséré soit le basic traduit....et c'est pas très bon, même si ça fonctionne.

MM
 
Last edited:

Quattro

Member
C.0 est une sortie, elle ne doit jamais être reliée directement au 0V, ni à Vcc
Dans le programme, il y a la commande "pullup %11000" qui relie les entrées C.3 et C.4 au +Vcc par une résistance. Quand le poussoir est appuyé, ces entrées passent à 0V. Pas besoin d'inverseur.
Les deux condos de découplage sur l'alim +5V valent 100µF et 100nF. Le 100nF est à placer au plus près des broches alim du picaxe


Il en faut une de 1k

Si le picaxe est programmé sur place, les résistances fixe le potentiel de C.5 à 0V. Si le picaxe est programmé ailleurs et transplanté sur un support, il faut relié C.5 à 0V, directement ou par une R de 10k.

ca se calcule. La résistance en série avec la led dépend de la tension d'alim, de la tension Vf de la diode (ft couleur) et du courant Id diode nécessaire (voir datasheet de la diode) . R= (Vcc -Vf)/Id
.
Le 0V est représenté pas les barres horizontales en gras (représentation standard)

Maintenant, fais le montage du schéma #8, avec le programme basic #5 et si il y a un pb, on en reparle. Et si pas de pb, on en reparle aussi.
J'ai peur qu'avec le logigramme, le programme inséré soit le basic traduit....et c'est pas très bon, même si ça fonctionne.

MM
Ok merci beaucoup!
Je vais plancher la dessus.
J’étais entre temps parti sur l’histoire du condo de découplage que Besqueut a mit en avant.
J'ai monté un 220 microF sur ma carte.
Visiblement mon programme logigramme fonctionne bien.... C'étais bien du parasitage.
Je vais faire mes essais comme je l'entendais pour voir si en concret cela fonctionne quand même pour ma compréhension.
Je ne comprends pas trop pourquoi tu dis "c'est pas très bon"
Niveau fonctionnement?
Niveau matériel?
 

MGU

Senior Member
Je ne comprends pas trop pourquoi tu dis "c'est pas très bon"
Niveau fonctionnement?
Niveau matériel?
Niveau académique, c'est ce qu'on appelle un programme "plat de nouilles". Vite indémêlable avec des goto dans tous les sens.
MM
 

Technoman

Senior Member
Bonsoir,

Je reviens sur les propos de MGU :
Les logigrammes et le blockly sont destinés (bêtement) à l'éducation nationale. / ... programme "plat de nouilles."
Dès le démarrage de la nouvelle discipline au collège appelée technologie (1985), l'initiation par des collègues de l'ancienne discipline (Education Manuelle et Technique : EMT), formés à la hâte, conduisait souvent à l'écriture de programmes en basic du style "plat de nouilles" ou "spaghetti". Le codage en langage basic fut donc probablement banni pour cette raison.

Nous savons qu'il est possible de structurer un programme codé en basic, comme ceux des nombreux exemples vu sur le forum. Pour la famille Picaxe, il ne restait donc que le logigramme. S'il vaut mieux ne pas regarder le code de trop près, cela a tout de même permis à de nombreux collègiens d'écrire des programmes assez complexes, comme par exemple, en troisième, de pilotage de robots autonomes circulant dans un labyrinthe.

Lors de la réforme de 2016, l'enseignement de l'algorithmique était au programme dès le cycle 3 ((CM1-CM2)-6ème), partagé entre les mathématiques et la technologie. Personnellement, j'avais lancé des perches à mes collègues de maths, mais force est de constater que nous n'avons pas réussi à nous fédérer sur ce point. Comme ils utilisaient Scratch dans leur cours, pour des besoins de convergence avec les collègues précités, j'ai "milité" pour la possibilité de coder avec son cousin, Blockly. Je reconnais les efforts de l'équipe de Revolution education pour la mise à disposition de ce nouveau mode et les en remercie.

Après quelques années d'enseignement avec Blockly, j'ai constaté que les élèves ont eu parfois davantage de difficultés à concevoir leurs programmes. Le mode de codage avec Blockly, s'il se fait de manière graphique, est sans doute plus proche du code réel. Probablement à dessein, pour faciliter la transition au "vrai" codage. A noter qu'une mention dans les programmes permet désormais le codage dans le cycle 4 (5ème-4ème-3ème), mais je n'ai pas tenté l'aventure. Resté sur un bilant mitigé quant au codage avec Blockly, je pense que le logigramme a encore de l'avenir.

Par ailleurs, pour nombre d'applications, je crois aux automates finis. Imaginez d'affecter vos entrées/sorties, puis de dessiner votre automate (voir http://madebyevan.com/fsm/), avant de programmer votre Picaxe avec le code généré...

Pour conclure, je ne jetterais pas la pierre à l'éducation nationale, il a été fait "avec", même si la réaction a été lente, au pas du mammouth. Lorsque j'ai quitté l'industrie (1992), le futur semblait se dessiner autour de langages graphiques permettant de se focaliser sur l'algorithmique, sans se préoccuper du codage ; cela ne semble pas encore le cas pour tous.
 

MGU

Senior Member
Bonsoir,

Il est vrai que je n'ai aucune compétence dans l'enseignement, je ne peux parler que pour moi.
Le logigramme est une tentative d'universalité pour s'affranchir d'un langage particulier, on peut comprendre la démarche.
J'ai fait des logigrammes, au début, pour les tests: oui à gauche, non à droite, ok, avec de longues lignes qui naviguent dans le dessin...et pour ce qui est plus complexe, on fait un grand carré pour écrire ce que l'on veut faire....
J'ai trouvé plus simple d'écrire en basic, diviser les parties complexes en sous programmes, qui conduisent à un ensemble mieux structuré.
Le basic était, à l'origine, destiné aux débutants, les logigrammes (ou blockly) sont peut être mieux adaptés, mais à force de vouloir tout simplifier, on abaisse le niveau.

MM
 
Top