Elektroda.pl
Elektroda.pl
X

Search our partners

Find the latest content on electronic components. Datasheets.com
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

Zwiększenie wyjść PWM do 768 z jednej platformy Arduino

emer2 27 Jul 2011 13:45 9811 7
  • Zwiększenie wyjść PWM do 768 z jednej platformy Arduino

    Chciałbym przedstawić artykuł, opisujący projekt zwiększenia "możliwości" Arduino. Autor projektu proponuje użycie rejestrów przesuwnych do zwiększenia liczby wyprowadzeń PWM z jednej platformy Arduino. Liczba takich wyprowadzeń jest zdumiewająca ponieważ aż 768.



    Autor - Elco Jacobs - jest studentem elektrotechniki. Projekt to efekt prac związanych ze sterowaniem większej ilości źródeł światła. Na filmiku znajdującym się na stronie źródłowej znajduje się projekt przedstawionego pomysłu z wykorzystaniem 16 diod LED RGB. Jest to układ, który nie wykorzystuje drogich sterowników diod LED RGB, ale zamiast z nich korzysta z rejestru przesuwnego 595. Autor obliczył, że do platformy Arduino można podłączyć do 96 rejestrów przesuwnych, z kolei do każdego takiego rejestru - 8 diod LED, z zadowalającym skutkiem. Jest to możliwe dzięki zoptymalizowanemu oprogramowaniu, które jest zdolne do pracy z częstotliwością rzędu 1,33 MHz. Autor uważa, że jego program działa szybko, ale prosi o przetestowanie jego możliwości. Jeżeli w jakiś sposób możliwe jest przyśpieszenia działania, to prosi o wpis na forum projektu.

    Poniżej link do forum, na którym ukazał się projekt:
    Link

    Poniżej link do strony źródłowej projektu:
    Link

    Cool? Ranking DIY
    Can you write similar article? Send message to me and you will get SD card 64GB.
    About Author
    emer2
    Translator, editor
    Offline 
    Has specialization in: projektowanie i montaż elektroniki
    emer2 wrote 434 posts with rating 54, helped 0 times. Live in city Warszawa. Been with us since 2008 year.
  • #2
    marian.dxd
    Level 11  
    Czyli ten student wymyślił te układy 595?
  • #3
    filu1
    Level 11  
    Według mnie to student po prostu rozwiązał problem używając rejestrów 595. Czyli użył istniejących układów w odpowiedni dla siebie sposób. Coś niecoś o tych rejestrach można znaleźć TUTAJ
  • #4
    marian.dxd
    Level 11  
    Dziękuje za rzeczowe wyjaśnienie. W takim razie jak wszystko jest jasne ja niedługo na forum opisze swój problem, jaki miałem z miganiem diody na tranzystorach i opisze go w dziale DIY.

    Pozdrawiam.
  • #6
    marian.dxd
    Level 11  
    szymon122 wrote:
    Nie rozumiem skąd to ograniczenie do 96 sztuk 74hc595
    Łącząc pin DS z Q7' poprzedniego układu możemy uzyskać nieskończoną ilość wyjść (prawie). Mylę się?


    Ale autor zapewne obliczył maksymalną ilość układów jakie można podłączyć bez widocznego efektu migotania diod, czyli po ludzku mówiąc: żeby diody nie mrygały. Bo dokładając kolejne CMOS'y musisz zwiększyć częstotliwość sygnały taktującego.

    Trzeba to tak dobrać, aby procesor wyrabiał, bo przecież przerwanie nie może być za często a i dane trzeba obrobić i wysłać. Trzeba sobie zostawić troszkę cykli.

    Pozdrawiam :)
  • #7
    BoskiDialer
    Level 34  
    szymon122 wrote:
    Nie rozumiem skąd to ograniczenie do 96 sztuk 74hc595
    Łącząc pin DS z Q7' poprzedniego układu możemy uzyskać nieskończoną ilość wyjść (prawie). Mylę się?

    Ograniczeniem może być wspomniane zapewnienie niemigotania całości. Drugie ograniczenie to też już wspomniana konieczność zapewnienia cykli dla właściwego programu. Dodatkowo ograniczeniem może być ilość pamięci RAM.

    Drugie ograniczenie (konieczność zapewnienia dodatkowych cykli) bardzo łatwo spełnić zostawiając sobie około 85% czasu procesora chcąc uzyskać 256 poziomów jasności, ale konieczne jest do tego odpowiednie sterowanie. Większość osób steruje tak, że załącza wszystkie diody jednocześnie, ale są one wygaszane dopiero w odpowiednich momentach. W takim przypadku mając 256 dyskretnych chwil wyłączenia, można wydłużać łańcuch aż procesor będzie chodził na 100% nie mając już wolnych cykli. Wtedy lekko modyfikuje się kod, tak aby zapalanie następowało w jednej z pierwszych 16 chwil (procesor przez 6,25% czasu będzie zajęty w 100%), podczas gdy przez pozostałe 240 chwil, przetwarzanie przeprowadza się tylko w co 16 chwili (93,75% czasu procesor zajęty w 6,25%) - sumarycznie procesor musi wysyłać dane do łańcucha tylko 32 razy.

    Ograniczenie wynikające z konieczności zwiększania częstotliwości aby przeładować cały łańcuch w z góry ustalonym czasie też można lekko naciągnąć: można na początku aktualizować wyjścia w co 3 chwili, a od pewnego momentu (dobierane arbitralnie) w co 4 chwili. Uzyskuje się przez to większe odstępy między aktualizacjami (możliwość wysłania większej liczby danych), ale wiąże się to z komplikacją generowania wartości: trzeba stosować jakiś LUT 8b->16b, który umożliwiał by przeliczenie w której chwili (z dostępnych) zacząć świecić diodą a w której ją zgasić. Dodatkowo niektóre długości mogą być nieosiągalne (kilka najniższych i kilka najwyższych).
  • #8
    phanick
    Level 28  
    Przecież pomysł z HC595 jest `chory` - przesłanie każdego bitu wymaga jednego taktu.
    Dużo lepszym pomysłem jest 574 - za jednym zamachem można wystawić 8 bitów.