![]() |
|
Tài trợ cho PIC Vietnam |
Giao tiếp USB, CAN, I2C, SPI, USART... Những giao tiếp được tích hợp trên PIC |
![]() |
|
Ðiều Chỉnh | Xếp Bài |
![]() |
#16 |
Đệ tử 3 túi
Tham gia ngày: Jun 2006
Bài gửi: 51
: |
Chào mọi người và Hà.
Mình làm cho nó chạy được rồi. Mình có một thắc mắc mong Hà và mọi người giải thích dùm. Đó là thông số "FORCE_HW" mà trong phần #use i2c sử dụng Mình cho rằng thông số này chỉ được áp dụng khi ta quy định chân của I2C đúng theo chân của PIC quy đinh (đối với Pic hỗ trợ I2C). khi mình áp thông số này thì CCS sẽ biên dịch chương trình sao cho phù hơp với cấu hình phần cứng mà PIC hỗ trợ. Còn nếu kô áp thông số này lên thì nó sẽ thực hiện giao thức I2C hoàn toàn bằng phần mềm. Và còn một lệnh mình chưa rõ đó là : I2C_POLL() Mong Hà và các bạn góp ý. Thân hoanf |
![]() |
![]() |
![]() |
#17 | |
PIC Bang chủ
|
Trích:
Anh chỉ nói đơn giản thế này, nó bao gồm chuẩn về kết nối, có nghĩa là các header em dùng để cắm vào, nôm na là chuẩn cơ khí, chuẩn về đường dây (các loại dây để đảm bảo tín hiệu truyền)..chuẩn cáp, chuẩn thứ ba nôm na là chuẩn về điện là các chuẩn về điện áp, dòng điện, và chuẩn thứ tư là chuẩn logic, chuẩn này ảnh hưởng đến số lượng dây truyền, phương thức truyền nhận, tín hiệu trên các dây... Nói chung, một chuẩn truyền bao gồm các chuẩn như vậy. Anh dùng từ ngữ không chính xác lắm, tụi em có thể tra cứu lại các từ ngữ tiếng Anh, anh chỉ cố gắng giải thích theo nghĩa đơn giản nhất thôi. Như vậy, bây giờ khi em kết nối về mặt cơ khí (với I2C là hàn vào board, hoặc hai dây cắm vào), chuẩn cable là đường mạch in hoặc dây 3000 đồng/sợi... hehehe... vân vân... Vậy cái cuối cùng, là chuẩn về logic và điện tử. Em thấy rằng, nếu như bây giờ, mình lấy 2 dây nối bất kỳ, nối vào nhau, dùng con PIC, lập trình một chân tạo xung clk, một chân truyền tín hiệu, đưa vào MAX232, thì lập tức em sẽ có được giao tiếp RS232. Cái này em hoàn toàn lập trình được, đối với bất kỳ chân nào, chỉ cần phỏng theo chuẩn logic của RS232 là em có thể lập trình được. Như vậy, người ta gọi cách làm đó là giao tiếp theo chuẩn RS232 bằng phần mềm. Và thực tế là người ta đã làm như vậy. Còn với giao tiếp I2C, thì em thấy nó có khác gì RS232 đâu, nó cũng có thể làm được như vậy bằng phần mềm, chỉ cần lập trình về mặt logic đảm bảo chuẩn truyền của nó. Với con PIC bất kỳ, không hỗ trợ I2C, em hoàn toàn có thể thực hiện giao tiếp I2C bằng phần mềm theo cách trên. Với các con PIC hỗ trợ I2C, em có 2 cách để thực hiện giao tiếp I2C là phần cứng và phần mềm. Thế thì phần cứng, thực ra là người ta thêm vào đó một khối module phần cứng, thay cho cái việc mình viết một đoạn chương trình để chạy, thì cái module đó nó làm thay mình, và nó được đóng gói theo đúng chuẩn. CCS C hỗ trợ hai dạng lập trình. Một dạng là lập trình vài dòng để kích hoạt cái module phần cứng của PIC và chạy giao tiếp bằng phần cứng. Một dạng khác, là nó sẽ tạo ra code để thực hiện cái chuẩn giao tiép đó, gọi là phần mềm. Như vậy, nếu em dùng module phần cứng, bắt buộc, em phải dùng đúng cái chân của nó, vì cái chân đó nó gắn vào module phần cứng I2C của PIC, còn nếu em dùng phần mềm, thì như anh nói, em có thể dùng bất kỳ chân I/O nào, và em chỉ cần định nghĩa nó là chân I/O là xong, em hoàn toàn có thể tự làm chuyện này. Hôm nào rảnh, anh sẽ tìm lại code I2C viết bằng phần mềm để tụi em tham khảo. Anh viết lâu rồi, nên phải tìm lại, không hứa trước sẽ nhanh. Trong khi chờ đợi, cho anh cái hình mạch nguyên lý lên đây đi, coi như là đánh đổi nhé ![]() Chúc vui
__________________
Công ty TNHH Thương mại và Giao nhận R&P store.hn@rpc.vn - store.hcm@rpc.vn Học PIC như thế nào? |
|
![]() |
![]() |
![]() |
#18 |
Đệ tử 3 túi
Tham gia ngày: Jun 2006
Bài gửi: 51
: |
Cám ơn anh Falleaf!!
Thực ra mô hình của bạn Hà mới phức tạp nên cần sơ đồ. Chứ mô hình của em chỉ có 2 con PIC 16F877A nối với nhau qua các chân I2C chứ chả có gì nên em kô post lên. Nay thấy anh nói vậy thì để em ngồi vẽ post sơ đồ lên. Còn về chương trình em chưa gửi lên được vì đang tiến hành Optimize. Sẽ post cùng sơ đồ luôn ![]() Thân hoanf |
![]() |
![]() |
![]() |
#19 |
Đệ tử 3 túi
Tham gia ngày: Jun 2006
Bài gửi: 51
: |
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); } } } 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); } } |
![]() |
![]() |
![]() |
#20 |
PIC Bang chủ
|
Đơn giản vậy thôi, các em vừa làm xong một bài hướng dẫn I2C khá đầy đủ rồi
![]() Thanks muchie
__________________
Công ty TNHH Thương mại và Giao nhận R&P store.hn@rpc.vn - store.hcm@rpc.vn Học PIC như thế nào? |
![]() |
![]() |
![]() |
#21 | |
Đệ tử 3 túi
Tham gia ngày: Jun 2006
Bài gửi: 51
: |
Trích:
![]() Vậy chắc phải đợi bài hướng dẫn I2C nâng cao của anh Falleaf qua'. Tui em đang đợi chương trình của anh đây. Thân hoanf |
|
![]() |
![]() |
![]() |
#22 |
Nhập môn đệ tử
|
Hi các bạn!
Hôm nay I2C không chay, mình dò 1 buổi, phát hiện điện áp cấp 2 Board Master va Slave không đủ 5V và bị lệch(đã nối mass chung 2 board): Master ->4.9V, Slave -> 4.2V. Các bạn nên kiểm tra dòng, áp mạch khi I2C không chạy với chtr đã chuẩn. Chúc mừng hoanf, bạn đã thành công!! |
![]() |
![]() |
![]() |
#23 | |
Đệ tử 3 túi
Tham gia ngày: Jun 2006
Bài gửi: 51
: |
Trích:
Ah còn cái vụ nối mass chung là chuối nhất luôn đo'. Làm cho chuẩn I2C từ 2 dây trở thành 3 dây ![]() Giờ chỉ còn 1 cách đó là nối đất cả 2 board là thành chuẩn 2 dây. Hix. Ah còn cái zu áp thấp này tui mới thấy đó nha. Đúng là gặp mấy lỗi này thì trời biết. Ông Hà này hay lắm mới tìm ra lỗi này đó. Thân. Cuối tuần vui vẻ nha. hoanf |
|
![]() |
![]() |
![]() |
#24 | |
PIC Bang chủ
|
Trích:
Con PIC16F84A hình như không có tích hợp chức năng I2C? Nếu như anh không nhớ lầm?! Bắc thang lên hỏi ông trời, ông mà không biết tui mời ông ggô Chúc vui
__________________
Công ty TNHH Thương mại và Giao nhận R&P store.hn@rpc.vn - store.hcm@rpc.vn Học PIC như thế nào? |
|
![]() |
![]() |
![]() |
#25 |
PIC Bang chủ
|
À, nếu đang nghiên cứu I2C thì anh nghĩ nhân tiện nên đi cho nó tới nơi tới chốn. Tụi em thử làm cái I2C bằng phần mềm xem, tất nhiên source code thì coi như anh cung cấp rồi
![]() Ngoài ra, để động viên tinh thần học tập của tụi em, anh xin tặng mỗi em 1 con PIC (nếu tụi em ở SG, thì ghé cửa hàng STH để chọn bất kỳ con nào có ở cửa hàng mà em muốn). Gửi thông tin cá nhân cho anh, để anh nhắn cho anh Lợi. Hiện tại anh đi rồi nên không thể chuyển phát nhanh cho tụi em được (mỗi lần chuyển tốn tiền, và nếu nhờ Chính chuyển thì tốn tiền của Chính). Anh không biết Hà ở đâu, nhưng hình như Hoàn thì ở HCM và có gặp anh rồi thì phải. Nếu Hà ở nơi khác, Hoàn có thể nhận giúp và chuyển lại cho Hà sau có được không? Tuỳ tụi em quyết định Chúc vui.
__________________
Công ty TNHH Thương mại và Giao nhận R&P store.hn@rpc.vn - store.hcm@rpc.vn Học PIC như thế nào? |
![]() |
![]() |
![]() |
#26 | |
Trưởng lão PIC bang
|
Trích:
Ngoài ra còn có chương trình cho PIC18 viết trong C18, dùng kỹ thuật bit-banging, đã thử nghiệm rồi. Các bạn có thể tìm được nhiều ví dụ tương tự trên net. 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 |
|
![]() |
![]() |
![]() |
#27 | |
Đệ tử 8 túi
|
![]() Trích:
Hoanf có tham gia dự án PID thì phải. Tha hồ mà nhận chip nhẩy. ![]() Mấy bạn cứ gửi địa chỉ lên đây, mình sẽ chuyển chip cho. Bạn nào muốn viết code I2C bằng phần mềm, ngôn ngữ ASM, có thể ghé mình, cho mượn tài liệu mà nghiên cứu luôn. Hiểu được cách viết bằng ASM, chuyển code sang C chắc cũng không có vấn đề gì lớn nhẩy. ![]() thay đổi nội dung bởi: ntc, 16-09-2006 lúc 11:54 AM. |
|
![]() |
![]() |
![]() |
#28 |
Đệ tử 1 túi
Tham gia ngày: Sep 2006
Bài gửi: 17
: |
Trời ui sao các cụ lão làng nhà ta lai viết giao tiếp bằng ccs không vậy.Tôi thì viết truyền thông I2C bằng cả hai ngôn ngữ luôn ==masterviết bằng CCS và claver viết bằng ASM chạy cực tốt==.MASTER DÙNG 18F452 VÀ CLAVER DUNG 18F4431.HÔM NÀO TUI POST LÊN CHO ANH EM NGHIÊN CỨU CHƠI,hom nay do không đem theo chương trình.
Bác FALLEAF ơi Tôi là thành viên mới vào diễn đàn ghé qua forum này thấy hay nên nhảy vào không biết sau khi post chương trình này lên thì tui được đệ tử mấy túi nhỉ..8-x hehehe.Hỏi thử cho biết thôi chứ không có gì đau Phong độ chỉ là thoáng qua Trình độ mới là vĩnh cửu Chú mèo đihia tái bút thanks |
![]() |
![]() |
![]() |
#29 |
PIC Bang chủ
|
HI, mấy túi không quan trọng, vì có thể spam thật nhiều sẽ có nhiều túi
![]() Hãy cho những gì bạn muốn lấy. Đó là nguyên tắc vô cùng quan trọng. Chúc vui.
__________________
Công ty TNHH Thương mại và Giao nhận R&P store.hn@rpc.vn - store.hcm@rpc.vn Học PIC như thế nào? |
![]() |
![]() |
![]() |
#30 |
Đệ tử 2 túi
Tham gia ngày: Feb 2006
Bài gửi: 27
: |
![]() Bẩm báo PIC bang chủ và các trưởng lão? Như bang chủ đã nói là lên học viết ASM trước rùi chuyển qua các ngôn ngữ khác sẽ dễ. Em thấy cần một tutorial cho I2C bằng ASM vì em mới học nên chỉ biết ASM thui. Các cao thủ ra chiêu bằng C ào ào chẳng hiểu mô tê chi hết á.
Xin cảm ơn. |
![]() |
![]() |
![]() |
|
|