PIC Vietnam

Go Back   PIC Vietnam > Truyền thông > Giao tiếp USB, CAN, I2C, SPI, USART...

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

Giao tiếp USB, CAN, I2C, SPI, USART... Những giao tiếp được tích hợp trên PIC

Trả lời
 
Ðiều Chỉnh Xếp Bài
Old 29-09-2009, 12:29 AM   #136
thanhctdt07
Nhập môn đệ tử
 
Tham gia ngày: Mar 2009
Bài gửi: 5
:
Mình cần một người giúp mình viết và giải thích dùm một chương trình quét led ma trận và có thêm phần hiển thị lên led ma trận từ bàn phím có (6x6) 36 nút nhấn các ký tự ABC
Vd: ta nhập tên “thanh” thì chử sẽ được hiển thị lên led ma trận 8led ma trận 8x8 và nhấn thêm một phím nữa dể chử vừa nhập “thanh” chay theo lập trình ./.
Giá cả không thành vấn đề có thể thương lượng sau,ai giúp được thì liên lạc số đt :0937567594 gặp Đạt hoặc 01226688701 gặp Phương Duy
Cần gấp !!!!!!!!!!minh` ở TP HCM bạn nào ở HCM thì càng tốt
thanhctdt07 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 30-09-2009, 01:30 AM   #137
bebungbu
Đệ tử 1 túi
 
Tham gia ngày: Jun 2009
Bài gửi: 25
:
Trích:
Nguyên văn bởi vagabond View Post
Hi mọi người,

Các bạn có thể sử dụng IC 74LVXC4245 để chuyển đổi mức điện áp 3.3-5V. IC này cũng cho phép xác định chiều vào/ra của tín hiệu. IC này sẽ được cấp 2 nguồn áp tham chiếu là 5V và 3.3V. Chú ý: theo sơ đồ dưới đây, ta cần phải có thêm 2 tín hiệu để điều khiển chiều ra/vào của tín hiệu ở các ngõ A và B.
Cho mình hỏi IC để chuyển điện áp này có thể mua ở đâu vậy ?
bebungbu vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 30-09-2009, 12:25 PM   #138
nhuhuan86
Đệ tử 1 túi
 
Tham gia ngày: Jul 2008
Bài gửi: 17
:
em mới vào tìm hiểu vì i2c có chỗ này ko hiểu lắm mong các bác giúp đỡ:vấn đề là em giao tiếp 2 con chip 16f877a.Con master gui yêu cầu xuống slave đọc adc.con slave khi đọc dữ liệu, rồi gửi dữ liệu adc đó qua i2c tới con Master.vậy em phải làm thế nào?mong các bác cho ý cao kiến.Thanks
nhuhuan86 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 30-09-2009, 07:51 PM   #139
nhamdtk4
Đệ tử 3 túi
 
nhamdtk4's Avatar
 
Tham gia ngày: Feb 2009
Bài gửi: 47
:
Trích:
Nguyên văn bởi inventor_bk View Post
Theo em biết địa chỉ slave là từ datasheet
Điều này đúng với các linh kiện mà bạn ko thể lập trình cho nó (chỉ ghi đọc dữ liệu) còn VĐK thì khác bạn có thể gán cho nó một địa chỉ bất kỳ mà modul I2C có thể hỗ trợ.
nhamdtk4 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 01-10-2009, 04:51 PM   #140
inventor_bk
Đệ tử 1 túi
 
Tham gia ngày: Mar 2008
Bài gửi: 15
:
Cảm ơn bạn nhé.
inventor_bk vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 16-10-2009, 09:41 PM   #141
TRTien
Nhập môn đệ tử
 
Tham gia ngày: Jul 2008
Bài gửi: 8
:
Trích:
Nguyên văn bởi hoanf View Post
Chào các bạn!!
Cho mình post sơ đồ và code của minh lên đây cho các bạn coi và có gì góp ý cho mình nha.

Đây là đoạn code Master: Master truyền một mảng cho Slave và nhận về mảng mà đã chuyển cho Slave để hiển thị lên port_b(kiểm tra hihi...) giống echo.

Code:
#include <16F877A.H>
#fuses XT,NOWDT,NOPROTECT,NOLVP
#use Delay(Clock=4000000)

#use i2c(master, sda=PIN_C4, scl=PIN_C3, force_hw)

void write_I2C(int8 value, int8 slave_addr)
{
   i2c_start();
   i2c_write(slave_addr);
   i2c_write(value);
   i2c_stop();
}

int8 read_I2C(int8 slave_addr)
{
   int8 value_re;
   i2c_start();
   i2c_write(slave_addr + 1);
   value_re = i2c_read(0);
   i2c_stop();
   return value_re;
}

void main()
{
   int8 value_re;
   int8 i;
   const int8 N = 8;
   const int8 DIGITS[N] ={ 0b11111111,
                           0b11111110,
                           0b11111100,
                           0b11111000,
                           0b11110000,
                           0b11100000,
                           0b11000000,
                           0b10000000,
                          };
   const int8 slave_addr = 0x10;

   set_tris_b(0x00);
   while(1){
      for(i = 0; i<8; i++){
         write_I2C(DIGITS[i], slave_addr);
         delay_ms(500);
         value_re = read_I2C(slave_addr);
         output_b(value_re);
      }
   }
}
Còn đây là đoạn code Slave:

Code:
#include <16F877A.H>
#fuses XT,NOWDT,NOPROTECT,NOLVP

#use delay(Clock=4000000)
#use i2c(SLAVE, SDA=PIN_C4, SCL=PIN_C3, address=0x10, force_hw)

int8 value = 0x01;

#INT_SSP
void i2c_isr()
{
   int8 state;

   state = i2c_isr_state();
   if(state < 0x80)
      value = i2c_read();
   if(state == 0x80){
      i2c_write(value);
   }
}

void main()
{
   enable_interrupts(GLOBAL);
   enable_interrupts(INT_SSP);

   set_tris_b(0x00);
   while(1){
      output_b(value);
   }
}
Cho mình hỏi với, sao mình mô phỏng trên proteus theo chương trình này thì không chạy gì cả vậy?
Có ai mô phỏng rồi thì bảo mình với, mới học PIC + I2C nên mình chưa biết gì cả.
TRTien vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 17-10-2009, 07:32 PM   #142
thevinhbk3i
Đệ tử 1 túi
 
Tham gia ngày: Sep 2009
Bài gửi: 16
:
các bác ! em đang làm đồ án môn học thcn về giao thức can ! các bác có biết thì chỉ bảo giùm em với
thevinhbk3i vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 17-10-2009, 07:56 PM   #143
suphuhocdoi89
Đệ tử 1 túi
 
Tham gia ngày: Sep 2009
Bài gửi: 12
:
anh pic bang chủ ơi!
anh add dùm nickname của em vào box 09.em đăng nhập vào diễn đàn nhưng ko thấy hộp box 09.anh kiểm tra lại giúp em với.
username :suphuhocdoi89
suphuhocdoi89 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 28-10-2009, 08:08 AM   #144
success.tl
Nhập môn đệ tử
 
Tham gia ngày: Jul 2008
Bài gửi: 9
:
Vấn đề ngắt i2c trong chip SLAVE

Mình có viết chương trình ngắt cho SLAVE như sau:
//////////////////////////////////////////////////////////
#INT_SSP
void i2c_isr()
{
state = i2c_isr_state();
if(state >=0x80)
i2c_write(mang_truyen[state-0x80]);
else if(state>0) mang_nhan[state-1]=i2c_read();
}
//////////////////////////////////////////////////////////
mang_truyen gán sẵn giá trị, mang-truyen và mang_nhan riêng biệt.
Trong chip MASTER, mình viết vòng lặp để ghi và đọc dữ liệu với SLAVE:
//////////////////////////
while (1)
{
write_I2C(1,2,3,4,5,6);
delay_ms(10);
read_I2C();
...
}
/////////////////////////
Nhưng dữ liệu nhận được từ SLAVE khi hiển thị ra LCD thì chỉ đúng trong lần read_I2C() đầu tiên. Còn khi vòng lặp while(1){...} lặp lại lần thứ 2, 3,... thì thu được dữ liệu là các số 255. không đúng theo yêu cầu.
Hiện tượng trên lặp lại khi mình Reset chip SLAVE.
Còn nếu Reset chip MASTER thì luôn thu được các số 255.
************************************************** ****************
Các bạn giúp mình với.
Cảm ơn nhiều.
success.tl vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 28-10-2009, 08:32 AM   #145
success.tl
Nhập môn đệ tử
 
Tham gia ngày: Jul 2008
Bài gửi: 9
:
À, mình sửa được rồi các bạn ạ!
Bên MASTER đọc liên tiếp 6 bytes, bên SLAVE mình chỉ khai báo mảng truyền 6 phần tử nên mới có hiện tượng này. Mình khai báo lại mảng truyền >6 phần tử thì lại hoạt động đúng.
Như vậy là vì sao nhỉ? Mình mới lập trình nên chưa hiểu lắm!
success.tl vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 10-11-2009, 07:07 AM   #146
thanhluanbk
Nhập môn đệ tử
 
Tham gia ngày: Sep 2008
Bài gửi: 2
:
Em đang chuẩn bị làm về kết nối hai vi điều khiển là 16F và dsPIC33FJMC202. Các bác cho em biết cần lưu ý điều gì, vì hai vi điều khiển nào thuộc 2 họ khác nhau, có xung nhịp khác nhau.

Cảm ơn các bác!
thanhluanbk vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 11-11-2009, 12:09 AM   #147
rikimaru87
Đệ tử 3 túi
 
rikimaru87's Avatar
 
Tham gia ngày: Apr 2009
Bài gửi: 53
:
i2c

Mọi người cho em hỏi tí:
em thiết kế mạch gồm : 4 con eeprom 24c256 và 1 mạch ds1307 giao tiếp i2c. vậy em phải chọn address cho từng thiết bị như thế nào khi giao tiếp ạ :
cụ thể biến address trong hàm dưới này chọn ntn ạ
void write_ext_eeprom(long int address, BYTE data)
{
short int status;
i2c_start();
i2c_write(0xa0);
i2c_write(address>>8);
i2c_write(address);
i2c_write(data);
i2c_stop();
i2c_start();
status=i2c_write(0xa0);
while(status==1)
{
i2c_start();
status=i2c_write(0xa0);
}
i2c_stop();
}
rikimaru87 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 11-11-2009, 12:12 AM   #148
rikimaru87
Đệ tử 3 túi
 
rikimaru87's Avatar
 
Tham gia ngày: Apr 2009
Bài gửi: 53
:
chân A0 A1 của 4 con 24c256 nối lần lượt là 00 01 10 11.
ds1307 nối bình thường .
rikimaru87 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 11-11-2009, 07:42 AM   #149
rikimaru87
Đệ tử 3 túi
 
rikimaru87's Avatar
 
Tham gia ngày: Apr 2009
Bài gửi: 53
:
hi. chào mọi người . em giải quyết đc rùi . tại chưa đọc kĩ datasheet.
rikimaru87 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 04-12-2009, 11:00 PM   #150
vinasheva
Đệ tử 2 túi
 
Tham gia ngày: May 2008
Bài gửi: 28
:
Có ai có mẫu dùng I2C bằng phần mềm cho các loại PIC k có sẵn module I2C?
vinasheva 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


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