![]() |
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 |
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:
Code:
;---------------------- Code:
;============================= Code:
ADSTART MOVWF ADCON0 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 |
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ả
|
Bác viết bằng C đi được không? ASM hơi rắc rối
|
Sao Không Ai Viết Tut Về Vấn đề Này Hết Vậy? Huhu
|
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 |
Adc 8 bit
Code:
PROCESSOR PIC16F877A |
Adc 8 bit
1 Attachment(s)
Code cùng sơ đồ mạch kèm theo!
|
1 Attachment(s)
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 |
à 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
|
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 |
gần 3 năm
Trích:
|
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
|
Trích:
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. |
Trích:
|
Múi giờ GMT. Hiện tại là 08:37 AM. |
Tên diễn đàn: vBulletin Version 3.8.11
Được sáng lập bởi Đoàn Hiệp.
Copyright © PIC Vietnam