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.

C18, PIC18F4550 - komunikacja I2C z czujnikiem temp DS7505

ppawel12 15 Sie 2012 19:01 1464 3
  • #1 15 Sie 2012 19:01
    ppawel12
    Poziom 16  

    Witam,

    Pisze kod aby połączyć się z czujnikiem temperatury po I2C. Napisałem następujący kod do testów w symulatorze.

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Parametry do wgrywania do DS7505 są dowolne chodzi o to by zaobserwować czy kod działa. Po wpisaniu danych do buffora SSPBUF flaga pustego bufora ciągle jest ustawiona :/ BF = 0.
    Oznacza to, że program nie widzi danych :/ Wszystkie testy przeprowadzam w symulatorze obserwując rejestry narazie nie mam programatora z debugerem :( Można napisać kod do obsługi I2C systemowo (krok po kroku). Chcę wykorzystać peryferie do komunikacji po I2C.

    Narazie ten kod nie działa problem w tym że nie wiem gdzie jest błąd, sam nie jestem w stanie znaleźć błędu. Bez tego nie mam co myśleć by pisac kod do komunikacji z DS7505.

    pozdrawiam ppawel

    0 3
  • #2 15 Sie 2012 22:21
    Szymon Tarnowski
    Poziom 27  

    Moim zdaniem tylko debuger albo oscyloskop pozwoli rozwiązać Twój kłopot. Osobiście mam wrażenie że używanie sprzętowego modułu I2C w PIC to kopanie z koniem. Na jednym procesorze kod działa idealnie a na innym modelu z tej samej podrodziny nie (mimo że jest napisane że są 100% kompatybilne). U mnie się to skończyło napisaniem softwarowej obsługi I2C i skończyły się problemy że na produkcji ktoś wziął niby zamiennik. Jeśli jednak chcesz się upierać przy sprzętowym I2C to upewnij się że:
    1. funkcja czekania na zakończenie operacji zwraca (a nie wisi w nieskończoność), bo jakiś mały glitch jest w stanie zawiesić program.
    2. sprawdzaj bit kolizji na magistrali, z nieznanej mi przyczyny czasem moduł zatrzaskiwał się na błędzie kolizji multimaster (mimo że miałem tylko eeprom i PICa).

    0
  • #3 16 Sie 2012 19:39
    ppawel12
    Poziom 16  

    Czyli lepiej bawić się z napisaniem funkcji do komunikacji po I2C ? też wolałem tak iść ale pomyślałem że jak jest moduł do I2C to go wykorzystam.
    Jak bym robił funkcję do komunikacji po I2C to też muszę robić podciągnięcia linii SCL i SDA do Vcc przez rezystory.

    0
  • #4 16 Sie 2012 22:13
    Szymon Tarnowski
    Poziom 27  

    ppawel12 napisał:
    Jak bym robił funkcję do komunikacji po I2C to też muszę robić podciągnięcia linii SCL i SDA do Vcc przez rezystory.
    Tak, zawsze trzeba dawać, przy czym jeśli ręcznie ruszasz liniami to przy SCL można zrezygnować i sterować push-pull.

    0