PIC Vietnam

Go Back   PIC Vietnam > Microchip PIC > Cơ bản về vi điều khiển và PIC

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ơ bản về vi điều khiển và PIC Những bài hướng dẫn cơ bản nhất để làm quen với vi điều khiển PIC

 
 
Ðiều Chỉnh Xếp Bài
Prev Previous Post   Next Post Next
Old 05-07-2009, 03:45 AM   #1
vagabondtt1503
Đệ tử 2 túi
 
Tham gia ngày: Dec 2008
Bài gửi: 33
:
xin hỏi về duty cycle & ADC trong pic18F4431

I.PWM

Theo như em được biết thì thanh ghi PTPERL sẽ quyết định chu kỳ của xung,em sử dụng bộ dao động ngoài 20MHz,muốn sử dụng xung PWM có tần số 10 KHz ,em tính như sau :

Fpwm = Fosc / 4 /((PTPER + 1) x PTMRPS)

Fosc là tần số bộ dao động ngoài Fpwm tần số xung PWM

==>PTPER = Fosc/(4*Fpwm*PTMRPS) - 1

PTMRPS = prescale (o day 1 : 4) ,Free-Running mode

PTCON0 = 0x04

PTPERL = 0x7C;
deadtime = 0.5 us

bây giờ em muốn tính giá trị cho PDCxH và PDCxL để duty cycle = 100% (x là 1 trong 4 PWM),trong mục 17.6 của datasheet em đọc vẫn chưa hiểu rõ lắm vì tiếng anh kém,em có thắc mắc như sau:

1.em vẫn không hiểu tại sao phải có PDCxH và PDCxL mà không phải chỉ cần PDCx
2.theo em biết duty cycle = 100% <=> PDCx = 2 x PTPERL,nhưng áp dụng trên proteus thì xung thu được ở mức cao không quá 50% , đưa các giá trị vào thanh ghi PDC0 như sau
PDC0H = 0;
PDC0L = 248;

sau 1 hồi thử tới thử lui,em có nhận xét :
_nếu PDC0H = 0; ,xung ở mức cao từ chân PWM1 thay dổi từ 0->50% nếu PDC0L thay đổi từ 0 -> 2 x PTPERL
_nếu PDC0H = 1; ,xung ở mức cao từ chân PWM1 thay dổi từ 50->100% nếu PDC0L thay đổi từ 0 -> 2 x PTPERL
_nếu PDC0H > 1;xung ở mức cao từ chân PWM1 = 100%

Em không hiểu tại sao lại như vậy??Các anh giải thích dùm em với

II.Về module ADC :

Mạch mô phỏng trong proteus:



C18
Code:
#include <htc.h>
__CONFIG(1,HS //thach anh > 4MHz ,thach anh bai nay su dung = 20Mhz,khong su dung PLL
		& IESODIS & FCMDIS);
__CONFIG(2,BORDIS & BORV20 & PWRTEN & WDTDIS);
__CONFIG(3,MCLREN );//mo chan rs
__CONFIG(4,DEBUGDIS & LVPDIS & STVRDIS);
__CONFIG(5,UNPROTECT);
__CONFIG(6,UNPROTECT);
__CONFIG(7,UNPROTECT);

void InitADC()
{
	 //1 . select Analog I/O
	 ANSEL0 = 0x01;  //AN0 la chan analog,con lai la chan I/O
	 ANSEL1 = 0x00;
	 
	 ADCON0	= 0b00000001;	//single-shot conversion on ADC group A

     //2 . chon dien ap nguon chuan
	 ADCON1 = 0;
	 
	 //3 . chon toc do xung cloc cho ADC phu hop voi toc do du lieu va toc do xu ly
	 ADCON2	= 0b10010100;	// TAD=2*TOSC, TOSC=0.5 us (clock = FOSC/4)

	 
	 
	 ADCON3 = 0x00; //Module PWM cham dut lay mau va kich hoat
					//viec chuyen doi A/D
	             	//no triggers
  	ADCHS	= 0b00000000;	//Use AN0

	 
	 
	 
}


void main(void)
{
	    
		TRISA=	0b00000001;	
		
		

		
	TRISD = 0x00;
	TRISC = 0x00;
	PORTD = 0x00;
	PORTC = 0x00;
	
	InitADC();
	while (1){
		
	        	ADCON0bits.GODONE=1;		
				while(ADCON0bits.GODONE){}	
				PORTD = ADRESH;		
				PORTC = ADRESL;

	}
}
Và đây là lỗi trong Proteus





Mong được sự giúp đỡ của mọi người,em xin chân thành cảm ơn

thay đổi nội dung bởi: vagabondtt1503, 05-07-2009 lúc 10:46 PM.
vagabondtt1503 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
 


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à 04:47 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