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

PIC32MX575F512H - Komunikacja przez SPI z przetwornikiem

cyber90 23 Lis 2014 20:39 1743 5
REKLAMA
  • #1 14159110
    cyber90
    Poziom 15  
    Posty: 234
    Ocena: 8
    Witam serdecznie. Korzystam z uc PIC32MX575F512H, do nawiązania komunikacja z przetwornikiem ADC (zewnętrznym). Poniżej wklejam kod programu.
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    Poniżej komunikacja z ADC:
    PIC32MX575F512H - Komunikacja przez SPI z przetwornikiem

    Link do mikrokontrolera i przetwornika poniżej:
    http://www.microchip.com/wwwproducts/Devices.aspx?product=PIC32MX575F512H

    http://ww1.microchip.com/downloads/en/DeviceDoc/21697F.pdf

    Otrzymuję błędni wyniki. Połączenie elektryczne wydaje się być wporządku. FPBDIV = DIV_1, czyli dla peryferiów zegar jest 80MHz.
  • REKLAMA
  • #2 14160259
    Konto nie istnieje
    Konto nie istnieje  
  • REKLAMA
  • #3 14160709
    archanoid
    Poziom 26  
    Posty: 867
    Pomógł: 76
    Ocena: 251
    Witam . Jeśli dobrze widzę to głównej pętli programu masz zmienną short int dane . Jest to zmienna 16 bitowa bo tak zapewne przyjmuje kompilator . A ty tymczasem próbujesz wcisnąć dane zawarte w niej do rejestru U2TXREG który to jest 8 w porywach 9 bitowy . Może napisz coś więcej jakie błędne dane jak zauważył kolega wyżej .
  • REKLAMA
  • #4 14160827
    cyber90
    Poziom 15  
    Posty: 234
    Ocena: 8
    Poprawiłem kod bo nie do końca rozumiem przesył w trybie SPI 32bit zrobiłem na 8 bitach danych. Przetwornik jest skonfigurowany do pracy na kanale CH0. Zasilany jest napięciem 5V, napięcie ref (5V albo 3,3V) napięcie mierzone jest podawane przez wtórnik napięciowy (wzmacniacz TL081) 2,5V. Wyniki jakie otrzymuję w terminalu to 8034, 8056. Nawet jak podam na CH0 masę wynik się nie zmieniają. Możecie sprawdzić czy funkcja transfer_spi2() jest dobrze napisana? Jak sprawdzam przebiegi na analizatorze, ale tylko to co wysyłam to jest ok. Przetwornik zasilany przez stabilizator LM7805.

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    archanoid napisał:
    Witam . Jeśli dobrze widzę to głównej pętli programu masz zmienną short int dane . Jest to zmienna 16 bitowa bo tak zapewne przyjmuje kompilator . A ty tymczasem próbujesz wcisnąć dane zawarte w niej do rejestru U2TXREG który to jest 8 w porywach 9 bitowy . Może napisz coś więcej jakie błędne dane jak zauważył kolega wyżej .

    Tak wiem zauważyłem to również.
  • REKLAMA
  • #5 14160899
    Konto nie istnieje
    Konto nie istnieje  
  • #6 14160926
    cyber90
    Poziom 15  
    Posty: 234
    Ocena: 8
    Nie stykało coś na płytce. Wróciłem do przesyłania danych 32bitowych teraz to jakoś wygląda i ma sens jeśli chodzi o przebiegi. Pierwszy i drugi przebieg przy napięciu ref 5V. Górny mierzone napięcie 2,5V dolny 0V. Teraz tylko muszę otrzymany 32 bitowy wynik przesunąć przemnożyć przez:
    wynik = wynik & 0x3FFFFFF;
    i mam 25 bitów danych przesuwam bity
    wynik >>12;
    i otrzymane 13 bitów jest moim wynikiem konwersji?
    PIC32MX575F512H - Komunikacja przez SPI z przetwornikiem
    Konwersja się nawet zgadza:
    11111011000 = 2008
    LSB = 2*5V/8192 = 1,22mV
    wynik= 2008*1,22mv = 2,449V

    EDIT:
    Napisałem program ale dalej robię coś nie tak. Na analizatorze wygląda wszystko ok, ale jak chcę przesłać przez UART już coś nie tak. Coś debugowanie mi nie działa, ale już wiem że albo konfiguracja SPI jest źle albo funkcja transfer_spi2().
    Poniżej kod:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    EDIT2:
    Wszystko było ok Debugowanie potwierdziło że jest ok. Terminal odbierał nie w tej kolejności co trzeba. Zamykam temat.
REKLAMA