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

Jaka jest maksymalna liczba bramek dla wyjścia AVR?

Andrzej.Woo 04 Sty 2012 11:03 2502 16
  • #1 10346438
    Andrzej.Woo
    Poziom 9  
    Jaka jest maksymalna liczba bramek (np. z rodziny HC) których wejścia można podłączyć do jednego wyjścia kirokontrolera AVR?!

    Potrzebuję do jednego wyjścia podłączyć około 150 wejść bramek serii HC i na moje oko przy 26 kończą się możliwości mikrokontrolera.
  • #2 10346486
    mickpr
    Poziom 39  
    Sprawdź sobie wydajność prądową konkretnego AVR w datasheet.
    Bez określonego modelu mikrokontrolera i określonego PIN-u to takie "gdybanie". (średnio 20mA na wyjście, 200 dla całego układu)
    150 wejść do jednego wyjścia to "lekka" przesada.
  • #3 10346668
    Zbych_
    Poziom 25  
    Żeby policzyć ilość bramek to trzeba by jeszcze znać max. częstotliwość z jaką będą sterowane te bramki. Każde wejście bramki to jakieś 10..20pF dodatkowego obciążenia (sprawdź w karcie katalogowej). Przy 150 masz 150*20pf = 3nF + pojemność połączeń. Nie ma tragedii. Można tylko dać w szereg z wyjściem uC jakiś rezystor (100..220Ω), żeby ograniczyć prąd ładownia. Stała czasowa wyjdzie jakieś 0,3..0,6µs, więc do kilkudziesięciu...kilkuset kHz powinno to jeszcze działać.
    Bardziej bałbym się o zakłócenia w tak rozległym układzie.
  • #4 10346812
    nsvinc
    Poziom 35  
    Czas narastania 0.6us dyskwalifikuje kilkaset kHz. Dodatkowo, przy takim czasie narastania zastosowane bramki powinny być 'ze schmittem'. I kilkadziesiąt kHz, to max, co może z tego być.

    Jeśli istnieje konieczność zrealizowania tego szalonego założenia, to koniecznie powinno się dać pośredni bufor między mikrokontroler a bramki, aby w impulsie prąd przeładowania był conajmniej te 200mA.
    Niezłym, i do ponad 1MHz działającym rozwiązaniem byłby po prostu zwykły driver push-pull, np. MCP1402.
    Alternatywnie, można zastosować po prostu bufory (jeden scalak - 6 buforów), i połączyć je wszystkie równolegle. To już znacznie poprawi sytuację, ale jednak jeszcze nie wystarczająco.
  • #5 10347007
    dondu
    Moderator na urlopie...
    Andrzej.Woo napisał:
    Potrzebuję do jednego wyjścia podłączyć około 150 wejść bramek serii HC i na moje oko przy 26 kończą się możliwości mikrokontrolera.

    Skoro potrzebujesz sterować aż tyloma bramkami, to powstaje pytanie, co to za projekt?

    Pytanie nie bez przyczyny, ponieważ 150 wejść sugeruje, że nie leżą one w odległości kilku czy kilkunastu cm od wyjścia mikrokontrolera lecz podejrzewam, iż będą od niego znacznie oddalone. Jeżeli tak to raczej nie tędy droga.
  • #6 10347229
    Andrzej.Woo
    Poziom 9  
    Dzięki Panowie za pomoc.

    Projekt to nic innego tylko komunikacja po SPI z kilkudziesięcioma modułami jednocześnie połączonymi szeregowo. Cel to 128 modułów, a ideał to 256 modułów. Póki co problemem jest obciążenie PIN'a wyjściowego AVR'a.

    W datasheetach Atmela niewiele jest opisane na temat statycznych i dynamicznych właściwości wyjść. Częstotliowaść pracy zastosowanego układu Atmega32 to 16.384 MHz. Bufor szeregowy nie wchodzi w rachubę bo powodowałoby to znaczne opóźnienie i przesunięcie czasowe poszczególnych modułów. Moduły są dosyć zwarte i długość linii długiej dla pojedynczego modułu to 10 mm Problem raczej będzie kiedy tych modułów będzie 128 szt. bo wtedy będzie tego ponad 1 metr (sic!).

    Dotychczas udało się uzyskać stabilną pracę przy 26 modułach (linia dł. 30 cm) podłączonych do układu i częśtotliwości SPI 2 MHz. W testach wyszło, że częstotliwość pracy SPI nie ma żadnego wpływu na stabilność pracy układu tylko kluczem jest opisana tu przez Zbych_'a pojemność i obciążenie prądowe.

    Będziemy próbować dołożyć driver MCP1402 który zbuforuje nam piny AVR'a.

    Dlaczego taki karkołomny projekt? Bo taka jest potrzeba :)
  • #7 10347268
    Zbych_
    Poziom 25  
    Andrzej.Woo napisał:
    Będziemy próbować dołożyć driver MCP1402 który zbuforuje nam piny AVR'a.


    Tylko, że dając mocny bufor możesz sobie zrobić kuku odbiciami sygnału i przesłuchami do sąsiednich linii. Lepiej z góry zaplanuj sobie miejsce na rezystory szeregowe na liniach sygnałowych.
  • #8 10374144
    Andrzej.Woo
    Poziom 9  
    Problem z SPI w Atmegach jest taki, że po włączeniu SPI max. prąd wyjściowy portu spada do... 35uA więc "samotny" AVR nie bardzo nadaje się do sterowania wieloma układami w trybie SPI.
  • #9 10374623
    tmf
    VIP Zasłużony dla elektroda
    Andrzej.Woo napisał:
    Problem z SPI w Atmegach jest taki, że po włączeniu SPI max. prąd wyjściowy portu spada do... 35uA więc "samotny" AVR nie bardzo nadaje się do sterowania wieloma układami w trybie SPI.


    A możesz podać źródło tej informacji? Bo jakoś w nocie tego nie zauważyłem. A byłoby to o tyle dziwne, że przy takim prądzie jakoś mi się nie widzi, żeby SPI popychało na 8/10MHZ (połowa max CLK).
  • #10 10374783
    Andrzej.Woo
    Poziom 9  
    Źródło tej informacji to multimetr.

    W ogóle przestaję rozumieć działanie AVR'ów, ale do rzeczy...

    Przy SPI sterowanie zatrzaskiem odbywa się przez SS, a dokładniej chwilowe "0" na tym wyjściu. Kiedy włączę SPI poprzez
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    ... wydajność prądowa natychmiast spada. Podłączony rezystor 100k daje spadek napięcia do poziomu 3.5V co w zasadzie wystarcza na jedynkę logiczną. Sterowanie SS odbywa się "ręcznie":
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Próbowałem podłączyć driver MCP1402 i po dużych bólach udało się go podłączyć - na razie kontrolnie tylko pod SS i... SPI nie reaguje. Ręczne sterowanie poprzez bezpośrednie podłączenie wejścia SL rejestru (74HC165) dotychczas podłączonego do SS też nic nie daje. Wygląda to tak, jakby fakt odłączenia SS blokował SPI. Dodam tylko, że stany zmierzone testerem stanów logicznych są poprawne. [/code]

    SPI rusza przy bezpośrednim połączeniu z rejestrem 74HC165. Jeśli odłączę SS/SL i steruję "ręcznie" - nie rusza SPI (brak impulsów zegarowych) i dotyczy to KAŻDEJ częstotliwości pracy SPI (w tej chwili testuję na 16MHz/128=125kHz. Prąd 35uA dotyczy póki co stanu na SS. Wymieniłem AVR'a na nowego i... to samo.

    Najważniejsze: używam trybu MOSI czyli SPCR |= _BV( MSTR );
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • #11 10375832
    tmf
    VIP Zasłużony dla elektroda
    Wiesz, zanim zaczniesz pisać takie bajki to może warto najpierw poszukać błędów u siebie. Bo to tak jak z początkującymi, którzy widzą same błędy w kompilatorze. Zacząłbym od poczytania dokładnie na temat funkcji pinu SS i w szczególności co jest odpowiedzialne za jego ustawienie i jaki wpływ ma jego stan na funkcje master SPI. Warto też zauważyć, że SPI może pracować w trybie master i slave, co twój kod ignoruje. I pare innych rzeczy. Piny SPI to zwykłe piny IO i mają taką samą wydajność prądową jak inne piny.
  • #12 10376113
    Andrzej.Woo
    Poziom 9  
    Dokumentacja, dokumentacja, dokumentacja!!!
    Po wykonaniu sekwencji Shift/Load (chwilowy stan niski na SS) na wyjściu SS należy włączyć tryb SPI Master ponieważ nawet programowe sterowanie SS (ustawienie SS jako wyjścia) po przejściu w stan niski dezaktywuje tryb MOSI. Ciekawostką jest jednak fakt, że jeśli SS nie jest sprzężony z zewnętrznym układem poprzez bufor to MSTR się nie zeruje aczkolwiek powinien.

    Dzięki za poświęcony przez was czas.

    P.S. Pin SS jednak istotnie inaczej zachowuje się w trybie SPI i jego wydajność prądowa nie ma nic wspólnego z 40 mA.
  • #13 10376507
    tmf
    VIP Zasłużony dla elektroda
    Oczywiście, że zachowuje się inaczej, co wynika z jego funkcji w sterowaniu transmisją SPI. Nie ma czegoś takiego jak tryb MOSI. Jest master lub slave. Skoro pin nazywa się SS, czyli slave select to logiczne jest, że jego aktywacja powoduje przejście w tryb slave ze wszystkimi tego konsekwencjami. Pin ten jest sterowany w trybie master w pełni programowo i żadne cuda się na nim nie dzieją. W trybie master powinien być wyjściem, lub wejściem w przypadku trybu multimaster i wykrywania kolizji. W takim stanie jego wydajność jest taka jak dla każdego pinu IO. Jak go z kolei przełączysz jako wejście to zmierzony przez ciebie prąd to zapewne jakaś upływność, a nie aktywne sterowanie. Resztę napisali ci koledzy nsvinc i Zbych_.
  • #14 10376864
    Andrzej.Woo
    Poziom 9  
    Masz rację z przełączaniem się SS na tryb wejścia w momencie przejścia w tryb Slave (stan L), to by tłumaczyło tak mały prąd.

    Miałem problemy z uruchomieniem tego ze względu na to, że bez podłączonego bufora MCP1404 czyli bezpośrednio do SL 74HC165 działało poprawnie sterowanie rejestru. Dopiero w momencie podpięcia bramki przestało to działać choć wynika z tego, że od początku nie powinno działać. Wiedziałem, że nie może to być wina częstotliwości, bo SL jest tylko krótkim sygnałem dla zatrzasku więc kwestia ograniczen nie powinna wystąpić.

    Pewnie gdybym zamiast rejestru 165 użył zatrzaskowego 597 to nie miałbym problemów, ale to już inna opowieść.

    Jeszcze raz wielkie dzięki za cierpliwość dla mnie.
  • #15 10378959
    sorex86
    Poziom 15  
    A nie latwiej rozbic SPI na kilka podczesci programowych? Wtedy spada Ci liczba modulow przypadajacych na sprzetowe piny miso,mosi.

    Jak jest rozwiazany problem aktywowania CS dla 128 modułów? Ciekawy jestem :D
  • #16 10379123
    Fredy
    Poziom 27  
    A czy nie lepiej w takim wypadku, zamiast zastanawiać się czy AVR wydoli dać najzwyklejszy tranzystorowy wtónik emiterowy (ewentualnie kilka sztuk).
    Wtedy uzyskujemy bardzo niską impedancję wyjściową i duży prąd Imax.
  • #17 10380168
    Andrzej.Woo
    Poziom 9  
    MCP1404 rozwiązuje sytuację zupełnie więc nie będę dawał innego wzmacniacza. Moduły łączone są szeregowo do jednego koncentratora. więc problem dotyczy tylko linii SCK i SS. Taki jest projekt i tak musi być - z tym nie dyskutuję.

    Czy Atmega daje radę obsłużyć coś takiego? No jasne! Przy częstotliwości SPI 4MHz 128 modułów to jest 1024 bitów, a więc mozna to zrobić 4000 razy na sekundę dla zegara AVR'a 16MHz, a potrzeba "tylko" 100 razy, więc będzie mnóstwo czasu na dodatkowe obliczenia do których ta maszyneria zaostała wymyślona. Pobór prądu przy tym nie jest duży, całość będzie zamknięta w blaszanej, ekranowanej obudowie z własnym zasilaczem impulsowym 5V. Wszystkie scalaki mają własne kondensatory odsprzęgające a każdy moduł dodatkowo zasilany jest prze dławik, więc nie sądzę żeby było źle.
    Wkrótce uruchomione zostanie próbnie jedno takie urządzenie na miesiąc (24h na dobę), więc się przekonamy czy jest ok.

    Do Zbych_'a: Każdy moduł to ok. 4pF na wejściu (pojedyncze wejście bramki serii HC) więc 150 modułów da nam 600 pF. Ścieżki są pomijalne bo są bardzo krótkie i z daleka od masy. Zmierzyliśmy oscyloskopem jak wygląda stan sygnału na końcu klastra 100 modułów i uważam, że jest bardzo dobrze.
REKLAMA