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

[Bascom] komunikacja pomiędzy mikrokontrolerami

LemuRR 11 08 Wrz 2011 22:01 2831 10
REKLAMA
  • #1 9908839
    LemuRR 11
    Poziom 26  
    Witam, potrzebuję przesyłać dane pomiędzy kilkoma mikrokontrolerami (jeden baza, 4 odbiorniki w tym 2 z tym samym adresem) byłbym bardzo wdzięczny, jeżeli ktoś wytłumaczył by mi to na przykładowym kodzie, nadajnika/odbiornika. Czytałem już o I²C ale nie widzę możliwości komunikacji. Wykorzystane ma to być w zegarze, Matryca żarówkowa 2x5px, końcówka mocy na tyrystorach, dekoder np Attiny 2313
    (jeden adres na minuty, drugi na godziny) Wysyłanie danych z Attiny13 z RTC. Wszystko mniej więcej jasne, ale nie wiem jak dokonać komunikacji między wyżej wymienionymi mikrokontrolerami.
    Za wszelką pomoc będę bardzo wdzięczny.
  • REKLAMA
  • #2 9909182
    korrus666
    Poziom 40  
    Nie wiem czemu miałoby się nie dać zrobić komunikacji na I²C. Tylko że nie możesz mieć dwóch odbiorników z tym samym adresem ale to nie problem. Układ master byłby tylko jeden, reszta slave i każdy z innym adresem. Możesz przecież wysłać te same dane do tylu układów do ilu sobie życzysz.
  • #3 9909217
    retsef
    Poziom 14  
    LemuRR 11, aby dobrze zaprojektować taką komunikacje trzeba wziąć pod uwage:
    - odległość
    - możliwe zakłócenia
    dopiero potem
    - możliwości sprzętowe np. jakie protokoły wspiera wybrany mikrokontroler, ile ma nóżek itd. Aczkolwiek ten etap jest ostatnio, bo dwa punkty wyżej mogą wymusić zmianę mikrokontrolera.

    Teraz tak u ciebie jest zegar, więc odległość niewielka, zakłócenia prawie żadne. Tutaj I2C nada się idealnie. Twój mikrokontroler ma wsparcie sprzętowe. Brać I2C śmiało.

    Alternatywnie możesz poczytać o SPI, ale w TINY może zabraknąć nóżek do obsługi innych urządzeń.

    Kody może jutro. Dobrej nocy.
  • REKLAMA
  • #4 9911003
    LemuRR 11
    Poziom 26  
    No właśnie odległość nie jest mała, Matryca żarówkowa na dachu, (lusterkowe 15W 60V) A układ zegarowy na dole, w portierni. Więc raczej zakłócenia mogą występować. Myślałem na RC5 i światłowodem (mam go dużo) albo 1wire i kabel antenowy. Które rozwiązanie jest lepsze ?
  • REKLAMA
  • #5 9911067
    piotrva
    VIP Zasłużony dla elektroda
    A może conieco poczytać o RS485? Też z założenia magistrala ta niejako jest przystosowana do:
    1. dużych odległości (kabel 3-żyłowy ekranowany starczy - 2 linie magistrali + masa dla bezpieczeństwa, ewentualnie jakoś sensownie zrobić optoizolację).
    2. wielu układów slave - programowo można zaimplementować bez problemu adresowanie
    3. wykorzystuje UART dostępny w T2313 sprzętowo
    Gdzieś w necie były swego czasu 2 części artykułu o RS485 właśnie w BASCOM i tam było mniej więcej podobnie - 1 master i 2 slave w przykładach:
    http://ep.com.pl/files/4539.pdf
    http://ep.com.pl/files/4556.pdf
  • REKLAMA
  • #6 9911110
    ljmp
    Poziom 14  
    Witam.

    Nie widzę powodu aby nie zastosować sprzętowego USART'a w trybie asynchronicznym zamiast I2C, który ani nie pracuje przy dużych prędkościach ani nie obsługuje dużych dystansów. Mnie osobiście udało się skomunikować dwie ATmegi (jedną 32 a jedną 8) na odległości 100m zwykłym kablem telefonicznym przy transferze 500kbod (fOSC=8Mhz oraz UBRR=0) bez gubienia żadnych pakietów. Co prawda ATtiny2313 ma nieco uboższy moduł USART, bo nie ma na przykład sprzętowej obsługi komunikacji wieloprocesorowej, ale wszystko można nadrobićw programie.

    zdravim
  • #7 9911140
    mirekk36
    Poziom 42  
    ljmp napisał:
    Mnie osobiście udało się skomunikować dwie ATmegi (jedną 32 a jedną 8) na odległości 100m zwykłym kablem telefonicznym przy transferze 500kbod


    Masz zupełną rację, "udało ci się". Ale to że tobie się to udało, nie oznacza, że jest to powtarzalne i, że każdemu następnemu a szczególnie początkującemu się uda. Warto zwrócić uwagę na to co sam pisałeś na początku swojego postu.

    A pisałeś, że I2C nie zostało stworzone do komunikacji na tak dużych dystansach. Tymczasem, już nie doczytał kolega, że RS232 również nie zostało stworzone do komunikacji na tak dużych dystansach jak 100M. Owszem, standard ten pozwala na dużo większe odległości niż I2C, zatem możemy mówić o kilku - kilkunastu metrach.

    Dlatego proponuję posłuchać porad kolegi piotrva - bo właśnie tak jak on pisze i podaje przykłady - do transmisji danych na takie odległości jak 100m ale również duuuuużo większe - przydatny to może być np. RS485.
  • #8 9911664
    LemuRR 11
    Poziom 26  
    W temacie biegły nie jestem, kod z EP jest dla mnie tak jakby niezrozumiały...
    O ile już wiem jak sterować PCF8583 to reszty nie czaję.
    Głównie chodzi mi o to żeby master (Mega8) wysyłał do slave1 (Mega16) godziny
    a do slave2 (Mega16) minuty. Najlepiej aby wysyłane i odbierane były (a raczej konwertowane na dziesiętne) cyfry w systemie dziesiętnym.
    bardzo bym prosił o kawałek kodu , w miarę prostego który przynajmniej
    naprowadził by mnie na właściwą drogę (najlepiej aby rozwiązywał problem)
    W zamiar za pomoc oferuję wszystkie swoje punkty (nie wspominając o podziękowanie, przez wciśnięcie "pomógł")
    Byłbym bardzo wdzięczny za ewentualną pomoc, bo nie mam zbyt wiele czasu na zrealizowanie tego projektu, a sam tego raczej szybko nie pojmę.
  • #10 9912239
    piotrva
    VIP Zasłużony dla elektroda
    Niech kolega nie liczy na gotowca i nie oferuje marnych punktów, bo na te nikt się nie połakomi.
    Podałem linki z opisem rozwiązania, prawie gotowce, może warto zgłębić te artykuły i się nieco douczyć?
REKLAMA