Elektroda.pl
Elektroda.pl
X
Arrow Multisolution Day
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

ATmega32 - Odbiór i ustawianie częstotliwości

mikroice90 28 Gru 2012 22:57 1077 12
  • #1 28 Gru 2012 22:57
    mikroice90
    Poziom 13  

    Witam,
    chciałbym się dowiedzieć jak mogę odzyskać liczbę większą niż 8-bitowa wysyłaną char po charze na mikrokontroler?
    Liczby będą w hexach np. 100000 = "186A0"
    Z aplikacji w C# wysyłam po znaku i zapisuję to na uC do tablicy charów np. char tab[5]. Jak teraz odzyskać z tego użyteczną liczbę np uint32_t?

    Z góry dziękuję za pomoc.

    0 12
  • Arrow Multisolution Day
  • #2 28 Gru 2012 23:01
    BlueDraco
    Specjalista - Mikrokontrolery

    Czy coś jest nie tak z kodem, który Ci wysłałem? Przecież dokładnie to ten kod robi.

    0
  • #3 28 Gru 2012 23:05
    mikroice90
    Poziom 13  

    Nie rozumiem tego przypisania do var. Dlaczego przesunięcie o 4 bity i warunek dotyczy tylko A a nie przypadku ogólnego a tego chyb atak prosto nie da się zapisać.

    0
  • Arrow Multisolution Day
  • #4 28 Gru 2012 23:06
    piotrva
    Moderator na urlopie...

    Code:

    char string[]="ABCD";
    uint32_t a=0;
    uint8_t i=0;
    while(string[i]){
         a*=16;
         if(string[i]>='0'&&string[i]<='9')a+=string[i]-'0';
         if(string[i]>='A'&&string[i]<='F')a+=string[i]-'A'+10; 
         if(string[i]>='a'&&string[i]<='b')a+=string[i]-'a'+10;   
         i++;
    }

    Najbardziej łopatologiczne rozwiązanie.
    A kod, o którym Panowie rozmawiacie udostępnijcie - może inni też się włączą do dyskusji.

    0
  • #5 28 Gru 2012 23:07
    BlueDraco
    Specjalista - Mikrokontrolery

    No to pisz, że nie rozumiesz, czytaj kod i staraj się zrozumieć, np. na podstawie podręcznika do C.

    Tak to leciało:

    Kod: c
    Zaloguj się, aby zobaczyć kod


    To działa, przy założeniu, że w buforze jest 5 cyfr z zakresu 0..9 lub A..F - nie sprawdzam poprawności zawartości bufora.

    Natomiast to, co zapodał mój przedpiszca powyżej, nie działa dla cyfr A..F.

    0
  • #6 28 Gru 2012 23:11
    piotrva
    Moderator na urlopie...

    BlueDraco napisał:
    Natomiast to, co zapodał mój przedpiszca powyżej, nie działa dla cyfr A..F.

    Tak, tak, już poprawione.
    Za to u Ciebie (jeśli mogę ponarzekać) nie będzie działało dla zapisu małymi literami (często taki efekt dają funkcje biblioteczne C - małe litery) i trzeba podać długość tekstu.
    Za to moje ma niepotrzebne sprawdzanie warunków, ale tak miało być dla czytelności przykładu.

    0
  • #7 28 Gru 2012 23:12
    mikroice90
    Poziom 13  

    Wciąż na to patrzę i nie wiem co ta linia kodu w pętli robi.
    0000 0000 0000 0000 0000 0000 0000 0000
    przesunięcie o 4 boty ustawia znacznik tu | i te 4 bity sumujesz z "czymś", bo nie wiem co jest wynikiem tego odejmowania ze skróconym ifem w środku

    0
  • Pomocny post
    #8 28 Gru 2012 23:16
    BlueDraco
    Specjalista - Mikrokontrolery

    Przesunięcie przesuwa i nic nie ustawia. Do przesuniętej liczby dorzucamy na koniec wartość binarną kolejnej cyfry, a tę uzyskujemy przez odjęcie kodu ASCII cyfry 0 lub stałej o wartości 'A' - 10 (w ten sposób A daje 10, B - 11 itd.)

    0
  • #9 28 Gru 2012 23:23
    mikroice90
    Poziom 13  

    Najgorsze to że nie można skontrolować czy rzeczywiście to co przesyła program w C# jest poprawnie interpretowane przez mikrokontroler.

    0
  • #11 28 Gru 2012 23:33
    mikroice90
    Poziom 13  

    Jak sprzętowe debugowanie? Programowo sobie coś wyrzucam na konsolę czy w textboxa i widze co jest. PIszę pod AVRStudio ale o sprzętowym debagowaniu nie słyszałem.

    0
  • #13 29 Gru 2012 16:30
    mikroice90
    Poziom 13  

    Dziękuję za pomoc, problem rozwiązany.

    0