로그인회원등록 내글장바구니주문조회현재접속자
 상품 검색








 게시판 검색





 
 
회원등록 비번분실


온라인 입금계좌
ㆍ기업은행
ㆍ219-043192-01-028
ㆍ이건영

      거래은행 바로가기
 
 Sensor Applications
센서 자료실
작성자 leeky        
작성일 2006/02/27
첨부#1 helthmon.zip (3KB) (Down:52)
첨부#2 HeearMon_pcb_asy1.jpg (0KB) (Down:60)
Link#1 KEITHWILSON
ㆍ추천: 6  ㆍ조회: 1095   
  16F84 광학식 심박측정기

고휘도(1000mcd) 적색 LED와 Cds로 검출하는 심박 측정기
청색 덮게 안의 심박검출센서에 손가락을 넣어 측정한다.

◆ 심박 측정기 검출신호
 

스코프 파형은 LM358 증폭기의 1번 출력(황색)의 신호는 2V 가 나오도록 R13을 조정하고,
7번 출력(하늘색)에서 5V의 신호가 나오도록 R14의 전압을 6번 핀(적색)의 전압을 1.5 ~ 1.8V 정도로 조정한다.
만일 1번핀의 신호가 2V 미만이면, 나머지 조정은 의미가 없으며, 먼저 1번핀의 신호가 2V ~3V가 나와야 한다.
 
◆ 심박 측정기 회로도
 

◆ 심박 측정기 조립
 

청색 커버안의 센서는, 적외선 LED 이므로 작동이 되는지 안되는지, 눈으로 직접 확인이 어렵지만,
불을 비추어서 출력이 바뀌면 Cds는 정상이며, 임시로 적색 LED를 연결해서 점등을 확인해야 한다,
마지막으로 D5와 D7 LED가 깜빡이는지, 센서안에 손각락을 넣고 빼고 하는 방법으로 시험해야 한다.

펄스로 LED를 점등하는 방법으로, 센서안에 손가락을 넣어 출력펄스로 D5와 D7을 점등한다,
D7은 흐리게 들어오고, D5는 D7 보다 조금 밝게 들어오면 정상이다. (완전히 켜지거나 꺼지면 증폭회로 불량)
위 점검결과가 모두 정상이어야만, MPU 16F84와 7SEG LED 회로가 올바르게 표시될 수 있다.
 
◆ 심박 측정기 소스 hemon.asm
다음은 심박 측정기의 소스이며, 사용한 MPU는 PIC 16F84 입니다.
;****************************************************************
;* HEARTBEAT MONITOR - HeMon        Master of the Blutbahn !!!!
;* BY KEITH WILSON                        by Iris Kistler
;* VERSION 1
;****************************************************************
list p=16f84,r=hex        ; 마이크로 제어기와 숫자기준은 16진
include   "reg16c84.inc"  ; 레지스터 메모리 맵 화일
include   "hemon.inc"     ; 심박 정의 화일

;****************************************************************
; 광역 변수
;****************************************************************
count           equ        0x0c                ;범용 카운터
display3        equ        0x0d                ;숫자 표시용 100 단위 데이터
display2        equ        0x0e                ;숫자 표시용  10 단위 데이터
display1        equ        0x0f                ;숫자 표시용    1 단위 데이터
beatlsb         equ        0x10                ;심박 카운터 하위 바이트
beatmsb        equ        0x11                ;심박 카운터 상위 바이트
aargb0         equ        0x12                ;나누어진 수 하위
aargb1         equ        0x13                ;나누어진 수 상위
bargb0         equ        0x14                ;나누는 수 하위
bargb1         equ        0x15                ;나누는 수 상위
remb0          equ        0x16                ;나머지 하위
remb1          equ        0x17                ;나머지 상위
timera          equ        0x18                ;범용 타이머 a
timerb          equ        0x19                ;범용 타이머 b
timerc          equ        0x1a                ;범용 타이머 c
timerd          equ        0x1b                ;범용 타이머 d
;****************************************************************
;reset vector 리셋시 프로그램이 시작하는 위치
;****************************************************************
reset:        
       org      0x00                         ;리셋시 시작되는 위치 0000      
       goto     start                        ;프로그램 실행 시작
start:
       org      0x06                        ;프로그램의 시작 0006
       goto     Initialisation               ;초기화로 간다  
;****************************************************************
; 2 진수를 7 조각 발광 다이오드 표시용으로 처리 함수
;****************************************************************
LedDecoder:
        addwf       pcl,f        ;W 레지스터는 표시용
        retlw        LED_SEGa|LED_SEGb|LED_SEGc|LED_SEGd|LED_SEGe|LED_SEGf   ; 0을 표시
        retlw        LED_SEGb|LED_SEGc                                                     ; 1을 표시
        retlw        LED_SEGa|LED_SEGb|LED_SEGd|LED_SEGe|LED_SEGg               ; 2을 표시
        retlw        LED_SEGa|LED_SEGb|LED_SEGc|LED_SEGd|LED_SEGg               ; 3을 표시
        retlw        LED_SEGb|LED_SEGc|LED_SEGf|LED_SEGg                            ; 4을 표시
        retlw        LED_SEGa|LED_SEGc|LED_SEGd|LED_SEGf|LED_SEGg               ; 5을 표시
        retlw        LED_SEGa|LED_SEGc|LED_SEGd|LED_SEGe|LED_SEGf|LED_SEGg   ; 6을 표시
        retlw        LED_SEGa|LED_SEGb|LED_SEGc                                        ; 7을 표시
        retlw        LED_SEGa|LED_SEGb|LED_SEGc|LED_SEGd|LED_SEGe|LED_SEGf|LED_SEGg ;8을 표시
        retlw        LED_SEGa|LED_SEGb|LED_SEGc|LED_SEGd|LED_SEGf|LED_SEGg   ; 9을 표시
        retlw        LED_BLANK                                                               ; 꺼짐
;****************************************************************
; 초기화 : 시스템 초기화 그리고 주 함수
;****************************************************************
Initialisation:      ;장치 초기화, 포트 A와 포트 B의 초기화
        bcf        status,rp1                ; 뱅크 1의 선택
        bsf        status,rp0
        movlw    PORTA_CONFIG1         ; 포트 a 설정
        movwf    trisa                        
        movlw    PORTB_CONFIG1         ; 포트 b 설정
        movwf    trisb
        bcf        status,rp0                ; 뱅크 0의 선택

        movlw    0x00                      ; 모두 0 으로 표시
        movwf   porta                      ; 7조각 발광표시기의 데이터 포트  
;****************************************************************
;주 함수 =측정과 심박을 표시
;****************************************************************
Mainloop:
        call        Heartbeat                ; 심박 측정 함수
        call        Convert                  ; 분당 펄스로 변환 [b/m]
        call        Display                   ; 표시기에 보여준다
        goto        Mainloop                ; 무한 반복
;****************************************************************
;심박 : 두개의 심박신호의 시간간격을 측정
;     : 상승 모서리로 점호되면 측정한다
;     : 다음 상승 모서리 직전의 시간 [ms]
;출력 : beat 하위, beat 상위 = 두개의 심박 사이의 시간 [ms]
;****************************************************************
Heartbeat:
        btfss     porta,HEARTBEAT_SENSOR     ;포트를 읽음
        goto      Heartbeat               ; 입려신호가 0이면, 입력신호를 반복하여 측정
        call       Delay150                ; 입력신호가 1이면,50ms 대기 __| (50ms) |___        
        clrf       beatmsb                 ; beat 레지스터 상위 =0 으로 설정
        movlw    0x96
        movwf   beatlsb                  ; beat 레지스터 하위 =150 ms로 설정
        
HL1:   call       Delay1                   ; 1 ms 시간지연 함수
        incf       beatlsb,w               ; beat 하위를 1 ms 증가시킴
        movwf   beatlsb
        btfsc     status,z                 ; beat 하위가 넘쳤는가 ?
        incf      beatmsb,f                ; 그렇다면 beat 상위를 증가시킴

        btfss     porta,HEARTBEAT_SENSOR    ; 포트를 읽음
        goto      HL1                      ; 입력신호가 0이면, 측정 계속 (아직 펄스가 0임)  
        return                              ; 입력신호가 1이면 측정완료 (측정함수 종료)
;****************************************************************
;변환 : ms로 된 심박 측정값을 beat/min(분당 심장박동)으로 변환
;입력 : beatlsb, beatmsb
;출력 : display1,display2,display3 (심박을 bcd로 적재)
;****************************************************************
Convert:        ; bpm 연산 = 60000/beat (2바이트 정수) =0xEA60 (16진 값)
        movlw   0xea                ; 나누어질 값인 상수 6000의 상위
        movwf   aargb1
        movlw   0x60                ; 나누어질 값인 상수 6000의 하위
        movwf   aargb0        

        ; 측정된 심박 값을 나누는(divisor) 값으로 만든다
        movf     beatmsb,w         ; 심박값 상위를 읽는다
        movwf   bargb1             ; 젯수 상위로 저장  
        movf     beatlsb,w          ; 심박값 하위를 읽는다
        movwf   bargb0             ; 젯수 하위로 저장

        clrf       remb0              ; 나머지 상위를 0으로 초기화
        clrf       remb1              ; 나머지 하위를 0으로 초기화

        ; 제산 =16비트 / 16비트 (부호없는 정수)
        movlw    0x10
        movwf   count              ; 10진수 멱 카운터를 10으로 설정
Lu16:
        rlf        aargb1,w
        rlf        remb0,f
        rlf        remb1,f
        movf     bargb0,w
        subwf    remb0,f
        movf     bargb1,w
        btfss     status,c
        incfsz    bargb1,w
        subwf    remb1,f        
        btfsc     status,c
        goto     uok16

        movf     bargb0,w         ; 감산결과가 음수이면 감산된 피젯수를 다시 더해주고
        addwf    remb0,f
        movf     bargb1,w
        btfsc     status,c
        incfsz    bargb1,w         ; +1하여 양수로 환원
        addwf    remb1,f
        bcf       status,c

uok16: ; 승제산 명령이 없는 어셈블러의 제산루틴은 복잡하다.(10으로 반복감산하여 감산횟수를 결과로 저장)
        rlf        aargb0,f          ; 피젯수 하위를 *2
        rlf        aargb1,f          ; 피젯수 상위를 *2
        decfsz   count,f           ;
        goto     Lu16               ; 10번 반복했으면 함수처음으로 복귀 (주함수로 복귀가 아님)

        ; 먼저 나누어진 결과의 하위를 분리된 bcd로 변환
        movlw   0x08              ; 8 비트 젯수(division)
        movwf   count
        movlw   0x0a              ; 먼저 나누어진 하위를 10으로 나눈다.
        movwf   bargb0
        clrf      remb0             ; 나머지의 초기화

Lu8:
        rlf        aargb0,w
        rlf        remb0,f
        movf     bargb0,w
        subwf    remb0,f        
        btfsc     status,c
        goto     uok8

        addwf   remb0,f
        bcf       status,c
uok8:
        rlf        aargb0,f
        decfsz   count,f
        goto      Lu8             ; 8비트 젯수 처리 계속

        movlw   0x0a
        movwf   display3         ; 3번째 bcd 자리 - 100은 지운다
                

        movf     remb0,w
        movwf   display1         ; 첫번째 bcd 자리 = 1 단위
        
        movf     aargb0,w                
        movwf   display2         ; 2번째 bcd 자리 = 10 단위
        sublw    0x09            ;  quotient >=10 인가?
        bnc       $+2             ; 예 quotient는 >=10, 그래서 다시 10으로 나눔
        return                     ; 아니오, 함수위 종료

        movlw   0x08             ; 예, 8 비트 제산
        movwf   count
        movlw   0x0a             ; 먼저 나누어진 결과의 하위를 10으로 나눔
        movwf   bargb0
        clrf      remb0            ; 나머지를 초기화

Lu81:
        rlf       aargb0,w
        rlf       remb0,f
        movf    bargb0,w
        subwf   remb0,f        
        btfsc    status,c
        goto     uok81

        addwf   remb0,f
        bcf       status,c

uok81:
        rlf        aargb0,f
        decfsz   count,f
        goto      Lu81
        
        movf      remb0,w
        movwf    display2        ; 두번째 bcd 자리 - 10 단위
        movf      aargb0,w
        movwf    display3        ; 세번째 bcd 자리 - 100 단위
        return                      ; 함수의 끝

;****************************************************************
;표시 함수 : 현재 측정된 값으로 표시를 갱신한다
;입력 : 7 조각 표시 1 단위, 7 조각 표시 10 단위, 7 조각 표시 100 단위
;****************************************************************
Display:
        movf      display1,w      ; bcd를 7-segment로 변환
        call        LedDecoder
        movwf    display1

        movf      display2,w
        call        LedDecoder
        movwf    display2

        movf      display3,w
        call        LedDecoder
        movwf    display3

        movlw    0x4               ;조금 밝게 표시를 갱신
        movwf    timerc

DL2:
        movlw     0xff
        movwf    timerd

DL1:
        clrf        porta
        bsf        porta,LED_DIGIT1
        movf      display1,w
        movwf    portb
        call        Delay1

        clrf        porta
        bsf        porta,LED_DIGIT2
        movf      display2,w
        movwf    portb
        call        Delay1

        clrf        porta
        bsf        porta,LED_DIGIT3
        movf      display3,w
        movwf    portb
        call        Delay1
        clrf        porta

        decfsz    timerd,f
        goto       DL1
        decfsz     timerc,f
        goto       DL2
        return                       ; 함수의 종료

;****************************************************************
;지연시간 : 1 ms 지연 함수
;****************************************************************
Delay1:        
        movlw     0x02             ; 지연 숫자 (상위)
        movwf     timerb        
L2:        
        movlw     0xa5             ; 지연 숫자 (하위)
        movwf     timera
L3:
        decfsz     timera,f
        goto        L3
        decfsz      timerb,f
        goto        L2
        return                        ; 함수의 종료

;****************************************************************
;시간지연 : 150 ms 시간 지연
;****************************************************************
Delay150:        
        movlw     0xc3             ; 지연 숫자 상위
        movwf     timerb
L4:        
        movlw     0xff              ; 지연 숫자 하위
        movwf     timera
L5:
        decfsz     timera,f
        goto        L5
        decfsz     timerb,f
        goto        L4
        
        return                        ; 함수의 종료
        end

◆ 심박 감시기 - HeMon 개정판 1 저자 - KEITH WILSON
이 자료의 상단에 첨부된 Heartmon.Zip 내려받기 화일에는
hemon.asm,  reg16c84.inc, hemon-16f84.inc 모두 3개의 소스가 들어 있습니다.
원저자 : KEITH WILSON

AVRTOOLS™
   
윗글 가속도센서 ADXL202의 PIC12C508 인터페이스
아래글 12C508 전자 나침판
    N         제목    글쓴이 작성일 조회 추천
74 AT89C2051과 EM4095를 사용한 RFID 장치의 제작 leeky 2006/12/31 (일) 1167 0
73 UserPort for Windows 2000 leeky 2007/11/12 (월) 787 0
72 아날로그 PID 제어 회로 leeky 2007/11/12 (월) 1371 0
71 Windows Scope 2K4 leeky 2007/11/12 (월) 907 0
70 12C508 금속검출기 leeky 2006/02/24 (금) 1081 0
69 16C84 LCD표시 L,C 메터 leeky 2006/02/25 (토) 1124 2
68 89C2051 LCD표시 LC메터의 제작 leeky 2006/02/14 (화) 1135 8
67 12C508A 초음파 거리 측정기 avrtools 2006/02/23 (목) 1032 0
66 Caliper to computer (RS-232) interface leeky 2006/02/23 (목) 1050 4
65 가속도센서 ADXL202의 PIC12C508 인터페이스 leeky 2006/02/20 (월) 1017 2
64 16F84 광학식 심박측정기 leeky 2006/02/27 (월) 1095 6
63 12C508 전자 나침판 leeky 2006/02/27 (월) 687 0
62 ENC28J60 Ethernet to SPI Header Board leeky 2007/03/26 (월) 959 0
61 SHT11 습도센서 8051 인터페이스 leeky 2006/02/14 (화) 1003 0
60 SHT11 습도센서 SX18 인터페이스 leeky 2006/03/16 (목) 634 2
59 SRF04 초음파 거리센서의 제작 leeky 2006/02/25 (토) 640 0
58 Ambient Light Sensors TSL2550 avrtools 2006/04/06 (목) 451 0
57 PIC16F877A BioSense Physiologic Sensing leeky 2006/04/06 (목) 580 0
56 Electrocardiogram (ECG) Front End leeky 2006/04/06 (목) 656 0
55 Biometric Interface Board leeky 2006/04/06 (목) 767 0
54 MAX2242 802.11b 블루투스 RF증폭기 leeky 2006/04/06 (목) 461 0
53 AX.25 9600BPS 무선모뎀 L2PCX leeky 2006/04/06 (목) 358 0
52 TCS230 색상검출 평가키트 leeky 2006/04/06 (목) 612 0
51 100V10A 50W 전자부하 leeky 2006/04/06 (목) 540 0
50 FLAME SENSOR UVTRON R2868 leeky 2006/04/06 (목) 542 0
49 Compact Optical Image Scanner leeky 2006/04/06 (목) 475 0
48 지자기 방위계 모듈 CMPS03 leeky 2006/04/06 (목) 606 0
47 0~1.5KV 정전기 측정센서 PKE05A1 leeky 2006/04/06 (목) 320 0
46 Rain Sensor 인터페이스 회로 leeky 2006/04/06 (목) 545 0
45 초음파 감지 센서 leeky 2006/04/06 (목) 534 0
44 HUMIDITY SENSOR HS-1100 leeky 2006/04/06 (목) 409 0
43 Relative Humidity Sensor KSH01, KSH-02 leeky 2006/04/06 (목) 307 0
42 Digital Radar Speedometer leeky 2006/04/06 (목) 471 0
41 Touch Sensitive Switch leeky 2006/04/06 (목) 518 0
40 Economy radar detector leeky 2006/04/06 (목) 354 0
39 Twin Loop metal detector leeky 2006/04/06 (목) 484 0
38 Proximity Detector CS209A/D leeky 2006/04/06 (목) 467 0
37 Lego Sound Sensor leeky 2006/04/06 (목) 421 0
36 12C508 IR Proximity Detector leeky 2006/04/06 (목) 629 0
35 Sharp IR Sensor Hack leeky 2006/04/06 (목) 606 0
34 TIL300 PRECISION LINEAR OPTOCOUPLER leeky 2006/04/06 (목) 370 0
33 Analog Opto Isolator leeky 2006/04/06 (목) 413 0
32 Rich Caudle's capaciflector leeky 2006/04/06 (목) 257 0
31 Geiger Tube leeky 2006/04/06 (목) 369 0
30 Lynxmotion Infrared Proximity Detector leeky 2006/04/06 (목) 344 0
29 Low Power LED Flasher leeky 2006/04/06 (목) 416 0
28 백색 LED BLU 구동회로 leeky 2006/04/06 (목) 452 0
27 저전압 백색 LED 구동회로 leeky 2006/04/06 (목) 491 0
26 IR LED 송신회로 avrtools 2006/04/06 (목) 470 0
25 LED 총방사 광량의 측정 leeky 2006/04/06 (목) 384 0
24 자외선 측정센서의 교정 leeky 2006/04/06 (목) 334 0
23 UV센서 S9050의 데이터 leeky 2006/04/06 (목) 250 0
22 디지털 자외선 메터 leeky 2006/04/06 (목) 301 0
21 Simple Metal Detector leeky 2006/04/06 (목) 494 0
20 DS1820 온도센서 읽기 leeky 2006/04/04 (화) 546 0
19 RC5 적외선 리모콘의 신호처리 leeky 2006/02/17 (금) 643 0
18 NEC 적외선 리모콘의 전송규격 leeky 2006/02/17 (금) 531 0
17 MBI-6001 TRANSLESS LED DRIVER leeky 2006/02/14 (화) 370 0
16 PC로 제어하는 AD9850 DDS 신호발생기 leeky 2006/02/14 (화) 411 0
15 2400 Mhz test oscillator leeky 2006/02/14 (화) 438 0
14 DC BRUSHLESS FANS leeky 2006/02/14 (화) 526 0
13 RF mW Meter for SHF (2300MHz) leeky 2006/02/14 (화) 356 0
12 FET로 만드는 400W SSR leeky 2006/02/14 (화) 584 0
11 Scope2k4 소프트웨어 및 하드웨어 회로 leeky 2006/02/14 (화) 700 0
10 LTC1298를 사용한 PC 병렬포트용 ADC leeky 2006/02/14 (화) 368 0
9 0~14V 가변정전압, 0~2A 가변정전류 전원 avrtools 2006/02/14 (화) 499 0
8 ATV 1240-1300MHz 튜너용 PLL leeky 2006/02/14 (화) 250 0
7 1 Transistor FM Microphone leeky 2006/02/14 (화) 307 0
6 Helical Antenna Design Software leeky 2006/02/13 (월) 407 0
5 IRF510을 사용한 7MHz 출력10W 증폭기, PLL leeky 2006/02/13 (월) 460 0
4 MC34063A 설계용 계산기 avrtools 2006/02/13 (월) 441 0
3 RS232 신호 변환회로 leeky 2006/02/13 (월) 583 0
2 Sound card based multimeter Scope leeky 2006/02/13 (월) 724 0
1 2400MHz Helical Antenna Design leeky 2006/02/08 (수) 360 0
1

바구니 : 0
 보관함 : 0
오늘뷰 : 0
HOME   |   회사소개   |   제휴안내   |   회사위치   |   서비스이용 약관   |   개인정보 보호정책   |   사이트맵
17015 경기도 용인시 기흥구 동백중앙로16번길 16-25, 508호. 전화 : 031-282-3310
사업자 등록번호 : 697-47-00075 / 대표 : 이건영 / 업태 : 제조업 / 종목 : LED조명, LED전원, 제어장치.
개인정보 관리책임자 : 홈페이지 관리자 . Copyright ⓒ2016 아크레즈 (ACLEDS INC.)
HOME TOP PREVNEXT 0 0 0