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.

Programowanie LPC2378 w LabVIEW - komunikacja z zew. ADC po SPI

matmix1 03 Kwi 2012 22:53 1931 7
  • #1 03 Kwi 2012 22:53
    matmix1
    Poziom 10  

    Witam,

    aktualnie konstruuję pół-przenośne urządzenie do pomiaru drgań. Pół-przenośne, bo płytka z mikrokontrolerem LPC2378 programowanym w LabVIEW jest zasilana z usb. W projekcie używam akcelerometru na EVAL-ADXL325Z, układu kondycjonującego z przetwornikiem ADC MCP3204 - 3 kanały. Jest to 12-bitowy przetwornik wykorzystujący interfejs SPI do komunikacji z mikrokontrolerem. W nocie katalogowej do MCP3204 znalazłem informacje na temat sposobu komunikacji. Stworzyłem także wstępny program, jednak nie jestem pewien co do jego poprawności. Prosiłbym o porady i uwagi co do tego rozwiązania.

    Programowanie LPC2378 w LabVIEW - komunikacja z zew. ADC po SPI Programowanie LPC2378 w LabVIEW - komunikacja z zew. ADC po SPI Programowanie LPC2378 w LabVIEW - komunikacja z zew. ADC po SPI

    0 7
  • #2 06 Kwi 2012 11:10
    sorex86
    Poziom 15  

    Mam pytanie, bo ja tego pojac nie potrafie. Dlaczego w LabVIEW?
    MCP3204 to jest bardzo popularny uklad. Znajdz sobie biblioteke w C i przeanalizuj. To co stworzyles powinno dzialac, bo pomysl ze struktura klatki filmowej dla komunikacji szeregowej to dobre rozwiazanie ;) Te bloki opozniajace to sa w s czy ms? Bo 1s w swiecie uC to wiecznosc...

    0
  • #3 06 Kwi 2012 16:46
    matmix1
    Poziom 10  

    Dziękuję za zainteresowanie tematem. Jeśli chodzi o wybór środowiska programistycznego - LabVIEW ma moduł: Embedded Module for ARM Microcontrollers dedykowany dla płytki ewaluacyjnej, na której "siedzi" LPC2378. Druga sprawa to to, że jakoś bardziej podchodzi mi LabVIEW niż C ;)

    Cytat:
    Te bloki opozniajace to sa w s czy ms?


    Do bloków przypinam wartość w ms.

    Jestem w trakcie przeróbki tego programu, bo analizując inne rozwiązania znalazłem kilka błędów.

    Czy Chip Select (CS) będzie lepiej zrealizować na osobnym, sterowanym "manualnie" wyjściu cyfrowym ? Chodzi mi o to, że gdy chcę rozpocząć odbiór danych z ADC muszę przejść z wysokiego na niski stan na CS. Rozumiem, że dla 3 kanałów powtarzać się będzie taka sekwencja H L (odbiór 1 ch.) H L(odbiór 2 ch.) H L (odbiór 3 ch.)? (H - stan wysoki, L - niski).

    0
  • #4 07 Kwi 2012 00:30
    sorex86
    Poziom 15  

    Wlasnie o tym mowie... Uzywajac LabVIEW tracisz pewien kontakt z klasycznym programowaniem. LabVIEW to potezne narzedzie,. mozna by powiedziec, ze zbyt.. Z armaty strzelasz do muchy :) No ale jak kto woli. Twoj wybor. Nawet jezeli uda Ci sie dokonac transmisji i program bedzie dzialal. To prawdopodobnie nie bedziesz wiedzial, dlaczego i jak to dziala. Czy to zaleta? W tym przypadku watpie...

    W skrocie: masz piny
    "Glowny bloczek"
    1 MOSI
    2 MISO
    3 SCK

    ktore sa wspolne dla wszystkich urzadzen podpietych do SPI
    ---
    oraz do kazdego kolejnego urzadzenia wystawiasz osobny pin:
    4 CS1
    5 CS2
    .....
    n CSn

    korzystajac z SPI mozesz rownoczesnie nadawac jak i odbierac...Powinnes wiedziec, ze SPI pozwala komunikowac sie kilku urzadzeniom z uC wykorzystujac jego 3 piny. Dlatego 4,5...n pin CS powinien byc nie zalezny od Twojego "glownego bloczka". Dlaczego? Poniewaz mozesz go chciec uzyc dla kilku roznych ADC,. Wtedy do zrealizowania transmisji bedzie sluzyl "glowny bloczek", a za pomoca innych wyjsc (pin 4CS1, pin 5CS2... CSn) bedziesz informowal, z ktorym ADC rozmawiasz w tej chwili. CS(chip select) jak sama nazwa wskazuje sluzy do wyboru, z ktorym ADC w trakcie transmisji rozmawiasz po SPI. Dlatego: tak, na lepiej jak CS bedzie osobno zarealizowany. Jezeli masz tylko jeden czujnik to mozesz to zrobic w jednym bloku, ale co jezeli bedziesz musial dolozyc kolejny, uzyc kilku CS?

    Czyli tworzysz funkcje "glowny bloczek" (jeden blok, formularz), ktora sluzy do wymiany danych przy uzyciu pinow MOSI,MISO,SCK, a nastepnie za pomoca osobnego wyjscia(indicator) decydujesz o stanie pinu CS,.. CSn. Czy jest L czy jest H.

    CS - chip select...
    MOSI master output slave input...

    Poczytaj o SPI zanim sie bierzesz za pisanie procedury do jego obslugi...

    Tak z ciekawosci na jakim kierunku/wydziale/uczelni zmuszaja Cie do uzywania LabVIEW do programowania ARMow? Ja obstawiam, ze cos pokrewnego z automatyka ;p Bo to glownie oni maja myslenie w stylu, ze lepij kupic PLC za gruba kase zamiast wsadzic procek za 4 zl :D

    Moj post moze brzmiec troche jak belkot, z gory przepraszam pozno jest.
    Jednak z tego co widze juz rozumisz o co w tym wszystkim chodzi, napewno sobie poradzisz dalej sam :)

    0
  • #5 07 Kwi 2012 09:14
    matmix1
    Poziom 10  

    Dziękuję szczegółową i wyczerpującą odpowiedź. Utwierdziłeś mnie w tym co wcześniej przeczytałem, jednak nie byłem pewien czy tak właśnie jest z tym CS'em;)

    Cytat:
    Uzywajac LabVIEW tracisz pewien kontakt z klasycznym programowaniem. LabVIEW to potezne narzedzie,. mozna by powiedziec, ze zbyt.. Z armaty strzelasz do muchy :) No ale jak kto woli. Twoj wybor. Nawet jezeli uda Ci sie dokonac transmisji i program bedzie dzialal. To prawdopodobnie nie bedziesz wiedzial, dlaczego i jak to dziala.


    Masz rację, LabVIEW to narzędzie o dużo większych możliwościach. Mimo wszystko, spróbuję w nim programować. Jeśli jednak zostanę zmuszony do zmiany, wtedy przesiądę się na jakąś Atmegę i kompilator w C.

    Cytat:
    Tak z ciekawosci na jakim kierunku/wydziale/uczelni zmuszaja Cie do uzywania LabVIEW do programowania ARMow? Ja obstawiam, ze cos pokrewnego z automatyka ;p Bo to glownie oni maja myslenie w stylu, ze lepij kupic PLC za gruba kase zamiast wsadzic procek za 4 zl


    Pol. Śl. - automatyka po angielsku ;) Czyli zgadłeś :P.

    Poniżej wrzucam poprawione rozwiązanie z osobnym CS'em.

    Programowanie LPC2378 w LabVIEW - komunikacja z zew. ADC po SPI

    W obrębie odbioru danych z jednego kanału, zawsze wysyłam jeden bajt zgodnie z wytycznymi w nocie dla MCP3204, ale nie czytam nic. Następnie wysyłam kolejny bajt i czytam 2 bajty. Pierwszy przeczytany posiada 3 nieznane bity i zero przed MSB wartości z przetwornika. Dlatego przesuwam go o 12 bitów w lewo, aby pozbyć się nieznanych wartości i obracam znowu o 12 tak aby uzyskać sekwencję 0 0 0 0 B11 B10 B9 B8 0 0 0 0 0 0 0 0 . Na końcu dodaję do niego drugi bajt o sekwencji 0 0 0 0 0 0 0 0 B7 B6 B5 B4 B3 B2 B1 B0. Wydaje mi się, że rozwiązanie jest poprawne.

    0
  • #6 07 Kwi 2012 11:35
    gaskoin
    Poziom 38  

    Powinieneś potworzyć jakieś podbloki a nie ciągnąć taki makaron w tych VI :)

    0
  • #7 07 Kwi 2012 12:26
    matmix1
    Poziom 10  

    Cytat:
    Powinieneś potworzyć jakieś podbloki a nie ciągnąć taki makaron w tych VI


    To zrozumiałe, jednak zrobię to podczas porządkowania kodu. A tutaj chciałem przedstawić całość (3 kanały - 3 osie akcelerometru) do Waszej oceny.

    0
  • #8 07 Kwi 2012 23:34
    sorex86
    Poziom 15  

    LabView, Automatyka + Polsl ... i wszystko jasne:D Jestem lepszy niz Rutkowski :P

    0