Elektroda.pl
Elektroda.pl
X
Elektroda.pl
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

LPC1343 - komunikacja i2c z rtc ds1307

17 Paź 2015 13:53 1098 8
  • Poziom 4  
    Od niedawna posiadam moduł oparty na procesorze lpc1343 nauczyłem się m. in. uruchamiać komunikacji prze COM, mrugać diodą. Mam także moduł zegara czasu rzeczywistego ds1307, komunikacja po i2c to dla mnie nowość. W przykładach lpcxpresso znalazłem taki kod i2c
    Kod: c
    Zaloguj się, aby zobaczyć kod

    niewiele z niego rozumiem :(
    W Internecie znalazłem natomiast kod dla lpc1114 do komunikacji i2c z pcf8594
    https://github.com/tacowars/LPC1114-sandbox/blob/master/drivers/i2c/src/i2c_main.c
    jest bardziej zrozumiały z obszernym komentarzem lecz podczas kompilacji jest error już na lini if ( I2CInit( (uint32_t)I2CMASTER ) == FALSE )

    Proszę o przykład i2c najlepiej do ds1307 :)
  • Poziom 23  
    a-kendzio napisał:
    jest bardziej zrozumiały z obszernym komentarzem lecz podczas kompilacji jest error już na lini if ( I2CInit( (uint32_t)I2CMASTER ) == FALSE )

    pokaż log kompilacji, bez niego trudno cokolwiek wywnioskować.

    Kod który pokazałeś to LPCOpen, biblioteka której założeniem jest pisanie jednolitego kodu bez względu na jaki uC piszesz.
    W linku który wskazałeś to kod używający ala SPL, biblioteki driver'ów. Duże tego w sieci lecz biblioteki nie wspierane. Kod powinien działać na LPC1343 po malutkich przeróbkach. Jeżeli nie chcesz pisać na rejestrach to warto poznać LPCOpen choć zaznaczam, że sam nie znam dobrze LPCOpen. Lubię wiedzieć co i jak, więc wolę rejestry :)
    Aktualnie przebywam poza domem i specjalnie pomóc nie mogę...
  • Poziom 13  
    @a-kendzio: wiesz w jaki sposób przebiega komunikacja I2C ?
    Masz schemat Twojego modułu z DS1307 ?
  • Poziom 4  
    Staram się zrozumieieć na podstawie dokumentacji i opisu w niej zawartej i2c lecz niezbyt dobrze rozumiem. Muszę poszukać nt. po polsku :)
    Nie ma schematu, wklejam zdjęcia moduliku
    LPC1343 - komunikacja i2c z rtc ds1307 LPC1343 - komunikacja i2c z rtc ds1307
  • Pomocny post
    Poziom 13  
    Wpisz w googlach tiny rtc i2c znajdziesz schemat modułu :)
    Krótko o I2C: ramki są 8 bitowe, chcąc zapisać cokolwiek do slavea trzeba w pierwszej ramce wysłać jego adres i następnie adres pamięci / rejestru do którego bedzie zapis, po czym wysyła się daną lub dane. Jeśli chodzi o odczyt ze slavea trzeba wysłać w pierwszej ramce jego adres i nastepnie adres pamięci / rejestru z którego będzie nastęował odczyt, później ponownie adres slavea zwiększony o 1 i można czytać dane.

    Zapis do slavea
    Kod: c
    Zaloguj się, aby zobaczyć kod

    Odczyt ze slavea
    Kod: c
    Zaloguj się, aby zobaczyć kod
  • Poziom 4  
    Mój program przedstawiam poniżej, widać że komunikacja i2c działa bo 2CSlaveBuffer[0] zmienia się co sekundę lecz dane otrzyman są przekłamane. To znaczy liczy do ileś tam i następnie nie jest zgodne z systemem dziesięynym, zliczy do zera i zwiększa się normalnie do iluś tam. Co mam nie tak ?
    Kod: c
    Zaloguj się, aby zobaczyć kod


    Kod: text
    Zaloguj się, aby zobaczyć kod

    Aha, jeszcze coś przy odczycie mam I2CWriteLength = 2 zamiast I2CWriteLength = 3. Kiedy miałem 3 otrzymywałem same zera - nie rozumiem przecież zgodnie z tym co pisałeś wysyłam adres 0xD0, adres poczatku pamięci 0, i ponownie adres 0xD0 + 1 czyli 3 ośmiobitowe dane.
  • Pomocny post
    Poziom 13  
    Czytałeś datasheet ?
    Pisze jak byk, że dane zapisywane są w kodzie BCD !

    Oto funkcje do konwersji
    Kod: c
    Zaloguj się, aby zobaczyć kod
  • Poziom 4  
    Dziękuje. Komunikacja działa, odczytuję i zapisuję czas oraz date.
    Problem rozwiązany.