PIC Vietnam

Go Back   PIC Vietnam > Microchip PIC > MPASM

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

MPASM Lập trình bằng hợp ngữ là một việc làm vô cùng vất vả, tuy nhiên, để hiểu và làm việc với vi điều khiển, hợp ngữ trở thành một công cụ khá đắc lực ...

Trả lời
 
Ðiều Chỉnh Xếp Bài
Old 13-12-2006, 03:19 PM   #1
falleaf
PIC Bang chủ
 
falleaf's Avatar
 
Tham gia ngày: May 2005
Bài gửi: 2,631
:
Send a message via Yahoo to falleaf
ADC 8bit, 10bit, 12bit bằng MPASM

Mở ra luồng này để chuẩn bị cho cái tutorial về ADC. Chờ người viết cho cái này vậy, vì vấn đề này ai cũng làm được đơn giản, nhưng hình như chưa có cái tutorial chuẩn của picvietnam. Để đây chờ tác giả.

Chúc vui
falleaf vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 16-12-2006, 09:43 AM   #2
falleaf
PIC Bang chủ
 
falleaf's Avatar
 
Tham gia ngày: May 2005
Bài gửi: 2,631
:
Send a message via Yahoo to falleaf
Vấn đề viết code cho ADC thì hoàn toàn không có vấn đề gì là khó khăn.

Lưu ý phần code này, được trích trong một chương trình đã chạy ngon, nhưng vì trích dẫn ra, có thể nó không chạy được, hoặc có trục trặc gì, F không chịu trách nhiệm về việc sử dụng nó.

Ngoài ra, F cũng không nói ứng dụng nó là ứng dụng gì, vì lý do nó được dùng cho một sản phẩm thương mại, chỉ trích phần ADC ra xem chơi thôi. Các bạn chủ yếu nắm ý tưởng một trong những cách viết ADC, còn lại, không cần quan tâm đến nội dung code. Đã 2 năm rưỡi nay F không đụng tới code của PIC, vì vậy, nếu có vấn đề gì, các bạn feedback lại để sửa nhé.

Đoạn này khởi tạo các biến để sử dụng ADC.

Code:
		ORG	0x020
;==============================================
ADCDATA		RES	1
REGAD1		RES	1
REGAD2		RES	1
REGAD3		RES	1
REGAD4		RES	1
REGAD5		RES	1
Code:
;----------------------
;Khoi tao cac ngo vao
;----------------------

ADC		MOVLW	B'00000000'				; Tat ca portA la ngo vao ADC
		MOVWF	ADCON1					; chon Vref = VDD
Code:
;=============================
; Doc ADC
; Khong dung ngat de doc ADC
; Su dung thanh ghi GO/DONE
;=============================

AD1		MOVLW	B'00000001'
		CALL	ADSTART
		MOVWF	REGAD1

AD2		MOVLW	B'00010001'
		CALL	ADSTART
		MOVWF	REGAD2

AD3		MOVLW	B'00100001'
		CALL	ADSTART
		MOVWF	REGAD3

AD4		MOVLW	B'00011001'
		CALL	ADSTART
		MOVWF	REGAD4

AD5		MOVLW	B'00100001'
		CALL	ADSTART
		MOVWF	REGAD5
Đoạn trên gọi ADSTART, thì đây là chương trình ADSTART
Code:
ADSTART		MOVWF	ADCON0					
DELAY12		DECFSZ	DLY12,	F				; 2 x DLY12 x 0.2 us
		GOTO	DELAY12					; 2 x 30 x 0.2 = 12us
		BSF	ADCON0,	2
GODONE		BTFSC	ADCON0,	2
		GOTO	GODONE					; Cho den khi convert xong
		MOVF	ADRES,	W

		RETURN
Đại loại là đọc ADC 8 bit đơn giản như vậy thôi, nhưng bây giờ thì chúng ta tạm thời chưa phần tích kỹ phần thuật toán, chỉ là mào đầu thôi.

Cái F muốn nói ở đây, đó là phần thiết kế điện tử cho ADC, hãy phân tích một thiết kế điện tử ADC để thiết kế ngõ vào cho ADC, giả sử nếu chúng ta cần dùng một mạch lọc, sẽ thiết kế thế nào? Vd: lọc thông thấp chẳng hạn (với các cảm biến nhiệt).

Khi thiết kế xong, thì yêu cầu đi mạch ADC như thế nào?

Chứ nếu không các bạn đọc 8bit thì chỉ còn tầm 6,7 bit, đọc 12 bit, có khi chỉ còn đúng ở mức 8bit... Lưu ý, bộ ADC của PIC, lên tới 10bit là cũng mệt mỏi lắm rồi.

Mời các bạn tiếp tục thảo luận.

Chúc vui
falleaf vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 21-04-2008, 11:02 PM   #3
nguyendungdt12
Đệ tử 1 túi
 
Tham gia ngày: Sep 2007
Bài gửi: 11
:
ai có tut về ADC cho cảm biếnd nhiệt viết bằng ASM giúp tôi với, khong thấy ở đâu nói đến cả
nguyendungdt12 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 23-04-2008, 12:21 AM   #4
babyrock
Nhập môn đệ tử
 
Tham gia ngày: Jan 2008
Bài gửi: 3
:
Bác viết bằng C đi được không? ASM hơi rắc rối
babyrock vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 10-07-2008, 12:07 AM   #5
tallht
Đệ tử 5 túi
 
tallht's Avatar
 
Tham gia ngày: Mar 2008
Nơi Cư Ngụ: Bình Thạnh, TPHCM
Bài gửi: 98
:
Sao Không Ai Viết Tut Về Vấn đề Này Hết Vậy? Huhu
tallht vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 11-07-2008, 10:48 PM   #6
anmango35
Nhập môn đệ tử
 
Tham gia ngày: May 2007
Bài gửi: 1
:
ADC,
Mình có color sensor để cảm nhận được sự thay đổi màu của đèn LED (Red, Xanh đậm, xanh lợt-RGB). Mình muốn xài con 16F877A để nhận tín hiệu từ sensor (Analog) và đổi thành (digital) để output của con 16F877A có thể gắn đèn LED. Nhưng mình không biết về sơ đồ mạch và code (Hex hay là ASM). Mong các bạn chì giáo cho. Cám ơn nhiều lắm
anmango35 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 20-08-2008, 05:45 PM   #7
tallht
Đệ tử 5 túi
 
tallht's Avatar
 
Tham gia ngày: Mar 2008
Nơi Cư Ngụ: Bình Thạnh, TPHCM
Bài gửi: 98
:
Adc 8 bit

Code:
                       PROCESSOR PIC16F877A
	          INCLUDE <P16F877A.INC>
	    __CONFIG _XT_OSC & _WDT_OFF & _LVP_OFF & _CP_OFF
;*************************************************************
;CHUONG TRINH THU NGHIEM DUNG ADC CUA PIC 16F877A
;*************************************************************
;NGUOI THUC HIEN: TALLHT
;*************************************************************
;*************************************************************	
		COUNT 	EQU 0X20	;BIEN DELAY
		COUNT1	EQU 0X21
;************************************************************	
MAIN	
		BANKSEL TRISB
		CLRF TRISB		;PORTB XUAT LED
		MOVLW 0XFF
		MOVWF TRISA		;PORT A LA INPUT
LOOP	
		BANKSEL ADCON1
		MOVLW 0X00		;NGO VAO ANALOG,Fosc/2
		MOVWF ADCON1
		BANKSEL ADCON0
		MOVLW	0X01		;CHON RA0 LAM NGO VAO,ADON=1,BAT ADC
		MOVWF ADCON0
		CALL DELAY		;CHO 1 KHOANG THOI GIAN TRUOC KHI BAT DAU
		BSF ADCON0,GO		;SET BIT "GO",BAT DAU CONVERT
;***************************************
;KIEM TRA KET QUA
		BTFSC ADCON0,GO			;KIEM TRA BIT "DONE" CUA ADCON0
		GOTO $-1			;NEU BANG 1 THI CHO TIEP TUC
		MOVF ADRES,W                              ;LAY KẾT QUẢ VÀO W
		MOVWF PORTB			;XUAT RA PORTB
		GOTO LOOP
;*******************************************************
DELAY
		MOVLW D'10'
		MOVWF COUNT
BACK
		MOVLW D'4'
		MOVWF COUNT1
		DECFSZ COUNT1,F
		GOTO $-1
		DECFSZ COUNT,F
		GOTO BACK
		RETURN
END
__________________
-------------------------------------------------------------------
Cung cấp bo mạch thực hành Arduino và các mạch sáng tạo.
Mời tham quan: https://www.facebook.com/eshop1109

Cung cấp dịch vụ order hàng từ Aliexpress
Liên hệ: https://www.facebook.com/Mua-h%E1%BB...5265931515571/

thay đổi nội dung bởi: tallht, 20-08-2008 lúc 06:02 PM.
tallht vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 20-08-2008, 05:48 PM   #8
tallht
Đệ tử 5 túi
 
tallht's Avatar
 
Tham gia ngày: Mar 2008
Nơi Cư Ngụ: Bình Thạnh, TPHCM
Bài gửi: 98
:
Adc 8 bit

Code cùng sơ đồ mạch kèm theo!
File Kèm Theo
File Type: rar ADC.rar (26.6 KB, 453 lần tải)
__________________
-------------------------------------------------------------------
Cung cấp bo mạch thực hành Arduino và các mạch sáng tạo.
Mời tham quan: https://www.facebook.com/eshop1109

Cung cấp dịch vụ order hàng từ Aliexpress
Liên hệ: https://www.facebook.com/Mua-h%E1%BB...5265931515571/
tallht vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 20-08-2008, 06:01 PM   #9
tallht
Đệ tử 5 túi
 
tallht's Avatar
 
Tham gia ngày: Mar 2008
Nơi Cư Ngụ: Bình Thạnh, TPHCM
Bài gửi: 98
:
Talking

Về phần adc 8 bit của 16f877a có 3 thanh ghi liên quan đến: Adcon0,adcon1,adres
trước khi bắt đầu ta phải config các thanh ghi này đã !
**thanh ghi adcon0:
-bit7,6 chọn tần số chuyển đổi
-bit 5,4,3 chọn ngõ vào của tín hiệu analog
-bit 2 la bit"go/done*": Khi muốn bắt đầu convert thì set bit này lên,khi convert xong thì bit này tự động clear bởi phần cứng (ta có thể kiểm tra bit này để xem phần chuyển đổi xong chưa trong chương trình!)
-bit 1:=0
-bit 0: Adon,bật chế độ ad nếu bằng 1
**thanh ghi adcon1:
-bit 7,6,5,4,3=0
-bit 2,1,0 cho phép thiết lập ngõ vào là analog/digital (000: Tất cả các cổng là analog)
**thanh ghi adres:
Chứa 8 bit kết quả
**ngoài ra ta có thể thêm vào phần interrupt khi convert xong bằng cách tác động lên thanh ghi intcon,..

Tham khảo thêm phần appnote của microchip
MÌNH CHỈ CUNG CẤP BAO NHIÊU ĐÓ THÔNG TIN THÔI,NẾU CÓ GÌ SƠ SÓT THÌ MONG MẤY PÁC CHỈNH SỬA THÊM!
THANKS
File Kèm Theo
File Type: pdf 8Bit AD Converter _PICmicro Mid-Range MCU Family.PDF (82.8 KB, 577 lần tải)
__________________
-------------------------------------------------------------------
Cung cấp bo mạch thực hành Arduino và các mạch sáng tạo.
Mời tham quan: https://www.facebook.com/eshop1109

Cung cấp dịch vụ order hàng từ Aliexpress
Liên hệ: https://www.facebook.com/Mua-h%E1%BB...5265931515571/
tallht vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 20-08-2008, 06:04 PM   #10
tallht
Đệ tử 5 túi
 
tallht's Avatar
 
Tham gia ngày: Mar 2008
Nơi Cư Ngụ: Bình Thạnh, TPHCM
Bài gửi: 98
:
à trước khi bắt đầu convert thì cần chờ 1 khoảng thời gian ( thường là khoảng 40 micro giây,ta cứ dùng delay là được ) gọi là acquisition time
__________________
-------------------------------------------------------------------
Cung cấp bo mạch thực hành Arduino và các mạch sáng tạo.
Mời tham quan: https://www.facebook.com/eshop1109

Cung cấp dịch vụ order hàng từ Aliexpress
Liên hệ: https://www.facebook.com/Mua-h%E1%BB...5265931515571/
tallht vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 24-07-2009, 05:39 PM   #11
cancel
Nhập môn đệ tử
 
Tham gia ngày: Jul 2008
Bài gửi: 3
:
Dùng ngắt điều khiển bộ ADC 10bit của pic16f877a

tui đã test code này rồi. tui hơi bối rối chổ banksel. Mỗi lần tui viết lệnh cho một thanh ghi phải coi nó thuộc bank nào rất vất vả. Vậy xin hỏi có một nguyên tắc nào để xài cái lệnh banksel không?
;################################################# #########
TITLE "SU DUNG ADC"
PROCESSOR P16F877A
INCLUDE <P16F877A.INC>
__CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _XT_OSC &_WRT_OFF & _LVP_OFF & _CPD_OFF
;#######################################
;dung Vdd lam Vref
;ket qua 10 bit xuat ra PORTB va
;2 bit cao la RC0, RC1
;lay mau o chan RA0
;khi qua trinh chuyen doi hoan tat thi co ngat duoc bat len
;va bit GO/DONE' duoc tu dong xoa ve 0
;cancel
;######################################
ORG 0x0000
goto MAIN
ORG 0x0004
goto IRS
ORG 0x0005
MAIN
;configure I/O ports
banksel TRISA ;bank1
movlw B'111111'
movwf TRISA
movlw 0x00
movwf TRISB
movlw 0x00
movwf TRISC
movlw TRISC
;configure A/D module

movlw B'10000000' ;luu ket qua ve ben phai hai thanh ghi ADRESH:ADRESL
;chon 8 kenh analog vdd lam Vref
movwf ADCON1
bsf PIE1,ADIE ;cho phep ngat AD; trong bank1

banksel ADCON0 ;bank0
movlw B'01000001' ;clock conversion=Fosc/8
;select AN0
;clear GO/DONE'
;turn on A/D

movwf ADCON0
;configure A/D interrup
;bcf PIR1,ADIF
bsf INTCON,PEIE
bsf INTCON,GIE
;bsf PIE1,ADIE PIE1 o bank1

;wait the required acquisition time; ko cho chuyen doi trong chuong trinh nay

;start convertion: set bit GO/DONE' & ep ngat AD

bsf ADCON0,GO
bsf PIR1,ADIF
;
goto $

IRS
btfss PIR1,ADIF
goto EXIT_ADC_INTERRUP
ADC_INTERRUP
; display the result

movfw ADRESH
movwf PORTC
banksel ADRESL ;bank1
movfw ADRESL
banksel PORTB ;bank0
movwf PORTB

;prepare for the next INTERRUP

bsf ADCON0,GO
bcf PIR1,ADIF
EXIT_ADC_INTERRUP

RETFIE
END
cancel vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 18-03-2011, 12:44 AM   #12
Longfet53
Nhập môn đệ tử
 
Tham gia ngày: Feb 2011
Bài gửi: 9
:
Trích:
Nguyên văn bởi cancel View Post
tui đã test code này rồi. tui hơi bối rối chổ banksel. Mỗi lần tui viết lệnh cho một thanh ghi phải coi nó thuộc bank nào rất vất vả. Vậy xin hỏi có một nguyên tắc nào để xài cái lệnh banksel không?
;################################################# #########
TITLE "SU DUNG ADC"
PROCESSOR P16F877A
INCLUDE <P16F877A.INC>
__CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _XT_OSC &_WRT_OFF & _LVP_OFF & _CPD_OFF
;#######################################
;dung Vdd lam Vref
;ket qua 10 bit xuat ra PORTB va
;2 bit cao la RC0, RC1
;lay mau o chan RA0
;khi qua trinh chuyen doi hoan tat thi co ngat duoc bat len
;va bit GO/DONE' duoc tu dong xoa ve 0
;cancel
;######################################
ORG 0x0000
goto MAIN
ORG 0x0004
goto IRS
ORG 0x0005
MAIN
;configure I/O ports
banksel TRISA ;bank1
movlw B'111111'
movwf TRISA
movlw 0x00
movwf TRISB
movlw 0x00
movwf TRISC
movlw TRISC
;configure A/D module

movlw B'10000000' ;luu ket qua ve ben phai hai thanh ghi ADRESH:ADRESL
;chon 8 kenh analog vdd lam Vref
movwf ADCON1
bsf PIE1,ADIE ;cho phep ngat AD; trong bank1

banksel ADCON0 ;bank0
movlw B'01000001' ;clock conversion=Fosc/8
;select AN0
;clear GO/DONE'
;turn on A/D

movwf ADCON0
;configure A/D interrup
;bcf PIR1,ADIF
bsf INTCON,PEIE
bsf INTCON,GIE
;bsf PIE1,ADIE PIE1 o bank1

;wait the required acquisition time; ko cho chuyen doi trong chuong trinh nay

;start convertion: set bit GO/DONE' & ep ngat AD

bsf ADCON0,GO
bsf PIR1,ADIF
;
goto $

IRS
btfss PIR1,ADIF
goto EXIT_ADC_INTERRUP
ADC_INTERRUP
; display the result

movfw ADRESH
movwf PORTC
banksel ADRESL ;bank1
movfw ADRESL
banksel PORTB ;bank0
movwf PORTB

;prepare for the next INTERRUP

bsf ADCON0,GO
bcf PIR1,ADIF
EXIT_ADC_INTERRUP

RETFIE
END
Mình không hiểu ở chỗ cái dòng
bsf ADCON0,GO
bsf PIR1,ADIF
bạn set ADIF dể làm gì? bạn giải thích chút được không.
Longfet53 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 18-05-2011, 03:02 AM   #13
bombon18
Nhập môn đệ tử
 
bombon18's Avatar
 
Tham gia ngày: Feb 2011
Bài gửi: 1
:
Trích:
Nguyên văn bởi Longfet53 View Post
Mình không hiểu ở chỗ cái dòng
bsf ADCON0,GO
bsf PIR1,ADIF
bạn set ADIF dể làm gì? bạn giải thích chút được không.
Mình nghĩ chỗ đó phải là BCF PIR1,ADIF mới đúng. Bới vì bit ADIF chỉ được set khi hoàn thành xong quá trình chuyển đổi AD thôi.
bombon18 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 23-08-2009, 02:29 AM   #14
lehung883
Nhập môn đệ tử
 
Tham gia ngày: Mar 2006
Bài gửi: 2
:
gần 3 năm

Trích:
Nguyên văn bởi falleaf View Post
Mở ra luồng này để chuẩn bị cho cái tutorial về ADC. Chờ người viết cho cái này vậy, vì vấn đề này ai cũng làm được đơn giản, nhưng hình như chưa có cái tutorial chuẩn của picvietnam. Để đây chờ tác giả.

Chúc vui
gần 3 năm sau cái luồng này vẫn chửa có tut hoàn chỉnh.
lehung883 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 29-08-2009, 07:47 PM   #15
JohnnyNguyen
Đệ tử 3 túi
 
Tham gia ngày: Jul 2009
Bài gửi: 46
:
các bác cho em hỏi ý tưởng của phương pháp điểu chỉnh độ rộng xung nhờ khối ADC ko ah.có thêm mạch ví dụ nữa cho dễ hiểu
JohnnyNguyen vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Trả lời

Ðiều Chỉnh
Xếp Bà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

Similar Threads
Ðề tài Người gửi Chuyên mục Trả lời Bài mới
Library cho MPASM, các module cơ bản mafd_47a MPASM 12 06-09-2009 03:51 PM
cho tôi fan mềm MPASM hoặc đường line dowload lep Chương trình dịch & các công cụ mô phỏng 3 12-10-2008 03:00 AM
Trình dịch cho MPASM của Microchip. mafd_47a MPASM 8 20-03-2008 12:37 AM
Mpasm cho nguoi moi bat dau mafd_47a MPASM 14 03-02-2007 09:08 AM
Sườn chương trình cơ bản bằng MPASM falleaf MPASM 6 19-05-2006 03:28 PM


Múi giờ GMT. Hiện tại là 01:58 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