2009-07-15 17 views
5

Właśnie kupiłem Rainbowduino, aby kontrolować obciążenie poszczególnych diod LED (NIE matrycy RGB). Cała dotychczasowa dokumentacja ma na celu kontrolowanie macierzy RGB, czyli , a nie, czego szukam.Problemy z kontrolowaniem Rainbowduino

Jeśli nie znasz się na Rainbowduino, to jest to klon Arduino z 24 kanałami prądu stałego o wartości 120 mA, 8 kanałami sterownika super źródła o wartości 500 mA każdy i szerokim dostosowaniem napięcia wyjściowego z 5 V - 12 V DC. Idealny do jazdy diodami LED. Strona produktu jest tutaj: http://www.seeedstudio.com/blog/?page_id=187

Połączyłem 16 diod LED i chcę mieć możliwość ich włączania i wyłączania indywidualnie za pomocą digitalWrite(). Przesłałem na płytę trochę kodu demo, który tak naprawdę nie działa. Dowiedziałem się, że 8 kanałów źródłowych sterowników można łatwo kontrolować za pomocą digitalWrite() na piny 3-11. Jednak kontrolowanie pozostałych 24 kanałów zlewowych jest trudniejsze. Wygląda na to, że są kontrolowane przez 3 rejestry zmianowe (po jednym), do których mogę uzyskać dostęp tylko za pomocą shiftOut. Nie mam pojęcia, jak to działa. Czy ktoś może wskazać mi właściwy kierunek?

Połowa diod LED jest podłączona do niebieskiego 1-8, a druga połowa do zielonego 1-8. Nogi dodatnie są podłączone do VCC1-2, które zostały ustawione na WYSOKI. Jestem pewien, że obwód jest prawidłowo podłączony, to jest programowanie, z którym mam problemy.

Sprawdziłem przykładowy kod dostarczany z Rainbowduino, ale nie mogę zrozumieć. Jak mogę rozwiązać ten problem?

+0

Obraz z mojego obwodu tej pory: http://farm3.static.flickr.com/2436/3716019895_99b95b30c6_b.jpg Również tutaj znajduje się link do przykładowego szkicu Rainbowduino: http://www.seeedstudio.com/depot/images/product/RaibowduinoCMD_Bata.rar – James

+0

Co masz na myśli, mówiąc o "rejestrze 3-zmianowym"? – unwind

+0

To, co mi powiedziano przez kogoś innego, zakładam, że jest to 3-bitowy rejestr przesuwny. – James

Odpowiedz

3

Zastosowanie rejestrów przesuwnych do multipleksowania (lub de-multiplex, w zależności od punktu widzenia) wejść/wyjść jest bardzo powszechne w elektronice cyfrowej.

Zasadniczo sprzedajesz zapisujące się szpilki na kontrolerze, ponieważ do projektu trzeba włożyć kolejny chip (rejestr przesuwny).

W tym przypadku rejestr działa jako konwerter szeregowy-równoległy; ma szeregową linię wejściową, która jest zasilana bitami z twojego procesora. Ma również 8 wyjść równoległych, podłączonych do 8-bitowej pamięci, która jest ładowana szeregowo z procesora. Za pomocą tego można "przesunąć" 8 bitów danych na pojedynczym pinezce (plus jeden pin na taktowanie, zwykle), które następnie są przechowywane w rejestrze przesuwnym i mogą napędzać równolegle 8 diod LED.

W tym konkretnym przypadku musisz dowiedzieć się, które piny portów AVR zawierają rejestry przesuwne (do których podłączone są sterowniki prądu stałego MBI5168 z rejestrami przesuwnymi). Powinny być powiązane do pary wyjść, jedna dla danych i jedna dla zegara. Gdy znasz już te szpilki, powinieneś być w stanie je sam prowadzić za pomocą polecenia ShiftOut.

Kopanie nieco dalej, this sample "sketch" zawiera następujące definicje, w pliku o nazwie „Rainbow.h”:

//MBI5168 
#define SH_DIR_OE DDRC 
#define SH_DIR_SDI DDRC 
#define SH_DIR_CLK DDRC 
#define SH_DIR_LE DDRC 

#define SH_BIT_OE 0x08 
#define SH_BIT_SDI 0x01 
#define SH_BIT_CLK 0x02 
#define SH_BIT_LE 0x04 

#define SH_PORT_OE PORTC 
#define SH_PORT_SDI PORTC 
#define SH_PORT_CLK PORTC 
#define SH_PORT_LE PORTC 

Jest to oczywiście całkowita cyfrowa „ze słyszenia” (nie właścicielem urządzenia, Nigdy nie zaprogramowałem żadnego rodzaju * duino), ale powiedziałbym, że to system wyrzucający pociski, którego szukasz.

interpretować to tak:

  • PORTC jedną podłączony do rejestrów przesuwnych, wszystkie sworznie sterujące są PORTC.
  • Cztery szpilki są dedykowane (zamiast optymistycznych dwóch wymienionych powyżej).
  • Zegar jest pinem PORTC: 2, a dane to PORTC: 1.
+0

Dzięki temu rozwiń, zapoznałem się z podstawowymi rejestrami przesuwnymi, ale nie wiem, które 2 porty (pin danych i pin zegara) muszę użyć dla każdego kanału. – James

+0

Wielkie dzięki ponownie odpręż się. Użyłem twojej odpowiedzi wraz z przykładowym kodem, który Rainbowduino opublikował wczoraj (tutaj: http://www.seeedstudio.com/blog/?p=512), a teraz działa doskonale. Wideo tutaj: http://www.youtube.com/watch?v=t9m28RFg14E – James

2

Kontrolowanie każdej pojedynczej diody LED jest dość czasochłonne, lepiej jest myśleć w rzędach, podczas gdy każdy kolor diody LED jest prezentowany jako bitowy, czyli 8 bitów x 3 kolory (czerwony, zielony, niebieski). Napisałem małą bibliotekę Rainbowduino który pozwala ustawić każdy wiersz lub ramkę łatwo:

Read my blog post on that

+1

ah, an i zobacz mój edytor Rainbowduino: mtXcontrol również: http://www.rngtng.com/mtXcontrol – RngTng