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

[at89c2051][C]Podświetlenie schodów LED - rejestr przesuwny 74HC164

manieku 10 Sty 2012 19:35 4545 8
  • #1 10 Sty 2012 19:35
    manieku
    Poziom 9  

    Witam,
    Próbuje zrobić podświetlenie 15 schodków diodami LED.

    Chcę uzyskać efekt jak na filmiku:


    Link

    Dopóki korzystałem z jednego rejestru przesuwnego 74HC164 i 8 diod led, wszystko było ok.
    Teraz jestem na etapie zwiększania ilości diod do 15.
    Dołożyłem drugi rejestr i mam problem z programem. W tej chwili zapalają się z obu rejestrów równolegle.
    Tzn. LED1 z pierwszego rejestru razem z LED1 z drugiego rejestru, LED2 z pierwszego rejestru razem z LED2 z drugiego rejestru itd.
    Siedzę nad tym dwa dni, kombinuję na różne sposoby i nic mi nie wychodzi :( Wydaje mi się, że do funkcji zapalania i gaszenia trzeba dołożyć pętlę - coś w rodzaju for(b=9;b<7;b++) ale jak pisałem wcześniej nie mogę sobie z tym poradzić.

    Gdyby mógł mi ktoś pomóc, byłbym bardzo wdzięczny.
    Pozdrawiam

    Poniżej schemat i program:
    [at89c2051][C]Podświetlenie schodów LED - rejestr przesuwny 74HC164

    Kod: csharp
    Zaloguj się, aby zobaczyć kod


    W załączniku plik do symulatora proteus i program w c

    0 8
  • #2 10 Sty 2012 20:42
    excray
    Poziom 39  

    Na początek to popraw schemat. Diody LED to nie żarówki i nie podłącza się ich w ten sposób. Smażysz 74164. Nie wiem czy nawet przypadkiem z tego powodu nie działa Ci to wszystko wadliwie. Kodu nie sprawdzałem.

    0
  • #3 10 Sty 2012 21:02
    manieku
    Poziom 9  

    Tutaj dałem uproszczony schemat, aby tylko pokazać połączenie i żeby było bardziej czytelne.
    Docelowo każdy led będzie z układem rozjaśniania i przygaszania.
    Teraz na 100% źle działa z powodu kodu :(

    0
  • #4 10 Sty 2012 21:09
    excray
    Poziom 39  

    Jak masz 2 rejestry przesuwne połączone w ten sposób to musisz 16 razy podać sygnał CLK i wysłać 16 bitów do rejestru żeby wypełniły Ci się oba a z tego co na szybko widzę to wysyłasz tylko 8 bitów i podajesz 8 sygnałów CLK.

    0
  • #5 10 Sty 2012 21:21
    manieku
    Poziom 9  

    Dokładnie o to chodzi, tylko nie wiem jak pętle napisać, żeby po pierwszych ośmiu, wrócić na początek tabeli "pattern1" i zacząć wpisywać do drugiego rejestru.

    0
  • Pomocny post
    #6 10 Sty 2012 21:48
    excray
    Poziom 39  

    Źle myślisz. Nie możesz wróćić na początek bo jak wyślesz te 8 bitów do drugiego rejestru to otrzymasz dokładnie to z czym masz problem czyli pierwsza dioda na pierwszym i drugim rejestrze się świeci. Musisz mieć 16-sto bitowy wzór i go wysyłać na przykład:
    0000000000000000
    1000000000000000
    1100000000000000
    1110000000000000
    ...
    0000000000011111
    0000000000001111
    0000000000000111
    0000000000000011
    0000000000000001
    0000000000000000
    czyli musisz mieć pattern zadeklarowany jako unsigned int i wysyłać go 16-stoma cyklami CLK.

    0
  • #7 10 Sty 2012 22:03
    manieku
    Poziom 9  

    Dzięki :) Jutro będę kombinował tak jak napisałeś.

    0
  • #8 10 Sty 2012 22:44
    spanko
    Poziom 11  

    Przepraszam że wtrącę ale tak patrzę na ten schemat i czy wg niego nie żeby zapalić wszystkie diody po kolei nie wystarczy podać 1 na wejście A i B pierwszego rejestru przez 16 cykli. Analogicznie będzie ze zgaszeniem tyle ze przez 16 cykli podajemy 0. Niech mnie koledzy poprawią jeśli się mylę.

    0
  • #9 10 Sty 2012 22:47
    excray
    Poziom 39  

    spanko napisał:
    Przepraszam że wtrącę ale tak patrzę na ten schemat i czy wg niego nie żeby zapalić wszystkie diody po kolei nie wystarczy podać 1 na wejście A i B pierwszego rejestru przez 16 cykli. Analogicznie będzie ze zgaszeniem tyle ze przez 16 cykli podajemy 0. Niech mnie koledzy poprawią jeśli się mylę.

    Dobrze myślisz.

    0