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 :

#361 Message par F6FCO » ven. 8 févr. 2019 13:22

Bonjour,
J'avais pensé à ce genre d'astuce quand s'est posé la question de multiplier la tangente par un grand nombre. J'ai choisi 800 parce que c'est le nombre de pas parcourus par mes moteurs pour faire 1 tour et parcourir 1mm (pas de la vis mère M6/100 choisi justement pour çà).
En pas entiers un moteur fait 200pas pour faire une révolution, les drivers réglés en 1/4 de pas çà fait 800 pas par tour.
Choisir cette valeur m'a simplifié toute la suite du programme car il suffit de faire exécuter 4 pas aux moteurs pour avancer ou reculer les chariots de 1/100e mm ou 80pas pour faire 1/10e mm.

Passer toutes les variables en 32bits ? c'est ce que j'ai fais dans la version béta du programme, je ne savais pas trop ou j'allais et j'ai opté pour pouvoir y caser des grandes valeurs.
Et puis une fois que tout à fonctionné j'ai voulu optimiser :roll: :lol:
Proverbe: "Le vieux est l'ennemi du bien".
Modifié en dernier par F6FCO le ven. 8 févr. 2019 13:29, modifié 1 fois.
Une porte nand prend 2 bits en entrée... la cochonne !!! :langue:

Soft de commande CNC en asm
Claudius
Avatar de l’utilisateur
Passioné
Passioné
Messages : 260
Âge : 69
Enregistré en : septembre 2015
Localisation : ELANCOURT (78 - YVELINES)
Contact :

#362 Message par Claudius » ven. 8 févr. 2019 13:28

Bonjour,

Et pourquoi pas utiliser carrément un coprocesseur flottant qui aurait l'avantage de libérer des ressources (matérielles et humaines ;-) avec la certitude du résultat...

Cf. uM-FPU V3.1 Floating Point Coprocessor et un exemple d'interfaçage en I²C (moins rapide que le SPI) avec un Picaxe (Using uM-FPU V3 with the PICAXE Microcontroller)

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 :

#363 Message par F6FCO » ven. 8 févr. 2019 13:45

Bonjour Claudius,
Je ne le ferai pas là parce que mon système fonctionne et est en phase d'optimisation finale, donc je ne veux pas tout refaire.
Par contre tu m'ouvres des horizons insoupçonnés pour mes prochains projets :wink: . Je ne connaissais pas ce genre de composant et çà pourrait me permettre de faire des trucs géniaux.
Par exemple je comptais reprendre mon projet de bras robot dessinateur http://f6fco.pagesperso-orange.fr/G4ST0N.htm. Je l'avais commencé sur arduino et laissé tombé parce que j'avais de gros ennuis avec les sdcard capricieuses (et aussi les moteurs trop faibles qui ne tenaient pas le coup). Maintenant que je maîtrise l'uart/pic je vais le reprendre avec un 18F et des moteurs pap. Je comptais gérer les calculs trigonométriques avec des tables de sinus précalculées mais avec un coprocesseur comme le micromega çà devrait être un jeu d'enfant de faire les calculs.
Sous réserve bien sur d'apprendre et maîtriser le langage assembleur du µM-FPU et trouver comment l'interfacer avec le PIC.

J'ai vu vite fait qu'ils proposaient une IDE pour la programmation, je ne sais pas si elle est gratuite et ce qu'elle vaut (visu des registres, mode pas à pas, etc.)
Sur les captures d'écran on voit que le langage est du basic stamp, çà fonctionne aussi en assembleur ?
Une porte nand prend 2 bits en entrée... la cochonne !!! :langue:

Soft de commande CNC en asm
Claudius
Avatar de l’utilisateur
Passioné
Passioné
Messages : 260
Âge : 69
Enregistré en : septembre 2015
Localisation : ELANCOURT (78 - YVELINES)
Contact :

#364 Message par Claudius » ven. 8 févr. 2019 15:57

@F6FCO : Joli projet ce bras robot interfacé en I²C ;-)

S'agissant des 3 remarques:
1 - Sous réserve bien sur d'apprendre et maîtriser le langage assembleur du µM-FPU et trouver comment l'interfacer avec le PIC.
2 - J'ai vu vite fait qu'ils proposaient une IDE pour la programmation, je ne sais pas si elle est gratuite et ce qu'elle vaut (visu des registres, mode pas à pas, etc.)
3 - Sur les captures d'écran on voit que le langage est du basic stamp, çà fonctionne aussi en assembleur ?

1 - Il n'y a pas de notion d'assembleur ou autre langage ; c'est un périphérique...
Ce coprocesseur (umfpu-v2 pour prendre le moins puissant à 8 pattes) se pilote comme on piloterait un afficheur, un capteur, etc.
Il suffit d'envoyer/attendre via I²C (ou SPI) des commandes/réponses qu'il interprète

L'interfaçage avec le PIC est un interfaçage standard I²C ou SPI :
ScreenClipUM-FPUV2WithPIC.jpg

2 - On peut se passer d'un IDE pour des calculs ponctuels bien qu'il permette de dérouler des séquences complètes pour éviter les allers/retours avec le µC (PIC ou autre) dans le cas par exemple d'une transformée de Fourrier ou d'un calcul d'interpolation pour peu que le coprocesseur ait toutes les données à sa disposition...

3 - Pas de langage particulier ; uniquement des opcodes à envoyer et le résultat à attendre

Exemple en C d'une division au format IEEE 754 avec commentaires (la transcription en assembleur PIC est immédiate) :

Code : Tout sélectionner

// FDIV A = A / B (A and B must to be in IEEE 754 format)
float fpu_FDIV(float A, float B)
{
   float *y = &A;           // y = address of 1st argument A
   fpu_send(FWRITEA);       // Write the floating value A to register 0
   fpu_send(*(y+3));
   fpu_send(*(y+2));
   fpu_send(*(y+1));
   fpu_send(*y);

   y = &B;                  // y = address of 2nd argument B
   fpu_send(FWRITEB + 1);   // Write the floating value B to register 1
   fpu_send(*(y+3));
   fpu_send(*(y+2));
   fpu_send(*(y+1));
   fpu_send(*y);

   fpu_send(FDIV + 1);    // Perform calculation with register 1

   fpu_wait();            // Awaiting the result
   fpu_send(FREAD);
   fpu_readDelay();

   float floatreturn;
   y = &floatreturn;        // y = address of floatreturn variable
   *(y+3) = fpu_read();
   *(y+2) = fpu_read();
   *(y+1) = fpu_read();
   *y     = fpu_read();

   return floatreturn;      // Return result
}
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.

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 :

#365 Message par F6FCO » ven. 8 févr. 2019 18:11

Claudius a écrit :1 - Il n'y a pas de notion d'assembleur ou autre langage ; c'est un périphérique...

Pourtant il semblerait bien qu'il y ait un langage de programmation, regarde au début de cette page, le deuxième lien en téléchargement, le PDF "instruction set". Et puis j'ai vu que leur IDE permet la visu des registres, donc on doit pouvoir le programmer. Maintenant si c'est juste pour calculer sqrt, sin ou asin (les principaux calculs utilisés par mon bras) et qu'on peut le lui demander en externe pas la peine de se prendre la tête.


Edit: je viens d'aller regarder plus longuement et il semblerait qu'il n'y ait de la doc que pour les dsPIC et PIC24 pour le V.3, et les PIC 16F877 et 688 pour le V.2
. Et il semblerait que le V.2 ne gère la trigo avec les entiers.
Une porte nand prend 2 bits en entrée... la cochonne !!! :langue:

Soft de commande CNC en asm
Claudius
Avatar de l’utilisateur
Passioné
Passioné
Messages : 260
Âge : 69
Enregistré en : septembre 2015
Localisation : ELANCOURT (78 - YVELINES)
Contact :

#366 Message par Claudius » ven. 8 févr. 2019 18:42

- On peut dire que c'est un langage de programmation mais c'est plutôt des opcodes+ argument(s) qui pilotent la bête (à l'image de bycodes qui pilotent une machine virtuelle Java ou Python et on ne parle pas d'assembleur dans ce cas ;-)

- On programme la bête mais on lui donne surtout des macro-ordres à interpréter (comme SQRT, SIN, TAN, LOG, EXP, etc.) et on est donc très loin de l'assembleur

Je te rejoins en partie et j'admets que la frontière est subtile

Sinon, une chose qui devrait intéresser la communauté PIC; il y a 2 modes de support des flottants (page 4 - Miscellaneous Instructions du uM-FPU V2- Instruction Reference:

- IEEEMODE Select IEEE floating point format -> IEEE 754
- PICMODE Select PIC floating point format -> Sans doute lié à Floating point conversion routine (à vérifier)

Edit: @ Vérification de PIC floating point format : Cf. Microchip - IEEE 754 Compliant Floating Point Routines

Soft de commande CNC en asm
Claudius
Avatar de l’utilisateur
Passioné
Passioné
Messages : 260
Âge : 69
Enregistré en : septembre 2015
Localisation : ELANCOURT (78 - YVELINES)
Contact :

#367 Message par Claudius » ven. 8 févr. 2019 19:44

F6FCO a écrit:
- je viens d'aller regarder plus longuement et il semblerait qu'il n'y ait de la doc que pour les dsPIC et PIC24 pour le V.3, et les PIC 16F877 et 688 pour le V.2
- Et il semblerait que le V.2 ne gère la trigo avec les entiers.

Je ne comprends pas car, d'une part le umfpu-v2 et consorts ne sont pas liés à un type de µC (PIC, ATMEL, Z80, etc.) ni à un constructeur (Micromega est indépendant de Microchip) et d'autre part leur utilisation ne repose que sur des spécifications des 2 interfaces I²C et SPI (que tout µC digne de ce nom supporte) et d'une liste de opcodes à lui faire interpréter via une de ces 2 interfaces ;-))

Quant à "le V.2 ne gère la trigo avec les entiers" ; objection votre honneur :

Code : Tout sélectionner

Features of uM-FPU V2 Floating Point Coprocessor
------------------------------------------------
   8-pin integrated circuit.
   I2C compatible interface up to 400 kHz
   SPI compatible interface up to 4 Mhz
   32 byte instruction buffer
   Sixteen 32-bit general purpose registers for storing floating point or long integer values
   Five 32-bit temporary registers with support for nested calculations (i.e. parenthesis)
   32-bit Floating Point Operations
      Set, Add, Subtract, Multiply, Divide
      Sqrt, Log, Log10, Exp, Exp10, Power, Root
      Sin, Cos, Tan
      Asin, Acos, Atan, Atan2
      Floor, Ceil, Round, Min, Max, Fraction
      Negate, Abs, Inverse
      Convert Radians to Degrees, Convert Degrees to Radians
      Read, Compare, StatusuM-FPU V2 Floating Point Coprocessor
etc.

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 :

#368 Message par F6FCO » ven. 8 févr. 2019 22:28

Oups ! j'ai lu trop vite et confondu signé et flottant. Ce que je voulais dire c'est que dans leurs PDF ils ne proposent rien pour les PIC 18F et il faut bien de la doc pour débuter, surtout que tout est en anglais ce qui ne me facilite pas la tâche.
Je vais m'en commander un pour faire des essais.
Une porte nand prend 2 bits en entrée... la cochonne !!! :langue:

Soft de commande CNC en asm
paulfjujo
Avatar de l’utilisateur
Expert
Expert
Messages : 2589
Âge : 73
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#369 Message par paulfjujo » sam. 9 févr. 2019 13:42

bonjour à tous,


Interessant ces FPU ...
j'en avais parlé dans ce post , mais perdu la doc.


... ils ne proposent rien pour les PIC 18F


on s'en fiche, du moment que le PIC utilisé puisse gerer le SPI ou L'I2C
et si possible en Hardware , pour ne pas trop mobiliser de ressources.

je dis ça, mais je galere en ce moment avec le PIC18F27K42 et le I2C Hardware .. alors que tout va bien avec le I2C Software .
:sifflotte: "le mieux est l'ennemi du bien"
Modifié en dernier par paulfjujo le sam. 9 févr. 2019 17:06, modifié 1 fois.
Aide toi, le ciel ou FantasPic t'aidera

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 :

#370 Message par F6FCO » sam. 9 févr. 2019 14:07

Hello,
Je n'ai que peu d'expérience dans le domaine, qu'elle est la différence entre I2C software et Hardware ?
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 41 invités