PIC Vietnam

Go Back   PIC Vietnam > Microchip PIC > dsPIC - Bộ điều khiển tín hiệu số 16-bit

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

dsPIC - Bộ điều khiển tín hiệu số 16-bit Theo dự kiến của Microchip, vào khoảng năm 2011 dsPIC sẽ có doanh số lớn hơn PIC

Trả lời
 
Ðiều Chỉnh Xếp Bài
Old 01-09-2006, 11:45 AM   #31
pham_v_quang3i
Đệ tử 1 túi
 
Tham gia ngày: Aug 2005
Bài gửi: 12
:
OK, em hiểu rồi.
Nếu ta cấu hình chip như thế này :
_FOSC(CSW_FSCM_OFF & FRC & XT_PLL16);
_FOSC(CSW_FSCM_OFF & FRC & XTL);

Thì trong cả hai trường hợp này XT_PLL16 và XTL là không có ý nghĩa. Trong cả hai trường hợp trên chip đều sử dụng mạch dao động FRC trong, nhưng cấu hình của FPR<3:0> vẫn để ở XT_PLL16 hoặc XTL. Vậy mục đích của việc thiết kế này chỉ là để làm hài lòng người dùng thôi ư, nếu người sử dụng muốn thay đổi nguồn clock việc gì mà không cấu hình lại từ đầu. Hay mục đích của việc này là nhờ vào clock switch để 1 chip có thể chạy nhiều tần số khác nhau ở những khoảng khác nhau . Hi , thấy nó cứ là lạ.
pham_v_quang3i vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 01-09-2006, 06:13 PM   #32
namqn
Trưởng lão PIC bang
 
Tham gia ngày: Feb 2006
Nơi Cư Ngụ: Tp. HCM, Việt Nam
Bài gửi: 3,025
:
Send a message via Yahoo to namqn
Trích:
Nguyên văn bởi pham_v_quang3i
OK, em hiểu rồi.
Nếu ta cấu hình chip như thế này :
_FOSC(CSW_FSCM_OFF & FRC & XT_PLL16);
_FOSC(CSW_FSCM_OFF & FRC & XTL);

Thì trong cả hai trường hợp này XT_PLL16 và XTL là không có ý nghĩa. Trong cả hai trường hợp trên chip đều sử dụng mạch dao động FRC trong, nhưng cấu hình của FPR<3:0> vẫn để ở XT_PLL16 hoặc XTL. Vậy mục đích của việc thiết kế này chỉ là để làm hài lòng người dùng thôi ư, nếu người sử dụng muốn thay đổi nguồn clock việc gì mà không cấu hình lại từ đầu. Hay mục đích của việc này là nhờ vào clock switch để 1 chip có thể chạy nhiều tần số khác nhau ở những khoảng khác nhau . Hi , thấy nó cứ là lạ.
Mục đích của việc đặt FPR<3:0> chính là cho clock switching, chúng ta cấu hình sẵn primary và chuyển từ FRC sang primary khi cần thiết (thường là cho các hệ thống liên quan đến tiết kiệm năng lượng nhưng vẫn cần năng lực tính toán cao, các hệ portable chẳng hạn). Việc đặt FPR<3:0> chỉ không có ý nghĩa khi chúng ta tắt clock switching, nhưng nên chú ý là chân OSC2 vẫn chịu ảnh hưởng của các thiết lập đó, không cần biết clock switching có bật hay không.

Thân,
__________________
Biển học mênh mông, sức người có hạn.

Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau:
http://www.picvietnam.com/forum/showthread.php?t=1263
namqn vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 06-01-2008, 11:26 PM   #33
alamanda
Đệ tử 1 túi
 
alamanda's Avatar
 
Tham gia ngày: Nov 2005
Bài gửi: 19
:
Question

Mong các bác chỉ giúp em phần I2C slave cho dsPIC.
Đây là toàn bộ chương trình cho con slave :
Code:
#include <p30f4011.h>
_FOSC(CSW_FSCM_OFF & FRC_PLL4);
_FWDT(WDT_OFF);
_FBORPOR(PBOR_ON & BORV_27 & PWRT_4 & MCLR_EN & RST_IOPIN);
_FGS(CODE_PROT_OFF);

#include <i2c.h>

void SI2C_init(void);
void slave_reply(unsigned char data);

unsigned char rcv_data,trn_data;
unsigned char data_request;

void _ISR_PSV _SI2CInterrupt(void)
{
	_SI2CIF = 0;
	if(_R_W)	//Read data from Slave
	{
		data_request = 1;
	}else	//Write data to Slave
	{
		if(_D_A) //I2CRSR chua du lieu
			rcv_data = I2CRCV;//doc du lieu
		else	//I2CRSR chua dia chi
			Nop();//Khong lam gi ca
	}
}

int main(void)
{
	SI2C_init();
	while(1)
	{
		if(data_request)
		{
			data_request = 0;
			trn_data ++;
			slave_reply(trn_data);
		}
		if(rcv_data)
		{
			rcv_data = 0;
		}
	}
	return 0;
}
void SI2C_init(void)
{
	I2CADD = 0x10;
	I2CCON = I2C_ON & I2C_IDLE_STOP & I2C_CLK_REL 
			& I2C_IPMI_DIS & I2C_7BIT_ADD
			& I2C_SLW_DIS & I2C_SM_DIS 
			& I2C_GCALL_DIS & I2C_STR_DIS
			& I2C_ACK & I2C_ACK_DIS & I2C_RCV_DIS 
			& I2C_STOP_DIS & I2C_RESTART_DIS 
			& I2C_START_DIS;
	IPC3bits.SI2CIP = 1;
	IEC0bits.SI2CIE = 1;
	_SI2CIF = 0;
}
void slave_reply(unsigned char data)
{
	I2CTRN = data;
	_SCLREL = 1;//Giai phong SCL
}
Vấn đề là không biết chương trình trên sai hay thiếu chỗ nào mà I2C master ko nhận được tín hiệu Ack từ slave khi truyền đến slave đó. Bus I2C ở đây chỉ có 2 IC và chương trình I2C Master đã chạy đúng với EEPROM.

thay đổi nội dung bởi: alamanda, 08-01-2008 lúc 09:29 PM. Lý do: Bổ sung code
alamanda vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 16-01-2008, 10:33 PM   #34
alamanda
Đệ tử 1 túi
 
alamanda's Avatar
 
Tham gia ngày: Nov 2005
Bài gửi: 19
:
hic,sao kô thấy các cao thủ có cao kiến gì vậy? Chẳng lẽ chưa ai tìm hiểu về I2C Slave trên dsPIC?
alamanda vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 17-01-2008, 02:51 AM   #35
namqn
Trưởng lão PIC bang
 
Tham gia ngày: Feb 2006
Nơi Cư Ngụ: Tp. HCM, Việt Nam
Bài gửi: 3,025
:
Send a message via Yahoo to namqn
Giả sử các hằng số _R_W và _D_A đã được bạn định nghĩa đúng, chương trình bên phía slave của bạn về giải thuật là ổn. Tuy nhiên, chương trình bên phía master của bạn ra sao, phần cứng của bạn thế nào thì bạn chưa nói. Master của bạn làm việc với EEPROM không có nghĩa là nó sẽ làm việc với một slave dsPIC. Bạn có thể cần chỉnh lại phần cứng, có thể cần phải thay đổi chương trình của master (địa chỉ slave mới chẳng hạn), và những vấn đề thực tế khác (thời gian chờ giữa các giai đoạn chẳng hạn, phần này khi giao tiếp với EEPROM thì hardware của EEPROM thực hiện cho bạn, còn khi viết slave thì bạn phải hiện thực nó).

Thân,
__________________
Biển học mênh mông, sức người có hạn.

Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau:
http://www.picvietnam.com/forum/showthread.php?t=1263
namqn vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 22-01-2008, 11:28 PM   #36
alamanda
Đệ tử 1 túi
 
alamanda's Avatar
 
Tham gia ngày: Nov 2005
Bài gửi: 19
:
Về phần cứng,ban đầu em dùng 2 điện trở 1.5k kéo lên;sau khi tham khảo datasheet,em đổi sang dùng điện trở 2.2k,kết quả vẫn như nhau.
Về chương trình Master,em viết theo chương trình Tutorial về I2C của anh,kiểm tra bit _Ackstat sau mỗi lần gửi,nếu ko có tín hiệu Ack trả về thì dừng,và báo lỗi qua UART2(do đó,em biết được I2C bị lỗi ở giai đoạn nào).Nếu có tín hiệu Ack trả về,thì tiếp tục truyền (như vậy ko biết em còn phải chờ gì nữa?).Còn về phần địa chỉ, em cũng đã thử thay đổi địa chỉ slave nằm trong vùng địa chỉ cho phép, nhưng cũng ko ăn thua.
Hiện tại em ko biết mình sai ở phần nào,phần cứng hay phần mềm?
alamanda 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

Similar Threads
Ðề tài Người gửi Chuyên mục Trả lời Bài mới
dsPIC Tutorial 1-Tạo và biên dịch một project (ASM30) namqn dsPIC - Bộ điều khiển tín hiệu số 16-bit 16 22-08-2012 12:35 AM


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