Vibratie Sensor

Hier nog wat code voor de vibratie sensor.
Daar het contact moment van deze sensor wat kort is, kan het in een programma loop die ook nog wat andere dingen doet, makkelijk gemist worden.
Dit is opgelost door de sensor op een interrupt gevoelige poort aan te sluiten (PORTB.1 in dit geval).

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
'****************************************************************
'*  Name    : Vibratie Sensor Test                              *
'*  Author  : Knutselaar.eu                                     *
'*  Notice  : Copyright (c) 2014 Knutselaar.eu                  *
'*          : All Rights Reserved                               *
'*                                                              *
'*  Versie  : 1.0  02-Jan-2014                                  *
'****************************************************************
Device 18F25K22
   
    CONFIG_START    
     FOSC = INTIO67              ;interne oscillator A6, A7 poortfuntie
     FCMEN = OFF                 ;Fail-Safe Clock Monitor disabled
     IESO = OFF                      ;internal external switchover mode
     PWRTEN = On                 ;power-up timer  (18F25K22)
     BOREN = On                      ;brown-out reset
     BORV = 285                      ;brown-out reset value (2,85V) (18F25K22)
     WDTEN = OFF                 ;watchdog timer
     WDTPS = 128                 ;1:128 WDT prescalar
     PBADEN = OFF                ;analog port B<4:0>
     STVREN = On                 ;;stack overflow reset
     LVP = OFF                       ;low voltage programming
     XINST = OFF                 ;Instruction set extension and Indexed Addressing mode disabled (Legacy mode)
     Debug = OFF                 ;no debug
CONFIG_END
 
XTAL = 16
              '76543210
    OSCCON =  %01111100   ' 16 mhz,int osc
   
    ANSELA = 0          'all digital A true
    ANSELB = 0          'all digital B true
    TRISB  = %00000011  'PORTB.0 en PORTB.1 als input
    ANSELC = 0          'all digital C true
       
    Dim test        As Byte
    Dim sensorHit   As Byte
   
    Symbol LED      =  LATA.5

    Declare LCD_DATAUS 75     ;LCD timing voor wat oudere 16x2 44780 compatible displays (default = 50)

    Symbol IPEN    =   RCON.7       ' IPEN : Disable Interrupt PRIORITY HANDLING
    Symbol GIE     = INTCON.7       ' GIE  : enable interrupts
   
    Symbol INT1IE  = INTCON3.3      ' PORTB.1 (INT1) interrupt enable bit
    Symbol INTEDG1 = INTCON2.5      ' Op (1) of neergaande (0) flank PORTB.1 interrupt select
    Symbol INT1IF  = INTCON3.0      ' PORTB.1 (INT1) interrupt flag
   
    INTEDG1 = 0  ' INT1 interrupt op neergaande flank
    IPEN = 0     ' Interrupt priority uitzetten (PIC16F compatability mode)    
   
    INT1IE = 1   ' PORTB.1 interrupts aanzetten
    INT1IF = 0   ' PORTB.1 Interrupt FLAG naar 0
   
    GIE  = 1     ' Interrupts activeren
   
    ON_HARDWARE_INTERRUPT  GoTo INTERRUPT_HANDLER ' Waar heen te gaan bij interrupt.
   
    Clear
   
    Cls
   
    Print At 1,1, "knutselaar.eu" ' Standaard 2x16 44780 compatible display (zie schema)
   
    GoTo main_loop  
   

INTERRUPT_HANDLER:  'Verandering van PORTB.1 gedetecteerd

Context SAVE        ' Start interrupt (opslaan van het punt waar interrupt plaatsvond)
   
    If INT1IF = 1 Then  'Dit if statment kan weggelaten worden als PORTB.1 het enige interrupt punt is.
        Print At 2,1, "Sensor hit"
        sensorHit = 1
    End If
    INT1IF = 0      'Clear the PORTB.1 Interrupt FLAG

Context Restore     ' Eind interrupt (teruggaan naar het punt waar Interrupt plaatsvond)
     
main_loop:

    Toggle LED
   
    DelayMS 1000
    If sensorHit = 1 Then
        DelayMS 500
        sensorHit = 0
    End If
    Print At 2,1, "                "
   
    GoTo main_loop

    End


Bij behorend aansluit schema.



Hit Counter by Digits
  Sinds 2 Januari 2014