PIC Vietnam

Go Back   PIC Vietnam > Microchip PIC > Các ngôn ngữ lập trình khác (CCS C, HT 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

Trả lời
 
Ðiều Chỉnh Xếp Bài
Old 20-12-2006, 02:05 PM   #1
chipchipvn
Đệ tử 2 túi
 
Tham gia ngày: Oct 2006
Bài gửi: 43
:
Help! Giao tiếp I2C giữa 2 PIC

Mình làm 1 cái giao tiếp i2c đơn giản dùng PICC !
Nhưng chả hỉu sao không chạy được nữa!
mình thử debug bằng MPLAB IDE thì khi đến dòng lệnh i2c_start thì không tiếp được nữa!
Các bạn có thể giúp mình một chút được không?
Chương trình chỉ đơn giản là Master(U2) gọi Slave dậy ( đang sleep), Slave tăng 1biến rồi gửi cho Master hiển thị ra PORTD.
Mình gửi code và hình kèm theo!
Code:
//==================================================================
//Ten Chuong Trinh:i2c_test 01
//Ngaythang	nam
//ChipChipVn
//Mo ta chung:Master code
//==================================================================
#include	<16f877a.h>
#use	delay(clock=4000000)
#use i2c(MASTER,SCL=PIN_C3,SDA=PIN_C4,ForCE_Hw)
#fuses HS,NOWDT,NOPROTECT
int8 DataIn;
#INT_EXT
Data_read()                  //doc du lieu tu Slave
{
   output_low(PIN_C5);
	delay_ms(1);	
   output_high(PIN_C5);
   delay_ms(2);             // Delay doi. Slave tinh day 
   i2c_start();
   i2c_write(0xA1);
   DataIn=i2c_read();
	i2c_stop();
}
main()
{
	DataIn=0;              
   enable_interrupts(global);
   enable_interrupts(INT_EXT);
   while(1)
   output_D(DataIn);            // Luon hien thi DataIn 
}
Code:
//==================================================================
//Ten Chuong Trinh:i2c_test 01
//Ngaythang	nam
//ChipChipVn
//Mo ta chung: Slave code
//==================================================================
#include	<16f877a.h>
#use	delay(clock=4000000)
#use i2c(SLAVE,SCL=PIN_C3,SDA=PIN_C4,Address=0xA0,ForcE_Hw)
#fuses HS,NOWDT,NOPROTECT
int8 DataOut;
#INT_EXT
Data_write()
{
   DataOut++;
   i2c_write(DataOut);
}
main()
{
    enable_interrupts(global);
    enable_interrupts(INT_EXT);  // Su dung InT de danh thuc Slave
    ext_int_edge(0,L_TO_H);
    while(1)
     sleep();
}
Hình Kèm Theo
File Type: bmp Test_i2c.BMP (341.9 KB, 121 lần tải)

thay đổi nội dung bởi: chipchipvn, 21-12-2006 lúc 10:13 PM.
chipchipvn vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 20-12-2006, 05:47 PM   #2
nhh
Đệ tử 9 túi
 
nhh's Avatar
 
Tham gia ngày: Feb 2006
Bài gửi: 174
:
Send a message via Yahoo to nhh
Mô phật ! Bác viết như thế ko hiểu là I2C chỗ nào nữa.

- Thứ nhất, bác phải tìm hiểu sơ sơ qua chuẩn truyền I2C cái đã.
- Bác chưa khai báo địa chỉ cho slave, tham khảo help của trình dịch
- Bác muốn truyền nhận I2C mà lại khai báo cho ngắt ngoài
- Tham khảo thêm ở luồng này http://www.picvietnam.com/forum//showthread.php?t=611
__________________
Ngày mai bắt đầu từ ngày hôm nay

Bạn có thắc mắc, bạn cần sự hỗ trợ của các thành viên. Hãy đọc luồng này:
http://www.picvietnam.com/forum//showthread.php?t=1263

thay đổi nội dung bởi: nhh, 20-12-2006 lúc 05:49 PM. Lý do: Nothing
nhh vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 21-12-2006, 10:08 PM   #3
chipchipvn
Đệ tử 2 túi
 
Tham gia ngày: Oct 2006
Bài gửi: 43
:
Hì, cảm ơn bác! Đúng là tôi quên khai báo add cho Slave!
Nhưng tui đã thử khai báo add cho Slave như trên (tôi sửa lại code) nhưng vẫn không được! Còn cái ngắt ngòai, là tôi muốn dùng nó để reset con Slave đang sleep ( ý là thế không bít có đúng không nữa )!
Cảm phiền bác nào hảo tâm sửa giúp cho tôi với! Thiệt tình là cũng có viết i2c rồi nhưng ngày xưa viết trên ASM, giờ viết trên C nhìn hoài không bít nó sai chỗ nào nữa!
chipchipvn vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 17-11-2007, 09:51 AM   #4
__GodFather__
Nhập môn đệ tử
 
Tham gia ngày: Nov 2007
Bài gửi: 2
:
em cũng phải làm giao tiếp giữa 2 con PIC 16F877A theo cơ chế Điều khiển luồng . bac Chip co hiểu vấn đề này ko ? bác giúp em chút dc hok( em la dân NOOd trong PIC )
__GodFather__ vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 17-11-2007, 10:08 AM   #5
tiendungkct
Đệ tử 4 túi
 
Tham gia ngày: May 2007
Bài gửi: 69
:
sao bác không đọc wa luồng náy nhi
http://www.picvietnam.com/forum/forumdisplay.php?f=45
tiendungkct vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 07-08-2008, 12:40 PM   #6
hopeman
Đệ tử 6 túi
 
hopeman's Avatar
 
Tham gia ngày: Jul 2007
Bài gửi: 146
:
hình như cái địa chỉ 0xA0 tương ứng với 10100000 tức là master đọc dữ liệu về từ slaver chứ nhỉ ??? mà địa chỉ 0xA0 = 160 , mà tối đa chỉ giao tiếp được với 127 thiết bị thôi (7 bit địa chỉ mà)
__________________
mạch nạp - kit phát triển - linh kiện điện tử www.PNLabvn.com
hopeman 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à 05:26 AM.


Đượ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