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

Komunikacja mikrokontrolerów 1 masteri i 4 slave'y 89s52

rysiek182 13 Kwi 2008 17:56 1350 15
REKLAMA
  • #1 5026602
    rysiek182
    Poziom 11  
    Posty: 62
    Ocena: 1
    Witam, chciałbym zrobić coś takiego, że na jednej magistrali równoległej pracowałoby 5 uP, z czego jeden byłby master a 4 slave'y. Rozumiem, że z mastera oprócz magistrali, do każdego slave'a muszę wyprowadzić sygnał odczytu i zapisu.

    Poradźcie, na co muszę zwrócić uwagę.

    Pozdrawiam
  • REKLAMA
  • #2 5026752
    markosik20
    Poziom 33  
    Posty: 2261
    Pomógł: 208
    Ocena: 147
    rysiek182 napisał:
    Rozumiem, że z mastera oprócz magistrali, do każdego slave'a muszę wyprowadzić sygnał odczytu i zapisu.


    Niekoniecznie, możesz zaadresować układy SLAVE i wtedy będzie się "zgłaszał" ten którego MASTER "zapyta". Pozostaje jeszcze wybór interfejsu, może być I2C, SPI, UART (w poziomie TTL), 1WIRE lub równoległy.
  • REKLAMA
  • #3 5026978
    rysiek182
    Poziom 11  
    Posty: 62
    Ocena: 1
    Jednak pokusiłbym się o magistralę równoległą, 8 bitów na magistrali wystarczy
  • #4 5027065
    markosik20
    Poziom 33  
    Posty: 2261
    Pomógł: 208
    Ocena: 147
    rysiek182 napisał:
    Jednak pokusiłbym się o magistralę równoległą, 8 bitów na magistrali wystarczy


    Czyli zależy Ci na czasie komunikacji? :wink:.
  • #5 5027845
    rysiek182
    Poziom 11  
    Posty: 62
    Ocena: 1
    nie, nie zależy mi na szybkości transmisji
  • #6 5027884
    markosik20
    Poziom 33  
    Posty: 2261
    Pomógł: 208
    Ocena: 147
    rysiek182 napisał:
    nie, nie zależy mi na szybkości transmisji


    To proponuję I2C (lub sprzętowego UARTA), tylko dwa przewody i obsługa bardzo prosta. Trzeba będzie tylko sobie wymyśleć jakiś prosty protokół transmisji z adresowaniem układów.
  • #7 5028308
    MarasK
    Poziom 18  
    Posty: 231
    Pomógł: 19
    Ocena: 4
    i2c chyba najwygodniejszy się wydaje. A pomysł z adresami slave'ów bardzo dobry. Oprócz SCL i SDA możesz dodać jeszcze linię INT - suma logiczna wyjść sygnalizacji przerwania z uP. Transmisję wykonywałbyś tylko wtedy, jeśli którykolwiek z uP zgłosiłby chęć komunikacji.
  • #8 5029335
    Fyszo
    Poziom 37  
    Posty: 3987
    Pomógł: 223
    Ocena: 115
    I2C nie ma w 89c52. Programowa obsługa i2c, przy napiętym czasowo algorytmie innych funkcji - pewnie się wyłoży. Uart w 89c51 ma możliwość adresowania, wykorzystuje się tu 9bit jako znacznik ramki 'pytającej', wysyła się adres, a jedno z urządzeń go ropoznaje (software'owo) potem wyłaczamy bit 9 i pozostałe urządzenia ignorują transmisję tylko zaadresowany slave działa.
  • #9 5029556
    MarasK
    Poziom 18  
    Posty: 231
    Pomógł: 19
    Ocena: 4
    I2C to nie 1wire - tu nei ma ścisłych timeslotów - wszystko nadaje zegar.
    Chociaż skoro jest opcja komunikacji multi-uP to czemu z niej nie skorzystać? Pytanie tylko jak połączyć wyjścia tych uP, aby nie uległy spaleniu :)
  • REKLAMA
  • #10 5029569
    avatar
    Poziom 36  
    Posty: 4150
    Pomógł: 159
    Ocena: 415
    MarasK napisał:
    I2C to nie 1wire - tu nei ma ścisłych timeslotów - wszystko nadaje zegar.
    Chociaż skoro jest opcja komunikacji multi-uP to czemu z niej nie skorzystać? Pytanie tylko jak połączyć wyjścia tych uP, aby nie uległy spaleniu :)

    jakims konwenterem np max485
  • #11 5029609
    Fyszo
    Poziom 37  
    Posty: 3987
    Pomógł: 223
    Ocena: 115
    Bit SM2 w rejestrze SCON jest flagą 'czy ignorować' przychodzące dane przez UART (tryb 2 i 3). Jesli 9 bit w transmisji jest '1' i SM2 mamy ustawiony również na '1' to UART odbiorcy akceptuje dane. Można to wykorzystać to adresowania slave'ów. 4 slave mają swój adres i ustawione bity SM2, master wysyła 8bit adres i 9bit jako '1'. Potem zaadresowany slave zeruje SM2 a transmisja przebiega normalnie z wyzerowanym 9 bitem, reszta UARTów nie reaguje na dane bo mają ustawiony SM2. Porty się nie spalą bo pracują jako wejścia czekające na transmisję (Rx), dopiero zaadresowany slave może ustawić 'sztywny' stan na porcie Tx. Pilnując zasady że: 'tylko zapytany slave odpowiada' nic się nie stanie.
    Dla 100% pewności można dodać po diodzie separującej każde wyjście Tx.
  • #12 5031331
    rysiek182
    Poziom 11  
    Posty: 62
    Ocena: 1
    hmm, widzę, że wszyscy opisują magistralę szeregową, ja natomiast jednak chciałbym zrobić tą komunikację na równoległej.

    Jak muszę podłączyć porty tych uP, żeby nie popalić tychże portów

    Pozdrawiam, Rysio
  • #13 5061630
    rysiek182
    Poziom 11  
    Posty: 62
    Ocena: 1
    Witam ponownie,
    Zerknijce na ten schemacik i ocencie, czy to może zadziałać,

    Mam zamiar zrobić tak, że jak Master chce sie skomunikowac z któryms slavem, to zeruje bit adresu i wystawia na szyne danych wartosc, wtedy slave odbiera i gra gitara. a jak slave chce cos przeslac do mastera to też zeruje drugi bit adresu i czeka na sygnal gotowosci od mastera

    W te sposób nie bedzie kolizji na szynie danych.


    Co o tym sądzicie??

    Pozdrawiam[/img]
    Załączniki:
    • Komunikacja mikrokontrolerów 1 masteri i 4 slave'y 89s52 KOMUNIKACJA.GIF (13.48 KB) Musisz być zalogowany, aby pobrać ten załącznik.
  • REKLAMA
  • #15 5061656
    rysiek182
    Poziom 11  
    Posty: 62
    Ocena: 1
    generalnie nie chodzi mi o ilość linii, bo mam trochę miejsca, tylko chodzi mi o zasadę działania, czy przypadkiem, nie zdziwię się, jak bede chciał to uruchomić

Podsumowanie tematu

✨ Dyskusja dotyczy komunikacji między jednym mikrokontrolerem master a czterema slave na jednej magistrali równoległej z użyciem układów 89s52. Poruszono różne interfejsy komunikacyjne: I2C, SPI, UART, 1WIRE oraz magistralę równoległą. Zwrócono uwagę, że 89s52 nie posiada sprzętowego I2C, co wymaga programowej obsługi, która może być zawodna przy intensywnych zadaniach. Proponowano wykorzystanie UART z 9-bitowym trybem adresowania, gdzie bit SM2 w rejestrze SCON pozwala na selektywne odbieranie danych przez zaadresowanego slave’a, minimalizując ryzyko kolizji i uszkodzenia portów. W przypadku magistrali równoległej podkreślano konieczność odpowiedniego sterowania liniami adresowymi i danych, aby uniknąć zwarć i kolizji sygnałów, np. przez zerowanie bitów adresu i synchronizację sygnałów gotowości. Sugerowano także rozdzielenie magistrali na niezależne 4-bitowe linie lub komunikację indywidualną z każdym slave, jeśli nie jest problemem liczba linii. Wspomniano o możliwości zastosowania konwertera MAX485 dla ochrony portów i separacji sygnałów. Dyskusja podkreślała konieczność opracowania prostego protokołu transmisji z adresowaniem i synchronizacją sygnałów przerwań (INT) w przypadku I2C oraz ostrożność przy łączeniu portów w magistrali równoległej.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA