logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Program do AT89C2051. Układ sterujący. Pewnego rodzaju joystick. Wskazówki.

JarekLT 28 Wrz 2007 12:34 2258 18
  • #1 4327876
    JarekLT
    Poziom 14  
    Posty: 182
    Pomógł: 2
    Ocena: 15
    Witam wszystkich bogów programowania mikrokontrolerów!

    Chciałbym poprosić Was o pomoc w stworzeniu programu do AT89C2051.
    Dopiero zaczynam sie "bawić" w programowanie mikrokontrolerów, a początki sa bardzo trudne i właśnie dlatego proszę was o pomoc.
    Schemat jest podany na rysunku.
    To ma być układ sterujący za pomocą pewnego rodzaju joysticka.
    Joystick się składa z 4 przycisków (B1, B2, B3, B4) i przełącznika obrotowego (S1,S2,S3). Na rysunku ten samy przełącznik przedstawiłem w postaci 3 przycisków (w zielonej ramce) żeby było bardziej zrozumiale jak to ma działać. Powyżej jest przedstawiony ten sam przełącznik. Chyba poprawnie go nazywam przełącznikiem, myśle, że impulsatorem go nazwać nie można, gdyż po obrocie kontakty zostają złączone. Np.: Złączone są kontakty (jak na rysunku) S i S3. przy obrocie przełącznika w prawo (według wskazówki zegara) kontakty S i S3 sie rozłączają i złączają się kontakty S i S2 i tak zostają, przy kolejnym obrocie S i S2 się rozłączają i złączają się kontakty S i S1 i tak zostają. Przełącznik ma trzy kroki, przy których robi pełne kolo i dalej idzie w kółko (S-S3/S-S2/S-S1/S-S3/S-S2 itd.) jeżeli będziemy go "kręcili" w lewą stronę to będzie odwrotnie.
    Ma to działać w ten sposób:

    1. Po wciśnięciu przycisku B1 na porcie P1.2 ma być 1 i tak ma zostawać aż puścimy przycisk.
    2. Po wciśnięciu B2 na porcie P1.6 ma być 1 i tak ma zostawać aż puścimy przycisk.
    3. Po wciśnięciu B3 na portach P1.6 i P1.7 ma być 1 i tak ma zostawać aż puścimy przycisk.
    4. Po wciśnięciu B4 na porcie P1.3 ma być 1 i tak ma zostawać aż puścimy przycisk.
    5. Po wciśnięciu jednocześnie przycisków B2 i B3 na portach P1.4 i P1.5 ma być 1 i tak ma zostawać az puścimy przyciski.
    6. Przy obrocie przełącznika obrotowego S w prawo na Portach P1.5 i P1.6 ma być 1 - impuls o długości ~0.2s.
    7. Przy obrocie przełącznika obrotowego S w lewo na porcie P1.5 ma być 1 - impuls o długości ~0.2s.

    Będę wdzięczny za wszelkiego rodzaju pomoc w tworzeniu tego programu
    Załączniki:
    • Program do AT89C2051. Układ sterujący. Pewnego rodzaju joystick. Wskazówki. keypad.GIF (9.89 KB) Musisz być zalogowany, aby pobrać ten załącznik.
  • Pomocny post
    #2 4330795
    adamowicz
    Poziom 21  
    Posty: 374
    Pomógł: 43
    Ocena: 75
    Witam.
    A potrzebne Ci to do szkoły czy coś budujesz dla siebie? Jeżeli tak, to co to jest?. Jakim językiem porogramowania chcesz się posługiwać ?

    Pozdrawiam
  • #3 4331069
    JarekLT
    Poziom 14  
    Posty: 182
    Pomógł: 2
    Ocena: 15
    Robię to dla siebie. To jest mój projekt w pracy. Będzie to zdalne sterowanie zaawansowanym urządzeniem spawalniczym. Na temat programu do programowania - myśle, że BASCOM, ale tak do końca nie jestem pewien, czy to właściwy wybór.
  • Pomocny post
    #4 4331302
    adamowicz
    Poziom 21  
    Posty: 374
    Pomógł: 43
    Ocena: 75
    Mogę napisać w asemblerze. Program krótki i przejrzysty. Pliki w asm i hex wystawię na swoją stronę http://8051.ovh.org
    Pozdrawiam
  • #5 4333461
    JarekLT
    Poziom 14  
    Posty: 182
    Pomógł: 2
    Ocena: 15
    Nawet nie wiem jak mógłbym Ci to wynagrodzić. podziwiam takich mądrych ludzi jak Ty. Prawdę mówiąc nawet nie wiedziałem od czego zacząć z tym programem, a dla Ciebie to jest krótko i przejrzyście.

    Dziekuję!
  • Pomocny post
    #6 4336080
    adamowicz
    Poziom 21  
    Posty: 374
    Pomógł: 43
    Ocena: 75
    Jak ma wyglądać współpraca przełącznika obrotowego z pozostałą częścią klawiatury?
    Czy mam rozumieć ,że przciskając np. B1 reszta klawiszy w tym przełącznik S są nieaktywne do chwili zwolnienia B1? Dotyczy to również wszystkich innych możliwości.
  • #7 4343586
    JarekLT
    Poziom 14  
    Posty: 182
    Pomógł: 2
    Ocena: 15
    Witam!
    Najlepiej byłoby, żeby po wciśnięciu któregokolwiek z klawiszy reszta klawiszy w tym przełącznik pozostawałyby aktywne. Dobrze byłoby, żeby można było urzeczywistnić taką funkcje jak: wciskając i przytrzymując przycisk B1 i obracając kołem np. w prawo działałyby obie funkcje, czyli na porcie P1.2 = ciągle 1, a na portach P1.5 i P1.6 (obracając kołem) = impulsy o długości 0,2s. Tak sobie jeszcze pomyślałem, jeżeli będzie tak, że po wcisnięciu pewnego klawisza pozostałe klawisze pozostaną nieaktywne - to uniemożliwia funkcję Nr.5. (Po wciśnięciu jednocześnie przycisków B2 i B3 na portach P1.4 i P1.5 ma być 1 i tak ma zostawać az puścimy przyciski.) dlatego, że niemożliwe jest wcisnąć dwa przyciski dokładnie jednocześnie, chociaż na ułamek sekundy jeden przycisk skontaktuje pierwszy np. B2 wtedy B3 pozostanie nieaktywny.
    Taki wariant (jaki opisałem wyżej) byłby idealny, ale jeżeli takie warunki będą sprawiały dużo dodatkowych trudności w napisaniu programu to może być jakikolwiek prostszy wariant, a jeżeli to tylko kwestia kilku dodatkowych opcji lub komend programu - to byłoby SUPER! Po prostu nie chce nadużywać Pana uprzejmości.
  • Pomocny post
    #8 4343772
    Jdsoul
    Poziom 23  
    Posty: 501
    Pomógł: 47
    Ocena: 10
    Cześć !

    Z tego co widzę nawet jeśli to tylko podstawowa funkcjonalność urządzenia , możesz mieć malutkie problemy z działaniem

    Po pierwsze moment resetu :( tak się składa, że zaraz po resecie cały port 1 jest wypełniony "1".
    Proponowałbym przejść na logikę ujemną :) tzn. żeby stanem aktywnym w układzie było "0".
    No chyba, że układ jest superbezwładny i start mikroprocka nie stanowi problemu :).

    Druga sprawa to "przełącznik" obrotowy, rozumiem że nie jest to przełącznik skokowy tylko jakiś rodzaj kalibratora, taka kierownica, czy raczej koło wieloobrotowe bez ustalonego położenia powrotu ?? To daje podstawową różnicę w obsłudze.

    Generalnie warto by się jednak zastanowić nad jakąś formą wskaźnika wyboru komend i trybu pracy sterowanego urządzenia - diody LED, LCD etc.
  • #9 4349826
    JarekLT
    Poziom 14  
    Posty: 182
    Pomógł: 2
    Ocena: 15
    Co masz na myśli mówiąc superbezwładny?
  • Pomocny post
    #10 4349862
    Jdsoul
    Poziom 23  
    Posty: 501
    Pomógł: 47
    Ocena: 10
    Układ mikroprocesorowy różni się od układów logicznych sekwencyjnych tym, że przy starcie mikroprocesora przez kilka ms wykonywane są operacje przygotowujące procesor do pracy.
    Żeby zapewnić procesorowi spokój na ten czas linia Resetu procesora jest blokowana za pomocą układu kondesatora i rezystora. Jest to taki układ opóźniający ostateczny start programu, na sztywno zawarty w konsrtukcji.

    Jeśli teraz jakieś urządzenie dołączone do mikroprocesora zareaguje na te "1" to może być drobny kolaps. mogą pojawić się nieoczekiwane zjawiska. Stąd cenne jest uruchomienie maszyny dopiero po uzyskaniu kilku kroków programu na mikrokontrolerze.


    Przez ten krótki czas wszystkie porty rodziny 8051 są w stanie wysokim "1" na wyjściach.

    Więc jeśli maszyna będzie już pracowała , a kontroler zainicjujesz po tym momencie możesz mieć taką sytuację że wszystkie opcje same jedynki zostaną podane na raz do konsoli sterującej.

    Przez bezwładność rozumiem czas reakcji na takie nietypowe zdarzenie lub inaczej , zabezpieczenie maszyny przed próbą jednoczesnego wykonania kilku poleceń. Jeśli np. jest to silnik dużej mocy, lub inne urządzenie to takie nagłe sterowanie może doprowadzić do nieoczekiwanych efektów.

    Dlatego w układach sterujących opartych na 8051 , stosuje się logikę ujemną. zakładając że "1" jest stanem spoczynkowym domyślnym układu a "0"stanem aktywnym :)
    Poprostu ktoś tak skonstruował ten konkretny typ procków.

    Warto o tym pamiętać przy konstruowaniu układów, bo ani w symulatorze, ani w debugerze tych spraw nie zauważysz :) są one ściśle związne ze sprzętem :)
  • #11 4349886
    JarekLT
    Poziom 14  
    Posty: 182
    Pomógł: 2
    Ocena: 15
    Dziekuje,

    W mym przypadku to nie grozi, dlatego, że najpierw się wlączy kontroler a po upływie 5s pozostałe urządzenia.
  • Pomocny post
    #12 4349977
    Jdsoul
    Poziom 23  
    Posty: 501
    Pomógł: 47
    Ocena: 10
    Rozumiem :) , ale wiesz zawsze są jeszcze inwertery :) np. 7404 lub nawet OC 7407.
  • #13 4350051
    JarekLT
    Poziom 14  
    Posty: 182
    Pomógł: 2
    Ocena: 15
    Tak, wiem! Dzięki. :)

    To co sądzicie? uda się zrobić program, żeby działało jak pisałem powyzej?
  • Pomocny post
    #14 4356320
    adamowicz
    Poziom 21  
    Posty: 374
    Pomógł: 43
    Ocena: 75
    Witam.
    prosty program w ASM.
    Powinien spełniać założenia Jarek LT.
    Pozdrawiam
    Załączniki:
    • spawarka.txt (2.92 KB) Musisz być zalogowany, aby pobrać ten załącznik.
  • #15 4356683
    JarekLT
    Poziom 14  
    Posty: 182
    Pomógł: 2
    Ocena: 15
    Ogromne Dziękuję!!!
  • #16 4364637
    JarekLT
    Poziom 14  
    Posty: 182
    Pomógł: 2
    Ocena: 15
    Witam,

    Jeszcze raz dziękuję za “soft”, który napisałeś. Zaprogramowałem kontroler i działa, prawda nieco nie tak, jak trzeba. Do testu używam klawiatury 3x3. Otórz przyciski działają z pewnym opóźnieniem. Np. gdy wciskam B4 to gdzieś po sekundzie mam 1 na P1.3, czasem szybciej. czy można to przyśpieszyć? Przełącznik obrotowy działa poprawnie tylko w prawo (według wskazówki zegara) S3->S2->S1->S3->S2->S1 itd. natomiast w lewo działa jeżeli to idzie tak: S1->S2->S3. Przy przejsciu z S3->S1 nie działa.
    Czy można ten soft naprawić?
  • Pomocny post
    #17 4366283
    adamowicz
    Poziom 21  
    Posty: 374
    Pomógł: 43
    Ocena: 75
    Witam.
    Rzeczywiście jest pomyłka.
    pod Label S31 w kodzie zmieiłem z JNB P3.1 na P3.5.
    Powinno być dobrze.
    Co do prędkości działania, to sposób napisania tego programu ( uC wykonuje kolejno operacje i pracuje w pętli lokalnej w chwili np. wciśnięcia klawisza) wymusza pewne opóźnienie, byś nie musiał zaprzegać silnika do kręcenia przełącznikiem S :). Dołączam poprawiony plik.
    Załączniki:
    • SPAWARKA.rar (393 Bajtów) Musisz być zalogowany, aby pobrać ten załącznik.
    • spawarka[1].txt (2.92 KB) Musisz być zalogowany, aby pobrać ten załącznik.
  • #18 4368033
    JarekLT
    Poziom 14  
    Posty: 182
    Pomógł: 2
    Ocena: 15
    Ogromne dzięki! Przełącznik działa poprawnie. Co do przycisków B1, B2, B3 i B4 to trochę niedobrze, dlatego, że te przyciski mają służyć do zmieniania wartości (+/-) czyli będą wciskiwane dosyć często i szybko. np. aby zmienić wartość od 10 do 250 z krokiem 5 trzeba przycisk wciskać kilkakrotnie i za każdym wcisnięciem czekać aż zareaguje z powodu opóźnień. zauważyłem pewną rzecz, że gdy przełącznik S jest w pozycji S-S2 lub S-S3 gdy wciskam B2 i B3 jednocześnie na portach P1.4 i P1.5 jest 1 od razu bez opóźnień. Gdy przełącznik S jest w pozycji S-S1 to B2+B3 jest już z opóźnieniem.
    Może by się udało coś jeszcze wyczarować? :) Bo wiem, że to jest możliwe, bo widziałem jak to działa na AT89C2051 w maszynach innego producenta. A tego "pilota" innego producenta nie mogę zastosować, gdyż nie pasują mi kombinacje sygnałów wyjściowych.
  • #19 4368732
    adamowicz
    Poziom 21  
    Posty: 374
    Pomógł: 43
    Ocena: 75
    Oczywiście, że można" wyczarować" lepiej, szybciej.
    Tylko, że to wymaga czasu. Masz bazę w postaci programu. Reszta to Twoja własna inwencja twórcza.
    Pozdrawiam

Podsumowanie tematu

✨ Dyskusja dotyczy stworzenia programu do mikrokontrolera AT89C2051, który ma sterować urządzeniem za pomocą joysticka składającego się z czterech przycisków (B1-B4) oraz przełącznika obrotowego przedstawionego jako trzy przyciski (S1-S3). Autor projektu planuje użyć języka BASCOM, ale otrzymał propozycję napisania programu w asemblerze, który został udostępniony wraz z plikami asm i hex. Omówiono kwestie współpracy przycisków i przełącznika, gdzie idealnie byłoby, aby wszystkie klawisze pozostawały aktywne jednocześnie, umożliwiając np. jednoczesne wciskanie B2 i B3 oraz obracanie przełącznika. Poruszono problem opóźnień w reakcji przycisków, które wynikają z kolejnego wykonywania operacji w pętli programu, co wpływa na szybkość zmiany wartości sterowanych sygnałów. Zaproponowano logikę ujemną (stan aktywny = 0) ze względu na stan portów po resecie mikrokontrolera oraz omówiono znaczenie tzw. "superbezwładności" układu, czyli czasu reakcji na sygnały po starcie. Autor potwierdził, że opóźnienia startu nie są problemem, gdyż kontroler jest uruchamiany przed resztą urządzeń. Wskazano możliwość użycia inwerterów (np. 7404, 7407) dla poprawy sygnałów. Po zgłoszeniu problemów z działaniem przełącznika w lewo i opóźnieniami przycisków, otrzymano poprawioną wersję programu w asemblerze, która rozwiązała błędy w obsłudze przełącznika. Nadal jednak opóźnienia przycisków są zauważalne, co wymaga dalszej optymalizacji kodu. Podkreślono, że dalsze usprawnienia są możliwe, ale wymagają czasu i własnej inwencji twórczej użytkownika.
Wygenerowane przez model językowy.
REKLAMA