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

Xmega128a3u - odczyty z MAX31865 są 2x mniejsze niż oczekiwane

paluszasty 02 Sie 2017 13:08 1281 2
REKLAMA
  • #1 16621394
    paluszasty
    Poziom 25  
    Witam serdecznie kolegów.

    Mam problem z odczytem danych z MAX31865.
    Tu jest nota katalogowe:
    https://datasheets.maximintegrated.com/en/ds/MAX31865.pdf
    Jest to przetwornik A/D dedykowany do pomiaru temperatury za pomocą czujników rezystencyjnych (Pt100, Pt1000)

    Zachowanie programu jest bardzo dziwne ponieważ odczytywane dane (zarówno LSB jak i MSB) są 2x mniejsze niż te które powinny być odczytane. Odczyt za pomocą oscyloskopy i dekodowania magistrali jest ok.
    Natomiast jeśli wyrzucę LSB bądź MSB na ekran to wynik jest 2x mniejszy.


    Kod zamieszczam poniżej. Proszę nie krytykować użycia floatów, one będą potrzebne później do przeliczania temperatury. Możliwe jest ich ominięcie jednakże wydłuża i zwiększa to program.

    A dodam jeszcze ze jeśli "na sztywno" przypiszę wartość MSB lub LSB to zwracana jest poprawnie. Na początku myślałem że to problem z rzutowaniem zmiennych ale jednak tak nie jest.

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



    Dodatkowo kawałek kodu związany z konfiguracją SPI i samej komunikacji:

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


    Oraz kawałek pliku z definicjami:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod



    Czy ktoś ma pomysł co tu może nie grać? Może jest to jakiś prostu błąd któego nie zauważyłem (z przegrzania??)

    Pozdrawiam
  • REKLAMA
  • #2 16622610
    Konto nie istnieje
    Konto nie istnieje  
  • #3 16622846
    paluszasty
    Poziom 25  
    Tak, SPI ustawione jest na tryb 3:

    USARTE1.CTRLC=USART_CMODE_MSPI_gc | 2; ; //Tryb SPI tryb 3
    (analogicznie jak w kodzie obsługi wyświetlacza ST7565R który też wykorzystuje tryb 3, a jego obsługę opisał kolega TMF w swojej bardzo dobrej książce)

    Problem leżał w tej linii:

    PORTE.OUTSET=PIN5_bm | PIN7_bm | PIN4_bm;

    Jest ona zbędna, natomiast nie do końca rozumiem czemu ta linia przeszkadzała.
REKLAMA