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 atmega8a bascom - Nieprawidłowe dane z czujnika mlx90614

mis_elektra 17 Paź 2015 11:04 1794 21
REKLAMA
  • #1 15073580
    mis_elektra
    Poziom 8  
    Witam,

    mikroprocesor Atmega 8A odczytuje błędne dane z czujnika temperatury MLX90614 wersja 5V

    Sprawdzone rzeczy:

    -ciągłość połączeń
    -napięcie pomiędzy nóżkami zasilania
    -nowy mikrokontroler
    -definiowanie innych wejść sda i scl w atmedze
    - różne adresy zapisu i odczytu
    zapisu:&B00000000, &H5A
    odczytu:&B00000001 &H5B
    -różne napięcia podciągające

    schematy przesyłam w formie zdjęcia.


    kod:
    Kod: VB.net
    Zaloguj się, aby zobaczyć kod



    AVR atmega8a bascom - Nieprawidłowe dane z czujnika mlx90614

    program pokazuje zawsze to samo napis2=1037.5
    highbyte2=20
    lowbyte= 2225
    nóżki na schemacie to dwie pierwsze

    Błagam Pomocy ;(
  • REKLAMA
  • #2 15073611
    Jaca
    Poziom 31  
    W przedstawionym kodzie nie wysyłasz SA o wartości &H5A i &H5B tylko &H00 i &H01. ;-)

    Powinno być:

    Kod: text
    Zaloguj się, aby zobaczyć kod
  • #3 15074605
    mis_elektra
    Poziom 8  
    - różne adresy zapisu i odczytu
    zapisu:&B00000000, &H5A
    odczytu:&B00000001 &H5B


    przecież napisałem że te adresy też zostały sprawdzone. wersja została wklejona z
    &B00000000 i &B00000001. Po tych wedle data sheet też można odczytać wynik pomiaru.
  • #4 15076497
    Jaca
    Poziom 31  
    Tak naprawdę (według DS) to adres powinien być przesunięty o jeden bit w lewo dając odpowiednio wartości: &HB4 i &HB5. ;-)

    ps. Podaj odczytane przy ww adresach wartości LB i HB oraz jaki powinien być wynik, ponieważ w pierwszym poście podałeś, że LB = 2225 a taka wartość nie zmieści się do zmiennej typu byte.
  • REKLAMA
  • #5 15076681
    mis_elektra
    Poziom 8  
    faktycznie złe wartości napisałem.

    program pokazuje:

    PEC(dodałem do kodu odczyt)=255
    lowbyte2=255
    highbyte=0
    napis2=1037.5

    powinno pokazywać coś koło 32-34 stopni. Problem w tym że nie zależnie gdzie skieruje pokazuje zawsze to samo
  • #6 15076715
    Jaca
    Poziom 31  
    Czy to jest nowy czujnik ? Zrób mu skanowanie SA w całym dostępnym zakresie adresów, przy którym otrzymasz prawidłowe wartości (inne niż 255 i 0). Może w EEPROM'ie ma zapisany inny adres.
  • REKLAMA
  • #7 15076829
    mis_elektra
    Poziom 8  
    tym programem przeskanowałem wszystkie adresy.
    nie pokazał żadnego :/
    co raz bardziej przekonuje się do tego ze czujnik się sfajczył

    Kod: VB.net
    Zaloguj się, aby zobaczyć kod
  • #8 15076900
    Jaca
    Poziom 31  
    Wstaw jakieś inne urządzenie I2C w miejsce czujnika i sprawdź, czy znajdzie SA - wyeliminujesz błąd po stronie procka, softu i połączeń.
  • #9 15076925
    mis_elektra
    Poziom 8  
    Zamówiłem 2-gi czujnik. We wtorek sprawdzę czy się spalił i napisze co i jak.
  • #10 15077028
    Jaca
    Poziom 31  
    1. Spróbuj zwiększyć I2cdelay w skanerze SA (np na 50)
    2. Jeśli używasz pinów TWI - spróbuj zrobić transmisję sprzętową z prędkością zegara 20kHz (czujnik pracuje od 10 do 100kHz)
    3. Sprawdziłeś, czy uC rzeczywiście pracuje z zegarem 1MHz ?
  • #11 15077450
    mis_elektra
    Poziom 8  
    1.sprawdzone
    2.sprawdzone
    3.nie zmieniałem fusebitów a wątpię żeby w 2 nowych Uc było inaczej ustawione niż fabrycznie.Wgrałem program oparty na wewnętrznym kwarcu (zegar na timer0) i pokazuje dobrze a został pisany pod 1Mhz
  • #12 15086142
    mis_elektra
    Poziom 8  
    Witam ponownie, nowy czujnik zamontowany.
    Efekt trochę lepszy bo widzi adresy ale temperatura dalej ponad 1037,5.
    Napisałem od nowa program.
    Sprawdziłem ciągłość połączeń, kwarc oraz adres czy widzi jakiś( widzi 0,1,180 i 181)
    jakieś pomysły ???? może w ustawieniach coś mam źle ustawione ??

    przesyłam zdjęcia płytki w załączniku i ustawienie bascoma.

    kod którym sprawdziłem zegar (dioda migała co 1 sekundę)

    Kod: VB.net
    Zaloguj się, aby zobaczyć kod


    kod sprawdzajacy adresy i odczyt temp:

    Kod: VB.net
    Zaloguj się, aby zobaczyć kod


    przypomne:
    (nowy oznacza że mam dwa nowe .....)
    mikroprocesor jest nowy
    czujnik też
    taktowanie się zgadza
    połączenia sprawdzone


    jeżeli coś potrzebuje ktoś do diagnozy proszę śmiało pytać :)
  • #14 15107874
    mis_elektra
    Poziom 8  
    Witam, dzięki za pomoc ;)
    faktycznie adres był zły ... i czujnik spalony. 2w1;)

    został jeszcze problem z zapisem współczynnika emisyjności.
    odczytuje chyba dobrze. chyba bo zawsze jak coś było nie tak to wysyłał 255 w low byte i high byte a współczynnik jest ustawiony fabrycznie na 1.


    współczynnik jest odczytywany jako 1, nawet po zmianie
    highbyte=255
    lowbyte=255

    tak obliczyłem kod pec:
    AVR atmega8a bascom - Nieprawidłowe dane z czujnika mlx90614
    stronka której użyłem:
    '''''https://ghsi.de/CRC/index.php?Polynom=100000111&Message=1111''''''

    kod programu

    Kod: VB.net
    Zaloguj się, aby zobaczyć kod


    Jest jakaś komenda do liczenia kodu PEC ? znalazłem polecenie crc8 ale używa innego wielomianu.
  • REKLAMA
  • #15 15107986
    Konto nie istnieje
    Konto nie istnieje  
  • #16 15109768
    mis_elektra
    Poziom 8  
    zrobiłem dokładnie tak jak radziłeś i dalej nic.

    mój wielomian to X8+X2+X1+1
    definiuje go w poleceniu crc8 tak :
    Const Crc8_poly = &B100000111 'use a different value
    wartośc jaką chce przesłać to &H1111

    kod programu

    Kod: VB.net
    Zaloguj się, aby zobaczyć kod


    następujące wartości pokazuje program

    lowbyte 255
    higbyte 255
    pec255
    wsp emisyjnosci 1
    pec 235

    Pierwsze co mi się rzuca w oczy to że kod pec wyliczony na tej stronie wychodzi mi 35 a Bascom podaje 235.

    Drugie to że kod pec zwracany po odczycie wsp.emis to 255. oznacza to błąd komunikacji
  • #17 15110937
    Konto nie istnieje
    Konto nie istnieje  
  • #18 15128878
    mis_elektra
    Poziom 8  
    Witam,

    Chęci to może nie ale czasu (dziecko,praca,studia,kurs prawka) i dobrej znajomości technicznych słówek. Zrobiłem jak rodziłeś ale niestety wyników dalej brak..... .

    Kod programu:

    Kod: VB.net
    Zaloguj się, aby zobaczyć kod


    Pierwszy pec wychodzi 72 czyli ok.
    Pec numer dwa wychodzi 22 zakładam że ok jak 1 wyszedł ok
    komunikacja z czujnikiem jest bo pokazuje dobrze temperaturę
    Współczynnik emisyjności nie jest wpisywany bo specjalnie wybrałem bardzo małą wartość żeby była znacząca różnica w odczycie temp a pokazuje ciągle to samo.
    Co do odczytu współczynnika to nie wiem jak sprawdzić czy działa

    jakieś pomysły ? wzorowałem się na kodzie który podesłałeś.
  • #19 15131056
    Konto nie istnieje
    Konto nie istnieje  
  • #20 15132314
    mis_elektra
    Poziom 8  
    Witam, zastosowałem się do twojej rady i zeruję zmienną crc. Nawet wyliczyłem ile pec powinien wychodzić (29). i program wyświetla że obliczył pec 29. więc chyba temat pec można pominąć i problem jest gdzie indziej.

    zdjęcie wyliczonego kodu ''ręcznie''
    AVR atmega8a bascom - Nieprawidłowe dane z czujnika mlx90614

    kod po przeróbce

    Kod: VB.net
    Zaloguj się, aby zobaczyć kod



    PS: Dużo mi pomogłeś jakoś ci się zrewanżuję jak zamknę temat tego czujnika. połączyłem już trochę czujników ale czegoś takiego topornego to ja nigdy nie widziałem .....
  • #21 15132461
    Konto nie istnieje
    Konto nie istnieje  
  • #22 15132562
    mis_elektra
    Poziom 8  
    Co do 1 to doczytałem to w datasheet. Ale komenda którą wysyłam to H24 to binarnie 0010 0100 czyli już jest 1 na odpowiednim miejscu. Co do zerowania to spróbuje bo tego faktycznie nie zauważyłem.

    Dodano po 2 [godziny] 32 [minuty]:

    Działa ;). Później wkleję cały kod obsługi tego czujnika.
REKLAMA