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

Jeden układ PCF8583 i dwa procesory do odczytu - możliwe??

splawik00 12 Kwi 2012 14:58 2132 15
  • #1 12 Kwi 2012 14:58
    splawik00
    Poziom 23  

    Witam. Czy da się do jednego układu PCF8583 podłączyć dwa procesory; Atmega8 i ATtiny2313?? Jeżeli tak to jak, bo nie mam pojęcia. Proszę o pomoc bo nigdzie nie mogłem znaleźć rozwiązania, więc albo nie da się tak podłączyć, albo ja nie umiem szukać. Pozdrawiam.

    0 15
  • Sklep HeluKabel
  • #2 12 Kwi 2012 15:11
    dondu
    Moderator Mikrokontrolery Projektowanie

    Witaj,

    Jako, że wykorzystuje interfejs I2C (TWI), to oczywiście możesz podłączyć do niego tyle mikrokontrolerów ile będziesz chciał. Musisz jedynie opanować dobrze wykorzystanie tego interfejsu.

    Nawet w datasheet PCFa jest punkt: 8.1.3 System configuration

    0
  • #3 12 Kwi 2012 16:57
    splawik00
    Poziom 23  

    No teorię to ja mniej więcej znam, ale gorzej w praktyce. To znaczy, że procesory są masterami, a PCF jest slave?? Czy jak?? Myślałem nawet żeby poprowadzić czwarty przewód. Procesor który chce odczytać dane z i2c sprawdziłby stan na tym przewodzie. Przy stanie niskim wejdzie w tryb odczytu ale zanim to nastąpi to ustawi tam stan wysoki, co uniemożliwi drugiemu procesorowi odczyt. Po zakończeniu tej transmisji ustawi stan niski i drugi procesor będzie mógł odczytać dane. Zrealizowałbym to mniej więcej tak:

    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod

    Wiem, że nie mogę ustawić stanów na pinie do odczytu, ale chodzi o zasadę działania. Nie jest to może najlepsze rozwiązanie, ale inaczej na razie nie potrafię. Pomóżcie bo na pewno da się inaczej, a ja nie wiem jak :cry:

    0
  • Sklep HeluKabel
  • #4 12 Kwi 2012 17:59
    gaskoin
    Poziom 38  

    I2C jest szyną multimaster, więc możesz mieć więc dwóch masterów.

    0
  • #6 12 Kwi 2012 19:38
    mirekk36
    Poziom 42  

    No no no - nieźle już sobie namieszałeś ;) pin SS jest od SPI a nie od I2C.

    A po drugie to ja bym ci zadał pytanie, od którego powinno się zacząć.

    "Do czego ci takie rozwiązanie?" ...... bo zamiast brnąć z podpowiedziami jak zrobić coś - co może jest niedorzeczne, warto zapytać o cel - ponieważ może się okazać, że zamierzony efekt można uzyskać o wiele prościej i innymi metodami ?

    0
  • #9 12 Kwi 2012 20:51
    janbernat
    Poziom 38  

    Mastery chyba się nie dogadają ot tak sobie.
    Trzeba programowo obsłużyć arbitraż.
    Każdy z tych procesorów ma inny moduł do sprzętowej obsługi I2C.
    ATtiny2313 ma USI a ATMega TWI.
    Czyli dla każdego trzeba napisać inny program- nie wiem czy w Bascomie to się da.
    To jest chyba możliwe ale nie trywialne.
    Tak jak radził Mirek- podaj założenia co chcesz zrobić.
    Może to się da całkiem inaczej.

    0
  • #10 12 Kwi 2012 22:54
    splawik00
    Poziom 23  

    Chodzi o to, że mam dwa urządzenia; rozkład jazdy autobusów na Atmega8 z zegarem PCF8583 oraz zegarek cyfrowy na ATtiny2313. Rozkład jazdy pobiera czas z PCF i tu wszystko gra. Zegar na ATtiny nie ma PCF-a, czas liczy procesor. Chcę oba te urządzenia połączyć razem aby miały zsynchronizowany czas bo ATtiny się spieszył. Nie chcę drugiego PCF-a dla ATtiny. Chcę mieć oba te urządzenia zsynchronizowane. Zegar na ATtiny nie zostanie pozbawiony funkcji liczenia czasu bez RTC. Zasada jaką chcę wprowadzić jest następująca. Po podłączeniu ATtiny do prądu sprawdzi on czy na linii jest podłączony RTC (bo on będzie odłączany w razie potrzeby). Jeżeli jest to pobierze z niego godzinę i będzie to robił co około 400ms. Gdyby jednak nie wykrył RTC to będzie oczekiwał na wprowadzenie aktualnego czasu po czym będzie go liczył (procesor). Gdyby ktoś jednak później podłączył zegar RTC to odczyta z niego godzinę i będzie pobierało czas z RTC tak jak wcześniej opisałem.

    0
  • #11 12 Kwi 2012 23:13
    janbernat
    Poziom 38  

    Ja bym to zrobił tak:
    PCF co 1s wysyła sygnał przerwania do ATMega8 i wtedy ATMega8 odczytuje czas.
    ATtiny2313 jest skonfigurowany jako slave.
    To da się zrobić w Bascomie- nie wiem jak teraz ale parę lat temu można było dokupić programik do zrobienia procesora jako slave.
    ATMega po odczycie czasu z PCF wysyła aktualny czas do ATtiny.
    Wtedy ATtiny nie musi nic liczyć- co 1s ma aktualny czas.
    Nie ma wtedy konieczności konfiguracji obu procesorów jako master i programowego arbitrażu.
    W notach Atmela jest podane jak zrobić slave z procesora z USI.
    Ale w C.
    Zrobienie z USI i z TWI multimaster z arbitrażem może być ciekawym zadaniem.
    Ale o ile zrobienie z USI slave mi się udało to zrobienie układu multimaster- to na razie nie będę próbował.

    0
  • #12 12 Kwi 2012 23:35
    Krotki
    Poziom 13  

    Można w konfiguracji multi-master pociągnąć jedną linie gpio pomiędzy kontrolerami i jeden z procesorów może decydować kto teraz może odpytywać "niewolnika".

    To tylko czysta teoria ale może zadziała :)

    0
  • #13 12 Kwi 2012 23:54
    gaskoin
    Poziom 38  

    W rzeczywistości to tak nie zadziała. Linie musiałyby być wiredAND i są zbędne ponieważ można to rozwiązać inaczej. Trzeba linie CLK zrobić jako wired-AND żeby je zsynchronizować jeśli jest kilka masterów. Poza tym trzeba zaprogramować arbiter - działa to tak, że podczas wysyłania danych należy sprawdzać stan linii SDA, jeśli nie zgadza się z tym co wysłaliśmy, tzn że dane wysyła inny master. Szczegóły w nocie.

    Problem jeszcze jest tego typu, że Attiny nie ma I2C tylko jakieś USI (WTF?). Można zastosować rozwiązanie Jana, pczy czym do komunikacji między uC można użyć SPI albo nawet UART i nie męczyć się z programowaniem arbitera i andowaniem linii (choć wymaga to jedynie 2 tranzystorów)

    --
    Nie zwróciłem uwagi, że napisałeś o jednym procesorze :)
    Może by zadziałało.

    0