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

ATMEGA potrzebuje duzo wyjsc

manolo24 22 Gru 2009 22:02 3168 22
  • #1 22 Gru 2009 22:02
    manolo24
    Poziom 10  

    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

    0 22
  • #2 22 Gru 2009 22:09
    markosik20
    Poziom 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)

    0
  • #3 22 Gru 2009 22:24
    wader_669
    Poziom 28  

    multipleksowanie?

    0
  • #4 22 Gru 2009 22:26
    manolo24
    Poziom 10  

    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.

    0
  • #5 22 Gru 2009 22:50
    Dr_DEAD
    Poziom 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.

    0
  • #6 22 Gru 2009 23:44
    tmf
    Moderator Mikrokontrolery Projektowanie

    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.

    0
  • #7 23 Gru 2009 08:46
    markosik20
    Poziom 33  

    tmf napisał:
    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.

    0
  • #8 23 Gru 2009 09:13
    marek_Łódź
    Poziom 36  

    Dr_DEAD napisał:
    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ść

    0
  • #9 23 Gru 2009 09:19
    ktrot
    Poziom 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.

    0
  • #10 23 Gru 2009 11:10
    gothye
    Poziom 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ć ;)

    0
  • #12 23 Gru 2009 22:46
    pubus
    Poziom 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...

    0
  • #13 23 Gru 2009 23:28
    manolo24
    Poziom 10  

    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?

    0
  • #14 24 Gru 2009 08:54
    marek_Łódź
    Poziom 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).

    0
  • #15 24 Gru 2009 09:39
    Pituś Bajtuś
    Poziom 28  

    manolo24 napisał:
    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ść.

    0
  • #16 24 Gru 2009 11:06
    arrevalk
    Poziom 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.

    0
  • #17 24 Gru 2009 12:32
    pubus
    Poziom 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...

    0
  • #18 25 Gru 2009 18:23
    asembler
    Poziom 32  

    Sprawdzony schemat 800 wyjść to zastosowane układy 74HC595, pod warunki ze zmiany nie będą występowały szybciej niż 2000/sek

    0
  • #19 25 Gru 2009 20:04
    marek_jazy
    Poziom 9  

    Przy takiej ilosci wyjsc przydalaby sie jakas subtelna niezawodnosc...skoro maja to byc wyjscia cyfrowe moze zainwestuj w sterownik PLC(jedna szyna, kilka sterownikow)

    0
  • #20 25 Gru 2009 20:30
    pubus
    Poziom 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...

    0
  • #21 25 Gru 2009 20:38
    asembler
    Poziom 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.

    0
  • #22 25 Gru 2009 21:29
    BoskiDialer
    Poziom 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.

    0
  • #23 25 Gru 2009 23:46
    asembler
    Poziom 32  

    Wydajność 74HC595 20mA czyli bardzo dobra.

    0