chrono agility !!!

ddaweb

New Member
Nickel, si cela fonctionnait avec vous, il ne devrait pas avoir de raisons que cela ne fonctionne pas comme avant ... beau travail car ce n'est pas toujours évident de reprendre un travail de quelqu'un d'autre :p
 

ddaweb

New Member
Pour finir, c'est bien "le club Arlonais" ?
Si oui, comme on est dans la même fédération canine, nos concurrents le verront alors fonctionner ;)
 

Telectroboy

Active member
Je ne sais pas en fait... C'est un certain Jérome mais je ne connais pas son nom!
Je connais juste son lieu de travail et très bien son directeur...
 

ddaweb

New Member
Bah, ne n'est pas cela le primordial, c'est qu'il refonctionne correctement.
Le chrono électronique permet au club de ne mettre qu'un seul chronométreur manuel au lieu de 2 (moins de personnel sur le terrain) et surtout donner un temps beaucoup plus fiable : il est toujours prioritaire sur le chrono manuel !
 

Telectroboy

Active member
Il aurait peut être été sympa d'y ajouter un RTC ou une horloge fiable histoire de ne pas avoir trop de fluctuations avec la température.
Je n'ai pas calculé l'écart possible dans le chronométrage c'est peut être négligeable.
Enfin dans tous les cas ça permet de classer précisément les participants. Et de façon plus fiable qu'à la main.
 

ddaweb

New Member
Il y a moyen de mettre un quartz informatique de 16Mhz sur les pin 9 et 10 ... cela peut aider un peu.
Le chrono est pratiquement toujours dehors, avec le soleil, les écarts de T° peuvent être important entre le matin et l'après-midi.
 

BESQUEUT

Senior Member
Il aurait peut être été sympa d'y ajouter un RTC ou une horloge fiable histoire de ne pas avoir trop de fluctuations avec la température.
Je n'ai pas calculé l'écart possible dans le chronométrage c'est peut être négligeable.
Enfin dans tous les cas ça permet de classer précisément les participants. Et de façon plus fiable qu'à la main.
Ça permet de classer les concurrents, mais ça ne veut pas dire que ce soit équitable ; vu la conception du bidule, il semble que des variations aléatoires pouvant atteindre 1/10 en plus ou en moins soient possibles... Pas sur que ce soit tellement plus juste qu'un chronométrage manuel.
L'utilisation d'un quartz est un minimum pour un chronomètre...
Ensuite, il faut regarder le code : un Picaxe peut être spécialement lent, en particulier lorsque que le port série est utilisé...
Autre approche : comparez les temps obtenus avec un étalon fiable. Par exemple un Picaxe qui ne fait que ça et qui est cadencé par un Quartz peut
générer des impulsions à 2 minutes d'intervalle avec une bonne répétabilité.
On peut aussi ouvrir un chrono à 2 € et mettre en parallèle le bouton start/stop avec le Picaxe.
 

ddaweb

New Member
Bonjour

Je me lance dans la fabrication d'un afficheur extérieur pour mon chrono ... avec le confinement, j'ai un peu de temps libre :p
@MGU, j'ai refait un schéma récapitulatif depuis Electromag1, mais je me demande à quoi sert la diode 1N5819 présente sur la carte mère de la page 3.

Pour la compréhension, l'afficheur extérieur sera nommé chrono fille (picaxe 20x2) et mon chrono : chrono mère.
Le chrono fille permet de ne pas avoir de communication avec le chrono mère durant le chronométrage : garder la fiabilité du temps obtenu grâce à vous.

Je vais piloter cet afficheur depuis une sortie du chrono mère, le temps final sera transmit via une liaison RS232 à l'arrêt du chrono mère (câble +/- 7m).
L'afficheur sera piloté par le chrono fille pour afficher le temps durant le parcours (idée intéressante durant nos débats) pour recevoir le temps final et l'afficher à l'arrêt du chrono mère ... les centièmes ne seront pas affichés durant le chronométrage : illisible de toute manière et comportera une erreur par rapport au chrono mère.

J'ai réussit à mettre tous les afficheurs sur une carte à bande 100x160 et le chrono fille sera sur une autre carte (avec les 2 circuits de pilotage, pas assez de place sur la carte afficheur malheureusement).
Les pistes principales des alimentations sont dédoublée afin de diminuer le courant sur chacune : l'alim 12v 60 W.

Le programme sera en très grande partie celui du chrono original : adaptations du Start/Stop et réception du temps final en série.

Je suis ouvert à vos remarques
 

Attachments

MGU

Senior Member
Bonjour
Je me lance dans la fabrication d'un afficheur extérieur pour mon chrono ... avec le confinement, j'ai un peu de temps libre :p
@MGU, j'ai refait un schéma récapitulatif depuis Electromag1, mais je me demande à quoi sert la diode 1N5819 présente sur la carte mère de la page 3.
Bonjour,

J'ai dû vouloir améliorer le découplage des cartes filles. Le remplacement par un strap ne doit pas changer grand chose.
Les cartes filles devaient être placées juste derrière les afficheurs pour simplifier le câblage. Tout dépend de la taille de l'afficheur.
L'alimentation des CD4543 (ou autre) doit rester indépendante du 12V puissance des segments.

MM
 
Last edited:

ddaweb

New Member
Bonjour,

Merci pour votre réponse qui confirme ce que je pensais.
N'ayant qu'une seule alimentation 12v pour tout l'afficheur, il sera difficile de séparer le CD4543, placer la diode pour un pseudo isolement est tout à fait faisable par contre : je n'ai pas encore commandé le matériel.
La carte µC est protégée par un autre fusible en série avec le général 5A, avec le 5V : isolement partiel.

Côté afficheur, chaque segment fera +/- 10 cm : 6 leds 5050 insérées dans un profilé alu de la largeur du ruban permettant la concentration des segments et gagner en luminosité : je dois juste tester si je place le couvercle translucide qui permettrait par contre une meilleure ligne, mais devrait également diminuer la puissance lumineuse ponctuelle -> https://www.buyledstrip.com/fr/profil-en-aluminium-1506-1-metre.html.

Je viens de voir que la partie "ABCD" n'est pas correcte sur le pdf, c'est une ancienne version, avant d'avoir analysé le code du chrono.
Mais ne change en rien le fonctionnement global vu que c'est câblé en volant ... je dois garder l'ordre de votre schéma et croiser avec le câblage, mon schéma a été adapté, mais je n'ai pas recréé le pdf après.
 

MGU

Senior Member
Le montage initial a suivi une évolution progressive de la puissance de l'affichage, d'où les deux alim.
Si il n'y en a qu'une, je ferais un réseau en étoile, avec point central et découplage de l'électronique, doit y avoir un 7805 quelque part...
Et si il y a des erreurs dans ce que j'ai présenté, merci de le signaler, je corrigerai.

MM
 

ddaweb

New Member
Non, jusqu'à présent, je n'ai rien remarqué d'anormal, j'étais juste perplexe sur la diode.

J'ai passé une soirée complète à lire tout le fil et je me suis bien marré avec toute les péripétie du Belge ... c'était agréable de voir cet acharnement de plusieurs parties dont vous et arriver à un code super efficace, pleins d'ingéniosité et une électronique assez simple.
Je sais que le principe que j'ai adopté avec persévérance pour le chrono ne fait pas l’humanité (mais fonctionne très bien grâce à vos bouts de code, j'ai encore refait des tests par après avec le chrono définitif et un bug rectifié, avec des entrées 12v, toujours avec les mêmes résultats, ce qui m'a rassuré), le principe de l'afficheur risque de faire de même et pourtant issus des débats.

Je n'utilise pas un 7805, mais une convertisseur DC-DC 12 -> 5v : https://www.gotronic.fr/art-convertisseur-1w-sm1-1205-8270.htm (en bas à droite sur la carte globale des afficheurs).
C'est plus cher, mais a d'autre avantages par rapport au 7805 dont l'échauffement moindre.

Je fais attention au budget jusqu'à un certain point, pour l'instant, j'estime le prix de l'afficheur complet à +/- 250 € : 110 € pour l’électronique et les composants de raccordement (avec les circuits de réserve en cas de panne future : +/- 15 €) - 70 € pour les leds et profilés (je les ai déjà) - le reste pour le boitier en bois.

NB : puis-je vous solliciter pour le code dès que je l'ai écrit ?
 

MGU

Senior Member
Bonjour,

Oui, Le Belge, que je salue au passage, a eu un énorme mérite à faire aboutir ce projet.
Avec le recule, le bricolage des barrières ne serait pas le meilleur choix, j'ai acheté, il y a quelques temps cette barrière pour tester:
Et ça fonctionne très bien. Étanche, etc, pour le prix, c'est peut être plus simple.
Je ne reviens pas sur l'utilité d'un chrono d'une précision absolue au 1/100ème, une précision relative de 1 ou 2 /10ème me semblait inespérée, vue la méthode de détection des passages de portes (museau, dos, pattes AV/AR, queue, etc), à tors, peut être...

Bon confinement, bon bricolage
MM
 

ddaweb

New Member
Bonjour,

Je retiens votre barrière, je vais devoir en faire une 2me paire car le club souhaite réactiver l'ancien chrono vu que nous faisons nos concours sur 2 terrains depuis 2 années (cette année annulé vu le COVID). Quant il tombera en panne, j'en refais un si toujours au club.
Concernant la détection, j'avais évoqué cela à plusieurs reprises ... c'est en effet une réalité, tous les chiens ne sont pas égaux face au chrono :censored:

J'ai fait le premier jet du programme et je me pose la question si une ligne ne serait pas inutile pour une boucle dans le chrono original vu le latch des afficheurs :

Code:
do
     gosub affich    'Ligne utile avec le lactch des afficheurs ?'
loop while RAZ=1 and depart=1
 

ddaweb

New Member
Bon, j'ai fait une fausse manœuvre, voici le code du 1er jet, en grandes lignes le même :

Code:
;Afficheur exterieur
;B.0 : 1=chrono mère est démarre -> chrono fille demarre
;Chrono mère arrete, B.0=0 -> envoi en serie le temps final

#picaxe 28X2        'Type de Picaxe
#no_data
#no_table

setfreq M16
settimer 64911        'reglage timer 1/100 s ... a ajuster

; --------------- Initialisation
dirsB=%00111100        ' B2 -> B5 = sorties : BCD
dirsC=%11111000        ' C3 -> C7 = sorties : afficheur actif

symbol chiffre=b6
symbol digit=b7
symbol centieme=b8    ' 1=affiche
symbol val=w13        ' Temps du chrono
symbol cmd=pinB.0        ' 1=START - 0=STOP

centieme=1            ' Affichage des centiemes

; --------------- Chrono
Do
    val=0
    gosub affich        ' Affichage 000,00
    centieme=0            ' Ne plus afficher les centiemes
  
    do                ' Boucle d'attente START
    loop while cmd=1

    timer=0
  
    do                ' Chrono demarre
        val=timer        ' Lecture du temps
        gosub affich    ' Affichage du temps
    loop while cmd=0
  
    gosub affich        ' Affichage du dernier temps
    centieme=1            ' Affichage des centiemes
    serrxd [1000,affich],("T-"),val    ' Temps reel du chrono mere via serie, apres timrout de 1 sec -> affichage temps du chrono fille
    disconnect
    gosub affch            ' Affichage temps du chrono
  
    do                ' Attente redémarrage pour garder le dernier temps
    loop while cmd=1
loop
; --------------- Sous-routines
affich:
    bintoascii val, b1,b2,b3,b4,b5
    if centieme=1 then
        digit=%01111000    ' Ditit centiemes actif
            chiffre=b5-48
            gosub affchiffre
    end if
    digit=%10111000        ' Diziemes
        chiffre=b4-48
        gosub affchiffre
    digit=%11011000        ' Secondes
        chiffre=b3-48
        gosub affchiffre
    digit=%11101000        ' 10 secondes
        chiffre=b2-48
        gosub affchiffre
    digit=%11110000        ' 100 secondes
        chiffre=b1-48
        gosub affchiffre

affchiffre:
    pinsB=4*chiffre        ' Chiffre en BCD sur sorties B2 -> B5 : x4 pour commencer au bit 3
    pinsC=digit            ' Selection du digit actif
    pause 1
    pinsC=%11111000        ' Reset commande digit : latch afficheurs
    return
Je l'adapterai au 20x2 qui sera utilisé, j'ai un 28x2 pour tester dans les jours qui viennent.
 

MGU

Senior Member
Bonjour,

Je retiens votre barrière, je vais devoir en faire une 2me paire car le club souhaite réactiver l'ancien chrono vu que nous faisons nos concours sur 2 terrains depuis 2 années (cette année annulé vu le COVID). Quant il tombera en panne, j'en refais un si toujours au club.
Concernant la détection, j'avais évoqué cela à plusieurs reprises ... c'est en effet une réalité, tous les chiens ne sont pas égaux face au chrono :censored:

J'ai fait le premier jet du programme et je me pose la question si une ligne ne serait pas inutile pour une boucle dans le chrono original vu le latch des afficheurs :

Code:
do
     gosub affich    'Ligne utile avec le lactch des afficheurs ?'
loop while RAZ=1 and depart=1
Oui, les gosub sont inutiles dans la boucle d'attente, suffit de les placer avant. Idem pour le RAZ.
C'est mieux, même si visuellement, c'est pareil.

MM
 

ddaweb

New Member
Bonjour la compagnie,

J'aurais besoin d'aide sur la fonctionnalité @bptr que je n'arrive pas à faire fonctionner.

J'ai prit comme référence le topic de @PieM : https://picaxeforum.co.uk/threads/frequence-ou-vitesse.29759/page-3#post-313268
Et le manuel en français page : 1.9 Variables -Scratchpad

Le script considère toujours qu'il n'a pas reçu le string sous la forme "t06238" pour un temps de 62.38 sec : il est bien envoyé car via Putty je le reçois bien en sortie du chrono.

23810

L'envoi, picaxe 28x2 avec quartz : serout A.4, N9600_64,("t",b1,b2,b3,b4,b5) 'envoi du temps en serie vers chrono afficheur
Réception sur la broche RXD du 28x2 de l'afficheur.
En modifiant le "settimer" je provoque une différence qui est sensée s'aligner sur le temps du TX.

Voici le code complet, j'ai commenté une partie du code afin de visualiser avec 4 leds les dizièmes de secondes :

Rich (BB code):
;Afficheur exterieur
;B.0 : 1=chrono m?re est d?marre -> chrono fille demarre
;Chrono m?re arrete, B.0=0 -> envoi en serie le temps final

#picaxe 28X2        'Type de Picaxe
#no_data
#no_table

setfreq M16
settimer 64914        'reglage timer 1/100 s ... a ajuster ... augmenter = accelerer

; --------------- Initialisation
dirsB=%10111100        ' B2 -> B5 = sorties : BCD + B.7 = Timeout TX temps
dirsC=%11111000        ' C3 -> C7 = sorties : afficheur actif

symbol chiffre=b6
symbol digit=b7
symbol centieme=b8    ' 1=affiche
symbol tx=b9        ' 1=Timeout TX temps chrono
symbol val=w13        ' Temps du chrono
symbol chrono=w14
symbol cmd=pinB.0        ' 1=START - 0=STOP
symbol txled=pinB.7    ' Led TX temps timeout

centieme=1            ' Affichage des centiemes

; --------------- Chrono
Do
    val=0
    gosub affich        ' Affichage 000,00
    chrono=0
    centieme=0            ' Ne plus afficher les centiemes
    tx=0
    txled=tx            ' Eteindre led TX temps

    do                ' Boucle d'attente START
    loop while cmd=0

    timer=0

    do                ' Chrono demarre
        val=timer        ' Lecture du temps
        gosub affich    ' Affichage du temps
    loop while cmd=1

    gosub affich        ' Affichage du dernier temps
    centieme=1            ' Affichage des centiemes
    disconnect            ' Bloquer le telechargement d'un programme
    bptr=10
    serrxd [4000],("t"),@bptrinc,@bptrinc,@bptrinc,@bptrinc,@bptrinc,@bptr    ' Reception temps reel du chrono mere via serie
    reconnect            ' Repermettre le telechargement d'un programme

    bptr=15
    if @bptr="t" then        ' Vérification envoi du temps
        chrono=@bptrdec - 48 * 10000
        chrono=@bptrdec - 48 * 1000 + chrono
        chrono=@bptrdec - 48 * 100 + chrono
        chrono=@bptrdec - 48 * 10 + chrono
        chrono=@bptrdec - 48 + chrono
        val=chrono
        ; ----- Pour test
        high B.7
        pause 4000
        low B.7
    else
        tx=1            ' Alumer led TX temps : pas reception d'un temps
    endif
   
    gosub affich        ' Affichage temps du chrono
    txled=tx            ' Affichage TX temps OK ou pas

    do                ' Attente redemarrage pour garder le dernier temps
    loop while cmd=0
loop

; --------------- Sous-routines
affich:
    bintoascii val, b1,b2,b3,b4,b5
    if centieme=1 then
        digit=%01111000    ' Centiemes
            chiffre=b5-48
            gosub affchiffre
    end if
    digit=%10111000        ' Diziemes
        chiffre=b4-48
        gosub affchiffre
;    digit=%11011000        ' Secondes
;        chiffre=b3-48
;        gosub affchiffre
;    digit=%11101000        ' 10 secondes
;        chiffre=b2-48
;        gosub affchiffre
;    digit=%11110000        ' 100 secondes
;        chiffre=b1-48
;        gosub affchiffre
    return

affchiffre:
    pinsB=4*chiffre        ' Chiffre en BCD sur sorties B2 -> B5 : x4 pour commencer au bit 3
    pinsC=digit            ' Selection du digit actif
    pause 1
    pinsC=%11111000        ' Reset commande digit : latch afficheurs
    return
Pour info, une pause de 4000 = +/- 1sec.
J'ai également placé la txled pour visualiser.
 
Last edited:

ddaweb

New Member
Pour votre information, j'ai su faire fonctionner sans @ ptr ou @bptr ... un bug du 28x2 ou alors j'ai oublié quelque chose ?
Si quelqu'un pourrait tester cela ?

J'avais tout de même fait l'erreur de considérer le "t" comme caractère lu.

Le code fonctionnel, qui rectifie le temps en cas d'erreur de l'afficheur (j'ai du attendre plus de 3 min. avant d'avoir un cas :confused:) :

Code:
    serin [4000],C.7,N9600_16,("t"),b10,b11,b12,b13,b14,b15
 
    if b10=9 then        ' Vérification envoi du temps
        chrono=b11 - 48 * 10000
        chrono=b12 - 48 * 1000 + chrono
        chrono=b13 - 48 * 100 + chrono
        chrono=b14 - 48 * 10 + chrono
        chrono=b15 - 48 + chrono
        val=chrono
    else
        tx=1            ' Allumer led TX temps : pas de reception d'un temps
    endif
J'ai tout de même essayé sur la pin C.7 en remplaçant les bxx par @bptr et @ ptr avec le serin ... avec évidemmenr bptr=xx ou ptr=xx.
Le string envoyé est maintenant : t9xxxxx, xxxxx étant le temps du chrono.

C.7 est programmé en sorties, mais c'est en prévision du 20x2 où le
serin sera sur B.6 libre.

MDR : il y a un utilisateur "ptr", d'où l'espace
 

PieM

Senior Member
Bonjour,
je n'ai pas trop suivi, mais je suis étonné de l'utilisation des sertxd et serrxd pour une liaison entre picaxes.
de plus sur un 28X2, le hserout permet de recevoir en tache de fond sans la contrainte de timing de serin.
déclare ton hserin en background avec hsersetup, et tu récupères tes données avec des @ptr.
 

ddaweb

New Member
La réponse est très simple : le HSEROUT est utilisé pour le LCD avec hsersetup B2400_64, %10.
Comme je ne transmet le temps qu'après l'arrêt du chrono maître, la liaison série que j'utilise alors ne va pas influencer le temps de ce chrono.
Le démarrage du chrono afficheur se fait via une sortie du chrono maître : passe à l'état haut durant tout le temps du chronométrage.

J'ai également besoin du timout car l'afficheur doit rapidement mettre le temps final à jour : je suis à moins de 0.4 sec., largement suffisant pour envoyer 7 caractères.
Si pas de réception valide : temps du chrono afficheur avec un témoin qui s'allume : ce temps n'aura qu'une précision de 1/10 par rapport au chrono maître ... à plus de 3 min. j'ai parfois une déviation de + 1/10.
Avec le quartz, le picaxe fonctionne un peu différemment et j'ai eu du mal à transmettre à 9600 baud : avec la fonction SERIN cela fonctionne.
Je transmet volontairement si lentement en prévision d'un câble de 15m prévu ... moins si cela ne fonctionne pas, ce que je crains, 10m serait plus optimiste.

Vous m'avez probablement donné la raison du non fonctionnement de @ptr .

Si vous avez d'autres suggestions, je suis preneur.
 
Last edited:

ddaweb

New Member
Bonjour,

En surfant sur le net, je suis tombé sur un article assez intéressant pour ceux qui veulent faire développer leur PCB à un prix très démocratique :
Bon, c'est Chinois, le point peut-être négatif de l'histoire, mais côté prix ... imbattable !

Je me suis donc lancé dans KiCad pour la réalisation des PCB pour le chrono (j'utilisais TCI4 que je préfère pour certaines choses) : carte afficheur, alimentation et chrono sur une seule carte que je devrai découper. La carte alimentation et chrono seront séparables au besoin (pour le SAV par exemple), mais normalement utilisable ensemble avec la piste de liaison des alimentations faites (5 et 12v dans mon cas).
Le PCB total fait 245x100 mm ... comme c'est mon premier essai, les espaces des pistes sont trop grands (à l'ancienne), je pourrais probablement gagner quelques cm² en compactant un peu, mais là je laisse ainsi.
Le prix total serait de 20 € pour 5 PCB ... mais à voir si les premier frais d'envoi seront à payer ou pas (il semblerait que non !) ... presque 9 € de gagné alors.
Cela revient moins cher ainsi que sur des plaquettes de test ... surtout plus facile et déjà mon 2me chrono fait en PCB.
Par défaut c'est du double face, le simple face est plus cher ... looool.

Je viens de commander les composants, dès réception, je vérifie si les empreintes maison sont correctes sur le PCB, si oui, un dernier contrôle et j'envoie le projet à la fabrication.

Si cela vous intéresse, je peux donner le résultat de cette expérience.
 
Top