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.

ATmega16 - magistrala TWI + LM92

elktromonter_bohdan 04 Sty 2013 10:00 1422 5
  • #1 04 Sty 2013 10:00
    elktromonter_bohdan
    Poziom 2  

    Witam!

    Przygotowując projekt z elektroniki biomedycznej (termometr lekarski) natrafiłem na problem z komunikacją z cyfrowym czujnikiem temperatury (LM92).
    Po zainicjalizowaniu magistrali i wysłaniu adresu urządzenia slave (00) na wyświetlaczu pojawiają sie same zera. Sama konwersja jest poprawna gdyż po wypełnieniu tablicy czuj na sztywno dowolna wartością na wyświetlaczu wyskakuje poprawna wartość. Dołączam kod:

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Biblioteka TWI:
    Kod: c
    Zaloguj się, aby zobaczyć kod


    Kod: c
    Zaloguj się, aby zobaczyć kod

    Z góry dziękuje za pomoc :)

    0 5
  • #2 05 Sty 2013 14:12
    elktromonter_bohdan
    Poziom 2  

    Z tego co widze w nocie katalogowej LM92 mamy:
    ATmega16 - magistrala TWI + LM92

    Stąd linijka :
    uint8_t adr=0x0; gdyż chcę wyłącznie odczytywać dane z mojego sensora więc pierwsze 3 bity powinny mieć wartośc 0 (Read Only). Chyba że źle to rozumiem co także jest możliwe :cry:

    0
  • #3 05 Sty 2013 16:39
    zumek
    Poziom 39  

    Kod: c
    Zaloguj się, aby zobaczyć kod


    A szanowny kolega, to gdzie te 0x90 znalazł :?: :D

    ATmega16 - magistrala TWI + LM92

    0
  • #4 05 Sty 2013 18:14
    elktromonter_bohdan
    Poziom 2  

    W nocie katalogowej. Wydaje mi się że jest dobrze ale pewności nie mam :)

    Oto jej fragment:
    ATmega16 - magistrala TWI + LM92

    Nadmienie tylko że analizując wykresy czasowe wydaje mi się że zaraz po tym 7 bitowym adresie slave wysyłany jest jeszcze bit R/!W i stąd wartość 90 w hex. Ale testowałem też wersje z adresem 7 bitowym (0x48) i efekt jest ten sam: same zera na wyświetlaczu.

    Sam już nie wiem czy problem leży w błędnie napisanej bibliotece do obsługi TWI czy w tym że z czujnika pobieram same śmieci w wyniku jakichś zakłóceń.

    0
  • Pomocny post
    #5 05 Sty 2013 19:30
    zumek
    Poziom 39  

    elktromonter_bohdan napisał:
    W nocie katalogowej...

    Upsss, mea culpa - zaglądałem do noty niewłaściwego LM-a(LM90) :oops:

    Czy linie adresowe LM-a, masz podłączone do GND :?:

    Nie przyglądałem się dokładnie Twoim funkcjom TWI, ale na pierwszy rzut oka widać, że nie przejawiasz zainteresowania rejestrem TWSR, a z jego zawartości, można naprawdę dużo się dowiedzieć. :D
    Polecam zapoznanie się z plikiem <util/twi.h>.

    PS
    Nie widzę również, byś ustawiał prędkość magistrali - zapis w rejestrze TWBR.
    Np. dla 100kHz
    Kod: c
    Zaloguj się, aby zobaczyć kod

    0
  • #6 06 Sty 2013 00:48
    elktromonter_bohdan
    Poziom 2  

    Dodałem wpis który Twoim zdaniem powinien się znaleźć.
    Teraz mój plik twi.c wygląda tak:

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Plik nagłówkowy twi.h:


    Kod: c
    Zaloguj się, aby zobaczyć kod


    A efekt ten sam jak na załączonym obrazku:
    ATmega16 - magistrala TWI + LM92

    A co z tą biblioteką <util/twi.h>?
    Mam się tylko z nią zapoznać czy od razu ją dodać?? I jak ustawić ten rejestr TWSR i do czego służy? :) Z góry dziękuję za pomoc bo dopiero się wszystkiego uczę :?: .

    Dodano po 51 [minuty]:

    Aaaaa no izapomniałem dodac że oczywiście oba wyprowadzenia adresowe LM-a A0 i A1 zwarłem ze sobą i podłączyłem do GND. :D

    0