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.

migacz do modelu samolotu rc

elektronik-adam 16 Sty 2012 14:37 1875 12
  • #1 16 Sty 2012 14:37
    elektronik-adam
    Poziom 11  

    Jako że zajmuję się modelarstwem rc chciałem wyposażyć mój model w światła, ale żeby nie było tak łatwo sięgam również do mojego drugiego hobby jakim jest elektronika. Więc kupiłem attiny 2313 i próbuje zrobić migacz do modelu mam nadzieje że znajdę tutaj pomoc. Będę w tym temacie opisywał moje boje i problemy pierwszym z nich jest to, że chciałbym aby światła jedne migały, a drugie rozjaśniały się i ściemniały naraz dając efekt tak jakby światła wirującego napisałem taki program.

    Kod: jezyk_programowania
    Zaloguj się, aby zobaczyć kod

    Niestety działa mi to w taki sposób że najpierw mam efekt wirującego światła, a potem migną sobie diody zamiast wszystko na raz. Chciałbym się też dowiedzieć czy da się to ich różne miganie zrobić troszkę inaczej, że tak powiem krócej czy trzeba to tak rozbudowywać?
    Pozdrawiam Adam

    0 12
  • Pomocny post
    #2 16 Sty 2012 19:37
    Krauser
    Poziom 26  

    Generalnie wszystko musisz oprzeć o najmniejszy interwał czasu w tym przypadku 4ms. Dłuższe odcinki czasu należy odliczać poprzez zliczanie tych najkrótszych.

    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod

    Nie wiem czy widzisz różnicę pomiędzy Portd.0 = 1 a Pind.0 = 1. Jeśli nie proponuje test w stylu:
    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod

    0
  • #3 16 Sty 2012 22:34
    elektronik-adam
    Poziom 11  

    Dzięki, ale żeby nie było tak łatwo dla attiny chciałbym jeszcze dorzucić pomiar napięcia na pakiecie zasilającym model + zdalne sterowanie wszystkim może masz jakieś źródła do nauki bascoma i jakbyś mógł mi wyjaśnić co-nieco tą różnice portd.0 a pind.0 wydaje mi się, że port to całość, a pin to tylko część z portu.
    I tak w ogóle to dzięki za pomoc w tym programowaniu

    0
  • Pomocny post
    #4 17 Sty 2012 18:33
    jacekk232
    Poziom 16  

    Witam.

    Attiny2313 nie posiada przetwornika ADC jednak do pomiaru napięcia możesz użyć wewnętrznego komparatora analogowego. Powinien on porównywać napięcie baterii z jakimś napięciem odniesienia.
    Inne rozwiązanie to użyć procka ze sprzętowym ADC np. Attiny26.

    Co do różnicy między PORT a PIN to tak w wielkim skrócie to jeśli dana końcówka ustawiona jest jako wejście to chcąc odczytać stan jaki panuje na niej używa się rejestru PIN.
    Jeśli dana końcówka ustawiona jest jako wyjście i chcemy na niej ustawić stan niski lub wysoki to wtedy używamy rejestru PORT.
    Czyli, w zależności od kierunku danej końcówki, jeżeli odczytujemy jej stan to wtedy używamy PIN, a kiedy chcemy nadać jej jakiś stan używamy PORT.
    Link

    0
  • Pomocny post
    #5 17 Sty 2012 18:59
    Krauser
    Poziom 26  

    1. Dodam jeszcze, że jeśli chcesz używać nadal Attiny2313 to możesz jako przetwornik wykorzystać komparator i jeden kanał PWM do którego podpinasz filtr RC. Mając na jednym wejściu komparatora napięcie które chcesz zmierzyć a na drugim wyjście z filtra RC zwiększasz wypełnienie PWM, a komparator wykryje gdy napięcie z PWM będzie bliskie mierzonemu. Oczywiście lepszym wyjściem jest Atmega48PA ma on większą pamięć programu (akurat tyle ile ma ograniczenie dema Bascoma), a w razie czego wymienisz sobie na Atmega88, Atmega168 lub Atmega328, bo różnica miedzy nimi to tylko rozmiar pamięci, a obudowa jest taka sama.
    2. Ogólnie Pind.0 daje dostęp do stanu na wejściu i kiedyś rejestr PINx był tylko do odczytu. Teraz wpisanie 1 do PIN zmienia stan wyjścia na przeciwny. Kiedyś stan wyjścia zmienić można było tylko rejestrem PORTx. Jest jeszcze rejestr DDRx, który zmienia funkcje wyprowadzenia (wejście lub wyjście), ale w Bascomie rzadko korzysta się wprost z tego rejestru.
    3. Jako inspirację zapoznaj się z "Mikroprocesorową oślą łączką" Piotra Góreckiego. Ten kurs był kiedyś w Elektronice dla Wszystkich, a teraz jest też książka. Kurs był oparty o AT90S2313, który troszeczkę się rożni od Attiny2313, który jest nowszy i lepszy. Jeśli nie masz kasy na książkę to ściągnij same przykłady programów, bo są one dobrze skomentowane.

    0
  • #6 17 Sty 2012 21:42
    elektronik-adam
    Poziom 11  

    Super dzięki za odpowiedzi tą oślą łączkę mam coś tam sobie delikatnie próbuje wykonać.
    Możecie mi jeszcze tak łopatologicznie wyjaśnić jak napisać program, który by odczytywał sygnał dla serwa i tym sposobem włączał lub wyłączał odpowiednie porty ?
    O ile się dobrze orientuje to częstotliwość takiego sygnału to 50Hz, a stan wysoki jest od 10 do 20 ms (w zależności od stopnia wychylenia serwa) niestety nie wiem jak z czasem w stanie niskim.

    0
  • #8 18 Sty 2012 17:34
    elektronik-adam
    Poziom 11  

    Czyli trzeba by było zliczać czas zaczynając od impulsu rosnącego kończyć zliczać na spadającym obliczyć ile to jest i w zależności od tego sterować portem (np światłami do lądowania)

    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod

    0
  • Pomocny post
    #9 18 Sty 2012 19:50
    Krauser
    Poziom 26  

    Masz błędny kod. Jak chcesz by program działał jak trzeba to musisz wiedzieć co robi każda linijka. Włączasz przerwanie od przepełnienia timera0, a nie maż funkcji do jego obsługi. Deklarujesz funkcję do obsługi przerwania zewnętrznego, a nie masz funkcji obsługi i nie zezwalasz na to przerwanie. Na moje oko to po uruchomieniu timera procesor się zresetuje po 256us. I tak w kółko.

    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod


    Do pomiaru szerokości impulsu raczej korzysta się Input Capture Unit Timera1

    0
  • #10 18 Sty 2012 21:42
    elektronik-adam
    Poziom 11  

    Super wielkie dzięki działa świetnie jakbym miał jeszcze jakieś problemy to będę pisał.
    Jeszcze raz dzięki.
    No i pisze :D
    Wszystko jest ok potrzebowałbym jeszcze tylko pomocy w takiej drobnostce oto kod ściągnięty od ciebie i zmodyfikowany

    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod

    Chciałbym aby pod program strobo mógł błyskać razem z rozjaśniającym i przygaszającym się podprogramem beacon + rozjaśniającym się land teraz jest to nijako wyłączone zanim nastąpi włączenie kolejnego podprogramu.
    (Strobo:
    If Counter0temp < 26 Then)
    (Beacon:
    If Counter0temp < 28 Then)
    Jeśli usunę pierwsze linijki pod tymi podprogramami to się wszystko przycina bo robi sobie po kolei zamiast na raz
    i jeszcze pozostaje problem z portb.5 świeci non stop, a powinien dopiero jak włączy się podprogram.
    Wiem, że w pierwszym poście mi pisałeś jak zrobić żeby działało wszystko naraz, ale jakieś błędy mi wyskakiwały i sobie nie poradziłem.

    0
  • Pomocny post
    #11 19 Sty 2012 19:47
    Krauser
    Poziom 26  

    Nie możesz używać Waitms nigdzie indziej poza pętlą główną. Trzeba to obejść. Wiadomo, że w podprogramach jesteś co 4ms. Co do Portb.5 to nigdzie nie widzę zerowania i dlatego jest ustawiony non stop.

    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod

    0
  • #12 20 Sty 2012 13:04
    elektronik-adam
    Poziom 11  

    Teraz wszystko już działa jak należy pozostaje zrobić jakiś schemat płytkę i zamontować do modelu dzięki za wszelaką pomoc.

    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod

    0
  • #13 23 Kwi 2012 22:02
    Stufido
    Poziom 1  

    Kolego, czy juz poradziles sobie z tym ukladem, bo przyznam ze jestem bardzo zainteresowany takim dodatkiem do moich modeli ;)

    0