Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

ATMEGA potrzebuje duzo wyjsc

manolo24 22 Dec 2009 22:02 3333 22
  • #1
    manolo24
    Level 11  
    Witam,
    potrzebuje zbudowac urzadzenie, na jakimkolwiek procesorku ATMELA z USB (sterowane bedzie z PC), posiadajacym olbrzymia ilosc wyjsc cyfrowych (sterujacych optoizolatorami), mianowicie ~1000 z opcja rozbudowy do ~1600.Planuje zrobic to w formie kart z 100 wyjsciami kazda, kwestia tylko jak do tego podejsc?Expandery jakie znalazlem na I2C / SPI maja maksymalnie 16 / 24/ 28 DIO, na I2C podepne ich zaledwie 8, nie wiem ile dopuszcza specyfikacja SPI, bo nie udalo mi sie znalezc takich informacji. Moze ktos z was przerabial taki temat? Prosze o pomysly.
    Pozdrawiam,
    Tomasz
  • #2
    markosik20
    Level 33  
    A tymi wyjściami to miałby sterować jeden uC? I jak szybko te wyjścia muszą być zmieniane? Może na rejestrach szeregowo-równoległych? (np: 4094)
  • #4
    manolo24
    Level 11  
    Mialoby to dzialac tak: wszystkie wyjscia sa ustawiane w nowy stan, co mogloby trwac nawet setki ms, bo sie nie spieszy, potem dokonywany pomiar, i od nowa.
    Mozesz podac linka do jakiegos schematu z rozwiazaniem jak proponujesz?
    Wszystkim ma sterowac ten jeden uC z USB,myslalem juz,zeby sterowal przez SPI 16kartami kazda z juz jakas mala ATMEGa na pokladzie,a te przez I2C sterujace 100 wyjsciami,ale to sie juz robilo zbyt skomplikowane.
  • #5
    Dr_DEAD
    Level 28  
    Jeżeli nie będziesz sterował niczym ważnym to rozwiązanie makrosika wydaje się najlepsze. Łączysz rejestry w łańcuszek, teoretycznie może on być nieograniczenie długi, ładujesz dane szeregowo a później strobujesz wszystkie scalaki aby wystawiły dane.
  • #6
    tmf
    Moderator of Microcontroller designs
    Tylko niekoniecznie zastosowac rejestry szeregowe. Lepiej wsadzic jakies latche, np. 573, sterowane z demultipleksera np. 1 z 16. To nam daje juz 128 wyjsc, a scalakow jest tylko 16 + demultiplekser i wykorzystalismy 12 pinow IO. Obciazenie jakie wnosi 16 ukladow serii HC/HCT jest pomijalne, a skoro nie ma zadnych zalozen co do predkosci to mozna ich nawstawiac znacznie wiecej.
  • #7
    markosik20
    Level 33  
    tmf wrote:
    Lepiej wsadzic jakies latche, np. 573, sterowane z demultipleksera....


    Tylko że do każdego "latch'a" musimy doprowadzić 8bitów danych + CS + WR....przy dużej ilości układów i dużej płytce/płytkach robi się niezły "las" ścieżek.
  • #8
    marek_Łódź
    Level 36  
    Dr_DEAD wrote:
    Jeżeli nie będziesz sterował niczym ważnym to rozwiązanie makrosika wydaje się najlepsze. Łączysz rejestry w łańcuszek, teoretycznie może on być nieograniczenie długi, ładujesz dane szeregowo a później strobujesz wszystkie scalaki aby wystawiły dane.
    Ewentualnie łączone szeregowo-równolegle (gwiazda łańcuszków zamiast pojedynczego), a strob sterowany z rozdzielacza, co skróci czas przeładowania (na karcie można umieścić switche adresowe + komparator, sterujące zatrzaskiwaniem danych.

    Rozwiązanie I2C jak dla mnie jest bardziej eleganckie i naturalne ("profesjonalne", cokolwiek to słówko znaczy), niemniej droższe. Gdybyś chciał wykorzystać układy i2c masz możliwość powielenia linii stosując czy to klucze analogowe ("nieprofesjonalnie"), czy to scalone multiplexery i2c takie jak PCA9544 (1->4 linie i2c)

    Warstwa I 8*PCA9544 daje 32 zmultipleksowane linie i2C z możliwością wyboru dowolnej z nich

    Warstwa II na każdej linii wieszamy kartę z 8 układami sterującymi transoptory (np PCA9551 PCA9552 co daje 8x8 albo 8x16 wyjść = 64 lub 128 wyjść

    W ostatecznym rozrachunku mamy 32x128=4096 wyjść
  • #9
    ktrot
    Level 19  
    Możesz użyć atmega - np. atmega169 ponad 50 wyjść (ok 10zł w TME). Dwie takie kostki obsłużą ci jedną kartę. Transmisja i2c lub lepiej własna wolniejsza ale odporna na błędy.
  • #10
    gothye
    Level 33  
    Jeśli planujesz urządzenie modułowe rozwiązał bym to tak :

    głowny moduł jakis AVR np M32
    a na osobnych kartach rozszerzających AVR + latch 573 lub 574
    komunikacja z głównym AVR za pomocą SPI dzieki temu masz nie ograniczone możliwosci modułow rzoszeżających ,na kartach rozszeżen zamieszczasz zwoki do konfiguracji adresowej kart tak aby było wiadomo na jakie adresy i wyjścia wysyłać ;)
  • #12
    pubus
    Level 30  
    74xx595 rejestr SIPO z zatrzaskami...
    O ile dobrze pamiętam można skonfigurować SPI tak żeby z nimi pracowało... także zostaje tylko sterowanie zatrzaskiem...
    Oczywiście projekt płytki tak czy tak będzie upierdliwy... ale nie aż tak jak z multiplekserem...
  • #13
    manolo24
    Level 11  
    No to mam 3 opcje (przy zalozeniu 16kart, kazda karta 2 zlacza DB25, czyli potrzeba 2*25*2 = 100wyjsc na karte):

    1.ATMEGA_USB steruje po SPI kartami, kazda z ATMEGA8 na pokladzie, te steruja przez I2C np MCP23018 * 6/7sztuk (mozna wykorzystac troche DO z ATMEGA8)

    2. ATMEGA_USB przez 4 demultipleksery 9544 steruje po I2C bezposrednio MCP23018 * 7sztuk na kazdej z kart

    3. ATMEGA_USB steruje 16lancuszkami 74HCT4094 * 13sztuk.

    Opcja 3 wydaje sie najprostsza sprzetowo, pytanie tylko jest: gdybym chcial puszczac wszystkie "lancuszki" z osobnych pinow ATMEGi dla danych, ale z wspolnymi: strobe, clock i output enable (czyli na kazdej z 3 wybranych nozek ATMEGI wisialoby 208 wejsc HCT!) to co na to ATMEGA,a zwlaszcza clock?Ma to szanse dzialac?
  • #14
    marek_Łódź
    Level 36  
    Sygnały należałoby zbuforować ze względu na pojemność sumaryczną takiego układu sięgającą rzędu kilkuset pH (pod 1 nF). Ja osobiście przy sterowaniu taką gwiazdą zrezygnowałbym z jednoczesnego ładowania, dałbym 4 linie adresowe i układ selekcji wybierający w konkretnym układzie linie clk i strobe, co rozwiązuje problem buforowania, zmniejsza ilość ciągniętych linii z 18 do 7 (czy z 19 do 8 ) i pozwala na użycie sprzętowego SPI. No ale to kwestia gustu i wymagań czasowych (gdyby były).
  • #15
    Pituś Bajtuś
    Level 28  
    manolo24 wrote:
    No to mam 3 opcje (przy założeniu 16kart, każda karta 2 zlacza DB25, czyli potrzeba 2*25*2 = 100wyjsc na kartę):

    1.ATMEGA_USB steruje po SPI kartami, każda z ATMEGA8 na pokładzie, te sterują przez I2C np MCP23018 * 6/7sztuk (można wykorzystać trochę DO z ATMEGA8)

    2. ATMEGA_USB przez 4 de-multipleksery 9544 steruje po I2C bezpośrednio MCP23018 * 7sztuk na każdej z kart

    3. ATMEGA_USB steruje 16lancuszkami 74HCT4094 * 13sztuk.

    Opcja 3 wydaje się najprostsza sprzętowo

    A nie prościej zrobić tak, aby ATMEGA_USB sterowała po SPI MCP23S17? Co prawda posiadają one zaledwie 2 piny adresowe, ale wykorzystując sygnał CS można podłączyć ich nieograniczoną ilość.
  • #16
    arrevalk
    Level 25  
    A może zamiast I2C/SPI pomyśleć o komunikacji za pomocą protokołu MODBUS z "kartami" a na karcie procek i do driverów wyjść za pomocą I2C/SPI czy też multiplex.
  • #17
    pubus
    Level 30  
    Można by też wykorzystać do budowy kart CPLD...
    Metoda i protokół transmisji zależą od twojej inwencji a i wyjść mają nie mało bo seria XC95xxx ma od ~30 do ponad 200 I/O... obudowa TQFP...
  • #18
    asembler
    Level 32  
    Sprawdzony schemat 800 wyjść to zastosowane układy 74HC595, pod warunki ze zmiany nie będą występowały szybciej niż 2000/sek
  • #19
    marek_jazy
    Level 10  
    Przy takiej ilosci wyjsc przydalaby sie jakas subtelna niezawodnosc...skoro maja to byc wyjscia cyfrowe moze zainwestuj w sterownik PLC(jedna szyna, kilka sterownikow)
  • #20
    pubus
    Level 30  
    No tak pomysł może i "profesjonalny" ale w kategorii niezawodność/cena raczej nie powala...
    10 * 1000zł za same PLC no i nie zapominajmy o ekspanderach na 100 I/O dla każdego... no jak potnie koszty i kupi "chińszczyznę" to może w jakichś 20 000 by się zmieścił... tylko czy dalej możemy być pewnie tej niezawodności...?.?.?
    To tak dość swobodnie policzone ale podejrzewam, że trochę zaniżyłem...
  • #21
    asembler
    Level 32  
    Szyna 8 bitowa do 8 wejść 16 sztuk 74HC595 połączonych szeregowo do tego 1 wyjście clock i jedno wyjście strob i mam 16X8X8 =1024 wyjść. A co co niezawodności to rozwiązanie niezawodne i sprawdzone.
    A koszty znikome poniżej 50zł +płytka.
  • #22
    BoskiDialer
    Level 34  
    Moje przemyślenia po przeczytaniu tego tematu, to:
    - układy na i2c nie będą w pełni wykorzystane, wymagają podania adresów oraz sama szyna ogranicza prędkość przeładowywania. Stosunek ceny do liczby pinów jest dość wysoki.
    - CPLD może i dobre, tylko jak będzie z konsumpcją prądu. Stosunek ceny do liczby pinów również wysoki oraz komplikuje się dystrybucja sygnałów do układów: transmisja równoległa ograniczała by efektywną liczbę pinów, transmisja szeregowa nie wykorzystała by w pełni układu a zresztą taką implementację można by zastąpić rejestrami SIPO.
    - najlepiej cenowo wychodzą rejestry SIPO. Cena na pin to praktycznie grosze, jednak wydajność prądowa nie jest do końca satysfakcjonująca, co mogło by się przełożyć na potrzebę dodania jakiegoś stopnia wyjściowego. Jakkolwiek jeśli jedna karta miała by 128 wyjść czyli 16 rejestrów, to można by je spiąć w łańcuch, rozwiązanie marek_Łódź z prowadzeniem kilku łańcuchów całkiem rozsądne: np łącząc po 2 układy w 8 łańcuchów. Wtedy na taką kartę z wyjściami dać jeden mały procesor np attiny2313, 8 wyjść danych z jednego portu na kolejne łańcuchy, sygnały sterujące z innego portu. Czas przeładowania wszystkiego był by mały, można by dane wystawiać całymi bajtami chociaż mieszały by się bity z wyjściami, ścieżki powinno się łatwo dać poprowadzić. Do komunikacji z modułami wykorzystać wtedy usart, może być w trybie MPCM aby można było usarty łączyć równolegle. Ogólnie: rozwiązanie stosunkowo tanie, prowadzenie ścieżek łatwe, rozszerzalność wyjątkowo duża (do 256 slave'ów w trybie MPCM). Możliwe nawet, że opłacało by się podciągnąć rs485 do każdego modułu, ale to już opcjonalnie (skomplikowało by protokół ale dało większe bezpieczeństwo przy transmisji, szczególnie że sterowanie taką ilością wyjść w mniejszym lub większym stopniu powinno odbijać się na tym, co będzie na szynach zasilających.
  • #23
    asembler
    Level 32  
    Wydajność 74HC595 20mA czyli bardzo dobra.