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

Ile ATmega można połączyć równolegle...

autoservice 06 Kwi 2010 18:51 3173 20
  • #1 7927856
    autoservice
    Poziom 20  
    Witam
    Jest jedna ATmega16 pracująca jako master i wystawiająca daną 8 bitową na dany port. Chcę tą daną wysłać jednocześnie do kilku ATmega8 podłączają bezpośrednio pod określony ten sam port we wszystkich ATmega8, czyli taka równoległa magistrala z masterem i kilkoma slave'ami. Ciekawi mnie ile sztuk ATmega8 mogę podłączyć aby pojemności wejściowe były jeszcze dość szybko przeładowywane i stabilne dane pojawiały się dość szybko na wejściach mega8. Tzn. wystawiam daną na port i natychmiast w następnym cyklu daje sygnał przerwania do wszystkich Mega8 aby odczytały stan portu na wejściu. Mam na to dajmy 50-100us. W takim czasie muszą zostać przeładowane pojemności wejściowe wszystkich atmega8 i dane muszą być stabilne po tym czasie. Co zrobić żeby można było podłączyć dużą liczbę takich atmega8? Może na każdy bit zastosować taki driver jak do mosfet'ów? Lub zwykły tranzystor i podciągniecie do plusa...
    Dzięki.
    Pzdr.
  • #2 7927911
    _Robak_
    Poziom 33  
    A ile ich chcesz podłączyć? Generalnie to jest wskaźnik który to określa, nie pamiętam jak się nazywał ale na pewno uda Ci się go znaleźć. Jeśli chcesz natomiast podejść do tego bardziej akademicko to możesz to policzyć ze wzoru I=C*dU/dt. Gdzie dU to masz 5V, dt to czas narastania zbocza, C to będzie suma pojemności scieżek i pinów ATmeg, prąd ze wzory nie może przekroczyć 25(40)mA. A bez liczenia to dałbym do maks 10 atmeg, jeśli chcesz więcej to, na powiedzmy 5 układów, dałbym jeden bufor trójstanowy.
  • #3 7927920
    melon 16
    Poziom 14  
    Witam.
    ATmega ma sporą rezystancję wejściową, więc podejrzewam ,że w głównej mierze zależy to od długości przewodów.
  • #4 7928246
    autoservice
    Poziom 20  
    Rezystancja tu raczej nie ma nic do znaczenia, głównie pojemność pinu, 10pF. A co da bufor 3-stanowy skoro on też ma max. 20...40mA. Pozostają chyba tylko driver'y na tranzystorze + rezystor albo te do mosfet'ów.
    Pzdr.
  • #5 7928268
    _Robak_
    Poziom 33  
    Da to tyle, że z każdego bufora dasz np. 5 atmeg, i możesz dać np. 5 buforów czyli już 25 atmeg. Proste.
    Tyle że nie chcesz napisać ile musisz podczepić tych atmeg, więc to takie gdybanie tylko.
  • #6 7928300
    autoservice
    Poziom 20  
    Chcę podłączyć tyle ile się da 5...10...30, póki co bezpośrednio bez sterowników. Bo z driverem to wiem, że pociągnie i nawet 100szt. Ale dobry driver też kosztuje kilka zł co najmniej.
    Pzdr.
  • #7 7928338
    _Robak_
    Poziom 33  
    To jak na raz przełączysz 30 pinów, to możesz mieć ładne dzwonienie na masie;) Lepiej wtedy poprowadź ja starannie, no i kondensatorów nie żałuj.
  • #8 7928460
    rpal
    Poziom 27  
    i może pomyśl o buforach? Albo zmnień podejście do sprawy i inaczej rozwiąż problem choćby poprzez I2C albo SPI.
  • #9 7928479
    autoservice
    Poziom 20  
    No właśnie transmisja szeregowa odpada. Liczy się prędkość, każda ns, więc tylko równoległa. Odległości bardzo małe, kilka cm.
    Pzdr.
  • #10 7928534
    tmf
    VIP Zasłużony dla elektroda
    No chyba nie kilka cm, skoro chcesz podłączyć nawet 100 ATMeg, nawet jedna na drugiej to może być wiecej :) Magistrale szeregowe w takich dziwnych układach bywają szybsze niż równoległe, zobacz np. magistrale w układzie LVDS, chociażby SATA czy PCI-E. Ale wracając do tematu - napisałeś, że interesują cie czasy rzędu 100us. To jest zaledwie 10kHz w najgorszym wypadku, czyli niewiele. Przy tak niskiej predkości to wrzuć bufor na pin TxD i łącz dowolnie - zawsze to łatwiej ciągnąć jedną ścieżkę niż co najmniej 9. A jeśli się upierasz z pomysłem na magistralę równoległa to wzór już ci podano, z tym, że zamiast 5V daj jakieś 2,5V, wydajność prądową pinu ATMegi możesz przyjąć na ok. 20mA.
  • #11 7928576
    autoservice
    Poziom 20  
    Szeregowa szybsza jakim cudem? Wystawienie danej z pamięci sram na port to 2 cykle w atmegach. Szeregowo po SPI to 8 cykli, ale, że max. zegar SPI to SYS_CLK/2 to tak jakby 16 cykli + 2 cykle wpisanie danej do rejestru SPI.
    Więc odpada. Nic innego sprzętowego nie chcę dorzucać, najprostszy i najszybszy przesył danych z jednej atmegi do drugiej.
    Pzdr.
  • #12 7928593
    _Robak_
    Poziom 33  
    Chcesz robić jakieś szybsze rzeczy, weź ARMa;) Cena ta sama.
  • #13 7928631
    rpal
    Poziom 27  
    Ja bym koledze proponował aby jednak zwrócić uwagę na transmisję szeregową i może nawet obmyślenie sobie jakiegoś przymitywnego protokołu niosącego w przesyłanych informacjach zarówno adresu układu do którego dane są adresowane jak i samych danych. I2C jest raczej za wolne ale coś będącego tego namiastką tylko np. rząd wielkości szybsze. Przy takiej ilości scalaków w magistrali równoległej samo PCB będzie nie lada wyzwaniem. A transmisja szeregowa uprości to zdecydowanie. No chyba że SPI ale tutaj już samo wybieranie adresu slave będzie wymagało poświęcenia dużej ilości pinów albo wstawienie latcha aby tę ilośc powielić. Natomiast kanapka z atmeg może i jest prosta w wykonaniu ale jakoś trąci mi amatorszczyzna taką jak np. dokładanie pamięci w poczciwych atari gdzie takie kanapki były normą.Czy ktoś w gogóle mierzył pojemności tego typu rozwiązań?
  • #14 7928817
    tmf
    VIP Zasłużony dla elektroda
    autoservice, pisałeś, że chcesz transmitować kolejne bajty co 100us... Czyli czasu jest kupa. Pytanie pomocnicze - po co chcesz dać 100 procesorów na jednej płytce? Bo przypuszczam, że tu masz jakiś błąd w założeniach.
  • #15 7928942
    asembler
    Poziom 32  
    To bedzie kopiarka kart?
  • #16 7929041
    Konto nie istnieje
    Poziom 1  
  • #17 7929354
    autoservice
    Poziom 20  
    Wszystko potrzebne kilkadziesiąt sprzętowych kanałów PWM 8-bitowych, muszą być sprzętowe bo mega16 jako master ma robić coś innego w tym czasie a uaktualnienie wszystkich wartości PWM we wszystkich kanałach ma trwać możliwie minimalnie, max. 1us na kanał czyli np. 100us we wszystkich 100 kanałach. To też jest warunek konieczny 100kanałów/100us. Przy kwarcu 16MHz daje mi to 16cykli na wystawienie danej, odczyt przed drugi procek i załadowanie do licznika.
    Software'owy pwm odpada z tego, że master robi coś innego a w slave też trudno zrobić software'owy bo musi cały czas generować PWM.
    Pzdr.
  • #18 7929396
    tmf
    VIP Zasłużony dla elektroda
    To zamiast dziwnie kombinować wstaw tam jakies FPGA, wszystkie PWM zrobisz sprzętowo w jednej kostce, a połączenie z procesorem stanie się banalne, w przeciwieństwie do łączenia 100 procesorów, które zadaniem banalnym nie jest...
  • #19 7929445
    autoservice
    Poziom 20  
    No właśnie na programowalnej logice się nie znam, jeszcze ;) To może zapytam tak...czy jest taka "kość" FPGA, która od strony procka będzie widziana jako pamięć SRAM lub inna, tak abym mógł bardzo szybko wpisać daną wartość PWM dla danego kanału. Oczywiście muszę mieć możliwość wpisywania wartość wtedy kiedy procesor tego chce, bez czekania czy będzie coś wolne czy nie. Gdy już będzie załadowana dana z wartością PWM do FPGA to logika w środku będzie porównywać wartość z jakimś licznikiem w środku który będzie sobie leciał od 0 do 255 (8 bitów PWM). Każda komórka z daną ma być przypisana do danego jednego pinu FPGA i jeśli wartość jest mniejsza niż ta w liczniku to stan 0 jeśli większa to 1. Przy liczniku=0 zerowanie wszystkich pinów. Da się coś takiego zrobić na układach programowalnych?
    Pzdr.
  • Pomocny post
    #20 7929472
    tmf
    VIP Zasłużony dla elektroda
    Oczywiście, że się da, to wręcz idealne dla nich zastosowanie. Jeśli nie znasz VHDLa, czy jego odmian to pogoogluj, kursów w necie jest pełno. A jak nie masz ochoty się uczyć to w np. WebISE (darmowym) Xilinxa możesz po prostu narysować schemat elektryczny z dostępnej biblioteki układów, a program go zsyntetyzuje i będziesz miał kostkę o pożądanych funkcjach.
REKLAMA