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

Sterowanie silnikiem krokowym, atmega 8, zmiana szybkości

mateusz77892 29 Sep 2010 18:51 15927 63
Optex
  • #1
    mateusz77892
    Level 17  
    Witam serdecznie,
    mam problem, mianowicie od tygodnia prubuję uporać się z problemem sterowania silnikiem krokowym, sterować silnikiem krokowym chciałbym w moim efekcie dyskotekowym coś typu mushroom, jako że przewertowałem cały tydzień jedne i te same tematy i nie znalazłem nic co by mnie interesowało, i sprostało moim oczekiwaniom, albo temat się najzwyczajniej urwał i nic nie wiadomo, postanowiłem założyć konkretny temat.
    Rozważałem i miałem chęc sterowania silnikiem krokowym w rytm muzyki, lecz doszedłem do wniosku że to będzie mozolna kombinatoryka z której nie wiadomo co wyjdzie, a na internecie nic na ten temat nie ma.
    Postanowiłem więc po prostu sterować silnikiem krokowym przez zwykłą atmege8-8PU, mniej więcej wiem jak ma wyglądać program, bo silnik krokowy musi dostawać po kolei napięcia na kolejne "kabelki" (że tak powiem łopatologicznie)
    Czyli Atmega8 miała by za zadanie sterować masą na pinach 1, potem 2 potem 3 i na pinie 4 1, 2, 3, 4, itd, (zapętlenie)
    Chciałbym również abym za pomocą dwóch przycisków, mikrosweetchów mógł albo zwalniać albo przyspieszać pracę atmegi, a co za tym idzie silniczka.
    Coś takiego jeśli się nie mylę to byłby schemat.

    Sterowanie silnikiem krokowym, atmega 8, zmiana szybkości

    Tylko tak, jest jedno ale... Nie potrafię napisać programu, sądzę że nie będzie on jakoś bardzo skomplikowany, także czy mógłbym liczyć aby ktoś mi pomógł i wrzucił program który by właśnie pracował według moich oczekiwań?

    Przede wszystkim najpierw proszę przeanalizować schemat, czy to ma prawo działać, i proszę powiedzieć czy mogę liczyć na czyjąś pomoc z programem?


    Jeszcze coś próbowałem wymyślić aby działało w rytm muzyki, iluminofonia (z trzech zrobiłem jedną) jakby dać jakiś tranzystor, przekaźnik który np. podczas uderzenia basu podawał "+" zasilania silnikowi, ale nie wiem czy to przejdzie, chyba tylko przy dobrych obrotach silnika żeby zdążył "załapać"

    Sterowanie silnikiem krokowym, atmega 8, zmiana szybkości

    No nie wiem co o tym myślicie, chcę coś w końcu wykombinować, proszę o sugestie i pomoc.
    Pozdrawiam
  • Optex
  • #2
    nsvinc
    Level 35  
    Za gotowy program niestety będziesz musiał zapłacić (walutą dopuszczoną w Europie). Spróbuj napisać taki programik sam - jeśli wykarzesz choć odrobinę chęci i wkładu własnego, zostanie ci udzielona potrzebna pomoc, abyś skonczył projekt...

    Sterowanie silnikiem krokowym nie jest takie proste jak napisałeś. Nie sprecyzowałeś również, JAK chcesz nim sterować! To, co opisałeś to nie sterowanie silnikiem, tylko kalectwo, niestety...Takim prostym obwodem albo spalisz silnik, albo będzie miał on zywotność kilkunastu godzin, albo jego obroty będą tak skokowe ze nie uzyskasz ostrości obrazu gdy laser będzie rzucany na ścianę między pozycjami stabilnymi.
    Radzę skorzystać z gotowych scalaków np. coś z oferty Allegro Microsystems (do kupienia w TME).
    Zapoznaj się z silnikami krokowymi, na następnie myśl jak je sterować.
    Przykład sterowania który opisałeś odnosi się tylko do unipolarnych silników czteroprzewodowych (+wspólny), a one nie są popularne, cięzko je kupić i mają małe możliwości sterowania w porównaniu z bipolarnymi...
  • #3
    janbernat
    Level 38  
    No nie- da się zrobić.
    Tylko niezupełnie tak.
    Zacznij pisać program- reszta do zrobienia.
  • Optex
  • #4
    psine.pl

    Level 30  
    Mała sugestia.
    Po co rozbudowywać układ o przekaźnik podający + ...
    Procesor ma wejście INT (przerwanie zewnętrzne) i wystarczy to wejście odpowiednio w programie zdefiniować i użyć.
    Procesor ma ogromne możliwości, i nie ma sensu bawić się w jakieś dodatkowe zewnętrzne przekaźniki.

    Co do programu.
    Jeżeli Kolega prosi o pomoc w napisaniu programu. To sugeruję zacząć pisać program w wybranym przez siebie języku (ASEMBLER, C, BASCOM) kursów na portalu jest kilka a pytań i odpowiedzi setki. Jest w czym wybierać.
    Jak będzie zalążek programu zgodnie z regulaminem p.16 Koledzy pomogą.

    Natomiast jeżeli Autor nie chce sam pisać programu to ten post kwalifikuje się do biznes elektronika.

    Pozdrawiam
    Marek
  • #5
    mateusz77892
    Level 17  
    nsvinc wrote:

    Przykład sterowania który opisałeś odnosi się tylko do unipolarnych silników czteroprzewodowych (+wspólny), a one nie są popularne, cięzko je kupić i mają małe możliwości sterowania w porównaniu z bipolarnymi...


    Ale ja już mam taki silniczek, no a z programem to nie wiem, jak bym łyknął trochę wiedzy co podejrzewam nie jest łatwe, to wątpię nawet że bym coś sensownego napisał :) Aczkolwiek coś nauczyć bym się chciał programować. Tylko teraz maturka itd, kiepsko to widzę, aczkolwiek chęci wyrażam. A jeśli nie to ile taka usługa by płatna była w polskiej walucie? :D
    No i co tak wogóle to działałby mój układ?? I sterowanie tak jak to powiedziałem mniej więcej?? (sterowanie masą na poszczególnych kolejnych pinach w odpowiedniej szybkości)

    I jeszcze dodam bo tam widziałem coś kolega mówił o laserze, efekt typu mushroom wygląda tak że 2 diody np.3W kręcą się na takim (przyrównam do noża kosiarkowego) kręcą się na końcach takiego "noża" i to nawet dobrze jak się kręci wolno, bo i tak zębatki i przekładnie daje, a skokowo jak by się kręciło to też by nie przeszkadzało, a może nawet i lepiej, bo niekiedy by w rytm muzyki wchodziło.

    No i tak jako że chciałem coś sam pokombinować, postarałem się nie wiem na ile, dużo myślałem wyszło coś prostego, tylko czy i jak to zadziała? Tego nie wiem, w sumie wątpię, ale chciałem coś napisać, zrobić chociaż mały krok, a czy dobrze czy źle to już wy musicie powiedzieć.
    Zaznaczam że to pierwszy program (o ile to mogę tak nazwać) napisany przeze mnie, także proszę o wyrozumiałość i docenienie starań :D
    A w tym programie ma to wyglądać tak że na portach 1-8 PORTD kolejno mają się aktywować porty i ta operacja ma się zapętlać. Tylko nie wiem czy mogę tak zrobić i np. zewrzeć port 1 i 5 (1 kabel silnika) 2i6 (drugi kabel silnika) 3i7 (trzeci kabel silnika) 4i8 (czwarty kabel silnika), czy aby zmniejszyć ilość potrzebnych portów z ośmiu na 4 musiałbym regułkę Portd = &B01111111 zmienić na np. Portd = &B0111 i to by wystarczyło?
    Przepraszam z góry że tak opisuję myślę, ale chcę naprawdę się coś nauczyć i napisać ten program.
    A oto on:
    'PROGRAM DO STEROWANIA SILNIKIEM KROKOWYM
    
    $regfile = "m8def.dat"
    $crystal = 8000000
    Config Portd = Output                                       'czyli uaktywniam porty D
    Portd = &B01111111                                          'określam który z portów
                                                                         'będzie jako pierwszy aktywny
    
    Do                                                          'pętla nieskończona ?
    Rotate Portd , Right                                        'określam kierunek w którym 
                                                          'będzie się przełączała aktywność portów
    Waitms 10                                                   'opóźnienie podczas 
                                                                     'przechodzenia z portu na port
    Loop                                                        'koniec pętli ?
    End                                                         'zakonczam program


    I oczywiście to nie program ostateczny a mały krok do programu.
  • #6
    mateusz77892
    Level 17  
    Nie wiem dlaczego ale nikt już nie chce mi pomóc?
    Zmieniłem troszkę program, na taki:

    'PROGRAM DO STEROWANIA SILNIKIEM KROKOWYM
    
    $regfile = "m8def.dat"
    $crystal = 8000000
    Config Portd = Output                                       'czyli uaktywniam porty D
    Portd = &B01110111                                         'określam który z portów będzie jako pierwszy aktywny
                                         
    
    Do                                                          'pętla nieskończona ?
    Rotate Portd , Right                                        'określam kierunek w którym będzie się przełączała aktywność portów
    Waitms 10                                                   'opóźnienie podczas przechodzenia z portu na port
    Loop                                                        'koniec pętli ?
    End                                                         'zakonczam program


    Poprawka:
    Portd = &B01110111
    jako że nikt niestety nie ocenił czy ten program dobrze napisałem po 30 minutach nauki, dziś po namyśle odważyłem się wrzucić program na procka, podłączyłem uln2003, procesor,silniczek, zasilania, i odpaliłem, silniczek się kręci płynnie i dość szybko :D
    Jestem zadowolony z moich działań.
    Jeszcze myślę dodać funkcję zmiany strony obrotu silniczka po przyciśnięciu przycisku. Tylko jak zrobić aby np. po 3-krotnym nacisnięciu przycisku dopiero następowała zmiana kierunku, bo jak po 1 przyciśnięciu to coś wykombinuję, ale jak po 3 krotnym?
  • #7
    janbernat
    Level 38  
    To jeszcze masz rotate, Left.
    I zapoznaj się z debounce do obsługi przycisków.
    A dopiero po zapoznaniu się z przerwaniami i sub-ami będziemy myśleć o 3-krotnym naciśnięciu przycisku.
    Jeszcze jedno- w szereg z wyjściami procesora na ULN daj jakieś oporniki- 200om do 1kom- dla bezpieczeństwa procesora.
    A sterowanie szybkością obrotów sprawdź zmieniając Waitms.
    Im mniej tym szybciej silnik będzie się kręcił- aż w pewnym momencie przestanie i zacznie warczeć.
    To będzie oznaczało że już szybciej nie może.
    P.S.
    A wogóle- to gratuluję.
  • #8
    mateusz77892
    Level 17  
    janbernat wrote:
    To jeszcze masz rotate, Left.
    I zapoznaj się z debounce do obsługi przycisków.
    A dopiero po zapoznaniu się z przerwaniami i sub-ami będziemy myśleć o 3-krotnym naciśnięciu przycisku.
    Jeszcze jedno- w szereg z wyjściami procesora na ULN daj jakieś oporniki- 200om do 1kom- dla bezpieczeństwa procesora.
    A sterowanie szybkością obrotów sprawdź zmieniając Waitms.
    Im mniej tym szybciej silnik będzie się kręcił- aż w pewnym momencie przestanie i zacznie warczeć.
    To będzie oznaczało że już szybciej nie może.
    P.S.
    A wogóle- to gratuluję.


    No wiem właśnie, jutro zrobię z jednym przyciśnięciem zmiana kierunku rotacji.
    O ile mi się uda coś wykombinować :)
    Ok, niedługo postaram się dodać te oporniki jak mówisz :)
    A z szybkością już właśnie próbowałem Waitms zmieniać ale to to pewnie dopiero będę zmieniał i ustawiał na końcu jak cały efekt będzie gotowy, bo teraz trudno mi powiedzieć jak to będzie wyglądało przy takiej prędkości :)
    Tak że jutro coś pokombinuję z tym przyciskiem, wrzucę programik do skonsultowania, i będziemy myśleć o "3krotnym przyciskaniu"
    Bo moja wizja efektu jest taka:
    myślałem dać jeden kanał iluminofoni, która podczas uderzenia basu poprzez jakiś tranzystor zwierałaby masę z pinem odpowiedzialnym za przycisk. 3 krotne uderzenie basu, zmieniało by rotację efektu, jeszcze można by pomyśleć o innych efektach :)
  • #9
    janbernat
    Level 38  
    Jeśli myślisz o dalszych efektach- zmianach w programie- to waitms jest rozwiązaniem tymczasowym.
    Jak najszybciej zacznij się uczyć o timerach i przerwaniach.
    Dopiero z nimi można sprawić że procesor działa jak Ty chcesz- a nie jak on chce.
  • #10
    mateusz77892
    Level 17  
    właśnie myślałem aby za pomocą 2 przycisków opóźniać i przyspieszać silniczek, ale nie wiem jak to zrobic :(

    Dodano po 2 [godziny] 5 [minuty]:

    Napisałem coś takiego:
    'PROGRAM DO STEROWANIA SILNIKIEM KROKOWYM
    
    $regfile = "m8def.dat"
    $crystal = 8000000
    Config Portb = Output                                       'czyli uaktywniam porty D
    Portb = &B01110111
                                         'określam który z portów będzie jako pierwszy aktywny
    
    Do                                                          'pętla nieskończona ?
    Rotate Portb , Right                                        'określam kierunek w którym będzie się przełączała aktywność portów
    Waitms 10                                                   'opóźnienie podczas przechodzenia z portu na port
    Loop                                                        'koniec pętli ?
    End                                                         'zakonczam program
    
    Dim A As Byte
    Enable Interrupts
    Enable Int0
    Config Int0 = Low Level
    
    On Int0 Program1
    Do
    Loop
    End
    
    Program1:
    Incr A
    If A > 5 Then A = 0
    If A = 0 Then Rotate Portb , Left
    Waitms 9
    Return


    Liczyłem na to że podczas 5 krotnego naciśnięcia przycisku ( 5 krotnego zwarcia INT0 z masą) Silnik zmieni rotację. Jednak coś jest nie tak, Mógłby ktoś poprawić błąd? bo nie wiem gdzie.
  • #11
    janbernat
    Level 38  
    A pisałem- poczytać o debounce.
    Podpowiem tak- w pętli do- loop tylko debounce z odwołaniem się do podprogramów sub.
    Ta druga pętla do-loop wszystko psuje.
  • #12
    mateusz77892
    Level 17  
    Wykombinowałem w końcu coś takiego:

    'PROGRAM DO STEROWANIA SILNIKIEM KROKOWYM
    
    $regfile = "m8def.dat"
    $crystal = 8000000
    Config Portb = Output                                       'czyli uaktywniam porty D
    Portb = &B01110111                    'określam który z portów będzie jako pierwszy aktywny
    Config Pind.2 = Input
    Pind.2 = 1
    Config Debounce = 30                            'czekaj 30ms jak się nie zmieni to skocz
    
    
    Do                                                         
    Debounce Pind.2 , 0 , Program2 , Sub               'wejście PINB.2 , stan niski, skocz do program2,
    Debounce Pind.2 , 1 , Program1 , Sub                  'wejście stan wysoki skocz do program1
    Loop
    End                                                         'koniec
    
    
    Program1:
    Do                                                          'pętla nieskończona ?
    Rotate Portb , Right                      'określam kierunek w którym będzie się przełączała aktywność portów
    Waitms 10                                    'opóźnienie podczas przechodzenia z portu na port
    Loop                                                        'koniec pętli ?
    Return                                                      'zakonczam program
    
    
    Program2:
    Do
    Rotate Portb , Left
    Waitms 20
    Loop
    Return



    Po podłączeniu zasilania silniczek się kręci w jedną stronę, natomiast chcąc za pomocą przycisku zmienić obroty silniczka w drugą stronę niestety nic się nie dzieje, dalej jak się kręcił tak się kręci. (nie reaguje na przycisk) LECZ: przy podłączaniu układu do zasilania, jeśli przed włączeniem zasilania będę trzymał przycisk to wtedy silniczek kręci się w drugą stronę.(przycisk zadziała) Czyli wygląda na to że przelatuje program i taki jak jest stan pin(U)d.2 skacze do odpowiedniego podprogramu, z którego już nie wraca???
    Co może być nie tak w tym programie, co dopisać, zmienić?
  • #13
    mpietras
    Level 17  
    W podprogramach ustawiaj tylko flagę kierunku obrotów (żadnych pętli do ... loop). Flagę wykorzystuj w pętli głównej do wykonania rotate w odpowiednią stronę, potem sprawdź przyciski i odczekaj odpowiedni czas między krokami.
  • #14
    mateusz77892
    Level 17  
    z flagą to już znowu inna bajka o ile sie nie mylę? :)
    chciałem zrobić z debounce i subami :)
    no to nie wiem jak już w końcu mam robić, mógłbym ktoś napisać konkretnie kawałek programu? Co w tym moim jest źle? bo tak jak mówię, jest dobrze na początku przy uruchamianiu, program wychwytuje stan portu 0 czy 1, skacze do podprogramu 1 albo 2 w zależności od stanu portu, ale chyba potem nie wraca do analizy stanu portu tylko leci w jednym programie.
    Musi mi ktoś to przedstawić konkretnie. Proszę, najlepiej na tym moim programie coś zmienić o ile się da. :)
  • #15
    janbernat
    Level 38  
    
    do
    if flaga=1 then
      rotate left
    .........................
    if flaga=0 then
      rotate right
    ........................
    debounce
    debounce
    
    loop
    
    prog1
    flaga=0
    return
    prog2
    flaga=1
    return
    
    
    
    
    
    
    
    
  • #16
    mateusz77892
    Level 17  
    A w którym miejscu to wkleić? Bo to tylko urywek jak się dobrze domyślam :)
    Flagę jakoś muszę zdefiniować i przypisać do niej port?
    Jak byś mógł jeszcze to skopiuj i wklej część z mojego i twój umieść żeby to był jeden cały programik :) Bo teraz to sie już pogubiłem :)
  • Helpful post
    #17
    janbernat
    Level 38  
    Dodaj na początku dim flaga as byte.
    Resztę masz- podprogramy i główną pętlę.
    
    'PROGRAM DO STEROWANIA SILNIKIEM KROKOWYM
    
    $regfile = "m8def.dat"
    $crystal = 8000000
    Config Portb = Output                                       'czyli uaktywniam porty D
    Portb = &B01110111                    'określam który z portów będzie jako pierwszy aktywny
    Config Pind.2 = Input
    Pind.2 = 1
    Config Debounce = 30                            'czekaj 30ms jak się nie zmieni to skocz
    dim flaga as byte
    
    Do                                                         
    Debounce Pind.2 , 0 , Program2 , Sub               'wejście PINB.2 , stan niski, skocz do program2,
    Debounce Pind.2 , 1 , Program1 , Sub                  'wejście stan wysoki skocz do program1
    if flaga=0 then
    Rotate Portb , Right                      'określam kierunek w którym będzie się przełączała aktywność portów
    Waitms 10                                    'opóźnienie podczas przechodzenia z portu 
    end if
    if flaga=1 then
    Rotate Portb , Left
    Waitms 20
    end if
    
    na port
    
    
    Loop
    End                                                         'koniec
    
    
    Program1:
    flaga=0                                                        'pętla nieskończona ?
                                                           'koniec pętli ?
    Return                                                      'zakonczam program
    
    
    Program2:
    flaga=1
    Return
  • #18
    mateusz77892
    Level 17  
    Dostałeś pomógł :)
    A jeszcze mam pytanko, jak zrobić coś takiego żeby np. za 5 przyciśnięciem dopiero silniczek zmieniał rotację, czyli np. kręci się w prawo, przyciskamy 5 razy, kręci się w lewo (bez konieczności trzymania przycisku) dajmy na to przez około 5 sekund, potem (powrót) kręci się w prawo i rozpoczyna zliczanie 5 przyciśnięć, jak 5 razy się przyciśnie to zmienia rotację i znów czeka 5 sekund itd...
    (Jakoś zwiększając wartość flagi o 1 if flaga>5 then coś tam?)

    No i w jaki sposób wykonać np. Już oczywiście na innym porcie, jeśli raz przycisnę włącza się "Program efektowy 1" (np. ten co teraz wykonaliśmy) jak znów przycisnę ( nieważne kiedy) wykonuje się następny program (np. efekt 2 który w przyszłości chciałbym dodać) i tak kilka programów 1, 2, 3, 4, 5, (pętla, czyli za 6 przyciśnięciem pogram efektowy 1 itd...)
  • #19
    janbernat
    Level 38  
    Najpierw wykombinowałeś coś sam i już coś działało.
    Trochę poprawiłem i działa lepiej.
    To teraz znowu próbuj sam- a potem będziemy poprawiać.
  • #20
    mateusz77892
    Level 17  
    Wiem wiem, też chciałbym sam spróbować najpierw a potem do wglądu wrzucić, tylko chciałem abyś mnie naprowadził mniej więcej jak to zrobić, jakie funkcje wykorzystać? a ja spróbuję wtedy coś wykombinować, tylko jak byś mógł mnie naprowadzić (tak ogólnie) :)
  • #21
    mateusz77892
    Level 17  
    A na przykład coś takiego miało by jakieś prawo działania??
    
    'PROGRAM DO STEROWANIA SILNIKIEM KROKOWYM  v.2
    
    $regfile = "m8def.dat"
    $crystal = 8000000
    Config Portb = Output                                       'czyli uaktywniam porty D jako wyjścia
    Portb = &B01110111                                          'określam który z portów będzie jako pierwszy aktywny
    Config Pind.2 = Input                                       'Pind.2 wejście
    Pind.2 = 1
    Dim A As Byte
    Dim B As Byte
    
    Debounce Pind.2 , 0 , Program2
    Debounce Pind.2 , 1 , Program1
    
    
    Program1:
    Do
    Incr A
    Loop Until A = 5
    If A < 5 Then
    Rotate Portb , Right
    Waitms 10
    If A = 5 Then Goto Program2
    End If
    
    
    Program2:
    Do
    Incr B
    Loop Until B = 5
    If B < 5 Then
    Rotate Portb , Left
    Waitms 20
    If B = 5 Then Goto Program1
    End If


    Tak jak ja to widzę: program przelatuje przez debounce, w zależności od stanu (1 czy 0) skacze do Program1 lub Program2 i w każdym podprogramie zwiększa zmienną o 1 waz z przyciśnięciem, jeśli jest ta liczba mniejsza od 5 naciśnięć przycisku wykonuje cały czas rotację w jedną stronę, jeśli równa się 5 przechodzi do innego programu, w którym jest bardzo podobny system działania. :)
    Ma to ręce i nogi? czy mam bogatą wyobraźnię?? :)
  • #22
    janbernat
    Level 38  
    Sprawdź.
    Masz bogatą wyobraźnię.
    A procesor i program to są tępe bydlęta bez wyobraźni.
    Zrobią co im każesz.
    Dokładnie to co im każesz.
    A nie to co sobie wyobraziłeś.
    W dodatku nic Ci nie powiedzą co zrobią.
    Jeśli potrafią- to zrobią- to znaczy dadzą się skompilowć.
  • #23
    mateusz77892
    Level 17  
    Kompilują się bez problemu, lecz z działaniem to raczej kiepsko :)
    Dopiero w nocy jak spałem uświadomiłem sobie że raczej nie ruszy, no bo co ze zwiększania A, musi być jakaś komenda jeśli wystąpi stan 0 to wtedy zliczaj,
    Powiedz mi, jaka jest Instrukcja za pomocą której możemy zliczać przyciśnięcia??
    Bo cały czas tkwie w jednym jeśli jest stan 0 to x a jeśli stan 1 to y, czyli najprostsza forma, a jaka jest instrukcja która zlicza przyciśnięcia??
  • #24
    janbernat
    Level 38  
    Przeanalizuj Swój program.
    Linijka po linijce.
    Nie masz głównej pętli.
    Po włączeniu program przelatuje tylko raz przez polecenia debounce.
    Potem już nigdy ich nie sprawdza.
    A pętle w subach są niepotrzebne.
  • #25
    landy13
    Level 31  
    mateusz77892 wrote:
    ... a jaka jest instrukcja która zlicza przyciśnięcia??

    To nie instrukcja. Trzeba:
    1 Na początku zadeklarować zmienną, np "uint8_t a=0;"
    2 W procedurze obsługi naciśnięcia przycisku ją inkrementować: "a++;"
    3 W pętli głównej sprawdzać: "if(a==5)" i wykonywać co trzeba.
    4 Po wykonaniu wyzerować: "a=0;"
  • #26
    janbernat
    Level 38  
    Jakieś mam podejrzenia że w Bascomie "if(a==5)" nie będzie dobrze działać.
  • #27
    landy13
    Level 31  
    janbernat wrote:
    Jakieś mam podejrzenia że w Bascomie "if(a==5)" nie będzie dobrze działać.
    No rzeczywiście, jakaś pomroczność jasna mnie nadeszła, myślałem o innym temacie. Już poprawiam.
    1 Dim a as byte
    2 a=a+1
    3 If a=5 then
    4 a=0
  • #28
    mateusz77892
    Level 17  
    1.No dobrze :) też tak myślałem jak kolega wyżej aczkolwiek jedno mnie nurtuje, jeśli przyciśniemy "ten" przycisk to skąd program będzie wiedział że musi zwiększyć wtedy zmienną "a" ? Trzeba jakoś dodać w programie że jeśli wystąpi np. stan 1 na pinie przycisku wtedy ma zwiększyć "a" ?
    Np.
    If pinx.y = 1 Then a=a+1
    ??

    2.I jeśli już to ustawię to skąd program ma wiedzieć że ma sobie liczyć naciśnięcia?? Z tego powyższego kodu sam się domyśli?

    3.Aby wyzerować to należy tylko wpisać na końcu a=0??

    4.Czy mógłbym np dać coś takiego:
    
    Do
    If Pind.2 = 0 Then
    A = A + 1
    End If
    If A < 5 Then
    Rotate Portb , Left
    Waitms 20
    End If
    If A > 5 Then
    Rotate Portb , Right
    Waitms 10
    End If
    If A = 10 Then A = 0
    Loop
    End
  • #29
    landy13
    Level 31  
    mateusz77892 wrote:
    ...jeśli przyciśniemy "ten" przycisk to skąd program będzie wiedział że musi zwiększyć wtedy zmienną "a" ?

    Jak to skąd? Napisałem:
    Quote:
    2 W procedurze obsługi naciśnięcia przycisku ją inkrementować:
    a procedurę obsługi przycisku masz pod etykietą "Program2:" (tam prowadzi Debounce). Nie zapomnij o Return.
    Najlepiej zmodyfikuj program kolegi janbernat.
  • #30
    janbernat
    Level 38  
    mateusz- dostałeś trochę działający program.
    Zrób: zapisz-> jako-> test0.
    Potem zacznij przerabiać.
    Jak coś zadziała- zapisz-> jako-> test1.
    Zacznij czytać- help po polsku napisany przez ZbeeGin jest na stronie Bascoma.
    Mikroprocesorowa ośla łączka jest na stronie EdW.
    Zaczęło coś działać- to nie pytaj co dalej tylko próbuj sam.
    Ten program do efektów będzie od Ciebie wymagał znajomości przerwań, Timerów i takich innych.
    Tu nie dostaniesz gotowca- nikomu się nie chce- ale pomoc w jakimś pojedynczym problemie.
    Od dobrego przedstawienia problemu zależy jakość pomocy.
    I nie wyobrażaj sobie że zrobisz przy naszej pomocy program do generowania jakichś efektów świetlnych i zapomnisz o procesorach i programowaniu.
    Albo się zaczniesz bardziej metodycznie uczyć- albo zamów- może ktoś Ci zrobi.
    To jest dział dla tych którzy chcą się nauczyć.