decomposition d'un octet
Répondre à la discussion
Affichage des résultats 1 à 9 sur 9

decomposition d'un octet



  1. #1
    invite88c4773b

    Arrow decomposition d'un octet


    ------

    Bonjour à tous,
    Je travaille actuellement sur comment jouer un son avec un pic 16f887.
    Comme je l'ai dit dans mon premier post je suis pas très bon en prog' et comme d'habitude je bute...
    Je possède un fichier son au format . h qui contient la data du son sous forme d'un tableau nommé alarm de 818 octets.
    Ce que je souhaite faire, c'est lire chaques bits de chaque octet les uns après les autres et l'envoyer dans une variable short bite.
    Seulement, je pense que je m'y prends mal car j'utilise un masque pour récuperer les bits .
    Mon programme sera peut-etre plus parlant :


    #include "alarm.h"
    unsigned long int nooctet;
    int nobit;
    int octet;
    short bite;
    int decalage;

    /////////////////////////////// MAIN ///////////////////////////////////

    void main (void)
    {

    void initialisationpic ();
    void lecture ();



    }



    //////////////////////////////////////////////////////////////////////////


    /*void lecture (void)
    {
    nooctet=0;
    octet=0;
    for (nooctet=0; nooctet<=817; nooctet++) // pour nooctet=0 on incrémentation jusqu'à nooctet=817
    {
    octet=alarm[nooctet];
    nobit=0;
    decalage=0b00000001;
    bite=octet|decalage;
    for(nobit=0; nobit<=6; nobit++)
    {


    delay_ms(5);
    decalage<<1;

    RB3_bit=bite ;

    }

    delay_ms(5);
    }

    }


    void initialisationpic (void)
    {
    TRISA=0xFF;

    TRISB=0x00;

    } */

    Le temps n'est pas encore géré sa viendra si j'arrive à réaliser ça déja...^^


    Une idée ??


    Merci d'avance

    -----

  2. #2
    eldudo

    Re : decomposition d'un octet

    Ton erreur est de faire bite=octet|decalage;
    à la place de bite=octet & decalage;
    que souhaites tu obtenir d'ailleurs des octets valants 0 ou 1 selon que le bit étudié est nul ou pas ou des octets valants 2^i ou zéro selon que le bit n°i de l'octet étudié vaut zéro ?
    En tout cas, si tu veux que l'octet bite soit égal à 2^i quand l'octet n° i est égal à 1 , il faut alors coder : bite=octet & decalage;
    Par exemple si ton octet est 00010010, tu obtiendras les octets : 0x00 , 0x02,
    0x00, 0x00, 0x10, 0x00, 0x00, 0x00
    Au fait, en anglais , octet c'est byte, avoir une short bite, voire nobit, ça la fout mal ...
    J'espère que c'est clair ,
    A plus

  3. #3
    invite88c4773b

    Re : decomposition d'un octet

    bonjour et merci pour ta réponse .
    En fait pour t'expliquer ce que je souihaite je vais prendre un exemple :

    imaginons que la premiere valeur du tableau soit 0xF0,
    je veut que la variable bite corresponde à 1 au premier passage, puis à 1, puis1,puis1,puis0,puis0,puis 0, puis 0.
    en gros je veux lire le bit 7 de l'octet puis le 6... jusqu'au bit 0 puis changer d'octet et recommencer ...Il faudrait peut être que je me penche sur les pointeurs mais je m'en suis déjà servi une fois et ça m'avait vite gonflé.. ^^ M'enfin s'il le faut ..

    Concernant les appelations des variables, ce n'est pas une erreur de ma part c'est juste que j'avais prévu de prendre la notation francaise mais mon compilateur ne voulais pas compiler avec une variable nommée bit, j'ai donc choise bite ^^ et nobit pour numero bit ^^ pourquoi faire simple..

  4. #4
    Jack
    Modérateur

    Re : decomposition d'un octet

    Sinon, pour accéder à un bit en particulier d'un octet ou d'un entier, il existe les "bit fields" en langage C. C'est avec ce type de structure que sont définis les bits des différents registres.
    Ca se manipule de la même manière qu'une structure.

    Et si en plus, tu maitrises les unions, tu pourras aussi bien accéder au registre entier ou à un de ses bits, ou à un groupe de bits.

    A+

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

    Re : decomposition d'un octet

    bonjour,
    une piste si cela peux t'aider
    ce que tu veux c'est coder en binaire
    n'ayant pas cette fonction en basic j'ai fait une succession de division (8 fois)par 2 (partie entière )et j'ai pris le reste
    exemple:
    soit N le nombre
    b0=N - 2*ent(N/2) N1 en(N/2)
    b1=N1- 2*ent (N1/2)
    etc
    cordialement
    Alain

  7. #6
    invite3570b5f7

    Re : decomposition d'un octet

    Pourquoi ne pas détourner la fonction " SPI " ?? c'est une transmission série qui justement, te lis un mot binaire et t'envoie ca sur une seule pin...

    SI tu met 0xF0, a la sortie sur la broches tu auras : 1,1,1,1,0,0,0,0.

    L'avantage c'est que tu n'as pas de protocole comme le bus I2C.
    J'ai étudié cette fonction avec un AVR et en C si ca t’intéresse.

  8. #7
    eldudo

    Re : decomposition d'un octet

    Ca devrait marcher avec ces quelques modifications :

    /*void lecture (void)
    {
    nooctet=0;
    octet=0;
    for (nooctet=0; nooctet<=817; nooctet++) // pour nooctet=0 on incrémentation jusqu'à nooctet=817
    {
    octet=alarm[nooctet];
    nobit=0;
    decalage=0b00000001;

    for(nobit=0; nobit<=7; nobit++)
    {

    bite=(octet&decalage)<<nobit;
    delay_ms(5);
    decalage<<1;

    RB3_bit=bite ;

    }

    delay_ms(5);
    }

    }

    Tes octets sont stockés dans le tableau alarm et tu mets à jour à chaque bit exploré du tableau alarm la variable RB3_bit .
    RB3_bit, c'est quoi au juste ? Un port de ton microcontrolleur, ou juste une variable de la RAM , car entre deux passages dans la boucle c'est essentiellement cette variable qui est modifiée et que tu réécrases entre deux passages dans ta boucle sans sauvegarder autre part les résultats obtenus par le passage dans la boucle , ce qui est étonnant .
    Dernière modification par eldudo ; 20/08/2011 à 00h48.

  9. #8
    polo974

    Re : decomposition d'un octet

    Code:
    unsigned char mask;
    for (mask=0x80;mask;mask/=2)
    {
        RB3_bit=(octet&mask)?1:0;
        tempo();
    }
    il faut que mask soit unsigned char pour ne pas avoir de soucis avec le signe...
    en divisant par 2, le bit se décale de 1 case à caque tour, puis mask passe à 0 et c'est fini pour cet octet.

    pour mettre du code, utilisez la balise code (le # en mode édition "avancée")...
    Jusqu'ici tout va bien...

  10. #9
    eldudo

    Re : decomposition d'un octet

    Il y a une erreur dans le dernier bout de programme que je t'ai envoyé,
    sans erreur, c'est plutôt :

    /*void lecture (void)
    {
    nooctet=0;
    octet=0;
    for (nooctet=0; nooctet<=817; nooctet++) // pour nooctet=0 on incrémentation jusqu'à nooctet=817
    {
    octet=alarm[nooctet];
    nobit=0;
    decalage=0b00000001;

    for(nobit=0; nobit<=7; nobit++)
    {

    bite=(octet&decalage)>>nobit; ( et pas bite=(octet&decalage)<<nobit; )
    delay_ms(5);
    decalage<<1;

    RB3_bit=bite ;

    }

    delay_ms(5);
    }

    }

    mais bon ce que t'as proposé polo974 marche tout aussi bien et est plus court et plus lisible .
    A plus

Discussions similaires

  1. Ajout d'un octet sur trame série
    Par invitec279933e dans le forum Électronique
    Réponses: 1
    Dernier message: 18/02/2011, 12h35
  2. Décomposition d'un oxyde
    Par invite186efb71 dans le forum Chimie
    Réponses: 1
    Dernier message: 09/10/2010, 17h36
  3. Décomposition d'un polynôme
    Par invite02e16773 dans le forum Mathématiques du supérieur
    Réponses: 1
    Dernier message: 20/04/2009, 10h53
  4. décomposition d'un mp3 en octet
    Par invite8a7e1f83 dans le forum Électronique
    Réponses: 14
    Dernier message: 11/11/2007, 23h05
  5. lecture d'un octet par PIC16F873
    Par invite0ff982b6 dans le forum Électronique
    Réponses: 0
    Dernier message: 31/05/2007, 14h59
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...