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

zaprogramowanie przycisku

*zaba* 15 Gru 2008 19:31 1355 13
REKLAMA
  • #1 5863455
    *zaba*
    Poziom 13  
    witam chciałbym zaprogramować tak attiny 2313 ze jak sie raz nacisnę przycisk dioda np na (PORTD.0) zacznie świecić a gdy drugi raz sie go nacisnę zacznie mrugać a gdy trzeci to kolejna funkcje zacznie wykonywać
    czy jest to możliwe ??
    Bardzo proszę o jakieś przykłady

    Dodano po 9 [minuty]:

    oczywiście w bascomie

    Przeniosłem z "Programowanie ogólne"
    [Dr.Vee]
  • REKLAMA
  • #2 5864893
    Marczeli_P
    Poziom 20  
    Poczytaj w pomocy o funkcji DEBUNCE to powinno ci pomóc. Można również przy pomocy IF. Przykłady są podane w pomocy więc nie będę pisał o czym można sobie przeczytać.
  • #3 5865139
    *zaba*
    Poziom 13  
    okey zaczynam czytać wielkie dzięki

    Dodano po 39 [minuty]:
    
     $regfile = "attiny2313.dat" 'najpierw określamy typ proca 
    $crystal = 1000000 'definiujemy z jakim taktowaniem będzie pracował 
    
    Config Portb = Input 'port b jako wejścia 
    Portb = &B11111111 'wszędzie stan spoczynkowy-0 
    Config Portd = Output 'pprt d jako wyjścia 
    Portd = &B11111111 
    
    
    
    Do 
    
    
    Select Case Pinb.3 
    Case 0 
    Portd.0 = 0 
    Wait 1 
    Portd.0 = 1 
    End Select 
    
    Select Case Pinb.3 
    Case 1 
    Portd.1 = 0 
    Wait 1 
    Portd.1 = 1 
    Wait 1 
    Portd.1 = 0 
    Wait 1 
    Portd.1 = 1 
    Wait 1 
    Portd.1 = 0 
    Wait 1 
    Portd.1 = 1 
    End Select 
    
    Loop 
    
    
    
    
    
    End 
    




    Zrobiłem coś takiego ale jak to teraz zapentlic aby po nacisnieciu cały czas dioda z portud.0 mrygała przez jaka instrukcje i gdzie ja wsadzic??

    Dodano po 1 [minuty]:
    
     $regfile = "attiny2313.dat" 'najpierw określamy typ proca 
    $crystal = 1000000 'definiujemy z jakim taktowaniem będzie pracował 
    
    Config Portb = Input 'port b jako wejścia 
    Portb = &B11111111 'wszędzie stan spoczynkowy-0 
    Config Portd = Output 'pprt d jako wyjścia 
    Portd = &B11111111 
    
    
    
    Do 
    
    
    Select Case Pinb.3 
    Case 0 
    Portd.0 = 0 
    Wait 1 
    Portd.0 = 1 
    End Select 
    
    Select Case Pinb.3 
    Case 1 
    Portd.1 = 0 
    Wait 1 
    Portd.1 = 1 
    Wait 1 
    Portd.1 = 0 
    Wait 1 
    Portd.1 = 1 
    Wait 1 
    Portd.1 = 0 
    Wait 1 
    Portd.1 = 1 
    End Select 
    
    Loop 
    
    
    
    
    
    End 
    




    Zrobiłem coś takiego ale jak to teraz zapentlic aby po nacisnieciu cały czas dioda z portud.0 mrygała przez jaka instrukcje i gdzie ja wsadzic??

    Dodałem znaczniki [code] - proszę używać w przyszłości.
    [zumek]
  • REKLAMA
  • #4 5866025
    LED5W
    Poziom 34  
    To by musiało być coś takiego:
    Config portb.3 = input 'końcówki portów domyślnie są wejściami, więc nie jest to konieczne
    portb.3=1 'podciągamy wejście do plusa, bo przycisk będzie między wejściem i masą
    config portd.0 = output 'wyjście na diodę
    '1 wpisana do portx.y to stan wysoki na wyjściu
    dim tryb as byte 'deklaracja zmiennej
    
    do
    'obsługa prycisku
    'sam coś wymyśl
    'ma zwiększać zmienną tryb
    'wykorzystaj polecenie incr
    
    select case tryb:
       case 0:
         reset portd.0 'może być portd.0 = 0
       case 1:
    'tu chyba wiesz co wpisać?
       case else:
         tryb = 0 'nie będzie 256 trybów więc skracamy cykl
       end select
    loop
    end

    Zamieszczaj kod w znacznikach code.
  • REKLAMA
  • #5 5866917
    *zaba*
    Poziom 13  
    dzieki za pomoc mam nadzieje ze mi sie uda:)
  • #6 5869113
    *zaba*
    Poziom 13  
    udało się
    jak nacisnę raz to jedna dioda świeci
    jak drugi raz to druga świeci
    ---> i tu jest moje pytanie dodałem trzecią funkcje case 3 ze obie diody świeca i nic dlaczego jak trzeba poprawić kod ??

    $regfile = "attiny2313.dat"                                 'najpierw określamy typ proca
    $crystal = 1000000                                          'definiujemy z jakim taktowaniem będzie pracował
    
    Config Portb = Input                                        'port b  jako wejścia
           Portb = &B11111111
    Config Portd = Output                                       'pprt d jako wyjścia
           Portd = &B11111111
    
    
           Dim Tryb As Byte
    
    
    
    Do
    While Pinb.3 = 0
    Wait 1
    Incr Tryb
    Wend
    
    
    Select Case Tryb:
       Case 0:
        Portd.0 = 0
        Portd.1 = 1
                                                     '
       Case 1:
       Portd.0 = 1
       Portd.1 = 0
    
       Case 3:
         Portd.0 = 0
         Portd.1 = 0
       Case Else:
       Tryb = 0
    
    End Select
    loop
    end
  • REKLAMA
  • #7 5870694
    LED5W
    Poziom 34  
    Jak zmienisz case 3 na case 2 to zadziała.
    Przecież zwiększasz tryb o jeden. Teraz gdy wartość tryb będzie = 2 to zostanie wykonane:
     Case Else: 
       Tryb = 0
  • #8 5872250
    *zaba*
    Poziom 13  
    funkcje juz działają a teraz chciałbym drugim przyciskiem sterować szybkością czy można te dwie instrukcje tak połączyć ??
    co proponujecie jakie rozwiązanie ??
    $regfile = "attiny2313.dat"                                 'najpierw określamy typ proca 
    $crystal = 1000000                                          'definiujemy z jakim taktowaniem będzie pracował 
    
    Config Portb = Input                                        'port b  jako wejścia 
           Portb = &B11111111 
    Config Portd = Output                                       'pprt d jako wyjścia 
           Portd = &B11111111 
    
    
           Dim Tryb As Byte 
           Dim Szybkosc As Byte 
    
    Do 
     While Pinb.3 = 0 
    Waitms 800 
    Incr Szybkosc 
    Wend 
    Do 
    While Pinb.2 = 0 
    Waitms 800 
    Incr Tryb 
    
    Wend 
    
    
    
    
    
    
    Select Case Tryb: 
       Case 0: 
        Portd.0 = 0 
        Portd.1 = 1 
                                                     ' 
       Case 1: 
       Portd.0 = 1 
       Portd.1 = 0 
    
       Case 2: 
         Portd.0 = 0 
         Portd.1 = 0 
    
        Case 3: 
          Portd.0 = 0 
         Portd.1 = 0 
    Select Case Szybkosc: 
       Case 0: 
        Wait 1 
    
                                                     ' 
       Case 1: 
       Waitms 300 
    
       Case 2: 
       Waitms 200 
    
       Case 3: 
       Waitms 100 
    
       Case 4: 
       Waitms 50 
    
    
       Case Else: 
       Szybkosc = 0 
    End Select 
         Portd.0 = 1 
         Portd.1 = 1 
    Select Case Szybkosc: 
    
       Case 0: 
       Wait 1 
                                                 ' 
       Case 1: 
       Waitms 300 
    
       Case 2: 
       Waitms 200 
    
       Case 3: 
       Waitms 100 
    
       Case 4: 
       Waitms 50 
    
    
       Case Else: 
       Szybkosc = 0 
    
    End Select 
    
        Case 4: 
          Portd.0 = 0 
         Waitms 200 
         Portd.0 = 1 
         Portd.1 = 0 
         Waitms 200 
         Portd.1 = 1 
         Waitms 200 
    
        Case 5: 
         Portd.0 = 0 
         Waitms 100 
         Portd.0 = 1 
         Waitms 100 
         Portd.1 = 0 
         Waitms 100 
         Portd.1 = 1 
         Waitms 100 
    
         Case 6: 
         Portd.0 = 0 
         Waitms 70 
         Portd.0 = 1 
         Waitms 70 
         Portd.1 = 0 
         Waitms 70 
         Portd.1 = 1 
         Waitms 70 
    
       Case Else: 
       Tryb = 0 
    
    End Select 
    Loop 
    Loop 
    
    
    
    
    
    End 
  • #9 5873259
    pio_05
    Poziom 12  
    Można połączyć te dwie instrukcje na kilka sposobów. Najlepiej poczytaj sobie w helpie o timerze i go użyj. W helpie bascoma na pewno jest odpowiedź na wszystkie twoje pytania. Pisz sprawdzaj jak nie działa to pisz inaczej i znowu sprawdzaj. Wreszcie zadziała.
  • #10 5873510
    LED5W
    Poziom 34  
    A po co Ci 2 pętle do...loop?
  • #11 5873942
    *zaba*
    Poziom 13  
    no właśnie to jest źle ale nie tylko nie wiem jak podłączyć te dwie funkcje case
  • #12 5878400
    LED5W
    Poziom 34  
    Po pierwsze usuń "wewnętrzną" pętle do...loop.
    Po drugie użyj w poleceniu wait zmiennej.
    Analizuj i kombinuj. ;)
  • #13 5895390
    przemco
    Poziom 11  
    .... ja to zrobiłem troszke inaczej.... :) nie wiem na ile takie rozwiązanie jest dobre ale u mnie działą....
    
    
    $crystal = 8000000
    
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    '   Program:   prog002
    '      Opis:   moj pierwszy program
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Config Debounce = 10
    
    Config Portc = &B111111
            Portc = &B111111
    
    Config Portb = &B11111111                                   ' ustawienie całego Portu B jako wyj?cia
            Portb = &B11111111                                  ' stan spoczynkowy wszystkich wyj?ć ustawiony na 1
    
    Config Portd = &B101010                                     ' ustawienie bitów PD0 i PD1 jako wej?cia reszta Portu D jako wyj?cia1
            Portd = &B111111
    
       Dim Dioda As Byte
    
       Koniec:
       Do
    
       Debounce Pind.4 , 0 , Prog1 , Sub
    
       Loop
    
    Prog1:
    Do
    
     For Dioda = 0 To 0                                         'miganie diody1 na wysciu PC1
      Pulseout Portc , 3 , 3000
      Waitms 10
      Next
    Debounce Pind.4 , 0 , Koniec , Sub
    
    Loop
    
      End                                                       ' koniec programu
    
    
  • #14 5897293
    *zaba*
    Poziom 13  
    Wielkie dzięki
REKLAMA