Bienvenue aux nouveaux arrivants sur FantasPic !

- Pensez à lire les règles durant votre visite, il n'y en a pas beaucoup, mais encore faut-il les respecter .
- N’hésitez pas à faire des remarques et/ou suggestions sur le Forum, dans le but de l'améliorer et de rendre vos prochaines visites plus agréables.
- Vous pouvez regarder votre "panneau de l'utilisateur" afin de configurer vos préférences.
- Un passage par "l'utilisation du forum" est recommandé pour connaître les fonctionnalités du forum.

--- L’équipe FantasPic ---
Forum général sur l'Assembleur !

Modérateur : mazertoc

Soft de commande CNC en asm
F6FCO
Avatar de l’utilisateur
Expert
Expert
Messages : 1413
Âge : 70
Enregistré en : décembre 2017
Localisation : Furtif je suis.
Contact :

#401 Message par F6FCO » mar. 21 mai 2019 11:10

Tiens, c'est aussi ce que vient de dire ma femme :langue:
Une porte nand prend 2 bits en entrée... la cochonne !!! :langue:

Soft de commande CNC en asm
venom
Avatar de l’utilisateur
Confirmé
Confirmé
Messages : 953
Âge : 38
Enregistré en : avril 2016
Localisation : Klyntar
Contact :

#402 Message par venom » mer. 22 mai 2019 08:20

F6FCO a écrit :Tiens, c'est aussi ce que vient de dire ma femme :langue:


Ah ! Je ne suis pas en mesure de"jugé" jusque-là :lol:
Mais si madame le dit, je ne la contre dirais pas.






@++
Mon site web
Mon discord : venom#4888

Soft de commande CNC en asm
Gérard
Avatar de l’utilisateur
Expert
Expert
Messages : 1640
Âge : 65
Enregistré en : septembre 2015
Localisation : Alsace - Haut-Rhin

#403 Message par Gérard » mer. 22 mai 2019 23:03

Et comme Madame a toujours raison ...
Blague à part, c'est un super boulot, je serais incapable d'en faire autant.
Toute les félicitations du jury. :bravo: :bravo: :bravo:
Le 18/04/19 je suis devenu papy de jumeaux, le 01/09/23 une petite cousine des jumeaux est née.

Soft de commande CNC en asm
F6FCO
Avatar de l’utilisateur
Expert
Expert
Messages : 1413
Âge : 70
Enregistré en : décembre 2017
Localisation : Furtif je suis.
Contact :

#404 Message par F6FCO » jeu. 23 mai 2019 20:08

Gérard a écrit : je serais incapable d'en faire autant.


Tu me fais rire :lol: évidemment que si, ce projet ce n'est rien que de l'algorithmique et une multitudes de routines toutes simples appelées par un tronc de programme, rien de bien compliqué. Le challenge était plus de durer dans le temps pour s'y tenir et le mener à terme. Rien à voir avec votre niveau à tous en ce qui concerne les paramétrages des PIC, dans ce domaine comparé à vous je suis un oisillon qui sort du nid, quand je lis vos sujets je ne comprends que la moitié des trucs :roll: .
Mais je m'accroche, je suis en train d'étudier l'I2C et je galère dur.
Une porte nand prend 2 bits en entrée... la cochonne !!! :langue:

Soft de commande CNC en asm
JJE
Passioné
Passioné
Messages : 399
Âge : 83
Enregistré en : novembre 2017
Localisation : Picardie

#405 Message par JJE » ven. 24 mai 2019 15:21

Bonjour Claudius et autres membres,
Las de chercher une méthode pour trouver pourquoi mon DS1621 refuse de me donner la température courante, je m'offre une petite récré et je me replonge dans ce sujet déjà ancien où je lis plein de choses très intéressantes, en particulier :
Claudius a écrit :Source du message Sinon, il existe un générateur de code pour toutes les opérations (+, -, /, %, etc.) très flexible @ nombre de bits à prendre en compte : Multibyte Arithmetic Assembly Library for PIC Microcontrollers
Chapeau à l'auteur mais aussi à ben jackson pour ses "PIC Multiply/Divide Macros", quelle maîtrise de l'assembleur, il sait le faire bosser :sifflotte: .
Cordialement

JJE

C'est pas parcequ'on n'a rien à dire qu'il faut fermer sa G....e

Soft de commande CNC en asm
JJE
Passioné
Passioné
Messages : 399
Âge : 83
Enregistré en : novembre 2017
Localisation : Picardie

#406 Message par JJE » dim. 26 mai 2019 11:27

Bonjour F6FCO et tout le groupe s'intéressant à ce sujet,
Tout d'abord un grand bravo à toi pour cette réalisation et merci mille fois de nous l'avoir fait partager, en temps réel. Je suis peu intervenu, tiré par un autre projet qui est au repos quelques jours ne trouvant pas d'idées pour savoir pourquoi ce DS1621 ne me parle pas gentiment :mur:

J'ai envie de faire une observation sur ton analyse, je cite :
Je récapitule: on connait la position XY de départ, la position XY d'arrivée, on calcule deltaX: Xnew-Xold et deltaY: Ynew-Yold, ce qui nous permet de calculer la tangente. Si Xold (idem pour Yold) est supérieur à Xnew en cas de retour en arrière, il résultera un nombre négatif, donc on inverse les données et on fait dans ce cas Xold-Xnew (ce qui nous donne le bon deltaX positif), et on prend soin d'inverser le sens de déplacement du chariot. On multiplie cette tangente par 800 pour obtenir un grand nombre.

jusque là, tout est symétrique en x, y, c'est d'ailleurs le cas du problème posé.
je continue de citer
Ensuite on incrémente X en recalculant Y à chaque pas. On déplace les chariots X et Y et on trace la pente.

là, ça devient dissymétrique, On fait un pas en X PUIS on recalcule Y . Ta dernière phrase est à interpréter comme :
On incrémente X, on déplace le chariot X d'un pas puis on calcul le Y correspondant au nouvel X et on avance le chariot Y de ce qu'il faut pour l'amener à cette nouvelle position, ce qui ne trace pas la pente mais son approximation par un angle droit dont les côtés sont // aux axes. Combien y a-t-il de petits triangles ? : DELTAX. Dans le cas de la figure proposée post #381, c'est satisfaisant car DELTAX est beaucoup grand que DELTAY. Mais imaginons un triangle où l'angle alha soit son complément (ie, l'autre angle aigu du triangle. Ton algorithme approcherait l'hypoténuse par DELTAY petits triangles, donc une approximation moins satisfaisante.
je remplacerais bien ton code

Code : Tout sélectionner

construction_droite
            
; 4 cas de figure:
            ; si deltaX =0 et deltaY <>0     -> trace ligne verticale
            
; si deltaX <>0 et deltaY =0    -> trace ligne horizontale
            
; si deltaX <>0 et deltaY <>0    -> trace pente
            
; si deltaX =0 et deltaY =0     -> on sort de la routine sans rien tracer    

par

Code : Tout sélectionner

construction_droite
            
; 4 cas de figure:
            ; si deltaX =0 et deltaY <>0     -> trace ligne verticale
            
; si deltaX <>0 et deltaY =0    -> trace ligne horizontale
            
; si deltaX >= deltaY              -> trace pente programme actuel
            
; si deltax < deltay                -> adapter le précédent en inversant les données en x et y
            
; si deltaX =0 et deltaY =0     -> on sort de la routine sans rien tracer    


Pendant que j'y suis, je te ferais bien une deuxième remarque : tu n'a pas pris en compte les bonnes idées de temps-x dans son post 351 ; malheureusement, pour ce faire il faut toucher au hard.
admettons que ton programme définissent les pinoches gérant les pulses de la manière suivante :

Code : Tout sélectionner

#define drv_stepY        PORTC,4    ; 0            pulse Y
                 #define drv_stepX        PORTC,5    ; 0            pulse Y

admettons que les bits 4 et 5 de PORTC soient à 0, le code suivant envoie un pulse sur le moteur X xans toucher au moteur Y qui donc ne tourne pas : masquepulse est une variable de 1 octet

Code : Tout sélectionner


    movlw    b
'00100000'
    movwf      masquepulses
    call     Xpulse32

; avec une nouvelle rédaction pour Xpulse_base

Code : Tout sélectionner

Xpulse_base    ;  pas de base     ; 1/3200=0,00031mm = 0,
            movf    masquepulses
, w
            iorwf    PORTC
, f
            call     tempo_18khz
          movlw     b
'11001111'
            andwf    PORTC,F
            call     tempo_18khz
            return

mais si on débute par

Code : Tout sélectionner

    movlw    b'00110000'
    movwf      masquepulses

on fait faire un pas aux deux moteurs en même temps.bien sûr il faudrait d'autres modifications à ton algorithme :sifflotte:

encore :bravo: et Merci !
Cordialement

JJE

C'est pas parcequ'on n'a rien à dire qu'il faut fermer sa G....e

Soft de commande CNC en asm
JJE
Passioné
Passioné
Messages : 399
Âge : 83
Enregistré en : novembre 2017
Localisation : Picardie

#407 Message par JJE » dim. 26 mai 2019 11:38

une dernière pour la route :

Code : Tout sélectionner

tempo_18khz    ; pas de base en 1/16pas
; Délai 25 Cycles de la machine
; Durée du délai 25 microsecond
; Fréquence de l'oscillateur 4 MHZ
                movlw       .8
                    movwf       Reg_1
                decfsz      Reg_1,F
                goto        $-1
                return


moi, je compte 32 cycles de la machine
    2 pour le call
    2 pour l'initialisation de Reg_1
    3*8 soit 24 pour la boucle
    2 pour le decsz de sortie de boucle
    2 pour le return
mais ça ne doit pas avoir une grande importance, c'est juste pour dire que j'ai lu ton code, en partie, avec toute l'attention qu'il mérite
Cordialement

JJE

C'est pas parcequ'on n'a rien à dire qu'il faut fermer sa G....e

Soft de commande CNC en asm
F6FCO
Avatar de l’utilisateur
Expert
Expert
Messages : 1413
Âge : 70
Enregistré en : décembre 2017
Localisation : Furtif je suis.
Contact :

#408 Message par F6FCO » dim. 26 mai 2019 20:29

Hello JJE,
Çà c'est bien d'avoir lu mon code car c'est ce qu'il y a de plus difficile à faire de lire le code des autres, pour ma part j'ai des difficultés. Et c'est un bon exercice intellectuel, surtout sur un programme de plus de 3000 lignes comme ici :wink:

Ouf ! la gestion des pentes çà date un peu et j'ai l'esprit qui est parti ailleurs depuis, notamment un bug intermittent sur le Z qui m'a donné du fil à retordre et pas mal fait chauffé les neurones. Il a fallu que je me replonge dedans car j'avais fait une RAZ depuis :wink:

Je viens d'aller relire le post 351 de Temps-X, je n'ai pas pris en compte ses remarques car il n'a pas la même approche du problème que moi et elles ne s'appliquent pas dans mon cas (et puis parce que j'avais déjà mon idée sur la façon de faire :wink: ), il traite de l'affichage sur écran en allumant ou éteignant des pixels, alors que là on fait fonctionner des moteurs pas à pas en étant tributaire de leur pas de base, ce qui est l'étalon et la valeur minimum. C'est d'ailleurs pour cette raison que je suis passé au réglage 1/16e de pas, ce qui augmente la résolution au maximum. Que l'angle soit aigu ou obtus on sera toujours tributaire de cette résolution qui est déjà grande et bien suffisante (vis au pas de 1, 1mm/200/16 =0,0003mm).
DeltaX qui est la référence pour le tracé des pentes sera toujours plus grand que le pas minimum, c'est voulu et les calculs le prennent en compte, ce qui permet de caser entre chaque incrémentation X un grand nombre de pas Y, qu'il y en ait beaucoup dans le cas d'un angle inf à 45°, ou peu dans le cas sup à 45°. La pente sera toujours en escalier dont la valeur la plus petite sera de l'ordre de deltaX en horizontal et de l'étalon en vertical. Une pente à 45° produira un escalier régulier, comme un tracé de courbe sur une calculette.
La meilleure façon de vérifier la validité de ce genre de routine est de tracer un cercle, ce qui fait intervenir tous les cas de figure :wink:

Pour la dernière remarque je ne me suis pas posé de questions, la routine n'est pas de moi mais générée par le petit programme Russe. J'ai pris ce qu'il disait comme argent comptant, le call et le test condition sont insignifiants.
Une porte nand prend 2 bits en entrée... la cochonne !!! :langue:

Soft de commande CNC en asm
JJE
Passioné
Passioné
Messages : 399
Âge : 83
Enregistré en : novembre 2017
Localisation : Picardie

#409 Message par JJE » lun. 27 mai 2019 11:24

Bonjour F6FCO,
F6FCO a écrit :Source du message Et c'est un bon exercice intellectuel

je crois qu'une bonne manière d'apprendre une langue, même de programmation :-) , est d'en lire, et de comprendre, surtout en programmation :-)
F6FCO a écrit :Source du message Je viens d'aller relire le post 351 de Temps-X,
.../...
il traite de l'affichage sur écran en allumant ou éteignant des pixels,

ce n'est pas tellement de ça dont il s'agit, mais c'est de faire tourner les moteurs simultanéments, remarque, je n'ai jamais fait tourner des moteurs pas à pas et peut-être que je délire complétement
F6FCO a écrit :Source du message DeltaX qui est la référence pour le tracé des pentes sera toujours plus grand que le pas minimum, c'est voulu et les calculs le prennent en compte, ce qui permet de caser entre chaque incrémentation X un grand nombre de pas Y, qu'il y en ait beaucoup dans le cas d'un angle inf à 45°, ou peu dans le cas sup à 45°

Ce n'est pas le contraire ? Si l'angle est inférieur à 45°, le déplacement en Y est plus petit que celui en X, donc à chaque pas en X, il faudra faire 0 ou 1 pas en Y, pas plus, sinon, on va "monter" trop vite.
Si l'angle est supérieur à 45°, le déplacement en Y est plus grand que celui en X, il faut donc faire, en Y plus de pas qu'en X, il faut donc qu'à chaque pas en X on fasse 1 ou plus de pas en Y. C'est là que, à mon avis, on perd de la précision :sifflotte:
F6FCO a écrit :Source du message la routine n'est pas de moi mais générée par le petit programme Russe

ce qui n'interdit pas de la vérifier, voire de la contredire, Poutine ne se dérangera pas pour t'engueuler pour si peu :-D
F6FCO a écrit :Source du message le call et le test condition sont insignifiants.

6 pour 32, c'est quand même presque 20%, les gilets jaunes sont descendus dans la rue pour des augmentations d'impôts bien moindres et si on augmentait mes revenus dans une proportion aussi insignifiante, j'en serais quand même très satisfait :-D
Cordialement

JJE

C'est pas parcequ'on n'a rien à dire qu'il faut fermer sa G....e

Soft de commande CNC en asm
F6FCO
Avatar de l’utilisateur
Expert
Expert
Messages : 1413
Âge : 70
Enregistré en : décembre 2017
Localisation : Furtif je suis.
Contact :

#410 Message par F6FCO » lun. 27 mai 2019 13:56

JJE a écrit :Ce n'est pas le contraire ? Si l'angle est inférieur à 45°, le déplacement en Y est plus petit que celui en X, donc à chaque pas en X, il faudra faire 0 ou 1 pas en Y, pas plus, sinon, on va "monter" trop vite.
Si l'angle est supérieur à 45°, le déplacement en Y est plus grand que celui en X, il faut donc faire, en Y plus de pas qu'en X, il faut donc qu'à chaque pas en X on fasse 1 ou plus de pas en Y. C'est là que, à mon avis, on perd de la précision :sifflotte:


Ce n'est pas comme çà que çà fonctionne, un moteur pas à pas peut soit tourner (avancer d'un pas ou plusieurs), soit rester bloqué sur une position ( couple de maintien). Et les moteurs n'avancent pas simultanément mais chacun à leur tour, déroulement du programme instruction par instruction oblige. Pour les faire avancer simultanément il aurait fallu utiliser un PIC par moteur ou alors faire du pseudo simultané en imbriquant les routines pour que que l’exécution du deltaY se fasse au cours du deltaX en dessous d'une pente de 45° et le contraire au dessus de 45°, une routine usine à gaz qui aurait considérablement ralenti les translations. Vu la précision obtenue (0,3 microns en 1/16e de pas) çà aurait été du vice de vouloir faire mieux et n'aurait pas été rentable en terme de vitesse.

J'ai dis des bétises sur le post au-dessus deltaX n'est pas plus grand que deltaY, ils sont tous les deux égaux à pulsebase. (j'ai tellement fais d'essais que je me mélange un peu les pinceaux, et puis c'est un peu vieux maintenant :wink: )

Ca marche comme çà:

1 - Avant tout chose on détermine le nombre de pulses X à produire pour parcourir la distance entre la position actuelle et la future position indiquée par le gcode.

2 - on fait le calcul de tangente qui nous donne le nombre de pulses Y pour 1 X (qu'il y ait 1 pulse Y ou 300 voire plus, c'est le calcul de tangente qui le détermine)
on exécute X .
on bloque X, le moteur X reste en couple de maintien (défini par son torque).
puis on exécute Y, le nombre de pulses sur le moteur Y (qu'il y en ait 1 ou plus).

3 - on refait les calculs de tangente pour le pas suivant et re-belote jusqu'à atteindre la nouvelle position.

Ce qui donne en visu si on a un bon microscope des escaliers:
- en dessous d'une pente de 45° avec des marches verticales de 1 pulsebase X et horizontales plus longues suivant le nb de pas Y (plus on se rapprochera de l'angle zéro plus elles seront longues. A l'angle zéro on aura une ligne horizontale.
- à l'angle 45° on fera 1 Y pour 1 X
- au dessus de 45° ce sera le contraire, plus de y que de x jusqu'à obtenir une ligne verticale à 90°.

6 pour 32, c'est quand même presque 20%, les gilets jaunes sont descendus dans la rue pour des augmentations d'impôts bien moindres


On s'en fout complètement (pas des gilets jaunes mais de la valeur exacte de la tempo) ce n'est pas critique du tout, c'est simplement la vitesse de fonctionnement de la machine. C'est du réglage au pif et j'en ai trouvé la valeur par tâtonnement en injectant des signaux TTL sur les drivers pour déterminer leur fréquence de fonctionnement idéale, voir la vidéo (cette vitesse est complètement tributaire des caractéristiques du moteur, du driver et de la tension d'alimentation, obligé de faire du pifomètre pour la déterminer). Après les tests j'ai déterminé que la frq idéale en pas entier était de 9,6Khz, à 9,5 ou 9,6 çà marche aussi, çà ira juste un peu plus ou moins vite, un peu plus ou moins de bruit, dans ce cas c'est encore l'oreille le meilleur instrument de mesure.
C'est d'ailleurs un peu de cette façon qu'on régle les vitesses au paramétrage de LinuxCNC qui est une référence.

Un peu plus vite, un peu moins vite on s'en fiche pourvu qu'on reste dans la plage de fonctionnement, par contre hors limites on risque les pertes de pas et là c'est plus grave. C'est d'ailleurs en jouant dans cette plage de fonctionnement que j'ai pu faire jouer de la musique à la machine, mais çà n'influe pas du tout sur la précision de positionnement (qui elle est liée au nb de pas), juste sur la vitesse de rotation des moteurs et par conséquent la vitesse de translation des axes.
Une porte nand prend 2 bits en entrée... la cochonne !!! :langue:


Retourner vers « Langage ASM »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 47 invités