​ ​ ​ ​ Conversion DEC en HEXA ?
Results 1 to 10 of 10

Thread: Conversion DEC en HEXA ?

  1. #1
    New Member
    Join Date
    Nov 2015
    Location
    ALSACE
    Posts
    23

    Default Conversion DEC en HEXA ?

    Bonjour à tous,

    J'ai besoin d'afficher sur un LCD le n° de série d'un 1-wire (ici un Ds18b20) en hexa.
    J'arrive à lire l'adresse mais elle est affichée en décimal, comment l'afficher en hexa ?
    Voici mon code :
    READOWSN Ds18b20 'note b6 - b13 est utilisé par la commande READOWSN
    serout Sortie_LCD,baud,(254,192,"Famille : ",#b6)
    serout Sortie_LCD,baud,(254,148,"N",223," : ",#b7,#b8,#b9,#b10,#b11,#b12)
    serout Sortie_LCD,baud,(254,212,"Controle : ",#b13)

    Merci à tous de votre contribution

  2. #2
    Senior Member
    Join Date
    Sep 2011
    Location
    Montpellier (FRANCE)
    Posts
    2,647

    Default

    D'après Hippy :
    b0 = $AB
    b1 = b0 / $10 + "0"
    If b1 > "9" Then : b1 = b1 + 7 : End If
    b2 = b0 & $0F + "0"
    If b2 > "9" Then : b2 = b2 + 7 : End If
    SerTxd( "b0 = $",b1,b2, " = ",#b0, CR, LF )
    There are 10 types of people in the world: those who understand binary, and those who don't.

  3. #3
    Senior Member
    Join Date
    Jan 2010
    Location
    34 France
    Posts
    3,802

    Default

    Quote Originally Posted by BESQUEUT View Post
    D'après Hippy :
    b0 = $AB
    b1 = b0 / $10 + "0"
    If b1 > "9" Then : b1 = b1 + 7 : End If
    b2 = b0 & $0F + "0"
    If b2 > "9" Then : b2 = b2 + 7 : End If
    SerTxd( "b0 = $",b1,b2, " = ",#b0, CR, LF )
    A priori, ça fait l'inverse !

    ça serait plutôt ça:
    Code:
    b7 = 215 :b8 = 120: b9 = 35: b10 = 46: b11 = 189: b12 = 145 'par exemple
    
    bptr = 7 ' si premiére variable = b7
    
    do
       b1 = @bptr/16
          gosub dectohexa
       b1= @bptrinc//16
          gosub dectohexa
    loop until bptr = 13
    
    end
    dectohexa:
          lookup b1,(48,49,50,51,52,53,54,55,56,57,65,66,67,68,69,70), b2
          sertxd (b2)
    return      
    S'il n'y a pas de solution, c'est qu'il n'y a pas de problème . (Les Shadoks)

  4. #4
    Moderator
    Join Date
    Mar 2008
    Location
    Western Australia
    Posts
    12,176

    Default

    Avec un peu plus de mise en forme:

    Code:
    b7 = 215 :b8 = 120: b9 = 35: b10 = 46: b11 = 189: b12 = 145 'par exemple
    
    bptr = 7 ' si premiére variable = b7
    
    do
       b1 = @bptr/16
          gosub dectohexa
       b1= @bptrinc//16
          gosub dectohexa
          sertxd (",")
    loop until bptr = 13
          sertxd (cr,lf)
    
    end
    dectohexa:
          lookup b1,(48,49,50,51,52,53,54,55,56,57,65,66,67,68,69,70), b2
          sertxd (b2)
    return
    westaust55

    Hey Hamlet, 2B OR NOT 2B = $FF

  5. #5
    New Member
    Join Date
    Nov 2015
    Location
    ALSACE
    Posts
    23

    Default

    Oouahhh! superbe! J'ai compris le sens général du code mais il faut que j'approfondisse (mes connaissances du langage dans tous les cas)
    Merci à tous de votre contribution.
    Je débute en basic Picaxe et ayant l'habitude d'outils de programmations plus évolués, je suis assez dérouté par la gestion des variables. Il faut que je trouve un toto la dessus c'est la base.

    Et donc pour reboucler avec mon exemple initial, le code complet:

    Col=b3
    Main:
    READOWSN Ds18b20 'b6 - b13 est utilisé par la commande READOWSN
    bptr = 6 ' car premiére variable = b6
    Col=192 (afficheur LCD => 192 = n° de la 1ère colonne de la ligne 2, 193 sera le n° de la colonne 2 ligne 2 ...)
    do
    b1 = @bptr/16
    gosub dectohexa
    b1= @bptrinc//16
    gosub dectohexa
    if bptr <= 13 then 'inutile d'avoir une virgule avec rien derrière
    sertxd (",")
    end if
    loop until bptr > 13
    sertxd (cr,lf)

    serout Sortie_LCD,baud,(254,Col,b2)

    goto main

    dectohexa:
    lookup b1,(48,49,50,51,52,53,54,55,56,57,65,66,67,68,69,7 0), b2
    sertxd (b2)
    serout Sortie_LCD,baud,(254,Col,b2)
    inc Col
    return

  6. #6
    Senior Member
    Join Date
    Sep 2011
    Location
    Montpellier (FRANCE)
    Posts
    2,647

    Default

    Quote Originally Posted by Patrice68 View Post
    Je débute en basic Picaxe et ayant l'habitude d'outils de programmations plus évolués, je suis assez dérouté par la gestion des variables. Il faut que je trouve un toto la dessus c'est la base.
    C'est malheureusement incomplet et obsolète (puisque basé sur PE5 alors que nous sommes maintenant à PE6), mais ça vous intéressera peut-être :
    Manuel-PICAXE-BASIC-pour-débutants
    There are 10 types of people in the world: those who understand binary, and those who don't.

  7. #7
    Senior Member
    Join Date
    Jan 2010
    Location
    34 France
    Posts
    3,802

    Default

    je suis assez dérouté par la gestion des variables. Il faut que je trouve un toto la dessus c'est la base.
    Il est vrai que l'adressage indirect des variables utilisé ici n'est pas forcément très lisible...
    peut être jeter un oeil sur :

    http://www.picaxeforum.co.uk/showthr...l=1#post310877

    Si c'est un afficheur 1602, alors tout peut rentrer sur une ligne si on ne met pas de séparateur "," .
    pourquoi utiliser le byte de la famille (b6) puisqu'elle est connue ?

    inutile d'incrémenter le N° de colonne, ça se fait tout seul en envoyant des serout Sortie_LCD,baud,(b2)

    Code:
    Col=b3 '  ????? si c'est un symbole il faut symbol Col= b3, mais ça ne sert à rien ici.
    Main:
    READOWSN Ds18b20 'b6 - b13 est utilisé par la commande READOWSN
    bptr = 6 ' car premiére variable = b6
    'Col=192 (afficheur LCD => 192 = n° de la 1ère colonne de la ligne 2, 193 sera le n° de la colonne 2 ligne 2 ...)
    serout Sortie_LCD,baud,(254,192) ' on positionne sur 0 de la seconde ligne
    do
    b1 = @bptr/16
    gosub dectohexa
    b1= @bptrinc//16
    gosub dectohexa
    'if bptr <= 13 then 'inutile d'avoir une virgule avec rien derrière
    'sertxd (",")
    'end if
    loop until bptr > 13
    'sertxd (cr,lf)
    
    'serout Sortie_LCD,baud,(254,Col,b2)
    
    goto main
    
    dectohexa:
    lookup b1,(48,49,50,51,52,53,54,55,56,57,65,66,67,68,69,7 0), b2
    'sertxd (b2)
    serout Sortie_LCD,baud,(b2)
    'inc Col
    return 
    Last edited by PieM; 03-05-2017 at 10:28.
    S'il n'y a pas de solution, c'est qu'il n'y a pas de problème . (Les Shadoks)

  8. #8
    New Member
    Join Date
    Nov 2015
    Location
    ALSACE
    Posts
    23

    Default

    Bonsoir PieM et BESQUEUT
    Bon, voilà des pistes de travail. Merci pour les liens.

    Tiens, je ne sais pas reprendre une partie de la discutions,bon,copier/coller...

    "pourquoi utiliser le byte de la famille (b6) puisqu'elle est connue ?"
    Ah, je ne vois pas mon b6 dans le code (sauf celui venant du READOWSN). Qu'ai je fais de pas bien ?

    "inutile d'incrémenter le N° de colonne, ça se fait tout seul en envoyant des serout Sortie_LCD,baud,(b2)"
    Donc, si je comprends bien, une fois qu'on a placé le départ sur l'afficheur, la commande serout avancera de 1 caractère l'affichage automatiquement ?

    Et béh ... j'ai du boulot! et j'ai le manuel n°2 avec moi ...
    Dans tous les cas, merci de vos réponses qui me font progresser dans ce nouveau monde.

  9. #9
    Senior Member
    Join Date
    Jan 2010
    Location
    34 France
    Posts
    3,802

    Default

    Ah, je ne vois pas mon b6 dans le code (sauf celui venant du READOWSN). Qu'ai je fais de pas bien ?
    Code:
    READOWSN Ds18b20 'b6 - b13 est utilisé par la commande READOWSN
    bptr = 6 ' car premiére variable = b6
    
    serout Sortie_LCD,baud,(254,192) 
    do
    b1 = @bptr/16  donc @bptr = b6
    si le pointeur est à 6, la première valeur décodée sera b6 donc la famille ! pour lire uniquement l'adresse il faut mettre bptr= b7 (voir mon 1er programme)
    de plus b13 est la checksum, inutile si vous ne la vérifiez pas.
    donc le test est à faire jusqu'à b12 donc loop until bptr > 12

    Donc, si je comprends bien, une fois qu'on a placé le départ sur l'afficheur, la commande serout avancera de 1 caractère l'affichage automatiquement ?
    Oui.

    Aller sur affichage mode avancé en bas à doite. dans la nouvelle fenêtre il y a les balises pour les citations et le code
    Merci de lire le post de bienvenue en haut !
    S'il n'y a pas de solution, c'est qu'il n'y a pas de problème . (Les Shadoks)

  10. #10
    New Member
    Join Date
    Nov 2015
    Location
    ALSACE
    Posts
    23

    Default

    Ok compris.

    Merci de lire le post de bienvenue en haut !
    Super! c'est fait
    Last edited by Patrice68; 06-05-2017 at 18:32. Reason: n'appartient pas au sujet

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •