Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

Budowa sygnalizacji świetlnej 8086.

@rti 11 Jan 2009 15:30 2160 11
  • #1
    @rti
    Level 21  
    Witam. Mam kilka pytań odnośnie budowy i zaprogramowania makiety sygnalizacji świetlnej (skrzyżowania). Na zajęciach napisaliśmy program w asemblerze który właśnie jest na 8086 i słuzy do sterowania taką sygnalizacją. Chciałbym zbudować makietę która będzie wykożystywała napisany przezemnie program. Problem jest taki że nie wiem od czego zacząć. Budowałem już układy z ATTINY do której wgrywałem soft ale nie wiem czy z 8086 można postąpić tak smo?? Jak się sprawa ma bo w tym jestem zielony. Wydaje mi się że to jest tylko procesor i nie posiada on żadnej pamięci ram czy rom tak jak ATTINY więc nie da rady do niego wrzucić tego softu zmontować układzik i cieszyć się działaniem prawda?? Jeżeli sięmylę proszę o poprawienie. Druga sprawa to jeżeli się nie da tego zrobić na 8086 to jakiego ukłądu użyć aby działał z programem asemblerowskim na 8086? Wiem ze dla większości moje pytania są debilne i banalnie proste ale ja się dopiero uczę i bardzo będę wdzięczny za pomoc. Za odpowiedzi jak sie za to zabrać z góry dziękuję.
  • Helpful post
    #2
    adamwesola
    Level 24  
    Nie no , daj sobie z tym spokój, "przepisz" program na jakiegoś mikrokontrolera.
    8086 potrzebuje zewn. pamięci danych i programu, zegara systemowego, rejestru adres/dane i Bóg wie jeszcze czego.
    Nie ma mikrokontrolera na którym mógłby działać program napisany na 8086.
  • #3
    @rti
    Level 21  
    Myślałem właśnie nad ATTINY2313 bo raz już takie programowałem( tyle ze gotowym programem którego nie musiałem pisać od początku) a dwa mam już programatorek do TINY zrobiony więc start by był łatwiejszy. Pobrałem z netu dane na temat TINY i są tam informacje między innymi na temat portów wejścia wyjścia których oczywiście będę używał bo muszę uwzględnić na wejściu czujnik którym będzie malutki wyłącznik no i wyjścia które będą zapalały konkretne diody. Czytam czytam i nic z tego nie rozumie. Zawsze na lekcjach podawane były suche wartości (wymyślone) i programy czysto teoretyczne na tablicy a teraz przyszło zaprogramować prawdziwe wejścia, wyjścia i zonk. Bardzo bym był wdzięczny gdyby mi ktoś wyjaśnił jak odczytać te dane o tych portach I/O które będę musiał tam uwzględnić. I jeszcze jedna sprawa. Ile TINY ma wyjść?? Ja jak robiłem układzik z diodami wykorzystywałem 6 pinów czyli wydaje mi sie że 6 wyjść. Ja w moim projekcie muszę uwzględnić że na jednym sygnalizatorze pali się zielone na drugim pali się czerwone. Po naciśnięciu przycisku tam gdzie zielone zapala sie pomarańczowe i pozniej czerwone a w drugim zapala sie pomarańczowe równoczesnie z czerwonym a pozniej zielone. Po chwili znowu tam gdzie zielone zapala sie pomaranczowe a później czerwone. a tam gdzie czerwone zapala sie równoczescnie pomaranczowe a później tylko zielone. Czy tiny da rade z takim zadaniem? Za odpowiedzi i pomoc z góry dziękuję:)
  • Helpful post
    #4
    januss73
    Level 32  
    Jeśli masz programator do tiny zaprogramujesz kazdego AVR'a.
    Tiny2313 ma 15 pinów I/O, jak nie korzystasz z zewnętrznego zegara dochodzą jeszcze 2, więc z sześcioma diodami poradzi sobie bez problemu.

    Napisanie takiego programu to parę linijek w bascomie. No może paredziesąt. I datasheet do tego właściwie nie potrzebny. Z asemblerem nie pomoge bo sie nie znam. :)
  • #5
    @rti
    Level 21  
    No właśnie ja to potrzebuję w asemblerze mieć napisane. Nie mogę korzystać z bascoma. Informacja o wyjściach bardzo mnie ucieszyła :) Skoro bez problemu obsłużę nim te kilka diodek to użyje go do tego celu. Teraz tylko pozostaje mi prosić o pomoc z adresami tych portów i rejestrów jak można to odczytać z tego pliku z info o układzie. Tak jak wspomniałem na lekcjach rejestry nazywamy literkami A,B,C itd a adresy wyjść są czysto teoretyczne a żeby zrobić ten układzik muszę się odnieść do wartości takich jakie posiada TINY ;] Za pomoc oczywiście z góry dziękuję.
  • #6
    @rti
    Level 21  
    Skonsultowałem z kolegami z grupy kilka rzeczy i dowiedziałem się że mogę tą sygnalizacje oprzeć na dowolnym układzie i dowolnym języku ( tylko na kartce w sprawozdaniu ma to być napisane w assemblerze. Tak więc odpaliłem bascoma i zacząłem pisać. Ale bardzo bym był wdzięczny gdyby mi ktoś powiedział jak zrobić opóźnienie takie żeby np po zmianie z zielone na pomarańczowe i w końcu czerwone były przerwy. w chili obecnej dojechałem do momentu że gdy naciskam przycisk to z zielonego przechodzi w pomarańczowy a z czerwonego na drugim sygnalizatorze w czerwony i pomarańczowy. Teraz muszę zrobić właśnie te opóźnienie i moge jechać dalej z progsem:) Będę wdzięczny za jakieś porady

    zrobiłem enable interrupts
    wait 1

    wynik taki jak chciałem ale to i tak za dlugo. Jak ustawić czas któtszy niż 1?? Z pewnością da się tą 1 jakoś podzielić prawda:>?
  • Helpful post
    #7
    hejmus
    Level 11  
    Waitms 500 - 500ms czekania, jeśli $crystal dobrze ustawiony to powinno dokładnie odmierzać.
  • #8
    @rti
    Level 21  
    dziękuję za info doszedłem do tego czytając inny post i zadziałało. Mam tylko pytanie czy da się zrobić pętlę która będzie śmigała np przez ileś sekund a następnie program poleci dalej??

    Zrobiłem :

    Dim A As Byte

    For A = 1 To 5

    "część programu"

    Next A


    Jednak sprawa ma się kiepsko bo powinno się 4 razy powtórzyć i przejść dalej a niestety tak nie robi i nie wiem czemu. Druga sprawa to mam zastosowaną pętlę która ma eliminować drgania styków ( miałem taki objaw ze układ czasami głupiał i niektóre diodki się nie zapalały tak jak miały po naciśnięciu przycisku) i działa ona tylko za pierwszym razem a w następnych już nie ;/ Trzecia sprawa wygląda tak:

    etykieta xxx:

    program

    przerwanie 700ms

    program

    przerwanie 500ms

    warunek że gdy na wejsciu pojawi sie stan niski to ma przejsc do etykiety bla bla bla.
    jezeli nie to etykieta xxx

    sprawa wygląda tak że nie wiem gdzie i jak umieścić ten warunek żeby działał zawsze OD RAZU w tej etykiecie xxx. Chodzi o to że teraz muszę dłużej przytrzymać przycisk żeby program wyszedł z xxx i poleciał tam gdzie mu każę a ja chcę aby nastąpiło to w dowolnym momencie podczas jej realizowania. Jak tego dokonać??
  • Helpful post
    #9
    januss73
    Level 32  
    Co do petli to czy przypisujesz przed nią zmiennej A wartosc 1? Czyli
    A=1
    for A=1 to 5
    ....
    Next A

    Jesli w petli masz poustawiane czekania, to przycisk za kazdym razem musi czekec az one miną i chyba stąd ten problem. Najprościej chyba zrobic petle sprawdzającą stan przycisku i potem to co sie ma wykonac.
    do
    if przyciskwcisniety then
    exit do
    else
    loop
    end if
    możesz też nieco zniwelować drgania mniej wiecej tak.

    do
    B=1
    if przyciskwcisniety then
    for B =1 to 10
    if przycisk wcisniety then
    next B
    end if
    if B=10 then
    exit do
    else loop
    end if
    end if
    albo kondensatorem 100n odpowiednio podpietym do wlacznika i GND lub V.
  • #10
    @rti
    Level 21  
    Jeżeli chodzi o drgania to zrobiłem to za pomocą tego kondensatorka i już jest ok ale pętla w dalszym ciągu mi nie śmiga.

    dim a as byte
    a=1
    for a=1 to a=5

    program


    next a

    Pętla nie kończy sie po 4 razach tylko w kółko zaiwania.

    co do drugiej pętli która miała sprawdzać cały czas te piny z przełącznikiem aby móc w dowolnym momencie bez czekania powrócić do głównego programu zrobiłem to tak:
    blablabla:

    program

    etykieta xxx:

    do
    if portd.4 = 0 then goto etykieta blablabla
    exit do
    else
    loop
    end if

    dalszy ciąg etykiety xxx.

    Niestety tęż nie działa a tutaj to już błędy w kompilacji wyskakują nawet:( Proszę o pomoc.
  • Helpful post
    #11
    januss73
    Level 32  
    Najlepiej wrzuc cały listing.
  • #12
    @rti
    Level 21  
    Już mi wszystko działa:) Po prostu ja na końcu programu który chciałem powtarzać miałem skok do etykiety i dopiero później wpisałem next a.
    Wywaliłem skok pozostawiając tylko next A i śmiga aż miło jestem bardzo zadowolony:) Dziękuje za pomoc bo bez niej było by trudno ;)