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.

Światłość diod sterowana płynnie przez ATmega16

silvanjk 24 Sie 2010 21:28 2202 22
  • #1 24 Sie 2010 21:28
    silvanjk
    Poziom 12  

    Witam. Chciałbym zrobić następujący projekt:
    Wykorzystać Atmegę16 jako zegar (klasyczny, sekundy, minuty, godziny i dni) do sterowania diodami.
    Diod miałoby w założeniu być minimalnie 8, a później nawet więcej.
    Sterowanie miałoby być płynne. Miałyby one świecić nocami (co wynikałoby z zegara, czyli pewnie jakiś timer w procku i umiejętnie dobrać zliczanie). Początkowe noce - słabo, później mocniej, jeszcze mocniej - aż do 100% ich światłości - a później znowu słabo, aż do zera - mniej więcej cały cykl miałby zamykać się w miesiącu.
    I teraz tak:
    1. Ile diod mogę wysterować prockiem? Z tego, co wyczytałem o Atmedze16, jeden pin daje prąd do 40mA, zaś diody białe (bo o takie mi chodzi) ofc są różne, ale ich prądy wahają się mniej więcej od 20mA wzwyż. Więc chyba nie jest to dobry pomysł, aby korzystać z procka, jako z bezpośredniego źródła prądowego... Teraz jeszcze napięcie: jak procek zasilany z zasilacza 9V / stabilizator na 5V (wydajność zasilacza nie ma znaczenia, bo kupię tak duży, jak będzie potrzeba), a dioda przykładowo na 3,5, to tak czy siak - jedna nóżka, jedna dioda.
    2. Aby sterować płynnie muszę użyć licznika w trybie PWM, tak? Ale z kolei Atmega16 ma 2 wyjścia dla 8bit liczników, i 2 dla jednego, 16bit licznika. Wracając do punktu pierwszego, wychodzi sterowanie 3 - góra 4 diodami. Więc na pewno nie tędy droga. Może procka użyć tylko w formie wyzwalacza, sterowania, aby załączać jakieś przekaźniki, które zapalą diody - ale co wtedy z płynnym sterowaniem PWM?
    3. Wyjaśni mi ktoś, jak działają choinkowe lampki? To właśnie takie coś. Tych lampek jest od groma, a są sterowane niezależnie od siebie (np grupami kolorystycznymi...).

    Dzięki za wszelaką pomoc.

    0 22
  • Pomocny post
    #2 24 Sie 2010 21:38
    gaskoin
    Poziom 38  

    a musisz sterować każdą z osobna czy wszystkie mogą być kontrolowane jednym PWMem ?

    0
  • #3 24 Sie 2010 21:39
    silvanjk
    Poziom 12  

    Heh, jeśli mogą być wszystkie sterowane jednym PWMem, to świetnie byłoby...
    Właśnie o to mi chodzi, że nie wiem, czy da się wysterować wszystko jednym. Jeśli tak, to git. Tylko ciągle nie wiem, jak z tą wydajnością prądową.
    Diody nawet na to 3.5 V mogę łączyć równolegle z rezystorami przy nich, jako ogranicznikami prądowymi,, czy coś, ale jedna nóżka nie wydoli chyba...
    Co prawda - jak znam życie, to robi się w ogóle inaczej, nie wiem, może na jakichś tranzystorach?

    0
  • Pomocny post
    #4 24 Sie 2010 22:01
    gaskoin
    Poziom 38  

    pewnie, że mogą, tylko podłącza się to wtedy niebezpośrednio pod mikrokontroler. Można np tak

    w miejsce R_obc wstawiasz tyle diod ile zasilacz pozwoli dać

    //poprawiłem

    Światłość diod sterowana płynnie przez ATmega16

    0
  • #5 24 Sie 2010 22:04
    silvanjk
    Poziom 12  

    O, łał, dzięks. Ale np te tranzystory, co tam się znajdują, to one mają jakieś konkretne parametry (nie znam się za bardzo)...
    No i co to jest między R_obc a GND? ;)

    0
  • Pomocny post
    #6 24 Sie 2010 22:12
    mirekk36
    Poziom 42  

    silvanjk --> polecam ci jak najszybciej zrezygnować z zaglądania w notach PDF do tabelek "Absolute maximum ratings" bo to chyba stamtąd wyczytałeś te 40mA na jeden pin !!!

    Typowe obciążenie przyjmij że będzie zawsze 20mA max i nie kombinuj więcej ;) to ci wyjdzie na zdrowie.

    Diod pewnie, że nie warto podłączać w takich ilościach bezpośrednio do nóg procka bo to lekkie szaleństwo ;) szczególnie jak się chce zrobić takie choinkowe lampki.

    A nie znasz jakichś układów pośredniczących typu np pierwszy z brzegu ULN2803 ??? a jak jeszcze będzie ci za mała wydajność prądowa to jakiś zwykły tranzystor NPN !!!

    Panie gaskoin, absolutnie nie żebym się czepiał tylko ja się dziwię jak można tak sobie utrudniać życie, żeby do tak prostego celu narąbać tyle tranzystorów do jednej gałęzi diod LED skoro wystarczy w to miejsce jak pisałem wyżej JEDEN zwykły tranzystor NPN ciut większej mocy już choćby typu BD albo i większy. Po co się kałapućkać z tym Mosfetem i układem sterującym do niego żeby można go było PWM'em potraktować???? lekki szok..... Skoro wszystko i to samo na jednym bipolarnym bez mydła się uzyska.

    Druga sprawa panie autor, można zastosować wiele kanałów PWM a nie tylko 2 czy 3 albo 4 . Czy MUSISZ korzystać ze sprzętowego PWM'a ??? a nie łaska zrobić sobie programowego i wielokanałowego ???? toż to proste , łatwe i przyjemne a do takiego celu nada się spokojnie ;) Oczywiście nie żeby zaraz zrobić 1000 kanałów PWM ale np 8 i podzielić łańcuch diod na sekcje, gdzie każda będzie miała własnego PWM'a

    Poza tym do sterowania takiej ilości diod i mnóstwa efektów wystarczyłby ci nawet procek z o wiele mniejszą ilością odnóży - np Atmega88 .... a do tego kilka rejestrów przesuwnych i każdą diodę masz sterowaną ładnie oddzielnie jak ci się żywnie podoba. Stosując odpowiednie rejestry będziesz miał jeszcze ładne wejścia do zastosowania do poszczególnych sekcji właśnie tych programowych kanałów PWM.

    Jak widać możliwości są tysiące.

    0
  • #7 24 Sie 2010 22:19
    gaskoin
    Poziom 38  

    taki układ jest po prostu dokładniejszy :) ale faktycznie trochę przegiąłem pałe :P

    Nie ma sensu sterować diod osobnymi kanałami PWM skoro wszystkie i tak mają świecić taką samą jasnością. Jak napisał mirekkk36 Tobie wystarczyłby rezystor + tranzystor.

    0
  • #8 24 Sie 2010 22:23
    silvanjk
    Poziom 12  

    Tak, tak, zgadza się, 20mA ciągły, 40 maksymalny - co i tak niczego nie zmienia :P
    Hm, a jak sobie zrobić samemu tego PWM'a? Skoro na nożkę mogę dać 1 lub 0.
    Wiesz, co do różnych układów, tranzystorów, itd - to ja powtórzę, raczej jestem elektrykiem, troszkę programistą, ale nie elektronikiem :P I szczerz mówiąc zaczynam swoje przygody z uP, więc 'pierwszy z brzegu układ ULN2803' to dla mnie kosmos :D

    A co do procka - potrzebuję tego akurat. Dopiero ten ma złącze JTAG, a tylko taki programator posiadam. Jest kól, nie chcę go zmieniać, albowiem dla lowlevelowych postaci ma on wiadome zalety, nie?

    0
  • #9 24 Sie 2010 22:28
    gaskoin
    Poziom 38  

    silvanjk napisał:

    Hm, a jak sobie zrobić samemu tego PWM'a? Skoro na nożkę mogę dać 1 lub 0.


    w najprostszej postaci, można chociażby tak:

    Code:

    while(1){
            PORTD |= (1 << DIODA);
            _delay_ms(30);
            PORTD &= ~(1 << DIODA);
            _delay_ms(80);
    }


    opóźnienia przypadkowe

    0
  • #10 24 Sie 2010 22:30
    silvanjk
    Poziom 12  

    Haha, a może w assemblerze? Możesz pominąć opóźnienia, bo to wiem, wiele linijek kodu, ale reszta.
    C niestety nie znam.
    Ew. wyczerpujące komentarze ;)

    0
  • #11 24 Sie 2010 22:39
    mirekk36
    Poziom 42  

    silvanjk --> oczywiście, że nie musisz zmieniać procka - podałem to tylko jako przykład. Ale dlatego widzę, że trochę się zapędziłeś z tą chęcią od razu zrobienia takiego układu nie poczytawszy jednak choć troszkę na temat właśnie prostego sterowania sygnałów za pomocą chociażby zwykłych tranzystorów w różnych konfiguracjach. A przecież jest kilka fajnych książek na ten temat i to w okolicach AVRów ;) .... zapewniam cię, że nie są to skomplikowane rzeczy i łatwo sobie z nimi poradzisz - bo wykorzystanie zwykłego tranzystora bipolarnego do prostego kluczowania cyfrowego jest proste jak drut ;)

    A skąd masz wiedzieć o takich scalakach jak ULN2803 - no chociażby stąd, z takich wypowiedzi. Ja już bym sobie na twoim miejscu z marszu zassał z netu notę PDF takiego scalaka i zobaczył co to i jak działa - gwarantuję że od razu ci ślinka poleci bo nie trzeba będzie nawet bawić się z tranzystorami tylko dodatkowy scalak na pokład i jazda. Obciążalność jego wyjść jest już dużo większa niż w procku - resztę doczytaj sam, poszperaj w necie jak ludzie go wykorzystują itp itd - szybko załapiesz

    Dodano po 4 [minuty]:

    gaskoin --> pokazał ci raczej samą ideę programowego PWM'a bo oczywiście robienie go w ten sposób w docelowym programie to byłaby pomyłka. Ale spokojnie programowy PWM zrobisz sobie nawet w Bascomie.

    Zasada ogólna jest taka, że bierzesz sobie jeden Timer, dobierasz częstotliwość odpowiednią dla swojego PWM'a i w procedurze obsługi jego przerwania piszesz parę linijek kodu, które będą ci sterować kilkoma DOWOLNYMI wyjściami procka dając odpowiednie wypełnienie w zależności od kilku zmiennych globalnych, które możesz ustawiać w pętli głownej zadając odpowiednie wypełnienie PWM a w procedurze obsługi przerwania porównujesz te wartości i odpowiednio generujesz sygnał na każdy kanał w zależności od każdej zmiennej.

    Oczywiście ilość takich kanałów będzie bardziej ograniczona w Bascomie niż gdybyś pisał kod w C - no ale da się zrobić - bo sam kiedyś to robiłem ;)

    0
  • #12 24 Sie 2010 22:41
    silvanjk
    Poziom 12  

    Wiesz, mam książkę Baranowskiego 'ATmega w praktyce'. Dopóki choć trochę nie pokumałem o co chodzi z uP, to ta książka była do bani, bo pisana kosmicznym językiem, mimo, że po polsku. Dopiero teraz ją doceniam.
    A chodzi mi o to, że ciężko znaleźć literaturę, która od razu wyjaśni wszystko fajnie - właśnie dlatego napisałem na forum, aby ktoś chć trochę sprawę rozjaśnił - dzięki temu będę nawet wiedział, którą książkę wybrać, a nie tak w ciemno ;)
    A że jak już napisałem o tym układzie - to jasne, to mam już pdf'a i poczytam, ale wcześniej nie znałem tego scalaka, to nie wiedziałem czego szukać. Poza tym, jak wspominałem - dopiero wchodzę w elektronikę - i zauważyłem, że scalaki to na serio są już do wszystkiego... Od tańca po różaniec.


    ---------

    Ja piszę w ASM.
    No ale moje pytanie ciągle pozostaje bez głównej odpowiedzi - jak mogę na zwykły pin wyjściowy, na który mogę nadać tylko zero lub 1 - użyć jako wyjście timera, czyli klasyczny pin OCn (ATmega16).

    0
  • #13 24 Sie 2010 22:49
    gaskoin
    Poziom 38  

    Właśnie warto bardzo noty katalogowe czytać. Jak ściągniesz sobie do atmegi16 to otwórz sobie rozdział dotyczący obojętnie czego, np timerów. Masz tam wyłożone jak wszystko działa, tabelki jak poustawiać bity i w jakich rejestrach, żeby działał tak a nie inaczej. W paru słowach - wszystko jest tam napisane. Niestety mało kto tam zagląda.

    Drugą lekturą wartą przeczytania jest manual do avr-libc (o ile programujesz lub chcesz programować w C). W rozdziale dot. chociażby FAQ jest bardzo dużo pytań, wraz z odpowiedziami na nie, które często padają na forum.

    Z Bascoma Ci nie pomogę, bo znam go tylko z nazwy i z tego co już przeglądam to forum to wiem, że zmienne się deklaruje chyba poprzez dim :P

    a co do kodu, który wrzuciłem - nie jest dla Ciebie intuicyjny?
    ustawiam bit
    czekam
    zeruje bit
    czekam

    a to wszystko chodzi w kółko

    -----------------------------------------

    Jeżeli chodzi o to co dopisałeś, to zajrzyj do datasheetu, jest tam tabelka dot. ustawień rejestrów timera, gdy działa jako PWM (np COM1A1 w rejestrze TCCR1A)

    0
  • #14 24 Sie 2010 22:55
    mirekk36
    Poziom 42  

    tak jak napisał gaskoin , do tego się właśnie sprowadza programowy PWM i to jest właśnie odpowiedź na twoje pytanie a ty piszesz, że nie dostałeś odpowiedzi.

    Przy czym programowy PWM jeszcze raz podkreślę nie ma nic wspólnego ze sprzętowym więc daruj sobie wtedy rozważania o nodze OCn. Ty możesz zrobić te zmiany stanu na dowolnej nodze jak pisałem. Wszystko przy pomocy przerwania Timera najlepiej pracującego w trybie CTC.

    A jeśli masz książkę Góreckiego "Procki AVR ATmega w praktyce" no to nie mów, że tam nie ma dobrze opisanych timerów, ich rejestrów sterujących a nawet że nie ma gotowych fragmentów kodu nie w czym innym jak w asemblerze i to dość dobrze opisanych. Wiem - bo już daaaawno daaaawno temu też kiedyś zakupiłem i tę książkę.

    0
  • #15 24 Sie 2010 22:57
    McMonster
    Poziom 32  

    Poczytaj, na przykład na Wikipedii, jak działa PWM. Ta technika też polega na wystawianiu tylko 0 lub 1, z tym że robi się to, w dużym uproszczeniu, tak szybko, że nie liczy się jaka wartość jest na pinie w danej chwili, tylko uśredniony stosunek zer do jedynek w danym odcinku czasu. I na tym też polega programowy PWM, wystawiasz jedynkę, czekasz bardzo krótką chwilę, wystawiasz zero, czekasz chwilę itd. Kwestia dobrania wartości opóźnień.

    0
  • #16 24 Sie 2010 22:57
    silvanjk
    Poziom 12  

    Czytam, czytam. Akurat tam zaglądam nad wyraz często - wiem jak poustawiać bity, itd - moje pytanie tyczyło się głównie wydajności prądowej, itd, prawda? ;)

    Nie programuję w C. Nie chcę. Wystarczyło mi nauki assemblera. C, no cóż, może kiedyś.
    A Bascom nigdy :D

    Co do kodu - wiesz ilu programistów popełniało samobójstwa przez intuicję? ;)
    Nie no, żartuję. Domyślałem się, że ~ to pewnie negacja, ale już nie wiedziałem, co ten & tam robi, czy, że przy tym '=' jest '|'.
    C jest dziwne :P

    No ale ok, już rozumiem, jak można na zwykłej nóżce zrobić czasowe wypełnienie. Tylko teraz - skoro jedna dioda na nóżce - to dla każdej nóżki odpowiednia procedura ;)


    ------------------------------

    Książki Góreckiego nie mam.
    Ale powtarzam po raz 10, że nie mam problemów z pojedynczym timerem, w Trybie PWM, czy tak dalej. Przecież pytałem o diody (czy raczej ich względnie dużą ilość) i inne takie, jak prąd, i jeszcze dalej ;)

    0
  • Pomocny post
    #17 24 Sie 2010 23:06
    mirekk36
    Poziom 42  

    silvanjk napisał:
    Wiesz, mam książkę Baranowskiego 'ATmega w praktyce'.


    A to co było??? oczywiście mi pomylił się autor ale tytuł ten sam ;) więc ją masz

    Co do wydajności prądowej to chyba też dostałeś już odpowiedzi różne, albo drivery ULN albo zwykłe tranzystory żeby ją zwiększyć i po ptakach

    Żeby nie robić na jednej nodze jednej diody nawet przez te tranzystory to dlatego powiedziałem ci o rejestrach przesuwnych z kolei, poczytaj o np 74595 albo 74161 itp

    A z tym Timerem to ci "trujemy" przecież tylko dlatego żebyś zaskoczył jak zrobić programowy PWM a nie żeby cię uczyć lub nie obsługi timera. Tyle że ty narazie kojarzysz tylko chyba timer z jednym z jego trybów jakim są różne PWM sprzętowe. Tymczasem tu chodzi o wybranie np trybu CTC i w procedurze obsługi przerwania w swoim asemblerze robisz to samo. Toż nie musisz a Bascomie czy w C ;) ....

    0
  • #18 24 Sie 2010 23:16
    silvanjk
    Poziom 12  

    Opisane jest w tej książce wsio, racja.
    Wiem też o wszystkich trybach, tylko brak mi doświadczenia, aby sprawnie to wykorzystać samemu - dlatego pytam :P

    Odpowiedzi dostałem, muszę je przetrawić teraz na spokojnie, poczytać - itd.
    Za odpowiedzi dziękuję :)
    Jak ktoś jeszcze ma coś do dodania - to śmiało pisać, nie krępujcie się :D

    0
  • Pomocny post
    #20 25 Sie 2010 18:17
    gaskoin
    Poziom 38  

    nie :)

    tutaj masz sterowanie prądowe obciążenia.

    Nam chodziło o podłączenie szeregowo do procesora opornika i za opornikiem bramki tranzystora.

    https://www.elektroda.pl/rtvforum/topic498675.html tutaj przeczytaj post pubusa, a właściwie zerknij na schematy jakie wrzucił, nam chodzi o ten po prawej. Zamiast tego cudu z kondensatorem (to chyba silnik, nie wczytywalem sie o co chodzi) dajesz diody

    0
  • #21 25 Sie 2010 18:48
    silvanjk
    Poziom 12  

    Dobry z Ciebie człowiek ;)
    To jeszcze takie takie coś - czy ten potencjał, oznaczony tam przez VCC musi być taki sam, jak zasilanie procka? Wydaje mi się, że nie.
    To teraz, chcąc mieć kilka diod (będzie 9V vcc, a diod 8, a później jeszcze więcej, ok 15) potrzebuję połączyć je równolegle, prawda? Oczywiście zdaję sobie sprawę z tego, że uszkodzenie jednej z nich spowoduje wzrost prądu w całej reszcie, ale szeregowo nie 'starczy' mi napięcia (diody chyba jakoś na 3,5V są tak ogólnie?), a wtedy uszkodzenie jednej z nich, to - gasną wszystkie...

    0
  • Pomocny post
    #22 25 Sie 2010 19:12
    gaskoin
    Poziom 38  

    vcc może być inne niż zasilanie procesora, możesz tam podłączyć 9V. Jak jest dużo diod, to najlepiej łączyć mieszanie - równolegle po kilka w szeregu :)

    0
  • #23 25 Sie 2010 19:29
    silvanjk
    Poziom 12  

    Ha, no tak. Słuszna opcja, dzięki :)

    0