Elektroda.pl
Elektroda.pl
X

Search our partners

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

Stroboskop na ATmega16 z regulowanymi parametrami błysków wyposażonym w XOP-15

01 Feb 2013 01:40 6099 25
IGE-XAO
  • Can you write similar article? Send message to me and you will get SD card 64GB.
    About Author
    User removed account
    Level 1  
    User removed account wrote 0 posts with rating 0, helped 0 times. Been with us since 1978 year.
  • IGE-XAO
  • #2
    SylwekK
    Level 32  
    Wykonanie OK natomiast jakiż to był powód, że nie dało się tego upchać w czymś mniejszym np. Attiny13 albo chociaż Attiny24 ? Zaprzęganie do tak prostego układu Atmegi16 to jak strzelanie z armaty do muchy. Do sterowania fazowego nie jest potrzebny tryb CTC.
    Z tym przerwaniem zewnętrznym to masz 100% racji :) - zdecydowanie ułatwiło by Ci program.
    Zastanawiam się jeszcze czy sterowanie tyrystorem pod napięciem prosto z uC jest dobrym pomysłem. Jest dużo niekonsekwencji na tym schemacie, bo jeśli już robisz dość skomplikowane wykrywanie zera z transoptorem na wyjściu to czy nie wystarczyło zastąpić tego dwoma rezystorami jak radzi atmel? Potencjał sieci jest i tak na całym układzie. Gdybyś tyrystor pogonił przez MOC3021 miało by to uzasadnienie i przy tym było by bezpieczniej.
  • #3
    szczodros
    Level 18  
    W czym rysowany projekt płytki? Do schematów proponuję chociażby prosty ExpressPCB. Na schemacie nie widzę mostka przed 7805.
  • #4
    michal-michalik
    Level 23  
    O jej tyle instrukcji while w programie... Ja bym całą obsługę lampy upakował do przerywania od licznika, od biedy obsługę przycisków w pętli. Chociaż jak już użyłeś procka do takiej konstrukcji to wykorzystaj sprzętowy UART i zrób prościutki sterownik. Sterowanie przyciskami w obudowie to słaby sposób sterowania. Przydała by się też możliwość wyzwalania zewnętrznego jeśli to ma być sprzęt na imprezy.

    Umieszczenie schematu „w pozycji odwrotnej” to już przesada...

    Niekonsekwencja jeśli chodzi o bezpieczeństwo. Przy detekcji masz optoizolator, wszystko zasilane transformatorem, a wyjście na żywca podpięte z prockiem.
    Dalej co się dzieje po włączeniu zasilania? Bo z tego co widzę pojawić się może przypadkowy stan na nóżce tyrystora, i jak trafi w środek sinusoidy to będzie ciekawie.

    >>SylwekK
    Dało by się upchać. Tylko po co? Różnica w cenie to jakieś 5zł, a tutaj ma multum możliwości rozbudowy.

    Pozdrawiam
  • #5
    KokiX
    Level 20  
    Jaki zakres częstotliwości obejmuje twój stroboskop?
  • IGE-XAO
  • #6
    miszcz310
    Level 20  
    AdamZad wrote:

    Uwaga na koniec: nie używam operatorów przesunięć bitowych, ponieważ w Codevision musiałbym dodatkowo definiować bazę poszczególnych nazw bitów w rejestrach.
    Ten kompilator nie rozpoznaje, np. instrukcji typu:

    Kod C - [rozwiń]

    TIMSK|=(1<<OCIE0)



    ale już na przykład taką jak najbardziej:

    Kod C - [rozwiń]

    TIMSK|=(1<<TIMSK.1)



    Wiadomo jednak, że to nam nic nie daje, bo nie uzyskamy samodokumentującego się kodu. Dlatego wpisałem w rejestr wartości w kodzie hex, np. TIMSK=0x02.


    No powiem szczerze, że dziwi mnie troche to co napisałeś. Bo przesunięcia bitowe są przynajmniej dla mnie dużo bardziej czytelne nawet w tej drugiej formie. Nie znam Twojego kompilatora, ale z tego co wiem to te nazwy bitów typu PC3, PC4, OCIE0 itd to to są zwykłe liczby z zakresu 1, 8 poprzypisywane #define'ami w odpowiednich pliku nagłówkowych (#include <avr/io.h>), a u Ciebie nie widzę tej linijki, więc może to jest kwestia związana z tym. No ale znowu używasz <mega16.h> ja powiem szczerze tak nie piszę, tylko piszę to #include <avr/io.h> i potem przy kompilacji podaję na jaki procek. Zaznaczam jeszcze raz, że nie znam Twojego kompilatora.
  • #7
    Flaman11
    Level 17  
    Witam,

    co do wyboru procka, to przy jednej szt. prototypowej i to jeszcze przy małym doświadczeniu w pisaniu oprogramowania, to czym większy tym mniej problemów w trakcie realizacji. Gdy już mamy powiedzmy działający program w całości, wtedy można rozważyć zmianę na mniejszy, ale tylko wtedy gdy jest to uzasadnione, np. nowa mniejsza płytka lub wykonanie w większej ilości.

    Co do problemów z obsługą przycisków, to dobrze dostrzegłeś, że wynika to z drgań styków.

    Całą ich obsługę możesz umieścić w przerwaniu timera, którego używasz do sterowania częstotliwością, pamiętaj tylko, żeby ich obsługa ograniczała się do jak najprostszych funkcji, które łącznie będą trwać znacznie krócej niż pojedyncze przerwanie z tego timera.

    Problem drgań styków możesz rozwiązać na kilka sposobów, wyjaśnię Ci jeden ten który jest najbliżej Twojego założenia.

    Przykładowy sposób obsługi jednego przycisku:

    w przerwaniu wrzucasz warunek IF, jeżeli pinx ma wartość 0, to:
    zwiększ zmienną "drgania", w tym warunku umieść kolejny warunek:
    jeżeli zmienna drgania>przyjmij sobie jakąś wartość, np. 25 i pinx=0, to
    zwiększ zmienną częstotliwość.

    W ELSE wpisujesz, zmienna drgania=0, oznacza, to że w momencie zwolnienia przycisku zostaje zresetowana wartość odmierzająca czas zwłoki eliminujący drganie na styku.
    W ten sposób jednokrotne przyciśnięcie zmieni wartość tylko o jeden. Zwłoka jaka jest z reguły wystarczająca na eliminację drgań na styku mieści się w okolicy 25ms.
    Teraz rozbudujmy troszkę to, o funkcję przyspieszania zmiany wartości po dłuższym przytrzymaniu przycisku.

    Fajnym sposobem na szybką zmianę wartości, ale nie liniową jest taki algorytm:
    jeżeli przycisk wciśnięty krócej niż x, to zwiększ o jeden
    jeżeli dłużej, to zwiększ o 10.

    np. mamy przykładowo wartość=6, a chcemy 358.
    Wciskamy przycisk i przytrzymujemy, wartość się zmienia o jeden do momentu ustawienia czasu po jakim ma zwiększać o 10, powiedzmy że zwiększyło do 13 i dalej zwiększa już o 10, czyli 23, 33, 43... Zatrzymujemy na wartości 353 i zwiększamy przez pojedyncze wciśnięcia do 358.

    Do ELSE dorzucamy również resetowanie wartości zmiennej przez którą zwiększa o 10.

    Drugi sposób:
    powiedzmy, że czas zwłoki na przycisku wynosi 200ms, czyli trzymając przycisk wciśnięty, to wartość zmienia się z prędkością co 200ms, gdy przycisk mamy wciśnięty dłużej niż 1 sekundę, to zmniejsz zmienną zwłoki np. o 10, ale ustal sobie wartość minimalną, np. 25ms. Trzymając przycisk wciśnięty, czas zwiększania wartości zmniejsza się o 10ms na sekundę. W ten sposób zmiany ustawianej zmiennej przyciskiem następują liniowo, a czym dłuższe przytrzymanie przycisku, tym szybciej ta wartość się zmienia.

    Powodzenia w kończeniu konstrukcji :D
  • #8
    Urgon
    Editor
    AVE...

    Drgania styków i zajmowanie się nimi są omówione w tej serii artykułów:
    http://mirekk36.blogspot.com/2012/10/drgania-stykow-to-bajki-wiec-jak-to.html

    Wzór PCB też jakoś dziwnie narysowany. Brak dobrej izolacji galwanicznej między częścią cyfrową, a wykonawczą - jak triak szlag trafi, to uwali mikrokontroler z efektowną eksplozją w tle. Może któryś kolega ma uwalonego mikroklocka i kamerę, by zademonstrować, co napięcie sieciowe robi z taką delikatną elektroniką?
    Ogólnie pisząc to jestem na minus...
  • #9
    User removed account
    User removed account  
  • #10
    User removed account
    Level 1  
  • #11
    michal-michalik
    Level 23  
    2. Rysuj od razu schemat w Eagle i dopiero na tej podstawie utwórz PCB, dużo mniejsza szansa na popełnienie błędu no i czas przygotowania się zmniejszy.

    5. Możliwości jest dużo. Od sterowania mocą błysku, częstotliwości, a na zewnętrznym wyzwalaniu kończąc. Tak to działa w profesjonalnych urządzeniach.
  • #12
    User removed account
    Level 1  
  • #13
    michal-michalik
    Level 23  
    Sterownik podstawowe funkcje:
    Stroboskop na ATmega16 z regulowanymi parametrami błysków wyposażonym w XOP-15

    A po co? Poprawia wygodę i zwiększa funkcjonalność. To tak samo jak pytać się po co budowałeś stroboskop...
  • #14
    SylwekK
    Level 32  
    AdamZad wrote:
    1. Dlaczego do sterowania przesunięciem fazowym nie jest potrzebny tryb CTC, tutaj chodzi przecież o odmierzenie ściśle określonego czasu od momentu przejścia przez zero? Co kolega Sylwekk ma na myśli ?
    ...
    Nie rozumiem jednak co kolega Sylewkk ma na myśli radząc abym pogonił tyrystor przez MOC3021 ?
    Czy takie coś zapewniło by separację galwaniczną i poprawę bezpieczeństwa procka i całego układu ?


    Nie jest potrzebny tryb CTC, bo wystarczy zwykłe odmierzanie czasu w przerwaniu od momentu przejścia przez zero i po odliczeniu tego czasu (im dłuższy tym mniej mocy, ale nie dłuższy niż 10ms) wystarczy podać impuls dla tyrystora.
    MOC302x to seria optotriaków czyli taki transoptor LED-TRIAK bez detekcji przejścia przez zero idealnie nadający się do układów regulacji fazowej (oczywiście z galwaniczną separacją). Natomiast seria MOC304x to są optotriaki z detekcją przejścia przez zero i te z kolei idealnie nadają się do regulacji grupowej (np. takiej jak POD TYM LINKIEM)
  • #15
    User removed account
    Level 1  
  • #16
    michal-michalik
    Level 23  
    Zgadza się ATmegi mają sprzętowy UART zaimplementowany. Sterownik po prostu sczytuje za pomocą przetwornika A/C wartość napięcia na potencjometrze, potem wrzuca to do bufora UART, a procek sam już to wyśle w odpowiedni sposób.

    Ciebie interesuje tylko sposób interpretacji tego co dostaniesz od sterownika w stroboskopie.

    Sam odbiornik dostaje jeden bajt informacji, zgłasza przerywanie no i wystarczy odebraną daną zinterpretować.

    Poczytaj o sterowaniu DMX 512. Idea będzie podobna ;)
  • #17
    User removed account
    Level 1  
  • #18
    michal-michalik
    Level 23  
    Tak musi być drugi układ.

    Transmisja danych cyfrowych oszczędza okablowanie i niweluje problemy z tym związane.
    Dzięki temu za pomocą jednego przewodu, możesz przesłać więcej informacji.

    Może trochę wybiegłem za mocno przed szereg z tym pomysłem...

    I sorki jeśli coś nie do końca jasno opisałem, sesja jest to tak w chwilach wolnych odpisuje ;)

    Pozdrawiam
  • #19
    User removed account
    Level 1  
  • #20
    michal-michalik
    Level 23  
    Najprościej zrobić to na mikro-kontrolerze, dało by się pewnie inaczej, ale sensu to dużego nie ma.
    Mając sterownik można zaprogramować multum fajnych funkcji jak już pisałem.
    A na dokładny opis nie mam czasu niestety. Odezwij się w Marcu jak się sesja skończy to mogę pomóc ;) Dobra, zostawmy miejsce w wątku na inne uwagi...
  • #21
    miszcz310
    Level 20  
    Przeczytałem wątek i się trochę podłamałem, ale ogólnie jak chcesz się dowiedzieć konkretnych rzeczy to polecam:
    http://mikrokontrolery.blogspot.com/

    i z tamtąd kombinować dalszą wiedzę. Tam masz opisane ADC w atmegach, masz opisane timery, UART chyba też jest. Ogólnie skarbnica wiedzy.
  • #22
    szczodros
    Level 18  
    Przyczepię się do jeszcze czegoś.
    1) tranzystor + prąd zmienny?
    2) mostek prostowniczy ze zwartymi wejściami. diod nie łączy się bezpośrednio równolegle ze względu na chociażby ciut NIEIDENTYCZNE napięcia złącz co może się zakończyć tym co punkt 1), lub uC + sieć bez optoizolacji.
    Wg mnie to nie powinno być w DIY konstrukcje.

    ps.: Gratuluję odwagi! (patrz wyżej)
  • #23
    User removed account
    Level 1  
  • #24
    szczodros
    Level 18  
    2. mi się rozchodzi o oporniki wyrównawcze :P
  • #26
    User removed account
    Level 1