1. #1
    Futur Membre du Club
    Homme Profil pro
    Jeune Ingenieur en apprentissage
    Inscrit en
    mars 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Jeune Ingenieur en apprentissage
    Secteur : Industrie

    Informations forums :
    Inscription : mars 2017
    Messages : 4
    Points : 6
    Points
    6

    Par défaut Interpréter Bytes d'un modem avec un ATMEGA

    Bonjour à tous,

    Je sollicite le forum pour pouvoir peut être répondre à quelques interrogations.

    J'ai un programme sous langage C, qui fonctionne avec un ATMEGA et un modem.

    Ce modem reçoit des informations tel que : 1000 0001 1100 0000 0101.

    Mon ATMEGA arrive à les lire.

    J'aimerais grâce a mon programme et mon ATMEGA interpréter ces données et pouvoir me dire :
    1000 0001 : ça correspond à = 1.
    1100 : ça correspond à = 2
    0000 : ça correspond à = 3
    0101 : ça correspond à = 4.

    J’espère avoir été clair de ma demande.

    Merci

  2. #2
    Modérateur

    Homme Profil pro
    Ingénieur électricien
    Inscrit en
    septembre 2008
    Messages
    448
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur électricien

    Informations forums :
    Inscription : septembre 2008
    Messages : 448
    Points : 1 294
    Points
    1 294

    Par défaut

    Bonsoir Bastien

    Non c'est pas clair
    La trame que tu reçois c'est dans quel format? Du binaire pure, ou du texte qui écrit du binaire, ou autre chose?
    Après seul l'équivalence du 1 est un byte, les autres semblent être des 1/2 bytes (si c'est bien de l'écriture binaire).
    Y a-t-il une correspondance logique entre message reçu et la valeur de sortie?

    Pour la conversion, dans les cas où il n'y a pas de relation mathématique, en partant d'un byte (uint_8), il y a deux méthodes:
    - Un gros switch,
    - Un tableau défini en const qui contient à chaque index la valeur de sortie, pour récupérer la sortie on fera simplement un sortie = tableau_const[entree]; et question optimisation il faut placer la tableau en mémoire programme. Voir l'aide autour de la directive PROGMEM, je manque un peu d’expérience sur le sujet.

    Delias

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Jeune Ingenieur en apprentissage
    Inscrit en
    mars 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Jeune Ingenieur en apprentissage
    Secteur : Industrie

    Informations forums :
    Inscription : mars 2017
    Messages : 4
    Points : 6
    Points
    6

    Par défaut

    Bonsoir Delias,

    Je reçois du binaire pure tel quel : 1000 0001 1100 0000 0101

    Qu'entends tu par correspondance logique entre message reçu et la valeur de sortie?

    Avec un énorme switch, Comment je peux dire à ATMEGA en fonction du code binaire, allume LED1 par exemple?

    Bast

  4. #4
    Modérateur

    Homme Profil pro
    Ingénieur électricien
    Inscrit en
    septembre 2008
    Messages
    448
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur électricien

    Informations forums :
    Inscription : septembre 2008
    Messages : 448
    Points : 1 294
    Points
    1 294

    Par défaut

    Bonsoir Bastien

    C'est toujours pas clair!
    Un byte c'est 8 bits donc 1000 0001b est un byte, les autres 1100b, 0000b et 0101b ne sont pas des bytes mais des nibbles.

    Correspondance logique, c'est que l'on peut savoir que 1000 0001b correspond à 1 par du calcul, ou de la logique binaire au sens de l'algèbre de Boole. Cela sera toujours plus efficace qu'une table de mappage.

    Le switch c'est une structure en C:
    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    switch(entree)
    {
    case 0b10000001: /*met le relais 1 à on*/; break;
    case 0b1100: /*met le relais 2 à on*/; break;
    case 0b0000: /*met le relais 3 à on*/; break;
    case 0b0101: /*met le relais 4 à on*/; break;
    }

    Delias

Discussions similaires

  1. brancher un modem avec un switch
    Par komat dans le forum Hardware
    Réponses: 6
    Dernier message: 11/04/2012, 09h44
  2. Réponses: 4
    Dernier message: 12/06/2009, 15h36
  3. interprêtation de la macro tirage avec remise
    Par nostress dans le forum Macro
    Réponses: 6
    Dernier message: 09/06/2008, 15h58
  4. Signaler plusieurs numéros par modem avec Delphi 7
    Par Ralliart dans le forum Débutant
    Réponses: 0
    Dernier message: 17/09/2007, 03h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo