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

Atmega/atxmega szybka zewnętrzna pamięć jako bufor

st4chuu 26 Lut 2015 16:29 1842 21
  • #1 14480160
    st4chuu
    Poziom 15  
    Cześć
    Mam pytanie/prośbę.
    Robię projekcik który zbiera dane z wejść analogowych i puszcza po bluetooth do komputera. Chciałbym wykorzystać maksymalnie możliwość próbkowania ADC, jednak sama prędkość transmisji BT na to nie pozwala.
    Pomyślałem, o zrobieniu buforu na zebrane próbki i wysyłaniu ich na bieżąco po BT do komputera, jednak zrobienie takiego buforu w pamięci procesora to straszna strata miejsca.
    Myślałem o EEPROM'ie jednak zależy mi na czymś bardziej żywotnym pod względem liczby zapisów, a i nie martwię się utratą danych po zaniku zasilania.
    Co poradzicie? W jaką pamięć najlepiej się zaopatrzyć? Tak, żeby osiągnąć odpowiednio dużą prędkość zapisu.
    Podejrzewam, że SRAM był by odpowiedni, jednak nie mogę znaleźć realnej prędkości zapisu danych.

    Pozdrawiam
  • #2 14480314
    dondu
    Moderator na urlopie...
    st4chuu napisał:
    Podejrzewam, że SRAM był by odpowiedni, jednak nie mogę znaleźć realnej prędkości zapisu danych.

    Na pewno większa niż próbkowania ADC.
    Wybierz kość SRAM i sprawdź parametry.
  • Pomocny post
    #3 14480333
    tmf
    VIP Zasłużony dla elektroda
    Ja bym się zastanowił czy np. 32 kB SRAM (tyle max mają wbudowane XMEGA) nie wystarczy. Jeśli to ciągle za mało to można wziąć XMEGA A1U - 2xADC, próbkowanie 2 Msps, do tego zewnętrzny SRAM w konfiguracji 4-portowej (brak innych elementów) lub LPC (mniej połączeń, ale za to zatrzaski) i tyle. Pamięć najlepiej o czasie dostępu <15 ns. Inaczej trzeba waitstaty wstawiać.
  • #4 14480504
    st4chuu
    Poziom 15  
    Dzięki!
    A takie pytanie może banalne i głupie. Wszystkie wartości zmiennych domyślnie są zapisywane w SRAMie?

    I jeszcze takie jedno pytanie.
    Czy któraś z atmeg ma możliwość mierzenia napięć ujemnnych? Czy taki luksus tylko z xmegą :P?
  • #5 14480547
    tmf
    VIP Zasłużony dla elektroda
    Tak, zmienne domyślnie zapisywane są w SRAM, lecz dodanie zewnętrznej pamięci wymusi pewne zmiany w ustawieniach linkera - musisz go poinformować, że masz pamięci więcej. O ile oczywiście chcesz, aby zmienne były tam automatycznie rozmieszczane. Jeśli obsługa tej pamięci będzie całkowicie po twojej stronie to nic nie trzeba zmieniać. W XMEGA prawdopodobnie połączysz ADC z pamięcią przez DMA, więc kodowi C nic do tego.
    Co do pomiaru napięć ujemnych - z AVR tylko XMEGA mają taką możliwość, a to i tak tylko do ok. -150-200 mV. Oczywiście opamp zasilany symetrycznie umożliwi przesunięcie napięcia w zakres "dodatni" i normalny pomiar na każdym ADC.
  • #6 14480572
    BlueDraco
    Specjalista - Mikrokontrolery
    Do przesunięcia zakresu napięć niekiedy wystarcza dzielnik rezystorowy pomiędzy wejściem mierzonego napięcia i plusem zasilania uC - ćwiczyłem coś takiego parę razy z powodzeniem.

    Natomiast co do pamięci - nie prościej wybrać właściwy uC z odpowiednio dużą pamięcią? Weźmy np. taki STM32F411 - tani i 128 KiB RAM... ;)

    I jak tu nie powtórzyć, że najpierw określa się wymagania, a potem wybiera mikrokontroler, a nie odwrotnie... ;)
  • #7 14480577
    st4chuu
    Poziom 15  
    czy w takim razie pomiar różnicowy może zapewnić pomiar +/- 1V?

    Zapomniałem dodać, że wybór tych mikroprocesorów jest podyktowany posiadanymi umiejętnościami i narzędziami. Projekt jest czysto hobbystyczny nie w celach dochodowych ;) w przeciwnym razie zainwestował bym więcej czasu i pieniędzy


    @tmf
    Czy opisujesz albo nawiązujesz do obsługi zewnętrznego SRAMu przy xmedze w któreś ze swoich książek?
  • #8 14480658
    BlueDraco
    Specjalista - Mikrokontrolery
    Zdziel napięcie wejściowe dzielnikiem np. 5:6, odniesionym do plusa zasilania uC, a nie do masy. Przy napięciu na wejściu dzielnika -1..1 V i zasilaniu 5V uzyskasz w ten sposób na wejściu ADC zakres ok. 0..1.8 V
  • #9 14480684
    tmf
    VIP Zasłużony dla elektroda
    st4chuu napisał:
    czy w takim razie pomiar różnicowy może zapewnić pomiar +/- 1V?


    Nie, pomiar różnicowy nie umożliwia wyjścia poza zakres napięć tolerowany przez pin IO. Rozwiąż problem tak jak radzi BlueDraco.
    st4chuu napisał:

    @tmf
    Czy opisujesz albo nawiązujesz do obsługi zewnętrznego SRAMu przy xmedze w któreś ze swoich książek?


    A myślisz, że tak ważną rzecz mógłbym pominąć?:) Tak, jest to opisane w "AVR. Układy peryferyjne".

    Dodano po 8 [minuty]:

    BlueDraco napisał:

    Natomiast co do pamięci - nie prościej wybrać właściwy uC z odpowiednio dużą pamięcią? Weźmy np. taki STM32F411 - tani i 128 KiB RAM... ;)


    Jakkolwiek też bym rozważał takie rozwiązanie (o ile 128 kB wystarczy, bo jeśli 32 to za mało...), to co do ceny już można się zastanawiać. Najtańszy wzmiankowany ARM w Farnellu 28zł netto, XMEGA128A1U w Seguro 14 zł brutto, do tego SRAM 6,50zł brutto za 128kB lub 12 zł brutto za 512 kB. Niekoniecznie wygodniejsze, bo jednak jest to zewnętrzna kostka, ale mamy nawet 512 kB i to za cenę prawie dwukrotnie niższą - jeśli ktoś tak dokładnie te złotówki liczy. Także jak widać nie ma jednoznacznych dobrych lub złych rozwiązań. Są dostępne rozwiązania, które możemy optymalizować pod to co dla nas jest ważne.
  • #10 14480751
    BlueDraco
    Specjalista - Mikrokontrolery
    Powierzchnia płytki, jej projekt i montaż dodatkowych elementów też przecież kosztują. Jeżeli potrzebna pojemność RAM jest dostępna w jakimś mikrokontrolerze - to zdecydowanie brałbym jeden taki układ zamiast dwóch (uC + RAM).
  • #11 14480820
    tmf
    VIP Zasłużony dla elektroda
    BlueDraco napisał:
    Powierzchnia płytki, jej projekt i montaż dodatkowych elementów też przecież kosztują. Jeżeli potrzebna pojemność RAM jest dostępna w jakimś mikrokontrolerze - to zdecydowanie brałbym jeden taki układ zamiast dwóch (uC + RAM).


    Owszem, ale nie sądzę aby kosztowały jakieś 12 zł dodatkowo - różnica w cenie pomiędzy omawianymi MCU. Oczywiście też brałbym MCU z odpowiednią ilością pamięci, chyba, że:
    - liczba zbudowanych egzemplarzy jest duża (na każdym tracę/zyskuję prawie 12 zł),
    - znam tylko AVR, nie znam ARM, czas potrzebny na naukę jak zrobić to na ARM w końcu też kosztuje,
    - miałbym narzędzia do AVR, nie miałbym do ARM.
    W tym wątku autor spełnia 2 z 3 wymienionych przeze mnie kryteriów :)
  • #12 14480959
    st4chuu
    Poziom 15  
    dokładnie jak tmf mówi
    za army się zabieram ale zabrać się nie mogę, bo to wydatki pojawiają się ważniejsze, bo to brak czasu na poznawanie innej rodziny.
    Aktualnie mam i narzędzia i wiedzę niezbędną by podziałać coś z AVR'ami.

    Na zakupie samego mikroprocesora stm się nie skończy, potrzeba przecież do tego jakiś programator. Więc różnica przy zakupie znacznie przekroczy te 12 zł.
    Co do Buforu chce żeby był on możliwie największy więc chyba się zdecyduje na rozwiązanie z zewnętrzną pamięcią.
    A to co wydał bym na programator do ARMa jak na razie wolę przeznaczyć na jakąś dobrą książkę ;)
  • #13 14481104
    BlueDraco
    Specjalista - Mikrokontrolery
    A jaką Ty dobrą książkę kupisz za 15 zł?!
  • #14 14481149
    st4chuu
    Poziom 15  
    do stm'a programator kosztuje 15 zł?

    no faktycznie znalazłem jakiś za 20 zł.

    Wcześniej jak się rozglądałem (fakt nie szukałem dogłębnie) nie znalazłem niczego tańszego niż 80-100 zł
  • #15 14481311
    BlueDraco
    Specjalista - Mikrokontrolery
    Programator do STM32 znajdziesz na każdej płytce DISCOVERY lub NUCLEO, które kosztują po 45..80 zł. Możesz również kupić ST/Link luzem w obudowie typu pendrive za < 4 USD.
  • #16 14484563
    gaskoin
    Poziom 38  
    STMy mają wypalony fabrycznie bootloader więc możesz zaprogramować go dowolnymi trzema przewodami. I nie nazywajcie proszę JTAGa programatorem, bo to tylko jedna z jego wielu funkcji.
  • #17 14484596
    BlueDraco
    Specjalista - Mikrokontrolery
    A Ty nie nazywaj interfejsu SWD JTAGiem... :)
  • #18 14605928
    st4chuu
    Poziom 15  
    tmf napisał:
    Ja bym się zastanowił czy np. 32 kB SRAM (tyle max mają wbudowane XMEGA) nie wystarczy. Jeśli to ciągle za mało to można wziąć XMEGA A1U - 2xADC, próbkowanie 2 Msps, do tego zewnętrzny SRAM w konfiguracji 4-portowej (brak innych elementów) lub LPC (mniej połączeń, ale za to zatrzaski) i tyle. Pamięć najlepiej o czasie dostępu <15 ns. Inaczej trzeba waitstaty wstawiać.


    Witam
    Wreszcie doczekałem się wolnej chwili oraz przesyłki.
    Zakupiłem Atxmegę 128 A1U oraz pamięć K6X4008 T1F-UF70 datasheet
    Dokupiłem również 2 książki o xmegach

    Nie mogę znaleźć jednak w nich informacji o podłączeniu tej pamięci w konfiguracji 4 portowej bez zatrzasków.
  • #19 14606005
    tmf
    VIP Zasłużony dla elektroda
    W konfiguracji 4-portowej łączysz po prostu 4 porty XMEGA z pamięcią 1:1 - odpowiednie sygnały tak jak to jest w opisie pinów w nocie katalogowej mikrokontrolera.
  • #20 14606100
    Konto nie istnieje
    Konto nie istnieje  
  • #21 14606330
    st4chuu
    Poziom 15  
    korzystam z modułu HC05,
    Ten bufor ma zebrać próbki a następnie wysłać je. Próbki z rozdzielczością 12 bitów będą zbierane z maksymalną częstotliwością czyli 1-2Msps.
    Dodatkowo będę zbierane wartości wejść cyfrowych czyli kolejne 8 bitów (8 wejśc cyfrowych)
    To wszystko sprawiło, że daruje sobie przesyłanie tego online do komputera a robię bufor. Który zbierze z danego okresu próbki a następnie prześle je do komputera
  • #22 14613085
    Marico
    Poziom 20  
    st4chuu napisał:

    Zakupiłem Atxmegę 128 A1U oraz pamięć K6X4008 T1F-UF70


    Dużo io do podłączenia w tej pamięci, szeregowa po spi 23LCV1024 (128kB) nie wyda?
REKLAMA