Przerwanie INT0 Bascom


Witam
mam pytanie odnośnie realizacji przerwania ze względu na pojawienie się zmiany stanu(konkretnie zbocze opadające)
dlaczego w mojej wersji program sie wykonuje jak i przy zboczu rosnącym i opadającym jak zdefiniowałem tylko jedno zbocze.

$regfile = "attiny2313.dat"                                 
$crystal = 4000000                                          
 
 
'**********************************KONFIGURACJA REJESTROW
Config Portb = &B00000000                                   'wejscia
Portb = &B11111111                                          'ustawienie stanu poczatkowego
Config Portd = &B1111011                                    'wyjscia
Portd.0 = 1
Portd.1 = 1
Portd.2 = 1
 
 
 
 
'*********************************KONFIGURACJA PRZERWANIA
Enable Interrupts
Enable Int0
Config Int0 = Falling                                       'przerwanie jako zbocze opadające
On Int0 Silnik                                              'przerwanie i skok do podprogramu
 
 
'********************************PRZYPISANIE ZMIENNYCH
S1_gora Alias Pinb.1
S2_dol Alias Pinb.2
Silnik_gora Alias Portd.0
Silnik_dol Alias Portd.1
 
 
'*******************************PROGRAM GLOWNY
 
 
Do
 
  If S2_dol = 0 Then                                        'wylaczenie zamykania
            Silnik_dol = 1
            End If
 
  If S1_gora = 0 Then                                       'wylaczenie otwierania
            Silnik_gora = 1
            End If
 
Loop
 
 
 
 '******************************PRZERWANIE
 
 Silnik:
 
 
 
 If S1_gora = 0 Then                                        'krancowka gorna zwarta-klapa otwarta
 
 Silnik_dol = 0                                             'jazda w doł - zamykanie klapy
 
 End If
 
  If Pinb.2 = 0 And Portd.1 = 0 Then
  Portd.1 = 1
  End If
 
 
 If S2_dol = 0 Then
                                                            'krancowka dolna zwarta - klapa zamknieta
 Silnik_gora = 0
                                                            'jazdwa w gore - otwieranie klapy
 
 End If
 
 If Pinb.1 = 0 And Portd.0 = 0 Then
 Portd.0 = 1
  End If
 
 Return
 
 
End




Portret użytkownika kaktus

sprzęt

Jaki element przełącza stan na wejściu z przerwaniem?

Może być sytuacja, że styk zamykany jest "powoli", gdyby tak było kondensator może pomóc. Czy próbowałeś podłączyć do tego wejścia zwykły switch i ręcznie/samodzielnie wysterować wejście obserwując działanie programu?

-

"Cierpliwym być musisz, by wiedzę zgłębiać tajemną, gdyż ciemna strona mocy niszczącą i silną jest.".

Portret użytkownika podgladaacz

Dzięki faktycznie nie

Dzięki faktycznie nie pomyślałem że drgania styków mogą powodować zakłócenie w działaniu programu.

Kondensator rozwiązał problem:)

Pozdrawiam

Portret użytkownika kaktus

;-)

Proszę bardzo. ;-)

-

"Cierpliwym być musisz, by wiedzę zgłębiać tajemną, gdyż ciemna strona mocy niszczącą i silną jest.".