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

Jak w Bascom użyć przełącznika monostabilnego do sterowania diodami LED?

bkwrzos 02 Lut 2009 15:36 1428 10
REKLAMA
  • #1 6091870
    bkwrzos
    Poziom 2  
    Posty: 3
    Witam
    Chciałbym za pomocą tasty (przełącznik monostabilny) włączać i wyłączać miganie diodek. Miganie jest jako podprogram. Przy tym zapisie miganie mam, ale zero reakcji na przełącznik. Jaki zapis do przełącznika bistabilnego, to wiem, ale chciałbym tu najzwyklejszy "guzik", zwierany chwilowo do masy
    
    =======================
    $regfile = "attiny25.dat"
    $crystal = 1000000
    
    Config Pinb.3 = Input                                       'konf.portów
    Config Pinb.4 = Output
    Config Pinb.0 = Output
    
    Portb.3 = 1                                                 'podciągnięcie tasty do +
    Portb.4 = 0                                                 'jw., wył. LEDów
    Portb.0 = 0
    
    Tasta Alias Portb.3                                         'nadanie nazw
    Led1 Alias Portb.4
    Led2 Alias Portb.0
    
    Declare Sub Led
    
    '===================================== tasta 
    Do
    
    If Tasta = 1 Then
    Waitms 25
    If Tasta = 1 Then
    
    Gosub Led
    
    End If
    End If
    
    End                                                         'end
    '=================================== led 
    Sub Led
    
    Led1 = 1                                                    'wygaszone
    Led2 = 1
    Waitms 1000
    
    Led1 = 0                                                    '1
    Led2 = 1
    Waitms 150
    
    Led1 = 0                                                    '2
    Led2 = 0
    Waitms 250
    
    Loop
    End Sub Led
    ==================================
    

    "pomógł" lub kilka punktów - no problem
    z góry dziękuję

    Proszę używać znaczników [code] - uzupełniłem.
    [zumek]
  • REKLAMA
  • #3 6092150
    ujus
    Poziom 13  
    Posty: 99
    Pomógł: 4
    Ocena: 5
    Przeanalizuj jeszcze raz Twój program. Po wciśnięciu ustawiasz Tasta = 1 i tak już pozostaje. Popraw, pokombinuj i będzie dobrze :)
  • REKLAMA
  • #4 6093903
    M. S.
    Poziom 34  
    Posty: 2107
    Pomógł: 259
    Ocena: 680
    Kolega napisał:

    Cytat:
    "guzik", zwierany chwilowo do masy


    więc nie zostaje na 1. Faktem jest, że przycisk będzie działał odwrotnie.
  • #5 6094029
    bkwrzos
    Poziom 2  
    Posty: 3
    Witam
    Wiem o tym, kod, który zamieściłem jest niepełny i przełącznik nie działa, bo nie ma żadnej innej alternatywy.
    Nie wiem po prostu, czy wprowadzić dodatkową zmienną, która będzie zmieniała swój znak przy każdym naciśnięciu i zgodnie ze zmienną będzie przekierowanie do podprogramu z treścią "migaj" albo do podprogramu z "wygaszone". Czy może jest prostsze rozwiązanie.
    Zapewniam, że niezależnie sam też kombinuję i korzystam z tego co mogę się doczytać.
  • #6 6094161
    ujus
    Poziom 13  
    Posty: 99
    Pomógł: 4
    Ocena: 5
    Kolego M.S chodzi mi o sam pinB.3, brak procedurt zerowania

    Kolego bkwrzos potrzebujesz zmienna a nawet dwie zmienne.
  • REKLAMA
  • #7 6094430
    M. S.
    Poziom 34  
    Posty: 2107
    Pomógł: 259
    Ocena: 680
    Ponieważ zrobiło się śmieszno i straszno (a może na odwrót) więc poprawiłem program (mam nadzieję że o takie działanie autorowi chodziło)

    '=======================
    $regfile = "attiny25.dat"
    $crystal = 1000000 
    
    Config Pinb.3 = Input                                       'konf.portów
    Config Pinb.4 = Output
    Config Pinb.0 = Output
    
    Portb.3 = 1                                                 'podciągnięcie tasty do +
    Portb.4 = 0                                                 'jw., wył. LEDów
    Portb.0 = 0
    
    Tasta Alias Pinb.3                                          'nadanie nazw
    Led1 Alias Portb.4
    Led2 Alias Portb.0
    
    Declare Sub Led
    
    '===================================== tasta
    Do
    
     If Tasta = 0 Then
        Waitms 25
        If Tasta = 0 Then
           Gosub Led
        End If
     Else
        Led1 = 1
        Led2 = 1
     End If
    Loop
    End                                                         'end
    '=================================== led
    Sub Led
    
        Led1 = 1                                                'wygaszone
        Led2 = 1
        Waitms 1000
    
        Led1 = 0                                                '1
        Led2 = 1
        Waitms 150
    
        Led1 = 0                                                '2
        Led2 = 0
        Waitms 250
    
    
    End Sub Led
    '==================================


    Porównajcie sobie i nie grzeszcie więcej!
    (Testowane na ATMEGA8)
  • #8 6094612
    ujus
    Poziom 13  
    Posty: 99
    Pomógł: 4
    Ocena: 5
    Autor chciał włączać i wyłączać miganie diód(przynajmniej ja tak odbieram) a wg mnie to nie jest zrealizowane:) Ja tu widze - trzyma - działa, nie trzyma - nie działa.
    Nawet gdy dobrze autor napisze sterowanie przyciskiem to i tak momentami to będzie działać jakby chciało ale nie mogło ano ze względu na wait... w podprogramie.
  • #10 6094677
    ujus
    Poziom 13  
    Posty: 99
    Pomógł: 4
    Ocena: 5
    M.S Ty tak zawsze krzyczysz?
  • REKLAMA
  • #11 6096060
    M. S.
    Poziom 34  
    Posty: 2107
    Pomógł: 259
    Ocena: 680
    Cytat:
    M.S Ty tak zawsze krzyczysz?


    Nie! Zawsze to żartuję!

    Teraz trochę wariacji na temat:
    
    '=======================
    $regfile = "m8def.dat"
    $crystal = 8000000
    Dim Zmiana As Bit
    Config Pinb.3 = Input                                       'konf.portów
    Config Pinb.4 = Output
    Config Pinb.0 = Output
    
    Portb.3 = 1                                                 'podciągnięcie tasty do +
    Portb.4 = 0                                                 'jw., wył. LEDów
    Portb.0 = 0
    
    Tasta Alias Pinb.3                                          'nadanie nazw
    Led1 Alias Portb.4
    Led2 Alias Portb.0
    
    Declare Sub Czekaj(byval X As Word)
    Zmiana = 0
    '===================================== tasta
    Do
    
    
    
     If Zmiana = 1 Then
    
        Led1 = 1                                                'wygaszone
        Led2 = 1
        Czekaj 50
    
    
        Led1 = 0                                                '1
        Led2 = 1
        Czekaj 15
    
        Led1 = 0                                                '2
        Led2 = 0
        Czekaj 25
    Else
        Czekaj 1
        Led1 = 1                                                'wygaszone
        Led2 = 1
    End If
    
    
    Loop
    End                                                         'end
    
    
    
    Sub Czekaj(byval X As Word)
       Local Y As Word
       For Y = 0 To X
          Waitms 10
          If Tasta = 0 Then
             Led1 = 1                                           'wygaszone
             Led2 = 1
             Waitms 10
             If Tasta = 0 Then
                Do : : Loop Until Tasta = 1
                Toggle Zmiana
                Exit For
             End If
          End If
       Next Y
    End Sub


    Działa dużo sprawniej i nie przypomina oryginału. Poprawę tego kodu pozostawiam wam. Idealny jeszcze nie jest.

Podsumowanie tematu

LABEL_AI_GENERATED
Dyskusja dotyczy implementacji sterowania miganiem diod LED w Bascom za pomocą przełącznika monostabilnego (tzw. "guzika" chwilowo zwieranego do masy) podłączonego do mikrokontrolera ATTiny25. Problem polega na tym, że obecny kod nie reaguje na naciśnięcie przycisku, ponieważ brak jest mechanizmu zmiany stanu lub zmiennej sterującej, która przełączałaby miganie diod. Uczestnicy sugerują zastosowanie zmiennej flagowej, która zmienia swój stan przy każdym naciśnięciu przycisku, co pozwoliłoby na włączanie i wyłączanie podprogramu migania. Wskazano również na konieczność odpowiedniej konfiguracji pinu wejściowego z podciągnięciem do plusa oraz obsługi drgań styków (debounce). Przykładowe fragmenty kodu pokazują konfigurację portów, aliasowanie pinów, oraz pętlę główną z warunkowym wywołaniem podprogramu migania LED. Wskazano, że proste sprawdzenie stanu pinu bez zmiennej sterującej powoduje, że miganie działa tylko podczas przytrzymania przycisku, a nie jako przełącznik bistabilny. Zaproponowano także użycie dwóch zmiennych lub flag do poprawnej obsługi stanu przycisku i migania. W dyskusji pojawiły się przykłady kodu dla ATTiny25 i ATmega8 z różnymi częstotliwościami taktowania, podkreślając znaczenie odpowiedniego opóźnienia i logiki sterowania.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA