PIC Vietnam

Go Back   PIC Vietnam > Robotics > Cảm biến

Tài trợ cho PIC Vietnam
Trang chủ Đăng Kí Hỏi/Ðáp Thành Viên Lịch Bài Trong Ngày Vi điều khiển

Cảm biến Camera, siêu âm, hồng ngoại, gyro, la bàn...

Trả lời
 
Ðiều Chỉnh Xếp Bài
Old 12-07-2007, 05:56 PM   #1
Mecha
Trưởng lão PIC bang
 
Mecha's Avatar
 
Tham gia ngày: Dec 2005
Bài gửi: 315
:
Vấn đề thời gian vòng quét nhỏ cỡ 10us trở xuống cũng có thể tìm thấy trong máy xung gia công tia lửa điện (EDM). Để tránh hiện tượng ngắn mạch giữa hai điện cực, điện áp chênh lệch giữa điện cực Anot và Katot được kiểm tra và so sánh liên tục với điện áp ngưỡng và phải lập tức đảo chiều quay của động cơ bước để kéo điện cực Anot lên. Do đó chỉ có vòng quét với chu kỳ rất nhỏ mới có thể đáp ứng được.

Mở rộng ra một chút, trong các bài toán lập trình điều khiển trong thực tế, tần số lấy mẫu được coi là tương đương với chu kỳ của Timer hay vòng quét chương trình.

Do đó anh nghĩ mình có thể tạo một chương trình mẫu dạng (kiểu template) để khi cần là có thể mang ra thay số (đặt thông số capture cho Timer) là dùng được ngay.
__________________
Sống là động nhưng lòng luôn bất động,
Sống là thương nhưng lòng chẳng vấn vương,
Sống yên vui danh lợi vẫn coi thường,
Tâm bất biến giữa dòng đời vạn biến.


Chú ý: đề nghị các thành viên đọc luồng dưới đây trước khi post bài:
http://www.picvietnam.com/forum//showthread.php?t=1263
Mecha vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 12-07-2007, 06:04 PM   #2
Mecha
Trưởng lão PIC bang
 
Mecha's Avatar
 
Tham gia ngày: Dec 2005
Bài gửi: 315
:
Ví dụ đây là một "khung chương trình" của 89C52


Code:
;********************************************************
;*  Clock 24 MHz, 1 chu ky 0.5 us
;********************************************************

; Khai bao cac hang so khoi dong ban dau o day

; Khai bao bien o day

;-----------------------------
Start:
        mov   a,#0Ch
        da      a
        djnz    r0,$
        clr     EA
        clr     ET0
        clr     ET1
        clr     EX0
        clr     EX1
        jmp     Clear_RAM
;----------------------------------------------------------------------------
;                Clear RAM internal 20h - 0FFh for 89C52
;----------------------------------------------------------------------------
Clear_RAM:
        mov     r0,#20h
CLR_loop:
        mov     @r0,#0
        inc     r0
        cjne    r0,#0ffh,CLR_loop
        mov     sp,#Stack
;----------------------------------------------------------------------------
; Setup cac tham so khac o day

;--------------------------------------------------------
; Vong quet chuong trinh chinh
;--------------------------------------------------------
Main:
	jbc	flg_time.0,prg10us
n100us:
	jbc	flg_time.1,prg100us
n1ms:
	jbc	flg_time.2,prg1ms
n10ms:
	jbc	flg_time.3,prg10ms
n100ms:
	jbc	flg_time.4,prg100ms
n1sec:
	jbc	flg_time.5,prg1sec
n1minute:
	jmp	Main


;~~~~~~~~~~~~~~~~~~~~~~~~~~
prg10us:
	;cac lenh cua vong quet 10us
	jmp	n100us

;~~~~~~~~~~~~~~~~~~~~~~~~~~
prg100us:
	;cac lenh cua vong quet 100us
	jmp	n1ms

;~~~~~~~~~~~~~~~~~~~~~~~~~~
prg1ms:
	;cac lenh cua vong quet 1ms
	jmp	n10ms

;~~~~~~~~~~~~~~~~~~~~~~~~~~
prg10ms:
	;cac lenh cua vong quet 10ms
	jmp	n100ms

;~~~~~~~~~~~~~~~~~~~~~~~~~~
prg100ms:
	;cac lenh cua vong quet 100ms
	jmp	n1sec


;----------------------------------------------------------
; Thu tuc xu ly cac ngat
;----------------------------------------------------------

IntTimer0:
        push    0
        clr	   TR0		; cam timer 0
;cac lenh trong ngat Timer0
endtimer0:
        setb	TR0		; Cho phep timer 0
        pop	0
        reti

;----------------------------
;Tao chu ky vong quet khac nhau
IntTimer1:
        push    0
	clr	TR1		; cam timer 1

	setb	flg_time.0		;bit 0 : da thay doi 10us
	mov	r0,#cn_10us
	inc	@r0
	cjne	@r0,#10,endtimer1

	setb	flg_time.1		;bit 1: da thay doi 100us
	mov	@r0,#0
	mov	r0,#cn_100us
	inc	@r0
	cjne	@r0,#10,endtimer1

	setb	flg_time.2		;bit 2: da thay doi 1ms=1000us
	mov	@r0,#0
	mov	r0,#cn_1ms
	inc	@r0
	cjne	@r0,#10,endtimer1

	setb	flg_time.3		;bit 3: da thay doi 10ms
	mov	@r0,#0
	mov	r0,#cn_10ms
	inc	@r0
	cjne	@r0,#10,endtimer1

	setb	flg_time.4		;bit 4: da thay doi 100ms
	mov	@r0,#0
	mov	r0,#cn_100ms
	inc	@r0
	cjne	@r0,#10,endtimer1

	setb	flg_time.5		;bit 5: da thay doi 1sec=1000ms
	mov	@r0,#0
	mov	r0,#cn_1sec
	inc	@r0
	cjne	@r0,#60,endtimer1

	setb	flg_time.6		;bit 6: da thay doi 1minute=60s
	mov	@r0,#0
	mov	r0,#cn_1minute
	inc	@r0
	cjne	@r0,#60,endtimer1

	setb	flg_time.7		;bit 7: da thay doi 1hour=60minutes
	mov	@r0,#0
	mov	r0,#cn_1hour
	inc	@r0
	
endtimer1:
	mov	TL1,#Low(MotorPulse)
	mov	TH1,#High(MotorPulse)
	setb	TR1
	pop	0
	reti

;----------------------------
IntEx0:
        reti
;----------------------------
IntRS232:
        reti
;----------------------------
IntEx1:
        reti

;----------------------------
endprog: db ' End of program at here, bye!'
        END
__________________
Sống là động nhưng lòng luôn bất động,
Sống là thương nhưng lòng chẳng vấn vương,
Sống yên vui danh lợi vẫn coi thường,
Tâm bất biến giữa dòng đời vạn biến.


Chú ý: đề nghị các thành viên đọc luồng dưới đây trước khi post bài:
http://www.picvietnam.com/forum//showthread.php?t=1263
Mecha vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Trả lời


Quyền Sử Dụng Ở Diễn Ðàn
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Mở
Smilies đang Mở
[IMG] đang Mở
HTML đang Tắt

Chuyển đến


Múi giờ GMT. Hiện tại là 08:33 PM.


Được sáng lập bởi Đoàn Hiệp
Powered by vBulletin®
Page copy protected against web site content infringement by Copyscape
Copyright © PIC Vietnam