'****************************************************************
'*  Name    : RPM_4.BAS                                      *
'*  Author  : [select VIEW...EDITOR OPTIONS]                    *
'*  Notice  : Copyright (c) 2009 Braun Antal                    *
'*          : All Rights Reserved                               *
'*  Date    : 2011.06.11.                                       *
'*  Version : 4.1                                               *
'*  Notes   :                                                   *
'*          :                                                   *
'****************************************************************
'LÁBKIOSZTÁS
;Lábszám	Port		Funkció
; 1			RA2         Komparátor + bemenet 
; 2			RA3         
; 3			RA4         
; 4			RA5/MCLR
; 5			VSS 0V
; 6			RB0/INT		
; 7			RB1			LCD EN    6 lcd láb		
; 8			RB2         LCD RS    4 lcd láb
; 9			RB3         CCP MODUL BEMENET 
;10			RB4         LCD DATA4  11 lcd láb
;11			RB5         LCD DATA5  12 lcd láb
;12			RB6         LCD DATA6  13 lcd láb
;13			RB7			LCD DATA7  14 lcd láb
;14			VDD 5V
;15			OSC2
;16			OSC1
;17			RA0         Érzékelő led bekapcsolás
;18			RA1         Komparátor - bemenet 
'===============================================================================
Device 16F628A					   'PIC tipus    
XTAL = 4                           'Quartz frekvencia MHz
Config XT_OSC , WDT_OFF , PWRTE_OFF , BODEN_OFF , LVP_OFF ,  CP_OFF

TRISA=%00000110
TRISB=%00001000
ON_INTERRUPT  GoTo INT_RUTIN 

Symbol  LED PORTA.0                'Érzékelő ledje

Declare LCD_TYPE 0                 'Nem grafikus
Declare LCD_DTPIN PORTB.4          'Felső bit az adatbusz
Declare LCD_ENPIN PORTB.1          'EN
Declare LCD_RSPIN PORTB.2          'RS
Declare LCD_INTERFACE 4            '4 bites adatbusz
Declare LCD_LINES 2                '2 soros

'===============================================================================
Dim TIMER1_1TMP_H    As  Byte      'ciklus első megszakítás felső bájt
Dim TIMER1_1TMP_L    As  Byte      'ciklus első megszakítás alsó bájt
Dim TIMER1_2TMP_H    As  Byte      'ciklus második megszakítás felső bájt
Dim TIMER1_2TMP_L    As  Byte      'ciklus második megszakítás alsó bájt
Dim TIMER_CSORDULAS  As  Byte      'timer1 tulcsordulásait számolja
Dim TIMER_CS_TMP     As  Byte      'timer1 tulcsordulásait számolja

Dim ELSO             As  Bit       'Jelzés, hogy az első CCP megszakításról van

Dim IDO1             As  DWord
Dim IDO2             As  DWord
Dim SEC              As  Float
Dim RPM              As  Float 'DWord
Dim ERTEKEL          As  Bit       'Ki lehet értékelni az időintervallumot
Dim CIKLUS           As  Byte
Dim a                As  Byte
'===============================================================================
LED =0
INTCON.7=1                         'Álltalános megszakítás
INTCON.6=1                         'Perifériás megszakítás
PIE1.0=1                           'Timer1 tulcsordulás int engedélyezve
PIE1.2=1                           'CCP int engedélyezve
PIE1.6=1                           'Comparátor int engedélyezve
ELSO=0
TIMER_CSORDULAS=0                                          
ERTEKEL =0
Cls
Print $FE,$40,$02,$04,$0E,$01,$0F,$11,$0F,$00  'á
Print $FE,$48,$02,$04,$0E,$11,$1E,$10,$0E,$00  'é
Print $FE,$50,$05,$0A,$0E,$11,$11,$11,$0E,$00  'ő
Print $FE,$58,$1F,$1B,$15,$17,$15,$1B,$1F,$00  'copyright
Print $FE,$60,$0A,$00,$11,$11,$11,$13,$0D,$00  'ü
Cls
For a = 0 To 4
    Print At 1,a+1,ERead a
Next a
DelayMS 3000
Cls

Print At 1,1, "Fordulatsz",0,"mm",1,"r",2
DelayMS 2000
Cls
Print At 1,1, "Tesztk",1,"sz",4,"l",1,"k"
Print At 2,1, "Aktiv m",1,"r",1,"s"


CMCON=$05                          'Egy komparátor
CCP1CON=%00000101                  'Capture felfutó élre                            
LED =1
T1CON.0=1                          'Timer1 elindítva

PROGRAM:
If  ERTEKEL=1  Then Call Kiszamol
'If CIKLUS=2 Then Call KIIR
If TIMER_CSORDULAS=255 Then
    LED=0
    Print At 1,1, "Tesztk",1,"sz",4,"l",1,"k"
    Print At 2,1, "Passziv m",1,"r",1,"s"
End If
GoTo    PROGRAM

'===============================================================================
Kiszamol:
'CIKLUS=CIKLUS +1
ERTEKEL=0
IDO1=(TIMER1_1TMP_H *256)+ TIMER1_1TMP_L
'IDO2=TIMER_CS_TMP*65536
IDO2=IDO2+(TIMER1_2TMP_H *256)
IDO2=IDO2+ TIMER1_2TMP_L
IDO1=IDO2-IDO1     'usec   dword
SEC=IDO1/1000000   'sec
SEC=1/SEC          'Hz
RPM=SEC * 60       'rpm
'RPM=RPM+RPM
Call KIIR
Return
'===============================================================================
KIIR:
'RPM= RPM/2
Print At 1,1, "Frekv.:"
Print At 2,1, "F/min :"
Print At 1,8, Dec SEC ,"         "
Print At 2,8, Dec RPM ,"         "
CIKLUS=0
RPM=0
SEC=0
Return
'===============================================================================
INT_RUTIN:
If PIR1.0=1 Then GoTo    TIMER1INT ' Milyen megszakítás volt? 
If PIR1.2=1 Then GoTo    CCP1INT
If PIR1.6=1 Then GoTo    COMPARATORINT
GoTo    VIZS_VEGE

TIMER1INT:
TIMER_CSORDULAS=TIMER_CSORDULAS+1
PIR1.0=0
GoTo    VIZS_VEGE

CCP1INT:
If ELSO=1 Then  GoTo Masodik_olvasas  'ha nem az első felfutó él
TIMER_CSORDULAS=0
ELSO=1                                'megvolt az első fordulatjel
TIMER1_1TMP_H=0'CCPR1H
TIMER1_1TMP_L=0'CCPR1L
PIR1.2=0
GoTo    VIZS_VEGE    

Masodik_olvasas:
TIMER1_2TMP_H=CCPR1H    
TIMER1_2TMP_L=CCPR1L    
TIMER_CS_TMP=TIMER_CSORDULAS
ELSO=0
ERTEKEL=1
PIR1.2=0
GoTo    VIZS_VEGE    

COMPARATORINT:
PIE1.6=0                           'Comparátor int tiltva
INTCON.7=0                         'Álltalános megszakítás tiltva
INTCON.6=0                         'Perifériás megszakítás tiltva
PIR1.6=0
LED =0                             'LED kikapcsolása
Cls
Print At 1,1,"ELEMCSERE KELL!"
Print At 2,1,"M",1,"r",1,"s letiltva!"
GoTo    VIZS_VEGE    

VIZS_VEGE:
Context Restore                    'Visszatérés a megszakításból
'===============================================================================
EData "V:4.1"
End

