logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[ATmega8][WinAVR] - Różnice między kodem binarnym a HEX

Matee1254 09 Maj 2014 14:01 2262 6
  • #1 13584686
    Matee1254
    Poziom 10  
    Witam
    Zmontowałem sobie prosty układ do ćwiczeń na kodzie wraz z najważniejszymi informacjami. Taki można powiedzieć sandbox do zabawy z operacjami na bitach.

    [ATmega8][WinAVR] - Różnice między kodem binarnym a HEX
    (pewnie dostane mały opie...rz za 1 rezystor na 8 diod - nie posiadam więcej!)

    Przejdę do sedna sprawy, zastanawia mnie sposób zapisu systemu binarnego, na internecie wyczytałem, że można kod binarny zapisać w postaci hex.
    Tak więc kod binarny 10101010 można zapisać w postaci hex: 0xAA

    Operuje diodami za pomocą skryptu:
    Kod: text
    Zaloguj się, aby zobaczyć kod


    Podczas ustawienia PORTD = 0xAA, diody na wyjściach świecą zgodnie z kodem 10101010
    [ATmega8][WinAVR] - Różnice między kodem binarnym a HEX

    lecz podczas ustawienia PORTD = 10101010, diody działają w niezrozumiały dla mnie sposób
    [ATmega8][WinAVR] - Różnice między kodem binarnym a HEX


    Dlaczego diody w przypadku 1 działają poprawnie, a w przypadku 2 już nie, w kursach pisali, że obie formy zapisu bitów są prawidłowe i zamienne, można zapisać jako kod binarny, oraz jako kod HEX i obie powinny działać identycznie.

    Z góry dziękuje za pomoc
    Pozdrawiam
    Mateusz Bechta
  • Pomocny post
    #2 13584746
    perlon
    Poziom 20  
    Matee1254 napisał:

    // Sposoby zapisywania liczby binarnej 01011110 (94)
    // PORTD = 01011110; - liczba binarna
    // PORTD = 0x5E; - liczba hex
    // lub
    // PORTD = _BV(6)|_BV(4); - pojedyńcze bity 6 i 4
    //----------------------------------------------------
    // Przykłady:
    // PORTD = 0xaa; - 1010 1010
    // PORTD = 0x55; - 0101 0101
    // PORTD = 0xFF; - 1111 1111
    //----------------------------------------------------


    Powinno być binarnie
    PORTD = 0b01011110
  • Pomocny post
    #3 13584902
    gaskoin
    Poziom 38  
    Matee1254 napisał:
    Podczas ustawienia PORTD = 10101010, diody działają w niezrozumiały dla mnie sposób


    Bo 10101010 to dziesięć milionów sto jeden tysięcy dziesięć. W zapisie hex = 0x9A2112. Po obcięciu do 8 bit masz 0x12, czyli 00010010 - to co widzisz na diodach.


    Kolega wyżej podał rozwiązanie.
  • #4 13584952
    Matee1254
    Poziom 10  
    Już chyba rozumiem..

    Kompilator wykrył mój "kod binarny" jako zwykłą liczbę, po czym przekonwertował ją na system binarny. Jeśli rozpocznę od 0x, system uzna zapis w systemie szesnastkowym, jeśli rozpocznę od 0b, system uzna zapis w systemie binarnym.

    Więc jeśli bym zapisał:
    PORTD = 170
    jest to jednoznaczne z zapisem:
    PORTD = 0b10101010
    i w obu wypadkach uzyskam wymagany efekt.

    Jeszcze mam pytanie odnośnie rezystora, są jakieś mocne skutki uboczne używania jednego rezystora w tak prostym obwodzie?

    Dodam również że rezystor to 220om, a całość zasilana jest 5V pochodzącego z programatora USBasp
  • #5 13584975
    perlon
    Poziom 20  
    Co to znaczy "mocne skutki uboczne" ? Diody świecą z różną jasnością w zależności od liczby ich świecących. Generalnie powyższe połączenie niezgodnie z zasadami. Jeżeli ci to nie przeszkadza to do celów testowania migacza może być.
  • #6 13590333
    el2010tmp
    Poziom 25  
    Matee1254 napisał:
    Jeszcze mam pytanie odnośnie rezystora, są jakieś mocne skutki uboczne używania jednego rezystora w tak prostym obwodzie?

    Świat się od tego nie zawali :)
    Jednak jak będziesz numerował bity od 1 do 8 zamiast od 0 do 7
    to "skutki uboczne" pozostaną Ci w głowie i mogą w przyszłości przeszkadzać :)
    Poza tym bit nr.: 0 jest pierwszy z prawej.

    Jak byś dodał do swojej konstrukcji kilka przycisków to byłby fajny kalkulatorek binarny. Nie musiał byś za każdym razem wgrywać na nowo programu aby przetestować rożne operacje.
  • #7 13590645
    Matee1254
    Poziom 10  
    Hahaha wiedziałem ze ktoś to zauważy, po nauce zmiany Bin>Dec i Dec>Bin juz wryłem dość mocno do głowy kolejność bitów, zawsze zaczynam liczyć od 0 zgodnie z obliczeniami:
    101 = 2(2) + 0(1) + 2(0) = 4 + 1 = 5

    Dzisiaj to zmienię, bo chwilami ten fakt zaczyna i mnie irytować :p

    Głównie bałem się ze napięcie ledów może uszkodzić port (jako ze mam z tym doczynienia od kilku dni, jest to dla mnie delikatny procesor :p)
REKLAMA