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

[AVR][C]MAX31855 pomiar temperatury termopary przez SPI - Bity 31-16

sorex86 16 Lip 2012 19:54 3190 4
REKLAMA
  • #1 11112808
    sorex86
    Poziom 15  
    Witam,


    Proboje odpalic scalaka mx31855.
    Datasheet : http://www.adafruit.com/datasheets/MAX31855.pdf strona 10

    Udalo mi sie:
    1) odczytac 1 bit, termopara rozlaczona/podlaczona 0/1 DZIALA
    2) Odczytanie 15:4, temperatura ukladu DZIALA ~ 25C, po dotkniecu palcem 33-35C.
    3) bity 31-16 i tu jest problem... NIEDZIALA

    Proboje odczytac 31-16 bit:


    Wg datasheet najwieksza wartosc 31-18 bit to:

    0110 0100 0000 00 1600C czyli wartosc 6400
    a ja mam ...
    01111110 0001010 4034 C czyli wartosc 16138

    jakby to powiedziec;D strasznie cieplo w pokoju ;X

    Bit odpowiadajacy za bledy mam na 0.
    Bit 17 i 16 = 00 czyli pod wzgledem fizycznym(hardwear) chyba jest dobrze ?


    Prosty kod:


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


    Kombinowalem tez tak:

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


    W zaleznosci, o ktora pare bitow mi chodzilo. Zawsze najstrasze
    bity 31-23 c: 1111|1110
    bit 22-16: 1101|0000


    MAIN


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



    Ktos ma jakis pomysl dlaczego najstrasze bity maja taka kosmiczna wartosc? Skoro nie ma zadnego bledu wg bitow bledow.
  • REKLAMA
  • #2 11113458
    LordBlick
    VIP Zasłużony dla elektroda
    1. Pierwszy bit to D31 w/g noty.
    2. Dlaczego w kodzie wyżej odczytujesz tylko 2 bajty, podczas gdy całość ma 4 ? Zwracana wartość powinna być typu uint32_t ;)
    Tak w ogóle strzępki kodu nie są podstawą do oceny całości.
    BTW. Sample ? ;)
  • REKLAMA
  • #3 11113825
    sorex86
    Poziom 15  
    Nie, ebay. Prosto z USA.. tylko zlacze ARK nie wytrzymalo trudow podrozy razem ze sciezka odpadlo. Jednak jak to mowia... troche szpachli i wszystko da rade naprawic :D

    Eee.. czemu? Juz mowie. Poprostu mam kontrole nad tym co robie. Dopiero raczkuje w C. Jak sie uda, w dwoch osobnych funkcjach odczytac wszystko poprawnie to dopiero wtedy wezne sie za sklejanie 14+12+3bitow_bledu. Poki co robie troche metoda silowa,

    Zalezy mi na metode dzialnia. Czy dobrze przesuwam :D
    Zakladajac, ze czytam po 2x8 bitow.

    Dla bity: 31-18
    Przesuwam w lewo o 6, drugie w prawo o 2, a nastepnie lacze.
    Wynik * 100 / 4.

    Dla bity: 15-4
    Przesuwam w lewo o 4, a drugie w prawo o 4, a nastepnie lacze.
    Wynik * 100 / 16.
  • REKLAMA
  • #4 11113961
    LordBlick
    VIP Zasłużony dla elektroda
    Najpierw odczytaj wszystkie 4 bajty, a dopiero potem przetwarzaj to na sensowny wynik. Nie zapomnij o wyzerowaniu bitu DORD przy konfiguracji, której nie ujawniłeś do tej pory.
  • #5 11114070
    sorex86
    Poziom 15  
    Narazie wyglada to tak:


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


    Teraz mam taki problem, ze jezeli chce wysylac dane z RS232 to mam przeklamane na SPI w momencie otwarcia transmisji. (Wszystkie urzadzenia na SPI Nokia5510/Max31855 pokazuje bledny wyniki, natomiast ADC i inne podzespoly dzialaja poprawnie ). Gdy RS232 jest wylaczony wszystko dziala. Uzywam standardowej biblioteki Pana Mirka.

    Uzywam plytki EvB 4.3. Identycznie jest gdy otworze port do programowania mikroprocesora. Hm,. Programuje poprzez USB FT232.

    Testowałem takze program na innej plytce ze zwyklym RS232... Problem dotyczy bitow 31-16. Otwarcie transmisji po RS powoduje, ze z 25,50C robi sie np 30,0. Natomiast co ciekawe bity odpowiadajace ze temperature scalaka pokazuje poprawna temperature.


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