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

Konwersja liczb w AVR. Liczba 2-bajtowa na kod BCD.

Stankow 04 Sty 2017 09:28 5645 77
  • #61 04 Sty 2017 09:28
    grko
    Poziom 33  

    @BlueDraco Bardziej logicznym rozwiązaniem jest jest użycie jakiegoś komputera jednoukładowego typu Rpi albo Beaglebone black i przeportowanie całego programu w Pascalu. Albo napisanie od nowa programu w jakimś nowoczesnym języku.

  • #62 04 Sty 2017 11:11
    2675900
    Użytkownik usunął konto  
  • #63 04 Sty 2017 11:43
    tronics
    Poziom 36  

    Cytat:
    Z tego co napisał tysiąc razy na sekundę + inne operacje (siec, UI itp)

    Też zauważyłem, że się trochę koncepcja zmienia od pierwszego postu do teraz. Z tego co pamiętam na początku była mowa o onewire i ethernet. Później doszło czytanie 8GPIO z częstotliwością 1kHz. I oczywiście wstawanie w 2-3 sekundy co dyskwalifikuje także SBC, bo jednak nawet gdyby kastrować raspbiana/armbiana to nie zejdziemy poniżej 10s. A szkoda, bo rozwiązałoby to trochę komplikacji sprzętowych i mnóstwo ograniczeń programowych.
    BCD jest narzucone nie przez wyświetlacz (to autor oryginalnego wątku pisał, nie p. Sławomir!)
    W tym przypadku konwersja BCD wynika ze sposobu komunikacji. I tak jak z RTC gdzie często dane są w BCD tak i w tym przypadku odczyt/zapis musi być w tej formie, choć obliczenia mogą być już w natywnych typach dla CPU. Najwygodniejszy pewnie byłby kompatybilny z CPU32 mikrokontroler bo typ BCD jest obsługiwany przez sam rdzeń i dedykowane rozkazy. Ale przy 1000 wyprodukowanych już urządzeń nie ma sensu redesign robić tylko skupić się na nowym firmware. Jak mi się wydaje pytania R-MIK zostały odpowiedziane, kod realizujący funkcjonalność udostępniony :) Zatem problem solved. Po co się kłócić?

  • #64 04 Sty 2017 11:57
    22053
    Użytkownik usunął konto  
  • #65 04 Sty 2017 12:02
    2675900
    Użytkownik usunął konto  
  • #66 04 Sty 2017 12:13
    BlueDraco
    Specjalista - Mikrokontrolery

    No to ja bym zaczął projekt od określenia, ile dokładnie (co do jednego) bitów mają mieć te liczby. Każdy bit wpływa bardzo silnie na szybkość obliczeń. I oczywiście obliczenia na liczbach binarnych z konwersją na ciąg cyfr dziesiętnych sprytnym algorytmem, tak, by uniknąć dzielnych dłuższych niż 16 bitów (to akurat jest dość proste). Wtedy konwersja wymaga tylko dodawań liczb 8-bitowych i dzielenia liczby max. 16-bitowej (a raczej 12 bitowej) przez 5, a to się daje w miarę łatwo zrobić.

  • #67 04 Sty 2017 12:25
    22053
    Użytkownik usunął konto  
  • #68 04 Sty 2017 12:41
    tronics
    Poziom 36  

    Cytat:
    Dane przesyłane w SAS są w formacie BCD. Sama konwersja BCD<->bin nie jest problemem, zwłaszcza, ze dane przesyłane są w postaci 4 bajtów. Jedna owe dane muszę "obrobić".

    W takim razie wygodniejszym wydaje mi się jednak operowanie na standardowych typach, a konwersja jedynie przy wysyłaniu/odbieraniu. W każdym razie wydaje się to opcja oszczędniejsza. Fixed-point math wprowadzona chyba od avr-gcc 4.8 niestety tutaj nie zda egzaminu.

  • #69 04 Sty 2017 13:35
    2675900
    Użytkownik usunął konto  
  • #70 04 Sty 2017 14:41
    BlueDraco
    Specjalista - Mikrokontrolery

    8 tysięcy przerwań na sekundę z nietrywialną obsługą na AVR niekoniecznie musi się udać.

    Co do reszty - albo C i uint64 odpowiednio przeskalowany (czyli liczymy nie w jednościach, a w tysiącznych), albo AVR, asembler i własny typ dokładnie taki jak trzeba np. 45-bitowy, i też liczymy w tysiącznych. Mnożenie i dzielenie uint64 może AVR zarżnąć. Z ARM ten problem nie wystąpi.

  • #71 04 Sty 2017 15:02
    2675900
    Użytkownik usunął konto  
  • #72 04 Sty 2017 16:03
    22053
    Użytkownik usunął konto  
  • #73 04 Sty 2017 16:24
    BlueDraco
    Specjalista - Mikrokontrolery

    Różnica jest taka, że przy odczycie po 1-Wire AVR nie zareaguje na inne zdarzenia. ;)

  • #74 04 Sty 2017 16:41
    22053
    Użytkownik usunął konto  
  • #75 04 Sty 2017 16:41
    2675900
    Użytkownik usunął konto  
  • #76 04 Sty 2017 16:55
    22053
    Użytkownik usunął konto  
  • #77 04 Sty 2017 16:57
    2675900
    Użytkownik usunął konto  
  • #78 04 Sty 2017 17:07
    22053
    Użytkownik usunął konto