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

Programowanie przycisku 3 funkcje w bascom

adass 07 Lut 2009 08:09 3928 32
  • #1 6114517
    adass
    Poziom 25  
    Witam. Chcę za pomocą jednego przycisku i atmega16 sterować 4 Led.
    Program ma działać tak :
    -jedno naciśnięcie załącza 2 led (PC0 i PC2)
    -drugie naciśnięcie wyłącza led
    -trzecie naciśnięcie załącz 2 led (PC1 i PC3)i tak w koło powtarzać mają się cykle .
    Proszę o pomoc w napisaniu programu w bascom według schematu :
    Programowanie przycisku 3 funkcje w bascom
  • #2 6114843
    Remus
    Poziom 13  
    ja bym to zrobił w ten sposób:

    
    if pinb.3=0 then 'badanie stanu przycisku
       incr zmienna_pomocnicza    'zwiększ zawartość zmiennej
       if zmienna_pomocnicza = 4 then zmienna_pomocnicza=1  'liczenie do 3
       waitms 20 'eliminacja drgania stykow
    end if
    select case zmienna_pomocnicza    'wybierz odpowiedni podprogram w 
       case 1: gosub zalacz_PC0_PC2   'zależności od zawartości zmiennej
       case 2: gosub wylacz_LED
       case 3: gosub zalacz_PC1_PC3
    end case
    
  • #3 6115102
    adass
    Poziom 25  
    Nie chcę się to skompilować wywala całą masę błędów.
  • #4 6115196
    dawid512
    Poziom 32  
    Bo to nie gotowiec :!: Ja preferuję debounce, mały przykład dla ciebie:
    Dim I As Byte
    I = 0
    
    Ddrc = &B00001111
    Portc = &B11110000
    
    Do
    
    Debounce Pinc.4 , 0 , Zmien , Sub
    
    Select Case I
    
    Case 1:
    Set Portc.0
    Set Portc.2
    
    Case 2:
    Reset Portc.0
    Reset Portc.2
    
    Case 3:
    Set Portc.1
    Set Portc.3
    
    End Select
    
    
    Loop
    
    Zmien:
    Incr I
    If I = 4 Then I = 1
    Return
  • #5 6115423
    adass
    Poziom 25  
    Nie mogę sobie poradzić z zmiennymi pomocniczymi na porcie b .:cry:

    $regfile = "m16def.dat"
    $crystal = 8000000
    Baud = 115200

    Config Lcd = 16 * 2
    Config Lcdpin = Pin , Rs = Porta.5 , E = Porta.7 , Db4 = Portc.4 , Db5 = Portc.5 , Db6 = Portc.6 , Db7 = Portc.7

    'KONFIGURACJA PORTÓW

    confib portb
    If Pinb.3 = 0 Then 'badanie stanu przycisku
    Incr 20zmienna_pomocnicza 'zwiększ zawartość zmiennej
    If 10 Zmienna_pomocnicza = 4 Then = 20 Pzmienna_pomocnicza = 1 'liczenie do 3
    Waitms 20 'eliminacja drgania stykow
    End If

    Dim I As Byte
    I = 0
  • #6 6115853
    Maciek4141
    Poziom 22  
    $crystal = 1000000
    
    Dim I As Byte
    I = 0
    
    Config Pinb.3 = Input
    Config Portc = Output
    
    Do
    
    Debounce Pinc.4 , 0 , Zmien , Sub
    
    Select Case I
    
    Case 1:
    Set Portc.0
    Set Portc.2
    
    Case 2:
    Reset Portc.0
    Reset Portc.2
    
    Case 3:
    Set Portc.1
    Set Portc.3
    
    End Select
    
    
    Loop
    
    
    
    Zmien:
    Incr I
    If I = 4 Then
    I = 1
    End If
    
    Return


    Ten kod na pewno zadziała
  • #7 6116197
    adass
    Poziom 25  
    Kod się kompiluje ok , wgrywam hex ale żaden program nie dzieła żadna led się nie zaświeca .
  • #8 6116291
    dawid512
    Poziom 32  
    Dodałeś nagłówek $regfile ="m16def.dat" ? Po za tym nie powiedziałeś nam jakim stanem zapalasz leda. W dodatku na Porcie C jest JTAG którego za pewne nie wyłączyłeś.

    Kolego aciek4141 twój kod zawiera błędy.
  • #9 6116414
    wader_669
    Poziom 28  
    ja nie rozumiem dlaczego dajecie mu gotowca, do helpa powinien zagladac autor tego tematu!!!! po 2 to juz chyba drugi tego typu post na elektrodzie w ciagu miesiaca, ktos mial bardzo podobny problem. Wiec jeszcze nie umie uzywac szukaj
  • #10 6116475
    dawid512
    Poziom 32  
    Nawet jak dostaje gotowca to nie umie go wykorzystać.
  • #11 6116542
    wader_669
    Poziom 28  
    jak juz kazdy i tak daje gotowca to ja tez sie postaram napisac ale juz osateczna wersje

    
    $regfile = "m16def.dat"
    $crystal = 1000000
    
    Dim I As Byte
    I = 1
    
    declare sub ledy
    
    Config Pinb.3 = Input
    Config Pinc.0 = Output
    config Pinc.1 = output
    config pinc.2 = output
    config pinc.3 = output
    
    set portb.3
    
    call ledy 
    Do
    
    if Pinc.4 = 0 then
    waitms 20
    bitwait pinc.4 , set
    
    incr i
    
    if i=4 then i=1
    
    call ledy
    
    end if
    Loop
    end
    
    sub ledy
    Select Case I
    
    Case 1:
    Set Portc.0
    Set Portc.2
    
    Case 2:
    Reset Portc.0
    Reset Portc.2
    
    Case 3:
    Set Portc.1
    Set Portc.3
    
    End Select
    end sub
    
    


    nie napisales jaki stan maja miec ledy na poczatku programu. Jeszcze nie rozumiem tego czy jak piszesz ze ledy maja gasnac to wszystkie? i jak wlaczam 2 ledy to te 2 pozostale sie wylanczaja. Mogles zadac chociaz sobie trudu opisujac dokladniej twoj problem!
  • #12 6117827
    Maciek4141
    Poziom 22  
    Racja, ten mój pierwszy był źle - przepraszam za to. Poprawiłem trochę kod kolegi wader_669 i sprawdziłem. Na 100% działa.





    $regfile = "m16def.dat"
    $crystal = 1000000
    
    Declare Sub Ledy
    Dim I As Byte
    I = 1
    
    Config Pinb.3 = Input
    Config Pinc.0 = Output
    Config Pinc.1 = Output
    Config Pinc.2 = Output
    Config Pinc.3 = Output
    
    
    Call Ledy
    
    
    Do
    
       If Pinb.3 = 0 Then
          Incr I
    
          If I = 4 Then
             I = 1
          End If
    
          Call Ledy
    
       End If
    
    
    Loop
    End
    
    
    
    
    
    Sub Ledy
    Select Case I
    
    Case 1:
    Set Portc.0
    Reset Portc.1
    Set Portc.2
    Reset Portc.3
    
    
    Case 2:
    Reset Portc.0
    Reset Portc.1
    Reset Portc.2
    Reset Portc.3
    
    Case 3:
    Reset Portc.0
    Set Portc.1
    Reset Portc.2
    Set Portc.3
    
    
    End Select
    
    Waitms 20
    
    End Sub
  • #13 6118867
    dawid512
    Poziom 32  
    :arrow: Maciek4141 wciąż jest błąd. Wydaje mi się że autor tematu już wie jak to wykonać.
  • #14 6118926
    Maciek4141
    Poziom 22  
    dawid512 możesz mnie oświecić? Zrobiłem sobie przerwę ostatni w pisaniu w bascomie no i kurczę nic nie widzę.
  • #15 6119046
    dawid512
    Poziom 32  
    Osobiście też już nie pisze w Bascomie ale robisz błędy które łatwo wychwycić. Na pierwszy ogień zapomniałeś o pull-upie. Po za tym jak już opóźnienie to w warunku(eliminacja drgań).

    Do autora tematu: popraw schemat bo nawet rezystorów nie dałeś do diod.
  • #16 6119565
    adass
    Poziom 25  
    Panowie rewelacja Maciek4141 kod działa :D ale są małe nie dociągnięcia przy załączeniu zasilania układ od razu startuje i ciężko wyłapać stop przyciskiem .
    Steruje tym mostek H i silniczek ładnie kręci w prawo i lewo ze stopem jest problem .
    Jakby tak było można na lcd wyświetlić PRAWO/STOP/LEWO i podświetlanie to by było super .
    Programowanie przycisku 3 funkcje w bascom
  • #17 6119822
    ZbeeGin
    Poziom 39  
    Naprawdę chce kolega zwierać silnik na sztywno za pomocą przekaźnika? Zgodził się na takie przeciążenia?
  • #18 6119878
    adass
    Poziom 25  
    Przekaźnik pełni role hamulca podczas zaniku zasilania gdy silnik jest rozpędzony (proszę dokładnie popatrzeć ).:D
  • #19 6119913
    ZbeeGin
    Poziom 39  
    Wiem, że zwierasz uzwojenia w celu wyhamowania. Pytam tylko czy świadomy jesteś tego rozwiązania by zwierać je na sztywno? Jak myślisz, czy przekaźnik będzie w stanie wytrzymać prąd zwarciowy silnika? Jak długo będzie działał tak obciążany przekaźnik? Czy silnik polubi się ze zwieraniem jego wyprowadzeń na pełnych obrotach?
  • #20 6119982
    janbernat
    Poziom 38  
    Można dać w szereg duży opornik o małej wartości.
  • #21 6120445
    Maciek4141
    Poziom 22  
    Co do wyświetlenia na lcd, to już możesz zrobić to sam. Poczytaj w helpie o instrukcji Lcd i konfiguracji obsługi wyświetlacza w bascomie. To nic trudnego, tylko trzeba chcieć.
  • #22 6120595
    adass
    Poziom 25  
    Panie ZbeeGin chyba się nie rozumiemy :D .
    Ile razy elektrownia wyłącza prąd w ciągu dnia , tygodnia itd ?
    Przekaźnik ma trzymać non stop .
    Kolego Maciek4141 jakbyś mógł poprawić wyłapywanie stopu bo trudno utrafić w stop i żeby w momencie podłączenia do zasilanie nie załączało led lub silnika .
  • #23 6120651
    ZbeeGin
    Poziom 39  
    Nie jest ważne ile razy elektrownia wyłącza prąd (U mnie średnio raz na 4 miesiące). Chodzi o zasadę hamowania silnika. Moim zdaniem zwieranie zacisków jest niepoprawne i działa destrukcyjne zarówno dla silnika, jak i przekaźnika.
  • #24 6120747
    adass
    Poziom 25  
    Można ten przekaźnik wywalić ale widziałem takie rozwiązania w różnych fabrycznych urządzeniach .
    Zmieniłem wartość Waitms na 220 i jest lepiej ale bym musiała być taka kolejność STOP/PRAWO/STOP/LEWO (i tak w koło).
  • #25 6120950
    wader_669
    Poziom 28  
    polecam koledze zagladadnac do helpa (ktore nawet jest przetlumaczone na jezyk polski dziecki zbeegin), bo nadal bedzie takiego glupie pytania zadawac.

    Dodano po 12 [minuty]:

    nie moge juz wyrobic, dlaczego ludzie maja problem z tak prostym programem

    
    
    $regfile = "m16def.dat"
    $crystal = 1000000
    
    Dim I As Byte
    I = 1
    
    declare sub ledy
    
    Config Pinb.3 = Input
    Config Pinc.0 = Output
    config Pinc.1 = output
    config pinc.2 = output
    config pinc.3 = output
    
    set portb.3
    
    
    Call Ledy
    Do
    
    if Pinb.3 = 0 then
    waitms 20
    Bitwait Pinb.3 , Set                                        ' jak puscisz przycisk to dalej wykonuje program
    
    incr i
    
    If I = 5 Then I = 1
    
    call ledy
    
    end if
    Loop
    end
    
    sub ledy
    Select Case I
    
    Case 2:
    Set Portc.0
    Reset Portc.1
    Set Portc.2
    Reset Portc.3
    
    Case 4:
    Reset Portc.0
    Set Portc.1
    Reset Portc.2
    Set Portc.3
    
    Case Else:
    Reset Portc.0
    Reset Portc.1
    Reset Portc.2
    Reset Portc.3
    
    End Select
    End Sub
    


    tu masz ostateczna wersje!!!

    jak ci nie pasuje, ze po puszczeniu przycisku dalej dopiero leci program to se to zmien.

    Co do tego przekaznika ja bym sie nie klucil ze zbeegin kolega ma 100000X wieksze doswiadczenie od ciebie i mimo, ze za bardzo nie wiem o co chodzi to bym mu zaufal.

    Dodano po 4 [minuty]:

    le zapomnialem moze ktos powiedziec dlaczego cos takiego nie dziala:

    ja zrobilem po prostu case else ale nie zawsze moze to pasowac, jak mozna to inaczej rozwiazac? (a nie chce wstawiac 2 razy case 1: i case 3: )

    Dodano po 2 [minuty]:

    potestowalem troche i kompiluje sie
     case 1 : 3 : 

    pytanie czy bedzie tez dzialac?
  • #27 6121356
    wader_669
    Poziom 28  
    bardzo nie lubie symulatora, nie wiem dlaczego ale nie umiem sie nim poslugiwac :P
  • #28 6121443
    adass
    Poziom 25  
    wader kod od ciebie nie działa , od macka działa po mojej modyfikacji działa pięknie :D (cały czas testuje i chodzi ok)
    Teraz chce zrobić sterować przekaźnikami czasowymi też tym samym przyciskiem jak by ktoś pomógł byłbym bardzo wdzięczny
    ma działać tak :
    -naciśnięcie przycisku chwyta 1 i 2 przekaźnik i 1 odlicza czas od 0-20 sek następnie rusza silnik ( obojętnie w którą stronę) a 2 przekaźnik dalej trzyma i odlicza czas od 0-960 sek i puszcza ( i tak za każdym uruchomieniem).
    Programowanie przycisku 3 funkcje w bascom
  • #29 6122150
    wader_669
    Poziom 28  
    no masz racje, popelnilem maly blad pomylilem pinb.3 z pinc.4.
    Ogolnie jest taka zasada na elektrodzie nikt nie daje gotowcow (ten temat to jeden z nielicznych wyjatkow). Wydaje mi sie ze ty jestes idealnym przykladem dlaczego nie powinno sie dawac gotowcow, bo nic z tego nie wynosisz i jak chcesz modyfikowac program to nie umiesz. Wiec kup sobie ksiazke do bascoma albo poczytaj helpa!!!!

    i jak ktos zazwyczaj prosi kogos zeby napisal kod to prawie zawsze odpowiedz brzmi "za ile?"

    Dodano po 1 [minuty]:

    p.s. poprawilem kod i wiecej juz dla ciebie nie zrobie, musisz troche sie wysilic i tez samemu cos zrobic nie tylko wgrac program
  • #30 6122164
    Maciek4141
    Poziom 22  
    Nie rozumiem w czym masz problem, brak ci chęci do ściągnięcia tego helpa nawet z downloadu elektrody i poczytaniu o niektórych funkcjach? Jest tam wszystko elegancko wyjaśnione wraz z przykładami.


    EDIT:
    wader_669 mnie wyprzedził, pokarz że coś sam zrobiłeś a my ewentualnie to możemy poprawić.
REKLAMA