PIC Vietnam

Go Back   PIC Vietnam > Microchip PIC > Cơ bản về vi điều khiển và 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

Cơ bản về vi điều khiển và PIC Những bài hướng dẫn cơ bản nhất để làm quen với vi điều khiển PIC

Trả lời
 
Ðiều Chỉnh Xếp Bài
Old 16-06-2006, 09:33 AM   #1
ngulapphuong
Nhập môn đệ tử
 
Tham gia ngày: Jun 2006
Bài gửi: 9
:
Giao tiếp với ROM ngoài với PIC!

Xin hỏi các bác.
Em muốn lưu dữ liệu đo vào bộ nhớ ngoài không mất nội dung.
Khi cần có thể cập nhật và có thể đọc giá trị đó lên máy tính hoặc LCD.
Các bác hướng dẫn em với nhé.
Thanks.
ngulapphuong vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 16-06-2006, 05:36 PM   #2
newuser
Đệ tử 4 túi
 
Tham gia ngày: Feb 2006
Bài gửi: 66
:
thế thì bạn có thể dùng EEPROM như 24Cxx (giao tiếp nối tiếp) hoặc NVRAM (giao tiếp song song) , EEPROM thì rẻ hơn NVRAM, bạn hỏi ở Nhật tảo có rất nhiều. hồi trước tôi mua EEPROM cũ 24C64 chỉ có 1000d/1con, khoái quá tôi mua liền 10 con để dành...
newuser vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 24-02-2009, 12:55 PM   #3
robinson4u
Nhập môn đệ tử
 
Tham gia ngày: Dec 2008
Bài gửi: 8
:
anh ơi cho em hỏi kết nối thêm bộ nhớ với Pic 16F877A thì qua cổng nào vậy anh.à mà code lập trình kết nối khó lắm nhỉ
robinson4u vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 24-02-2009, 10:31 PM   #4
uydanh
Đệ tử 4 túi
 
Tham gia ngày: Jan 2007
Bài gửi: 79
:
Trích:
Nguyên văn bởi robinson4u View Post
anh ơi cho em hỏi kết nối thêm bộ nhớ với Pic 16F877A thì qua cổng nào vậy anh.à mà code lập trình kết nối khó lắm nhỉ
bộ nhớ nào vậy bạn?
- Nếu RAM thì khá nhiều chân.
- Nếu ROM thì tùy loại. Dễ tìm nhất là ROM hỗ trợ giao tiếp I2C (họ 24CXX).
Bạn hãy down datasheet của 1 con ROM về đọc để hiểu giao thức I2C là như thế nào, sau đó đọc tiếp tutorial của anh Nam về I2C của dsPIC thì sẽ hiểu và ứng dụng tốt.
uydanh vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 25-02-2009, 08:16 AM   #5
tungtot_vl
Đệ tử 6 túi
 
tungtot_vl's Avatar
 
Tham gia ngày: Jul 2007
Bài gửi: 154
:
16f877 có eeprom 256 byte. nếu bạn cần eeprom cao hơn có thế dùng 18f4680 1M.
còn nếu dùng eeprom ngoài có thế dùng 24Cxx nối theo chuẩn I2c. có thể dùng bất cứ chân nào của PIC vẫn được (chỉ cần 2 chân). còn nếu dùng eeprom theo chuẩn // AT28Cxx thì cần đến 19 chân của PIC.
dùng cái nào thì code cũng đơn giản cả. nếu bạn dùng CCS cho PIC thì tôi có thể hổ trợ code cho bạn được
tungtot_vl vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 25-02-2009, 12:42 PM   #6
saoden1102
Nhập môn đệ tử
 
saoden1102's Avatar
 
Tham gia ngày: Sep 2006
Bài gửi: 10
:
Làm eeprom 24cxx đi anh. em cũng đang muốn làm con này. mà em ko hiểu tại sao em ko ghi được vào rom. em noi 2 chan A0,A1 voi dat. su dung CCs để viết

Code:
#include <16F877A.h>
#include <DEFS_16F877A.h>
#include <def_877a.h>
//#include <pic.h>
#device *=16// ADC=10
#fuses NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT
#use delay(clock=20000000)
#use rs232(baud=19200,parity=N,xmit=PIN_C6,rcv=PIN_C7)
#use i2c(master,sda=PIN_C4, scl=PIN_C3, force_hw,Slow)

void write_eeprom(long int address,unsigned char data)
 {
   int upper_addr;
   int lower_addr;
   upper_addr=(int)(address >> 8);        
   lower_addr=(int)(address & 0x00FF);

   i2c_start();
   i2c_write(0xa0);
   i2c_write(upper_addr);
   i2c_write(lower_addr);
   i2c_write(data);
   i2c_stop();
   delay_ms(11);
}

//********************************************************

unsigned char read_eeprom(long int address)
{
   unsigned char data;
   int upper_addr;
   int lower_addr;
   upper_addr=(int)(address >> 8);        
   lower_addr=(int)(address & 0x00FF);

   i2c_start();
   i2c_write(0xa0);
   i2c_write(upper_addr);
   i2c_write(lower_addr);
   i2c_start();
   i2c_write(0xa1);
   data=i2c_read(0);
   i2c_stop();
   return(data);
}
//------------------------ax25---------------------------
main()
{
//lam gi thi lam
}

các cao thu xem họ em hai hàm ghi và đọc rom(24c512) có gì sai ko mà em ko đoc được với a.
__________________
Đỉnh của lòng chảo.

thay đổi nội dung bởi: namqn, 26-02-2009 lúc 09:11 PM.
saoden1102 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 25-02-2009, 04:08 PM   #7
tungtot_vl
Đệ tử 6 túi
 
tungtot_vl's Avatar
 
Tham gia ngày: Jul 2007
Bài gửi: 154
:
24cxx

đoạn chương trình dưới tôi đã dùng và chạy hoàn chỉnh bạn tham khảo nhé. cái này tôi chỉnh lại từ file 2464.c của CCS.
để viết vào 1 byte bạn gọi hàm: write_ext_eeprom(add,data);
để đọc ra 1 byte từ 24cxx gọi hàm data = read_ext_eeprom(add)
để 24cxx có địa chỉ nhận 0xa0 bạn cần nối chân A0,1,2 xuống GND.
lưu ý là ko chạy mô phỏng được nhé
chúc vui
Code:
#use i2c(master, fast, sda=EEPROM_SDA, scl=EEPROM_SCL)
////////////////////////////////////////////////////
void write_ext_eeprom(int16 add, BYTE data)
{
   short int status;
   i2c_start(); // bao hieu bat dau giao tiep i2c
   i2c_write(0xa0);  // dia chi thiet bi nhan
   i2c_write(add>>8); // gui den dia chi cao cua thiet bi nhan (dia chi cot)
   i2c_write(add);  // gui den dia chi thap cua thiet bi nhan (dia chi hang)
   i2c_write(data);  // ghi data vao dia chi tren cua thiet bi nhan
   i2c_stop();    // bao hieu ngung ghi
   i2c_start();   // bao hieu bat dau giao tiep
   status=i2c_write(0xa0); // kiem tra trang thai cua thiet bi nhan
   while(status==1)  // lap lai cho den khi thiet bi da nhan xong (No Ack)
   {
      i2c_start();
      status=i2c_write(0xa0);
   }
   delay_us(10);
}

BYTE read_ext_eeprom(int16 add)
{
   BYTE data;
   i2c_start();
   i2c_write(0xa0);
   i2c_write(add>>8);
   i2c_write(add);
   i2c_start();
   i2c_write(0xa1);
   data=i2c_read(0); // No Ack
   i2c_stop();
   return(data);
}
////////////////// the end /////////////////////////

thay đổi nội dung bởi: namqn, 25-02-2009 lúc 04:23 PM. Lý do: định dạng code
tungtot_vl vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 25-02-2009, 10:53 PM   #8
saoden1102
Nhập môn đệ tử
 
saoden1102's Avatar
 
Tham gia ngày: Sep 2006
Bài gửi: 10
:
vâng cám ơn anh nhiều. em test lai đây
__________________
Đỉnh của lòng chảo.
saoden1102 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 26-02-2009, 04:16 PM   #9
saoden1102
Nhập môn đệ tử
 
saoden1102's Avatar
 
Tham gia ngày: Sep 2006
Bài gửi: 10
:
hic hôm nay em ngồi test cả ngày mà ko được. em làm giống như trên mà cũng ko được(em dùng con 24c64 va 24c32). em đọc các giá trị ghi vào trong rom lên mánh tình nhưng ko thấy gì.

Code:
void testrom()
{
int16 i;
unsigned char x;
char DIGITS[15] ={"Tran Minh Duc"};

		if(RCIF)
		{
        x=getch();
        portb=x;
        if(x=='b')
           {
				putch('c');
               output_low(PIN_B4);
               output_high(PIN_B5);
               for(i=0;i<15;i++)
               {
                 x=read_ext_eeprom(i);
                 putch(x);
                 delay_ms(100);
               }
           }
        if(x=='t')
           {
                 output_high(PIN_B4);
                 output_low(PIN_B5);
                  for(i=0;i<15;i++)
                  {
                	write_ext_eeprom(i,DIGITS[i]);
                  }
				putch("a");
           }

		}
}

main()

{
while(1)
{
 testrom();
}

}
__________________
Đỉnh của lòng chảo.

thay đổi nội dung bởi: namqn, 26-02-2009 lúc 06:07 PM. Lý do: định dạng code
saoden1102 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 26-02-2009, 05:51 PM   #10
uydanh
Đệ tử 4 túi
 
Tham gia ngày: Jan 2007
Bài gửi: 79
:
Hình như 24c64 cần 2 byte địa chỉ, trong khi đó 24c32 thì chỉ cần 1 byte địa chỉ. Bạn xem lại thử. Mà phần cứng của bạn đã nối giống như đề nghị của datasheet chưa?
uydanh vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 26-02-2009, 08:55 PM   #11
saoden1102
Nhập môn đệ tử
 
saoden1102's Avatar
 
Tham gia ngày: Sep 2006
Bài gửi: 10
:
mình dùng 2 byte địa chỉ mà (int16), các chân A0,A1,A2 nối suống đất nên địa chỉ thiết bị là a0.
__________________
Đỉnh của lòng chảo.
saoden1102 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 02-03-2009, 03:52 PM   #12
saoden1102
Nhập môn đệ tử
 
saoden1102's Avatar
 
Tham gia ngày: Sep 2006
Bài gửi: 10
:
được rồi các bác a. hôm gì cái mạch của em nhầm nhục quá đi mất.
__________________
Đỉnh của lòng chảo.
saoden1102 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 03-03-2009, 11:13 AM   #13
tungtot_vl
Đệ tử 6 túi
 
tungtot_vl's Avatar
 
Tham gia ngày: Jul 2007
Bài gửi: 154
:
24cxx

Trích:
Nguyên văn bởi saoden1102 View Post
được rồi các bác a. hôm gì cái mạch của em nhầm nhục quá đi mất.
sao bạn ko post toàn bộ code lên xem thế nào. bạn nên làm một bài đơn giản trước để kiểm tra phần cứng như thế nào đã (viết vào vài byte sau đó đọc ra các byte đó). ví dụ write_ext_eeprom(0x0f,0x0f]); read_ext_eeprom(0x0f); nếu đọc ko được thì kiểm tra lại phần cứng hoặc code thế nào đã rồi mới làm code phức tạp hơn.

thay đổi nội dung bởi: tungtot_vl, 03-03-2009 lúc 11:20 AM.
tungtot_vl vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 03-03-2009, 08:07 PM   #14
saoden1102
Nhập môn đệ tử
 
saoden1102's Avatar
 
Tham gia ngày: Sep 2006
Bài gửi: 10
:
em cũng làm như ở trên thôi. Hàm đọc và ghi rom thì dùng hàm của em hay của anh đều được.sử dụng hàm testrom(đã post ở trên) để test. khi máy tính gửi xuống chữ "b" thì dọc dữ liệu từ rom lên. khi máy tính gửi xuống chữ "t" thì ghi dữ liệu vào rom

hôm gì ko làm được là do em bị chết phần cứng. con Pic6f877 của em bị chết đúng chân I2C nên em ko phát hiện ra được(các chân khác vẫn hoạt động bình thường). hôm gì dùng con pic khác thế là chạy luôn. hic mừng quá
mà các bác cho em hỏi có cách nào test pic còn sống hay chết kô nhỉ
__________________
Đỉnh của lòng chảo.
saoden1102 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
Cảm biến hồng ngoại thaychua Cảm biến 17 05-09-2011 09:02 AM
Một số sách nước ngoài hay về điều khiển minhcuong Điều khiển 6 16-12-2006 10:48 AM
tìm ic hồng ngoại kstn Tìm mua sản phẩm 1 18-09-2006 04:50 PM
Thông tin ngoài luồng về PIC falleaf Cơ bản về vi điều khiển và PIC 0 24-02-2006 01:48 PM
Vấn đề tài liệu tiếng Việt hay tiếng nước ngoài? falleaf Trao đổi ngoài luồng 7 25-11-2005 06:52 PM


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