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.

[mega16][bascom] Sterowanie 25 LED - programowy PWM

gray77 21 Mar 2011 18:31 12625 66
  • #31 21 Mar 2011 18:31
    SylwekK
    Poziom 29  

    Wg programu teoretycznie wszystko powinno działać.
    Najlepiej jak byś schemat tu jeszcze dołączył, może coś przełazi między ścieżkami podając z zewnątrz na port c stan wysoki. Sprawdź montaż.

  • #32 21 Mar 2011 18:42
    gray77
    Poziom 12  

    SylwekK napisał:
    Najlepiej jak byś schemat tu jeszcze dołączył, może coś przełazi między ścieżkami podając z zewnątrz na port c stan wysoki. Sprawdź montaż.
    Schematem i calym kodem zarzuce wieczorem jak wroce z pracy.

    PS. Sorki za brak ogonkow ale komp w pracy nie maja polskiego jezyka niestety...

  • #33 21 Mar 2011 20:18
    xury
    Poziom 38  

    W instrukcjach warunkowych nie stosuje się Return. To podstawa podstaw - taka niemalże konstytucja.

  • #34 21 Mar 2011 20:28
    gray77
    Poziom 12  

    xury napisał:
    W instrukcjach warunkowych nie stosuje się Return. To podstawa podstaw - taka niemalże konstytucja.
    Tego nie wiedzialem. Bede sie stosowal do tego. Bede musial zmienic troszke program. Chociaz to dziwne bo w innym sterowniku tez tak zrobilem i wszystko dziala do tej pory jak nalezy.

  • #35 21 Mar 2011 20:32
    SylwekK
    Poziom 29  

    Może i działa ale return powinien być jeden i na pewno nie w instrukcji warunkowej, bo zdarzyć się może sytuacja, że ... nigdy nie powróci skąd przyszedł.

  • #36 21 Mar 2011 22:11
    gray77
    Poziom 12  

    SylwekK napisał:
    Wg programu teoretycznie wszystko powinno działać.
    Najlepiej jak byś schemat tu jeszcze dołączył, może coś przełazi między ścieżkami podając z zewnątrz na port c stan wysoki. Sprawdź montaż.


    Przewertowalem elke i znalazlem. Ktos mial ten sam problem. Trzeba wylaczyc JTAGa.

  • #37 22 Mar 2011 08:05
    SylwekK
    Poziom 29  
  • #38 23 Mar 2011 10:46
    gray77
    Poziom 12  

    SylwekK napisał:
    To czekamy na prezentację jak już wszystko będzie działać :)
    Prezentacja na pewno będzie jak już wszystko złożę w całość.

    Jak na razie w wolnych chwilach pomiędzy zajęciami staram się dopracowywać wszystko na płytce stykowej.
    Zaobserwowałem dziwną rzecz. Atmega po kilku przejściach programu (czyt. po kilku uaktywnieniach ledów z czujnika) samoistnie potrafi się zresetować. Nie występuje to zawsze, tylko czasami. Zwłaszcza wtedy, gdy uruchomienie czujnika następuje praktycznie zaraz po wygaszeniu. Nie wiem co jest powodem. Może coś w programie jest nie tak, jeśli ktoś mógłby rzucić okiem...
    Kod: vb
    Zaloguj się, aby zobaczyć kod


    No i jeszcze schemat.
    Ledy będą podłączone tak:
    port uc -> rezystor -> baza BC547
    emiter BC547 do masy
    kolektor BC547 na katodę led -> opornik
    i teraz mam bezpośrednio do portu OC0 uC.
    Chciałbym zastosować znów tranzystor do sterowania anodami przez PWM. Nie mogę podłączyć wszystkich bezpośrednio do uC bo się upali przy włączeniu wszystkich na raz.
    Nie za bardzo wiem jaki tranzystor zastosować i jak go podłączyć. Sterowanie z PWM bedzie +5v - świecą; 0v - nie świecą.

    Pomoże ktoś, proszę?

  • #39 23 Mar 2011 10:49
    SylwekK
    Poziom 29  
  • #40 23 Mar 2011 12:32
    gray77
    Poziom 12  

    SylwekK napisał:
    Najprawdopodobniej stos Ci się zapycha. Może masz gdzieś jakiś zbłąkany return albo gosub.

    Przejrzałem program i nie znalazłem żadnego zagubionego skoku lub powrotu. Jedyne co mogłoby bruździć w programie to jak na razie pusta procedura dla PIR2, zakomentowałem ją chwilowo i zobaczymy.

    A co z tranzystorem?

  • #41 23 Mar 2011 12:44
    SylwekK
    Poziom 29  

    Sterowanie tranzystorem przez rezystor ok, tylko tak teraz przejrzałem ten program i jakoś jego działanie wydaje mi się ogólnie pogmatwane... Jaki właściwie efekt chcesz uzyskać, bo jeśli to ma być kolejne stopniowe rozjaśnianie led to zdecydowanie prościej można to zrobić.

  • #42 23 Mar 2011 12:56
    gray77
    Poziom 12  

    W tej chwili to wygląda tak (i chyba już tak pozostanie):
    Porty A, C, D mikrokontrolera sterują tranzystorami, które załączają masę na diodę (miałem tylko takie tranzystory na stanie i musiałem je wykorzystać).
    Po wykryciu ruchu podaję +5V poprzez pin pwm (OC0=0), do którego są podpięte wszystkie anody ledów.
    Następnie załączam kolejne piny portu A, potem C i D. Są one ustawiane w stan wysoki (sterują tranzystorem i gnd dla led jest załączone). Po upłynięciu zadanego czasu PWM zwiększa się (OC0--->255) więc napięcie zbliża się do masy i ledy wygasają.
    Chcę dać tranzystor na wyjście OC0 atmegi by jej nie upalić, gdy wszystkie ledy są załączone. Popłynie za duży prąd przez megę, tak mi się wydaje.

    Mam nadzieję, że w miarę jasno wyjaśniłem co i jak. Za chwilkę naszkicuję schemat i dorzucę.

    Edit:
    [mega16][bascom] Sterowanie 25 LED - programowy PWM
    To tak ogólnikowo. Dla każdego portu będzie to powtórzone. I właśnie nie chciałbym anod ledów podłączać bezpośrednio pod uC tylko przez tranzystor.
    Czy to dobre myślenie?

  • #44 01 Kwi 2011 18:55
    gray77
    Poziom 12  

    matii_speed napisał:
    Jak idzie praca nad projektem jestem ciekawy efektu:) Jeszcze takie pytanko, na jakim procku to robisz mega 32 czy 16?


    Prace teraz ida powoli bo nadmiar prac wiosennych mnie przystopowal. Miedzyczasie testuje i ulepszam program.

    Uklad bedzie na 16-tce.

    Probowalem ominac ten wspolny tranzystor ale niestety po podpieciu 15 ledow, mega sie wiesza, pewnie za duzy prad idzie przez nia. To tak w ramach eksperymentow :)
    Jak uklad bedzie gotowy, nie omieszkam zaprezentowac wersji finalnej...

    Edit:
    Chciałbym zaprezentować wersję testową która jeszcze jest na płytce stykowej. Projekt płytki już jest, czekam tylko na wytrawiacz.
    Proszę wszystkich o wyrozumiałość, opinie i uwagi. Nadmienię, że jest to moja pierwsza taka płytka z prawdziwego zdarzenia. Będzie przenoszona termotransferem na papierze z gazety - próby już wyszły pomyślnie. Dla wyjadaczy tematu schemat i pcb mogą być trochę chaotyczne, ale jak pisałem wcześniej to mój pierwszy poważniejszy projekt.
    W załączniku schemat, pcb i program - jeśli ktoś chciałby podglądnąć. (eagle 5.9.0; bascom 1.11.9.5)

  • #45 08 Kwi 2011 13:01
    gray77
    Poziom 12  

    W poście wyżej dodałem schematy i program.

    Proszę o konstruktywne opinie i uwagi, jako że płytka jeszcze nie wytrawiona.

    I pytanie bo wiele osób ma odmienne zdanie. Kiedy wiercić otwory na pcb? Przed wytrawieniem czy po?

  • #46 09 Kwi 2011 18:05
    61320
    Użytkownik usunął konto  
  • #47 15 Kwi 2011 13:20
    gray77
    Poziom 12  

    No i płytka wytrawiona, elementy wlutowane. PCB przeprojektowałem ręcznie, bo autorouter za bardzo komplikował prowadzenie ścieżek.
    Pozostało zamontować i podpiąć listwę led-ów.
    Niedługo zamieszczę filmik z prezentacji a jeśli będzie zapotrzebowanie to wrzucę finalny kod.

    [mega16][bascom] Sterowanie 25 LED - programowy PWM [mega16][bascom] Sterowanie 25 LED - programowy PWM

  • #48 16 Kwi 2011 21:45
    asembler
    Poziom 32  

    Stosując dodatkowe rejestry 74hc595 Atmegą mozna przemiatać 100 000 diod Dodatkow przy ich zastosowaniu możemy rozbudowywać urządzenie o kolejne diody a procesor mógłby byc mniejszy i także pozbylibysmy sie tylu tranzystorów i oporników.
    Tu mamy 25 diod wiec sterownie jasnością poprzez przemiatanie nie powinno sprawiać zadnego problemu.
    No cóż rady spóźnione skoro już jest płyka.

  • #49 16 Kwi 2011 23:05
    gray77
    Poziom 12  

    No tak. Płytka już zrobiona więc po sprawie.

    Ale tak na przyszłość (bo może się przydać) czy da się za pomocą tych rejestrów przesyłać również sygnał PWM? I jak je obsłużyć z Bascoma? Może jakiś kawałeczek przykładowego kodu z samą obsługą mógłbym prosić? Wtedy może mógłbym coś ładniejszego zaprojektować...
    Sorki, że tak laicko ale dopiero zaczynam poznawać tajniki elektroniki i wiele rzeczy jest dla mnie jeszcze czarną magią, która jednak działa :)

  • #51 19 Kwi 2011 12:10
    gray77
    Poziom 12  

    Filmik bedzie juz niedlugo. Niestety nawal pracy spowalnia postepy. Pozostalo jeszcze tylko zamontowac listwe z podswietleniem i polaczyc to wszystko. Na samych ledach wpietych w sterownik nie bedzie efektu. Na pewno filmik zamieszcze, badz co badz to moze prosta dprawa ale dla mnie to pierwszy taki "profesjonalny" uklad. Zawsze na pajaka sie laczylo albo na plytce uniwersalnej.

  • #52 19 Kwi 2011 22:14
    matii_speed
    Poziom 16  

    Czekam na wsad i film.
    Pytanie dla profesjonalistów czy da się zmienić kod aby wykorzystać jeszcze jeden pin megi16 i zrobić dodatkowe podświetlenie stałe tzn np chcesz coś robić na wjeździe chcesz żeby było jasno więc włączasz klawisz i wszystkie się zaświecają?

  • #55 20 Kwi 2011 22:02
    gray77
    Poziom 12  

    matii_speed napisał:
    Pytanie dla profesjonalistów czy da się zmienić kod aby wykorzystać jeszcze jeden pin megi16 i zrobić dodatkowe podświetlenie stałe tzn np chcesz coś robić na wjeździe chcesz żeby było jasno więc włączasz klawisz i wszystkie się zaświecają?

    Tak po prawdzie to program w tej chwili zajmuje tylko 23% 16-tki więc pole do popisu jest. I jest kilka wolnych pinów do wykorzystania również. Tylko wyobraźnia programisty ogranicza, co można zrobić z tymi światełkami. Dzisiaj zamontowałem czujniki i pozostaje jeszcze to wszystko połączyć w całość. A korzystając z wolnych chwil w pracy dodaję nowe efekty. Borykam się tylko z jedną sprawą.

    I tutaj pytanie do znających temat:
    Ledy mam na portach A, C i D.
    Chciałbym zrobić taki efekt, że:
    - led zapala się od powiedzmy prawej stronie i biegnie jako punkt do lewej
    - po osiągnięciu lewej strony pozostaje zapalony
    - następny znów od prawej do tej zapalonej biegnie jako punkt
    - dobiega i już mamy dwa ledy zapalone
    - itd
    czyli coś takiego jak układanie linii z kolejnych punktów przybiegających z jednej strony. Czy ktoś wie jak to zrobić prościej niż operowanie opcjami Set port i Reset port, bo tak to pisania co nie miara i niezbyt estetyczny kod powstanie.

    Proszę o pomoc jak ułożyć algorytm...

  • #56 20 Kwi 2011 23:47
    asembler
    Poziom 32  

    gray77 napisał:

    Proszę o pomoc jak ułożyć algorytm...

    Chcesz sobie całą przyjemnośc z programowania zabrać?
    Bo jak już sie zna jakis jezyk to wklepanie algorytmu to tylko fizyczna praca.

  • #57 21 Kwi 2011 14:48
    SylwekK
    Poziom 29  

    gray77 napisał:


    I tutaj pytanie do znających temat:
    Ledy mam na portach A, C i D.
    Chciałbym zrobić taki efekt, że:
    - led zapala się od powiedzmy prawej stronie i biegnie jako punkt do lewej
    - po osiągnięciu lewej strony pozostaje zapalony
    - następny znów od prawej do tej zapalonej biegnie jako punkt
    - dobiega i już mamy dwa ledy zapalone
    - itd
    czyli coś takiego jak układanie linii z kolejnych punktów przybiegających z jednej strony. Czy ktoś wie jak to zrobić prościej niż operowanie opcjami Set port i Reset port, bo tak to pisania co nie miara i niezbyt estetyczny kod powstanie.

    Proszę o pomoc jak ułożyć algorytm...


    A pętle zagnieżdżone coś Ci mówią ;) ... ?

  • #58 23 Kwi 2011 20:15
    gray77
    Poziom 12  

    Słuchajcie. Napotkałem dziwna rzecz.

    Czujniki PIR wyzwalają logiczną "1" piny procesora i wszystko jest ok.
    Programator mam podpięty do płytki, bo międzyczasie coś jeszcze zmieniam w programie. Wszystko gra. Problem zaczyna się w momencie odpięcia programatora. Wszystko nadal działa z wyjątkiem czujników. Właściwie to one działają ale Atmega nie rozpoznaje ich "1". Na PCB mam ledy sygnalizujące działanie czujek i te ledy się zaświecają, co niestety nie oddziałuje na uC. Czy aby nie jest za niskie napięcie dla "1" (okolo 3.12V)? Dlaczego uC nie wykrywa sygnału z czujek?
    Może jakiś wzmacniacz na tranzystorze powinienem zastosować?

  • #59 23 Kwi 2011 22:05
    asembler
    Poziom 32  

    Może programator działa jako pull-up?

  • #60 23 Kwi 2011 22:17
    SylwekK
    Poziom 29  

    Jak nie wykrywa jedynek to podciągnij końcówkę portu, który ma tą jedynkę rozpoznawać do masy przez rezystor np. 3,3k i wszystko powinno brykać...
    Pozdrawiam