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

[Atmega8][Bascom]Problem sterowania diod led 3 przyciskami

provez 17 Lut 2010 22:49 3129 7
REKLAMA
  • #1 7711197
    provez
    Poziom 2  
    witam

    Program steruje dwoma diodami(Led1 Portd.2, Led2 Portd.3). Klik.S1-->>Wł. led -->>klik.S1-->>Wył.led, tak samo z S2. Przycisk S3 jest 'nadrzędny'. Kliknięcie S3 wyłącza obydwa Ledy jeśli którakolwiek zapalona, ponowne kliknięcie S3 włącza obydwa Ledy. 'Na żywo' S3 zapala lub gasi ledy po kilku kliknięciach! Czy ktoś może mnie ukierunkować co nie tak?


    
    
    $regfile = "m8def.dat"
    $crystal = 1000000
    Config Portd = &B00001100                                 
            Portd = &B00011111                                  
    
    Dim A As Byte                                               
    
    S1 Alias Pind.0
    S2 Alias Pind.1
    S3 Alias Pind.4
    A = 0
    
    Do
    
       If S3 = 0 And A = 0 Then                                
    
           If Pind.2 = 0 Or Pind.3 = 0 Then                     
    
              Portd.2 = 1                                      
              Portd.3 = 1                                      
    
           Elseif Pind.2 = 1 And Pind.3 = 1 Then                
    
              Portd.2 = 0                                       
              Portd.3 = 0                                       
    
           End If
           A = 1                                               
    
          End If
    
       If S3 = 0 And A = 1 Then                                
          Waitms 10
          Toggle Portd.2
          Toggle Portd.3
    
       End If
    
       Debounce S1 , 0 , Pr1 , Sub                             
       Debounce S2 , 0 , Pr2 , Sub                             
    
    Loop
    End
    
    Pr1:
     Toggle Portd.2
     A = 0
    Return
    
    Pr2:
     Toggle Portd.3
     A = 0
    Return
  • REKLAMA
  • #2 7711390
    Kabuto15
    Poziom 19  
    Może dodasz jakieś małe opóźnienie (20-80 ms) w celu eliminacji drgań styków przy sprawdzaniu stanu S3 ?
  • REKLAMA
  • #3 7711700
    wader_669
    Poziom 28  
    i odrazu po wait'cie daj ponowne sprawdzanie przycisku czy jest wcisniety
  • REKLAMA
  • #4 7714559
    provez
    Poziom 2  
    Poprawiłem kod ale wiesza się na S3. Próbuję z różnymi opóźnieniami ale nie pomaga.
    Jak wstawić kod na białym tle?Sorry za taki banał ale nie wiem ?
  • #5 7716223
    Kabuto15
    Poziom 19  
    Znaczniki [Kode] [/Kode] (zamień duże K na małe c). W podglądzie wysyłanej wiadomości spraw czy wiesz już jak.
  • #6 7716457
    provez
    Poziom 2  
    Program działa po wstawieniu 180ms opóźnienia. Poniżej 150ms przy naciskaniu S3 diody nie reagują prawidłowo. Dzięki za wskazówki i zainteresowanie problemem. Pozdrawiam
    
    $regfile = "m8def.dat"
    $crystal = 1000000
    Config Portd = &B00001100                                  
            Portd = &B00011111                              
    
    Dim A As Byte                                               
    
    S1 Alias Pind.0
    S2 Alias Pind.1
    S3 Alias Pind.4
    A = 0
    
    Do
    
       If S3 = 0 And A = 0 Then                                 
           Waitms 180
           If Pind.2 = 0 Or Pind.3 = 0 Then                    
    
              Portd.2 = 1                                       
              Portd.3 = 1                                       
    
           Elseif Pind.2 = 1 And Pind.3 = 1 Then               
    
              Portd.2 = 0                                       
              Portd.3 = 0                                       
    
           End If
           A = 1                                               
    
       End If
    
       If S3 = 0 And A = 1 Then                                 
          
          Waitms 180
          Toggle Portd.2
          Toggle Portd.3
    
       End If
    
       Debounce S1 , 0 , Pr1 , Sub                              
       Debounce S2 , 0 , Pr2 , Sub                              
    
    Loop
    End
    
    Pr1:
     Toggle Portd.2
     A = 0
    Return
    
    Pr2:
     Toggle Portd.3
     A = 0
    Return
  • REKLAMA
  • #7 7716625
    Kabuto15
    Poziom 19  
    wader_669 dobrze Ci radził. Powinieneś po opóźnieniu ponownie sprawdzać stan przycisku. Chodzi o eliminację drgań styku. Ponowne sprawdzenie po chwili czasu upewnia Cię, że przycisk jest wciśnięty zatem
    If S3 = 0 And A = 0 Then                                 
           Waitms 50
           If S3=0 Then ...
  • #8 7716835
    Konto nie istnieje
    Poziom 1  
REKLAMA