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

I2C-TWI- podstawa. Wstępny opis rejestrów. Przykładowy kod.

Cersunited 02 Cze 2010 23:29 3673 14
REKLAMA
  • #1 8148182
    Cersunited
    Poziom 16  
    Witam
    Od pewnego czasu zagłębiam się w urządzenia peryferyjne Atmegi8 i 128. Mianowicie chodziło by mi o użycie TWI(I2C) Zawsze wszystki operacje jak komparatory ADC czy transmisje wolałem przeprowadzać programowo lub za pośrednictwem innych układów(np przetw. ADC) nie licząc sprzętowego PWM itp
    Pozostała mi jak narazie właśnie tylko TWI. Jednak szukałem sporo tematów ale nigdzie nie ma takiego banalnego programu nadania odbioru by tylko pojąć. Przeglądałem Datasheeta i chciałbym po prostu by ktoś pokazał przykład takiego banalnego programu np wysłanie liczby i wyświetlenie binarnie na jakimś porcie w drugiej atmedze. Resztę poćwiczę już sam z Datasheetem. Najlepiej dla At8 bo mam ich sporo ale jak bedzie dla 16 lub 128 to też może być. Chodzi mi o taki też wstępny opis rejestrów itp.
    Pozdrawiam
  • REKLAMA
  • #2 8148196
    tadzik85
    Poziom 38  
    Wszystko w dokumentacji.NAWET GOTOWE KODY FUNKCJI. nic tylko przekopiować i jazda. Zacznij najpierw za pomocą TWI skomunikować się z jakimś RTC czy eepromem. Dopiero po tym możesz zabrać się za implementacje slava.
  • #3 8148251
    Cersunited
    Poziom 16  
    Dzieki za szybką odpowiedź.
    Ok zrobie jak radzi kolega na początek sprubuje skomunikować sie np z DS1802 mam ich kilka i chyba sa sterowane za pomocą przycisków i właśnie TWI. Właśnie oglądam Datasheeta i próbuje pojąc funkcje poszególnych bitów w rejestrach. Jednak w dokumentacji o TWI jest sporo i chciałbym wiedzieć na czym sie na początek głównie skupić. Najlepiej uczę sie na przykładach więc fajnie byłoby gdyby ktoś pokazał przykład taki
  • REKLAMA
  • #4 8148264
    tadzik85
    Poziom 38  
    Ale pewnie ze jest sporo i sie ciesz z tego. Tam masz podane kodu i w asm i w C. Dokładnie opisane co i po czym jest wysyłane. Kody zwracane. Rejestrów nie ma wiele więc można to szybko łyknąć.
  • REKLAMA
  • #5 8148289
    Cersunited
    Poziom 16  
    Rozumiem że chodzi koledze o te przykłady ze str 177? o ile ma kolega tam gdzieś datasheeta pod reka :) Jest tam podane po kolei co i jak tak?
    Rozumiem to że dane ladujemy do TWDR i ustsatwiamy bit TWINT w TWCR by rozpoczać transmisje. I otrzymujemy potwierdzenie ACK o zakonczemniu tak? A reszta?

    Dodano po 3 [minuty]:

    np co to jest SLA_W? który wpisujemy do TWDR?
  • Pomocny post
    #6 8148302
    tadzik85
    Poziom 38  
    Sprawdź najpierw czym jest ACK/NACK. Weż jeszcze zobacz w datasheet EEPROMA jakiegoś np. 24c01.

    Link
    tu jest plik Opisujący komunikacje z EEpromem po polsku. A poradziłbyś sobie analizując te kody w C obsługi Startu stopu nadawania i odbioru z ack lub z nack

    Dodano po 3 [minuty]:

    SLA_W to adres slave do zapisu
  • #7 8148339
    Cersunited
    Poziom 16  
    No własnie mi chodzi o C a tego nie napisałem:) dziekuje kloledze temat z zegarem napewno sie przyda jednak opis z datasheetu co robić pokolei jest dla mnie czytelniejszy delatego zależało mi na takim prostym podstawowym kodzie. ACK czyli potwierdzenie tak? Czyli w ten SLA-W wpisujemy adres urządzenia tak? np dla TDA7313 to tak że ----> START --> TWI status jak rózny od ustawien START to błąd jak nie to --> wpisujemy adres urzadzenia--> czekamy na flageTWIN czyli ten ACK czyli potwierdzenie tak? i potem tak samo tylko że z danymi i też potwierdzenie

    Dodano po 2 [minuty]:

    i oczywiście podajemy wartośc (DATA)
    ok to jeżeli tak to nadanie powinno sie udać tylko nie ma takiego przykładu dla odbioruy właśnie:/ a zależy mi na transmisji obustronnej po TWI miedzy atmegami
  • #8 8148369
    tadzik85
    Poziom 38  
    status narazie zostaw w spokoju

    zapis do układu:
    1. start
    2. wysylasz adres urządzenia do zapisu
    3. wysylasz adres komórki
    4. wysylasz dane
    ...
    5. stop

    odczyt z układu:
    1. start
    2. wysyłasz adres układu do zapisu
    3. adres komórki
    4 ponowny start
    5. odczytujesz wysyłając ACK
    ostatni bajt odczytujesz z nack.
    6. stop

    w tym wszystkim masz tylko 4 różne funkcje, w których czekasz jedynie na odpowiednie flagi. datasheet wyjaśni kto re i kiedy.

    Status wykorzystujesz głownie w przypadku gdy na szynie jest więcej niż jeden master, lub tworzysz własny układ slave.

    Dodano po 3 [minuty]:

    W jednym z PDFów z tamtego tematu było dokładnie napisane co i kiedy wysyła ACK. Proponuje taką kollejność rozwoju projektu:

    1. Komunikacja np. z RTC.
    2. Utworzenie własnego układu typu slave na innej Medze
    3. Zabawa multimaster (2 procki mają dostęp do tego samego np. rtc).
    4. do pkt 3 dodałbym komunikacje między atmegami.
  • #9 8148387
    Cersunited
    Poziom 16  
    Adres urządzenia i dane to ok rozumiem. A mógłby kolega jaśniej z tym numerem komórki?
    Czyli TWINT Flalag na razie pomninać tak? Tylko w takiej kolejniosci jak kolega napisał nadawanie?
    odczytu nie zabardzo rozumiem.

    Też tak zrobie mysle że zamiast
    RTC taki DS może być? Myślałem poprostu że pomiedzy Atmegami bedzie najłatwiej
    Chodzi mi o pierwszy układ jak już raz uruchomię to potem załapie
  • #10 8149294
    tadzik85
    Poziom 38  
    Weź chłopie zobacz do dokumentacji jakiegokolwiek układu na I2C. tam masz rozrysowaną całą transmisję. Wszystko jest oznaczone. TWIINT zapewne będziesz wykorzystywał. musisz czekać aż twi wyśle cały bajt
  • #11 8152406
    Nawigator
    Poziom 33  
    A w notach aplikacyjnych Atmela na ich stronie też nic nie ma?

    N.
  • #12 8152699
    Cersunited
    Poziom 16  
    no to co pisze o nadawaniu jest wlasnie z Atmela dla atmegi8. Po dłuższej analizie tego i PCF'a oraz PGA mniejwięcej rozumiem. Jednak wyjdzie w prtaniu. Ale jak z odbiorem to gorzej
  • REKLAMA
  • Pomocny post
    #13 8155981
    rdyla
    Poziom 12  
    a ja koledze doradzę stronę: http://homepage.hispeed.ch/peterfleury/index.html Masz tam gotową bibliotekę do TWI w języku C. W 100% działa, sam z niej kieeedyyś korzystałem... Ale i tak koledze radę najpierw zaznajomić się z dokumentacją TWI(I2C) Pozdro...
  • #14 8156433
    Cersunited
    Poziom 16  
    konkretna odpowiedź :)
    dziękuję bardzo. Jak ktoś ma jeszcze jakieś edukujące linki bądź proste kody z objaśnieniami to mile widziane
REKLAMA