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 18-02-2009, 09:58 AM   #1
thientaisodo
Đệ tử 4 túi
 
Tham gia ngày: Dec 2008
Nơi Cư Ngụ: Hà Tĩnh - Hà Nội
Bài gửi: 61
:
Send a message via Yahoo to thientaisodo
Cảm ơn bạn, mình đã hiểu rồi, vậy là địa chỉ của EEPROM sẽ được định nghĩa từ các chân trên nó và có 8 địa chỉ từ 00 - 07 đúng không bạn ?
thientaisodo vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 18-02-2009, 03:52 PM   #2
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 thientaisodo View Post
Cảm ơn bạn, mình đã hiểu rồi, vậy là địa chỉ của EEPROM sẽ được định nghĩa từ các chân trên nó và có 8 địa chỉ từ 00 - 07 đúng không bạn ?
Đúng vậy.

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-04-2009, 12:50 PM   #3
haquang
Nhập môn đệ tử
 
Tham gia ngày: Sep 2006
Bài gửi: 3
:
Các anh cho em hỏi vấn đề về I2C cái: Em copy chương trình ở thread này và dùng giao tiếp 2 PIC thì có vấn đề như sau: Khi sử dụng để mô phỏng thì chạy bình thường như ý muốn nhưng khi chạy với mạch thật và thêm modul RS232 để đưa lên Terminal trên PC để check thì chỉ thấy có FF được gửi lên. Cao thủ nào từng gặp lỗi này thì gợi ý em cách debug cái many thanks!

Code: Master
Code:
[#include <16F877A.H>
#include <DEFS_16F877A.h>
#include <def_877a.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use Delay(Clock=20000000)
#define use_portd_lcd TRUE
#include <lcd.c>
#include <STDLIBM.H>
//#include <toanlcd.c>
#use i2c(master, sda=PIN_C4, scl=PIN_C3)
#use rs232(baud=19200,parity=N,xmit=PIN_C6,rcv=PIN_C7)
int8 value_re;

unsigned char* data_in;
const int8 N = 20;
//========================================================
 void putch(unsigned char a)
{
/* output one byte */
while(!TXIF) /* set when register is empty */
continue;
TXREG = a;
}
void write_I2C(unsigned char* digit,int8 slave_addr,int n)
{
int i;
i2c_start();
i2c_write(slave_addr);
for (i=0;i<N;i++)
i2c_write(digit[i]);
i2c_start();
i2c_write(slave_addr);
i2c_stop();
}
void read_I2C()
{
int i;
i2c_start();
i2c_write(0x11);
for (i=0;i<N;i++)
{
 value_re = i2c_read();
 data_in[i]=value_re;
}
i2c_start();
i2c_write(0x11);
i2c_stop();
}

void main()
{
int8 value_re=2;
int8 i=10;


char* DIGITS[N] ={ 		   0b11111111,
                           0b11111110,
                           0b11111100,
                           0b11111000,
                           0b11110000,
                           0b11100000,
                           0b10101010,
                           0b01010101,
                          };
const int8 slave_addr = 0x10;
set_tris_b(0x00);
putch('a');
data_in=malloc(50);
//write_I2C(DIGITS,0x10,8);

read_I2C();
for (i=0;i<N;i++)
{
output_b(data_in[i]);
putch(data_in[i]);
delay_ms(1000);
}

}]
Code slave:
Code:
:[#include <16F877A.H>
#include <STDLIBM.H>
#fuses HS,NOWDT,NOPROTECT,NOLVP

#use delay(Clock=20000000)
#use i2c(SLAVE, SDA=PIN_C4, SCL=PIN_C3, address=0x10)
char* data;
int8 value = 0x01,valueh=0,valuel=0;
int8 state;
#INT_SSP
void i2c_isr()
{
state = i2c_isr_state();
if(state >=0x80)i2c_write(data[state-0x80]);
else if(state>0)data[state-1]=i2c_read();
}

void main()
{
const int N=20;
int i;
data=malloc(N);
for (i=0;i<N;i++)
data[i]=i;
enable_interrupts(INT_SSP);
enable_interrupts(GLOBAL);
set_tris_b(0x00);
while(1);
}]
thanks

thay đổi nội dung bởi: namqn, 22-04-2009 lúc 04:20 PM. Lý do: định dạng code
haquang vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 23-06-2009, 11:04 AM   #4
rien
Đệ tử 1 túi
 
Tham gia ngày: Sep 2008
Bài gửi: 13
:
Trích:
Nguyên văn bởi haquang View Post
Các anh cho em hỏi vấn đề về I2C cái: Em copy chương trình ở thread này và dùng giao tiếp 2 PIC thì có vấn đề như sau: Khi sử dụng để mô phỏng thì chạy bình thường như ý muốn nhưng khi chạy với mạch thật và thêm modul RS232 để đưa lên Terminal trên PC để check thì chỉ thấy có FF được gửi lên. Cao thủ nào từng gặp lỗi này thì gợi ý em cách debug cái many thanks!
Code:
void read_I2C()
{
int i;
i2c_start();
i2c_write(0x11);
for (i=0;i<N-1;i++)
{
 value_re = i2c_read(1);
 data_in[i]=value_re;
}
value_re = i2c_read(0);
data_in[N-1]=value_re;
i2c_stop();
}
Bạn thử chương trình read_i2c() này xem thử có được không

thay đổi nội dung bởi: rien, 23-06-2009 lúc 11:20 AM.
rien 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à 10:09 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