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

Bascom zliczanie impulsów w określonym czasie

marmat 15 Lut 2011 07:50 2849 15
  • #1 9153723
    marmat
    Poziom 20  
    Potrzebuję program dla AtTiny13 który zliczał by naciśnięcie przycisku w czsie .
    Czyli na jedno wejście podłączam przycisk i jeżeli nacisną 3 razy w czasie 2 s to wysterowuje mi wyście na czas 2 s.Gdy ten warunek nie wystąpi nic nie robi .
    Nie pisałem jeszcze programów na mikrokontrolery , ale coś tam już robiłem konfiguracja proste przeróbki gotowych programów i podstawy jakieś .
    Nie wiem jak zrobić pętlę programu , może ktoś podrzuci jak to rozwiązać , wiem ,że to dla fachowca banalny temat .
  • #3 9154916
    marmat
    Poziom 20  
    To przeglądałem ale to co innego jest .
  • #4 9155170
    piotrva
    VIP Zasłużony dla elektroda
    1. jaki język programowania?
    2. ja bym to zrobił tak:
    a) Timer ustawiasz, żeby łatwo zliczał impulsy do odmierzenia czasu 2s.
    b) pierwsze naciśnięcie przycisku (po eliminacji drgań styków) wubudza timer
    c) każde kolejne naciśnięcie przycisku przed upływem 2s zwiększa zmienną, jeśli dojdzie do 2 to wtedy ją zerujesz, zatrzymujesz timer i włączasz tą akcję
    d) jeśli timer odmierzy 2s a nie będzie 3 przyciśnięć to licznik przyciśnięć na zero i zatrzymujesz timer
  • #5 9155260
    asembler
    Poziom 32  
    Trzeba by zacząc od tego że Attiny13 średnio sie nadaje do tego zadania skoro piszesz od 2s.
  • #6 9155426
    marmat
    Poziom 20  
    Program ma być w Bascomie bo nie znam nic innego . Bascoma coś tam liznąłem kiedyś ale też niewiele , z pomocą może coś wykombinuję .
    Tiny13 wybrałem ze względu na rozmiary i to ,że potrzebuję 1 in i 1 out .
    Dlaczego się nie nadaje pamięć ?
    Czy At 2313 lub Tiny 2313 jest lepszy .
  • #7 9155513
    asembler
    Poziom 32  
    Skoro chcesz 2 sek to jaki wzorzec zastosujesz?
  • #8 9156059
    marmat
    Poziom 20  
    Czas nie jest dla mnie bardzo istotny nie musi być 2s , podałem to przykładowo .
    Czas musi być tak dobrany abym zdążył nacisną w miarę szybko 3 razy przycisk domofonu wyjdzie w czasie testów może i 3 s.
    Chcę zrobić tak :
    Przycisk domofonu uruchamia wywołanie - dzwonek tam mam podłączony transoptor (wyjście podłączone do procka) i trzy mignięcia w czasie jw wysterowują mi wyjście z przekaźnikiem na czas też do dobrania ,żeby otworzyć drzwi (2-3s) .
    Zaznaczam ponownie ,że nie pisałem jeszcze programów na mikrokontrolery i liczę na pomoc .
  • #9 9157629
    arktik1
    Poziom 27  
    Deklarujesz sobie dwie zmienne, 1 by liczyła naciśnięcie przycisku np(INCR Przycisk), 2 by liczyła czas na naciskanie przycisku i wyzerowała 1 zmienną w razie gdy przycisk będzie naciśnięty mniej niż 3 razy.
    Jeśli (przycisk dojdzie do 3), to zmienia stan portu na 1, tym samym włącza przekaźnik od drzwi, i zmienną która liczy 3 sekundy. Zmienna ta zmienia stan portu z powrotem na 0.
  • #10 9159439
    marmat
    Poziom 20  
    Chyba sam nie dam rady - spore braki ...
    
    $regfile = "attiny13.dat"
      $crystal = 4800000
      Config Pinb.1 = Input
      Config Pinb.2 = Output
      Config Debounce = 30
        Pk Alias Portb.2
    
      Dim Przycisk As Byte At &H62
      Dim Czas As Byte At &H63
    
      Pk = 1
    
      Do
      Waitms 25
      Debounce Pinb.1 , 0 , Licz , Sub
      Przycisk = 3 , Gosub , On_off
      If Portb.1 , 0 , Then
      Incr Czas
        If Czas = 80 Then
      Przycisk = 0
    
      End If
      End If
      Loop
      End
    
    
      On_off:
        Reset Pk
            Wait 2
        Set Pk
           Return
    
    
      Licz:
     Incr Przycisk
     Return
    

    Jeżeli chodzi o zliczanie czasu i połączenie zależności to nie mam pojęcia jak to zrobić .
  • #11 9163888
    marmat
    Poziom 20  
    Nie wiem jak liczyć naciśnięcia , a jak czas .
    bascom wywala mi błędy w składni - proszę o poprawki .
  • Pomocny post
    #12 9164153
    arktik1
    Poziom 27  
    Zobacz to:
    
    Dim Przycisk As Word , Czas As Integer , Czas_zamka As Integer
    Czas_zamka = 0
    Czas = 0
    
    Do
    Debounce Pinb.1 , 0 , Licz , Sub
    
    If Przycisk > 0 Then Incr Czas
    
    If Czas = 300 Then
    Przycisk = 0
    Czas = 0
    End If
    
    If Przycisk = 3 Then Portb.2 = 1
    
    If Portb.2 = 1 Then Incr Czas_zamka
    
    If Czas_zamka = 300 Then
     Portb.2 = 0
    Czas_zamka = 0
    End If
    
    Waitms 10
    Loop
    End
    
    Licz:
    Incr Przycisk
    Return
    
  • #13 9167286
    marmat
    Poziom 20  
    Dzięki za zainteresowanie i pomoc , posklejam układ i potestuję .
    Ale narazie jest problem jakiś z pamięcią bo kompilator wywala błędy Out of Sram space - przy deklaracji zmiennych .
    Zmieniłem na :

    
    Dim Przycisk As Word At &H62
    Dim Czas As Integer At &H63
    Dim Czas_zamka As Integer
    

    Linia ze zmienną Word jest ok natomiast zmienne Intiger dalej Error jw.
    Punkciki poleciały :)
  • #14 9167330
    LordBlick
    VIP Zasłużony dla elektroda
    Skoro @ 0x62 jest zmienna typu word, to zajmuje ona 2 bajty, czyli następna zmienna powinna się zaczynać od 0x64... ;) W helpie od Bascoma z pewnością są opisane długości zmiennych.
  • #15 9168128
    marmat
    Poziom 20  
    No właśnie nie widzę w helpie , trzeba podawać te adresy czy można zostawić bez i wtedy załaduje kolejne wolne ?
    Coś z tym Tiny 13 było inaczej .
  • #16 9168155
    piotrva
    VIP Zasłużony dla elektroda
    są opisane, potwierdzam
    po co podajesz adresy? zostaw bez wtedy kompilator sam dopasuje
REKLAMA