PIC16 - calcul "complexe"
Répondre à la discussion
Affichage des résultats 1 à 20 sur 20

PIC16 - calcul "complexe"



  1. #1
    Toufinet

    PIC16 - calcul "complexe"


    ------

    Bonjour à tous,

    J'ai l'habitude de programmer en assembleur, mais je vais peut-être devoir passer en C si vous pouvez me donner les précisions suivantes :

    Un PIC16 peut-il réaliser des calculs complexes ?
    J'entend "complexe", par des multiplications de nombres à plusieurs chiffres après la virgule, et des utilisations de racines carrées.

    Voici a priori le calcul que le pic devrait avoir à réaliser si j'utilise ce composant :



    Vo étant le résultat d'une conversion analogique.

    Es-ce réellement à la portée des PIC16, ou arrive-t'on un peu à ses limites ?

    Merci

    -----

  2. #2
    invite87be5ae9

    Re : PIC16 - calcul "complexe"

    Bonjour Toufinet !

    Avant même de voir ton équation, je suis en mesure de te répondre que ton PIC peut, en effet, effectuer des calculs complexes !

    Là n'est pas la question, car les ressources matérielles de ton PIC (série 16) ne permettant pas d'effectuer nativement des opérations mathématiques complexes, le vrai souci est de savoir combien de temps disposes-tu pour effectuer ces calculs !

    Pour rappel, l'ALU du PIC 16 ne permet d'effectuer des calculs qu'en 8 bits, avec des opérateurs très basiques tels que les décallages, l'addition ou la soustraction !

    Tu ne trouveras pas d'instructions permettant de faire des divisions ou des multiplications, et encore moins des racines carrées et des puissances !
    De plus, ne disposant pas de FPU, impossible de calculer nativement des opérations en virgule flottante !

    La solution ?
    -> La voie logicielle !

    Des librairies permettent d'effectuer ces opérations, mais avec des temps d'exécution parfois très importants !
    Je t'invite donc à jeter un coup d'oeil sur ces librairies en évaluant les temps d'exécution :
    http://lolowebsite.free.fr/mntpic.html

    Tu peux également trouver ces librairies directement chez Microchip, mais pour des raisons pratiques, je les avaient regroupées sur ce site (que je n'entretiens plus depuis longtemps, hélas...)

    Bonne continuation !

    A+

  3. #3
    Seb.26

    Re : PIC16 - calcul "complexe"

    Tu peux aussi utiliser une FPU externe en I2C par exemple ...

    ça par exemple ...

  4. #4
    RISC

    Re : PIC16 - calcul "complexe"

    Citation Envoyé par Seb.26 Voir le message
    Tu peux aussi utiliser une FPU externe en I2C par exemple ...
    ça par exemple ...
    Intéressant !!!! mais à ce prix je mets plusieurs dsPIC

    Pour les calculs complexes, c'est facilement réalisable en C si le C proposé possède des librairies à virgule flottante (IEEE754).

    La seule question à se poser est : de combien de temps maximum je dispose pour faire le calcul ? et la on peut s'apercevoir qu'il faut plusieurs centaines voir plusieurs secondes pour faire le calcul avec un petit 8 bits.
    Pour info j'ai réalisé ce genre de calculs il y a plus de 20 ans avec un microcontroleur 4 bits....

    2 solutions :

    a/ un PIC18 version "K" (c'est récent et sa tourne à 64MHz = 16MIPS) : http://www.microchip.com/pic18k

    b/ un 16 bits : un petit PIC24H / dsPIC33 à 40MIPS (ils coutent qq euros maintenant en 28 broches)

    a+
    Dernière modification par RISC ; 12/09/2007 à 10h06. Motif: correction

  5. A voir en vidéo sur Futura
  6. #5
    Seb.26

    Re : PIC16 - calcul "complexe"

    Citation Envoyé par RISC Voir le message
    Pour info j'ai réalisé ce genre de calculs il y a plus de 20 ans avec un microcontroleur 4 bits....
    Pour info ( puisqu'on est dans la "news confiture" ) les HP48 qui etaient des references en matière de calculateurs HdG etait des machines 4bits et faisaient les calculs sur des flotants 64bits ...

    Ps: pour le prix, y'a moins cher que Lextronic ...

  7. #6
    invite6597e355

    Re : PIC16 - calcul "complexe"

    Heu, y'a qu'une seul variable dans son équation !!

    Ya beaucoup plus simple pour effectuer un calcul complexe dans un petit micro quand ya qu'une seule variable: la table de correspondance.

    Tu rentre ta formule dans un tableur genre excel, tu sort une série de résultat qui correspond au limite de ta variable, tu stock le tableau dans une grosse mémoire I2C et voilà ton calcul effectué en quelques coups d'horloges.

    Forcément, la taille de la table dépend de la précision du résultat mais comme Vo provient d'une conversion analogique numérique, ya pas une infinité de résultats. Si c'est un convertisseur 10 bits, ya que 1024 possibilités, donc dans une petite mémoire I2C ça rentre largement. Il suffit que l'adresse en mémoire soit directement la valeur de Vo et ta ton résultat en 2 lignes de codes.

  8. #7
    Seb.26

    Re : PIC16 - calcul "complexe"

    Citation Envoyé par vince_007 Voir le message
    ...
    Complètement d'accord, mais comme il parlait de calculs flotants, je pense que Vo n'est pas forcement le resultat d'une CNA, mais peut être un parametre envoyeé par un host ou un client ...

    Sinon, c'est LA solution ... et si l'equation est un peu lineaire, y'a aussi moyen de precalculer quelques resultats et de faire une petite interpolation là dessus ...

  9. #8
    invite22c0acb2

    Re : PIC16 - calcul "complexe"

    Bonjour;
    Je ne sais pas si je vais vous aider un peu, mais dans un projet, j'ai eu a utiliser pas mal de calcules complexes, et voila mes résultats:
    J'ai utilisé un PIC 16F877 cadensé a 20 Mhz, j'ai utilisé aussi le language C, en utilisant la bibliothèque "math.h" de CCS.
    Donc, j'avais a calculer:
    teta=teta+(7.4e-4)*(VD-VG);
    x=x+(5e-3)*(VD+VG)*cos(teta);
    y=y+(5e-3)*(VD+VG)*sin(teta);

    toutes les variables sont de type float;
    et le temps de calcul est de 4.6 ms
    Voila, esperant que ca peut aider !

  10. #9
    Toufinet

    Re : PIC16 - calcul "complexe"

    Citation Envoyé par vince_007 Voir le message
    Heu, y'a qu'une seul variable dans son équation !!

    Ya beaucoup plus simple pour effectuer un calcul complexe dans un petit micro quand ya qu'une seule variable: la table de correspondance.

    Tu rentre ta formule dans un tableur genre excel, tu sort une série de résultat qui correspond au limite de ta variable, tu stock le tableau dans une grosse mémoire I2C et voilà ton calcul effectué en quelques coups d'horloges.

    Forcément, la taille de la table dépend de la précision du résultat mais comme Vo provient d'une conversion analogique numérique, ya pas une infinité de résultats. Si c'est un convertisseur 10 bits, ya que 1024 possibilités, donc dans une petite mémoire I2C ça rentre largement. Il suffit que l'adresse en mémoire soit directement la valeur de Vo et ta ton résultat en 2 lignes de codes.
    Pourquoi faire compliqué quand on peut faire simple ?

    Merci Vince, c'est en effet LA solution qu'il me faut ... D'autant plus que je ne vais sans doute pas avoir besoin de plus de 500 valeurs, j'vais peut-être même pouvoir entrer les valeurs dans le pic

  11. #10
    Toufinet

    Re : PIC16 - calcul "complexe"

    Bon, j'hésite encore ...

    Après simplification de l'ensemble des calculs, j'arrive à devoir effectuer le calcul suivant :

    y = - CAN x 50 / 329 + 109,24

    Avec CAN = le résultat d'une CAN sur 10 bits.

    J'ai donc la solution de créer un tableau de valeurs, ou de réaliser l'opération sur 16 bits.
    Connaissez-vous quelques algorithmes assez rapides ( je n'ose pas demander le code ) décrivant la division sur 16 bits avec une ALU de 8 bits ?
    Pour la multiplication par 50 , ça va, pour l'addition de 109.24, ça va aussi, mais pour la division par 329, j'ai la flemme de me casser le crane pour trouver l'algo, d'autant plus que celui que je trouverai ne sera sans doute pas le plus rapide !

    Merci pour vos infos / idées

  12. #11
    invite_P89
    Invité

    Re : PIC16 - calcul "complexe"


  13. #12
    invite87be5ae9

    Re : PIC16 - calcul "complexe"

    Citation Envoyé par Toufinet Voir le message
    Bon, j'hésite encore ...

    Après simplification de l'ensemble des calculs, j'arrive à devoir effectuer le calcul suivant :

    y = - CAN x 50 / 329 + 109,24

    Avec CAN = le résultat d'une CAN sur 10 bits.

    J'ai donc la solution de créer un tableau de valeurs, ou de réaliser l'opération sur 16 bits.
    Connaissez-vous quelques algorithmes assez rapides ( je n'ose pas demander le code ) décrivant la division sur 16 bits avec une ALU de 8 bits ?
    Pour la multiplication par 50 , ça va, pour l'addition de 109.24, ça va aussi, mais pour la division par 329, j'ai la flemme de me casser le crane pour trouver l'algo, d'autant plus que celui que je trouverai ne sera sans doute pas le plus rapide !

    Merci pour vos infos / idées
    Regarde donc mon premier message, le lien que j'y ai mis n'était pas uniquement décoratif :

    Tu y trouveras de quoi faire tes opérations sur 16 bits !

    A+

  14. #13
    Toufinet

    Re : PIC16 - calcul "complexe"

    ah j'avais zappé ton site , merci ^^

    Je compare ce que tu as avec la librairie de microchip ( qui nécessite 329 cycles d'horloges pour effectuer la division 16bits / 16 bits => 16 bits )

    EDIT : ce sont les mêmes Merci à vous deux

  15. #14
    Seb.26

    Re : PIC16 - calcul "complexe"

    Citation Envoyé par Toufinet Voir le message
    Pour la multiplication par 50 , ça va, pour l'addition de 109.24, ça va aussi, mais pour la division par 329, j'ai la flemme de me casser le crane pour trouver l'algo, d'autant plus que celui que je trouverai ne sera sans doute pas le plus rapide !
    Tu veux faire une division entière par 329 ? ... decompose la en puissance de deux ...

    329 = 256+64+8+1 ...

    Ainsi ta division ne va prendre que quelques cycles ...

    Y = - CAN * 50 / 329 + 109.24 ... y'a pas moyen de simplifier encore un peu par hasard ? ...
    Dernière modification par Seb.26 ; 13/09/2007 à 13h12.

  16. #15
    Seb.26

    Re : PIC16 - calcul "complexe"

    NB: je suis pas en train de dire une annerie moi ?

    ... la decomposition marche pour la multiplication, mais suis moins sûr pour la division ... ?!:

  17. #16
    Toufinet

    Re : PIC16 - calcul "complexe"

    En effet, il y a un gros souci mathématique dans ton raisonnement

  18. #17
    Seb.26

    Re : PIC16 - calcul "complexe"

    Citation Envoyé par Toufinet Voir le message
    En effet, il y a un gros souci mathématique dans ton raisonnement
    MDR ... c'est bien ce qui me semblait ... ... Mes nuits d'ASM sont loins ...

  19. #18
    invite_P89
    Invité

    Re : PIC16 - calcul "complexe"

    Citation Envoyé par Seb.26 Voir le message
    MDR ... c'est bien ce qui me semblait ... ... Mes nuits d'ASM sont loins ...
    C'est ce que je me suis dit dans un autre post trop de C tue l'ASM

  20. #19
    Seb.26

    Re : PIC16 - calcul "complexe"

    Citation Envoyé par Pom26 Voir le message
    C'est ce que je me suis dit dans un autre post trop de C tue l'ASM
    Arrrgghhhh ... vous ici ?!!! ...

    ( trop bon ! )


  21. #20
    Toufinet

    Re : PIC16 - calcul "complexe"

    Ceci dit, ça n'a rien à voir avec le langage de programmation ^^

    C'est une des "règles" mathématiques que l'on apprend en ... 4ième ?

Discussions similaires

  1. Besoin d'eclaircissement sur "determiné un nbre complexe" svp !
    Par invite060b200d dans le forum Électronique
    Réponses: 2
    Dernier message: 18/09/2006, 23h36
  2. calcul d'écart "relatif", "type" ?
    Par invite2fe37bd2 dans le forum Mathématiques du supérieur
    Réponses: 17
    Dernier message: 29/08/2006, 12h54
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...