Répondre à la discussion
Affichage des résultats 1 à 11 sur 11

PIC10F200 Filtre RC numérique




  1. #1
    Cromos

    PIC10F200 Filtre RC numérique

    Bonjour,

    Cahier des charges:
    PIC10F200
    Mesurer le rapport cyclique d'un signal binaire en ASM

    La formule du rapport cyclique comprend une divsion, ce qui est très lent en asm.
    Solution faire la moyenne à l'aide d'un passe bas numérique.

    Or mon problème c'est que je ne sais comment faire cela.

    Merci d'avance pour vos réponses.

    Cromos

    -----


  2. Publicité
  3. #2
    micka_ch

    Re : PIC10F200 Filtre RC numérique

    Bonjour,

    Une version simple du passe-bas numérique : y[n]=ax[n]+(1-a)y[n-1] , avec a < 1.

    Dans ton cas il faut travailler en virgule fixe bien-sure.

    Salutations

  4. #3
    antek

    Re : PIC10F200 Filtre RC numérique

    Citation Envoyé par Cromos Voir le message
    La formule du rapport cyclique comprend une divsion, ce qui est très lent en asm.
    A la louche, une dizaine d'instructions !


  5. #4
    DAUDET78

    Re : PIC10F200 Filtre RC numérique

    Citation Envoyé par Cromos Voir le message
    La formule du rapport cyclique comprend une divsion, ce qui est très lent en asm.
    ????????
    L'ASM, c'est la programmation qui s’exécute le plus rapidement sur un µC car c'est du langage machine : Une ligne ASM = Une instruction µC
    Dernière modification par DAUDET78 ; 23/12/2017 à 18h11.
    L'age n'est pas un handicap .... Encore faut-il arriver jusque là pour le constater !

  6. #5
    Jack

    Re : PIC10F200 Filtre RC numérique

    Le monsieur voulait dire qu'il voulait éviter la division car c'est l'instruction la plus lente.

  7. A voir en vidéo sur Futura
  8. #6
    DAUDET78

    Re : PIC10F200 Filtre RC numérique

    Citation Envoyé par Jack Voir le message
    Le monsieur voulait dire qu'il voulait éviter la division car c'est l'instruction la plus lente.
    Pour calculer un ratio, cela me semble difficile ....
    Ou alors, on mesure la valeur moyenne analogique ... ce qui est encore plus lent .
    Dernière modification par DAUDET78 ; 23/12/2017 à 20h28.
    L'age n'est pas un handicap .... Encore faut-il arriver jusque là pour le constater !

  9. #7
    herrmattoon

    Re : PIC10F200 Filtre RC numérique

    Bonjour,

    Si tu peux acquérir 2^n valeurs pour en calculer la moyenne ça peut se faire en additionnant les 2^n valeurs, puis en décalant les bits du résultat de n vers la droite. C'est une manière simple et rapide de diviser par une puissance de deux / de calculer une moyenne sans utiliser "d'instruction de division".

    Cordialement,

    Herrmattoon

  10. Publicité
  11. #8
    herrmattoon

    Re : PIC10F200 Filtre RC numérique

    J'oubliais : une instruction de décalage à droite de une position prend une instruction, si tu divises par 16 disons, ça prendra 4 instructions, par 32 -> 5, etc.

    Bonne chance et BONNE ANNEE!

  12. #9
    PA5CAL

    Re : PIC10F200 Filtre RC numérique

    En principe, on effectue la division par 2n sur une variable occupant plus d'un octet, et le nombre d'octets nécessaire pour stocker le résultat est parfois inférieur à celui de la valeur de départ.

    Dans ce cas, il est parfois possible d'optimiser l'opération. Par exemple pour une valeur occupant 16 bits, il faut :
    - 2 décalages à droite pour réaliser une division par 2
    - 4 décalages à droite pour réaliser une division par 4
    - 6 décalages à droite pour réaliser une division par 8
    - 8 décalages à droite pour réaliser une division par 16
    - 9 décalages à gauche pour réaliser une division par 32 (1)
    - 6 décalages à gauche pour réaliser une division par 64 (1)
    - 3 décalages à gauche pour réaliser une division par 128 (1)
    - rien pour la division par 256, qui est implicite (2)

    S'il est prévu que le résultat précédent occupe systématiquement 8 bits (cas du calcul d'une moyenne de valeurs sur 8 bits, par exemple), alors il faut :
    - 2 décalages à droite pour réaliser une division par 2
    - 4 décalages à droite pour réaliser une division par 4
    - 6 décalages à droite pour réaliser une division par 8
    - 8 décalages à droite pour réaliser une division par 16
    - 6 décalages à gauche pour réaliser une division par 32 (3)
    - 4 décalages à gauche pour réaliser une division par 64 (3)
    - 2 décalages à gauche pour réaliser une division par 128 (3)
    - rien pour la division par 256, qui est implicite (2)


    (1) : en réalisant un décalage à gauche des bits des deux registres 8 bits de départ vers un troisième registre de 8 bits, on obtient plus rapidement le résultat, stocké dans le deuxième et le troisième registre.
    (2) : il suffit de considérer le second registre de 8 bits (poids fort) isolément pour obtenir le résultat recherché.
    (3) : le résultat se retrouvant entièrement dans le second registre de 8 bits (poids fort de la valeur de départ), il n'est pas nécessaire de passer par un troisième registre pour mener l'opération.

  13. #10
    herrmattoon

    Re : PIC10F200 Filtre RC numérique

    En principe, on effectue la division par 2n sur une variable occupant plus d'un octet, et le nombre d'octets nécessaire pour stocker le résultat est parfois inférieur à celui de la valeur de départ.

    Dans ce cas, il est parfois possible d'optimiser l'opération. Par exemple pour une valeur occupant 16 bits, il faut :
    - 2 décalages à droite pour réaliser une division par 2
    Bonjour PA5CAL,

    Serait-il possible d'expliquer plus en détail cette affirmation? Ce n'est pas vraiment l'objet de ce post, je suis pourtant curieux d'apprendre quel tour de passe-passe se cache derrière ça

    Meilleures salutations,

    Herrmattoon

  14. #11
    jiherve

    Re : PIC10F200 Filtre RC numérique

    Bonsoir,
    pour diviser par 2 une valeur codée sur 16bits sur un micro 8bits qui ne sait décaler que d'une place il faut décaler l'octet MSB, récupérer la carry et décaler alors carry et byte LSB en charabia ATMEL avec la valeur 16bits contenue dans r0,r1 et r1 contenant le MSB
    LSR r1;
    ROR r0;
    il y a bien deux décalages.
    Bien sur avec un µC 16 bits ou plus un seul décalage suffit ce d'autant plus si le µc sait décaler de plus d'une position en une instruction.
    Ceci dit une division avec un bon algo cela va tout de même assez vite , moins de 60µs pour une 32*32 (16.16/16.16)sur un Atmega 328 @16Mhz environ 860 cycles.
    JR
    l'électronique c'est pas du vaudou!

Discussions similaires

  1. Filtre numérique
    Par Che57 dans le forum Électronique
    Réponses: 3
    Dernier message: 01/11/2011, 18h12
  2. filtre numérique RIF
    Par fannym02 dans le forum Électronique
    Réponses: 2
    Dernier message: 18/05/2010, 08h15
  3. Filtre numérique
    Par Late dans le forum Physique
    Réponses: 16
    Dernier message: 15/09/2009, 08h49
  4. [Débutant] Problème programmation PIC10F200
    Par GroRelou dans le forum Électronique
    Réponses: 3
    Dernier message: 23/12/2008, 10h18
  5. Filtre numérique
    Par Rodrigue dans le forum Électronique
    Réponses: 1
    Dernier message: 11/03/2006, 10h53