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 12-09-2007, 01:23 AM   #1
sandro_bk
Đệ tử 4 túi
 
sandro_bk's Avatar
 
Tham gia ngày: Jul 2007
Bài gửi: 66
:
ghi và đọc eeprom?

tui có bảng giá trị sin,muốn ghi vào eeprom tui dùng lệnh sau
#rom 0x2100={1,2,3,4,5,6,7,8}
khi bắt đầu chương trình pic có tốn thời gian để ghi giá trị này vào eeprom hay ko?theo tui thấy là có
sau đó đọc ra dùng lệnh
value = read_eeprom (address)
address từ 0 -255 có đúng ko?
tui viết bằng CCS,ai biết chỉ dùng
sandro_bk vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 13-09-2007, 11:14 AM   #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
Trích:
Nguyên văn bởi sandro_bk View Post
tui có bảng giá trị sin,muốn ghi vào eeprom tui dùng lệnh sau
#rom 0x2100={1,2,3,4,5,6,7,8}
khi bắt đầu chương trình pic có tốn thời gian để ghi giá trị này vào eeprom hay ko?theo tui thấy là có
sau đó đọc ra dùng lệnh
value = read_eeprom (address)
address từ 0 -255 có đúng ko?
tui viết bằng CCS,ai biết chỉ dùng
Với CCS C,

+ Để ghi vào internal eeprom:
Code:
write_eeprom(address,value);
+ Để đọc ra từ internal eeprom:
Code:
read_eeprom(address);
Các thông số, ví dụ như address thì phải tùy thuộc vào từng chip mà có địa chỉ từ đâu đến đâu, cả giá trị ghi vào nữa. Về thời gian tiêu tốn để gọi mấy hàm này, CCS C help đều nói rất rõ.

Còn #rom 0x..., quả thật chưa dùng, bạn đọc help thử xem.
__________________
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
nhh vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 13-09-2007, 01:04 PM   #3
sandro_bk
Đệ tử 4 túi
 
sandro_bk's Avatar
 
Tham gia ngày: Jul 2007
Bài gửi: 66
:
cám ơn bạn đã trả lời,nhưng có điều tui ghi đến 256 giá trị nếu dùng lệnh ghi
write_eeprom(address,value); thì phải làm đến 256 lệnh hơi bị oải,với lại mỗi lệnh xử lý hết vài ms thì 1 đống đó ít nhất cũng mất vài giây,với lại value tui ghi vào lớn hơn 255 được ko?tui dùng 18f4331
sandro_bk vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 13-09-2007, 07:38 PM   #4
thaithienanh
Đệ tử 7 túi
 
thaithienanh's Avatar
 
Tham gia ngày: Jul 2006
Bài gửi: 189
:
Send a message via Yahoo to thaithienanh
Trích:
Nguyên văn bởi sandro_bk View Post
cám ơn bạn đã trả lời,nhưng có điều tui ghi đến 256 giá trị nếu dùng lệnh ghi
write_eeprom(address,value); thì phải làm đến 256 lệnh hơi bị oải,với lại mỗi lệnh xử lý hết vài ms thì 1 đống đó ít nhất cũng mất vài giây,với lại value tui ghi vào lớn hơn 255 được ko?tui dùng 18f4331
Cách dùng "#rom" như bạn nói thì hoàn toàn đuợc nhưng nó chỉ đuợc áp dụng khi bạn dùng Rom cho mục đích dạng như là một "bảng tra" chẳng hạn bởi vì thực chất nó rất là bất tiện (không linh hoạt) bởi lẽ chỉ cho phép ta đặt vào đó những phần tử là hằng số mà thui, nếu mục đích chỉ là muốn ghi vào Rom những giá trị cố định biết trước thì dùng nó là phương cách tối ưu , còn đối với lệnh "write_eeprom(address,value);" thì bạn có thể chèn vào vị trí "value" là một biến động và tiếp theo quan trọng nhất là bạn phải học cách điều khiển giá trị của biến này cho hiệu quả và chính xác phù hợp với đề tài của mình ví dụ như sử dụng những vòng lặp, mệnh đề điều kiện,.... . Nếu bạn muốn ghi tăng lên mãi thì ô nhớ Rom sẽ nhảy đến vị trí tận cùng của nó luôn, hoặc có thể "nhảy cóc" nếu thay đổi địa chỉ đi

Thân.
__________________
_____________________________Tri nhân tri tự bất tri tâm_____________________________
_ _ _ _ _ _ _ _ Yêu mến tất cả anh em Picvietnam.com _ _ _ _ _ _ _ _
. . . . . . . . . . . . . . . . Để post đuợc một câu hỏi rõ ràng xin tham khảo link sau : . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . http://www.picvietnam.com/forum/showthread.php?t=1263. . . . . . . . . . . . . . . .
thaithienanh vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 12-02-2009, 12:41 PM   #5
minhminh17
Nhập môn đệ tử
 
Tham gia ngày: Apr 2008
Bài gửi: 4
:
Question làm ơn chỉ mình cách ghi đọc cụ thẻ bằng cách "value" là một biến động

Trích:
Nguyên văn bởi thaithienanh View Post
Cách dùng "#rom" như bạn nói thì hoàn toàn đuợc nhưng nó chỉ đuợc áp dụng khi bạn dùng Rom cho mục đích dạng như là một "bảng tra" chẳng hạn bởi vì thực chất nó rất là bất tiện (không linh hoạt) bởi lẽ chỉ cho phép ta đặt vào đó những phần tử là hằng số mà thui, nếu mục đích chỉ là muốn ghi vào Rom những giá trị cố định biết trước thì dùng nó là phương cách tối ưu , còn đối với lệnh "write_eeprom(address,value);" thì bạn có thể chèn vào vị trí "value" là một biến động và tiếp theo quan trọng nhất là bạn phải học cách điều khiển giá trị của biến này cho hiệu quả và chính xác phù hợp với đề tài của mình ví dụ như sử dụng những vòng lặp, mệnh đề điều kiện,.... . Nếu bạn muốn ghi tăng lên mãi thì ô nhớ Rom sẽ nhảy đến vị trí tận cùng của nó luôn, hoặc có thể "nhảy cóc" nếu thay đổi địa chỉ đi

Thân.
mình vừa viết xong chương trình đọc giá trị biến trở bằng bộ adc pic bây giờ mình rất mong bạn giúp mình ghi vào eeprom nội pic bằng nút nhấn được không mình cần 1 nút start và 1 nút stop để ghi nội dung và ngừng ghi nội dung mong bạn giúp đỡ gấp mình viết bằnng ccs c
minhminh17 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 13-09-2007, 07:58 PM   #6
sandro_bk
Đệ tử 4 túi
 
sandro_bk's Avatar
 
Tham gia ngày: Jul 2007
Bài gửi: 66
:
tui muốn ghi một bảng giá trị cố định,tui dùng lệnh #rom.... nhưng có vẻ như không đọc giá trị trong eeprom được,vì tui thử đọc ra led thì ko có gì cả,với lại giá trị nạp vào có thể là số 16 bit phải ko?
sandro_bk vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 14-09-2007, 03:25 AM   #7
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
Đa số các phần mềm nạp PIC đều cho phép nạp trước nội dung nào đó vào EEPROM, do đó bảng hằng số của bạn có thể được nạp vào EEPROM trong quá trình bạn nạp chương trình cho PIC. Sau đó trong chương trình bạn chỉ việc đọc các hằng số đó, và việc đọc diễn ra rất nhanh.

Ngay cả khi ở đầu chương trình mà bạn phải ghi các hằng số này thì nó cũng không ảnh hưởng gì đến chương trình, vì thao tác này chỉ diễn ra có một lần.

Theo tài liệu của CCS C thì họ có một ví dụ về cách dùng built-in EEPROM của PIC (tên tập tin là ex_intee.c). Tôi không dùng CCS C, chỉ đọc tài liệu hướng dẫn của nó và nhận thấy có thông tin như vậy (nội dung của tập tin ex_intee.c được liệt kê ở phần phụ lục của tài liệu hướng dẫn C Compiler Reference Manual của CCS C).

Nếu bạn muốn cập nhật bảng hằng số trong EEPROM đó thì bạn phải ghi vào từng ô nhớ bằng hàm write_eeprom() thôi.

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 19-09-2007, 02:07 AM   #8
sandro_bk
Đệ tử 4 túi
 
sandro_bk's Avatar
 
Tham gia ngày: Jul 2007
Bài gửi: 66
:
cám ơn bạn đã quan tâm,mình có một bảng sin có 256 giá trị,giá trị là số 16 bit, hình như eeprom chỉ cho phép ghi data 8 bit thì phải,ko biết có cách nào ko?
sandro_bk vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 19-09-2007, 02:42 AM   #9
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 sandro_bk View Post
cám ơn bạn đã quan tâm,mình có một bảng sin có 256 giá trị,giá trị là số 16 bit, hình như eeprom chỉ cho phép ghi data 8 bit thì phải,ko biết có cách nào ko?
PIC10 đến PIC18 là các chip vi điều khiển 8-bit, có độ rộng kênh dữ liệu là 8 bit. Do đó, nếu dùng EEPROM hay RAM của các chip này thì kiểu dữ liệu intrinsic có độ dài 8-bit. Tuy nhiên, nếu lưu vào flash của các PIC18 thì vẫn có thể lưu các giá trị 16-bit, vấn đề ở chỗ các chip này vẫn chỉ xử lý dữ liệu cơ sở là 8-bit.

PIC24 và dsPIC30/dsPIC33 là các chip 16-bit, có độ rộng kênh dữ liệu là 16-bit. Như vậy, EEPROM của PIC24/dsPIC30 hay RAM của PIC24/dsPIC30/dsPIC33 sẽ có độ dài 16-bit. Các chip này có flash gồm các word 24-bit.

Bạn cần xác định xem có cần độ phân giải 16-bit cho một bảng có 256 giá trị hay không.

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 13-02-2009, 01:48 PM   #10
xuanhiendk2
Đệ tử 3 túi
 
Tham gia ngày: Jan 2009
Bài gửi: 52
:
Các bạn cho mình hỏi ví dụ mình muốn lưu một chuỗi "XINCHAO" vào eeprom sau đó lại đọc từ eeprom ra thì lúc này chuỗi XINCHAO sẽ được mã hóa như thế nào?
xuanhiendk2 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 13-02-2009, 02:18 PM   #11
tungtot_vl
Đệ tử 6 túi
 
tungtot_vl's Avatar
 
Tham gia ngày: Jul 2007
Bài gửi: 154
:
eeprom

Trích:
Nguyên văn bởi xuanhiendk2 View Post
Các bạn cho mình hỏi ví dụ mình muốn lưu một chuỗi "XINCHAO" vào eeprom sau đó lại đọc từ eeprom ra thì lúc này chuỗi XINCHAO sẽ được mã hóa như thế nào?
cái này còn phải xem cách mã hóa của bạn như thế nào. chữ xinchao mỗi chữ là 1 byte hay mỗi chữ là nhiều byte
có 2 cách lưu: trực tiếp và gián tiếp
lưu trực tiếp tức là lưu toàn bộ những gì bạn cần lưu vào eeprom sau đó đọc nó ra
gián tiếp tức là bạn dùng một biến trung gian để lưu nó vào eeprom sau đó khi cần lấy biế trung gian này ra rồi từ đó tìm lại cái bạn cần
tungtot_vl vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 15-02-2009, 11:38 AM   #12
nguyennam8888
Đệ tử 3 túi
 
Tham gia ngày: Dec 2008
Bài gửi: 50
:
Trích:
Nguyên văn bởi tungtot_vl View Post
cái này còn phải xem cách mã hóa của bạn như thế nào. chữ xinchao mỗi chữ là 1 byte hay mỗi chữ là nhiều byte
có 2 cách lưu: trực tiếp và gián tiếp
lưu trực tiếp tức là lưu toàn bộ những gì bạn cần lưu vào eeprom sau đó đọc nó ra
gián tiếp tức là bạn dùng một biến trung gian để lưu nó vào eeprom sau đó khi cần lấy biế trung gian này ra rồi từ đó tìm lại cái bạn cần
vậy khi nào nên lưu trực tiếp là tốt nhất , khi nào gian tiếp là tốt, rồi có phải lưu trực tiếp khi lấy data ra sẽ nhanh hơn gián tiếp, mong chỉ giáo
nguyennam8888 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 16-02-2009, 12:24 PM   #13
xuanhiendk2
Đệ tử 3 túi
 
Tham gia ngày: Jan 2009
Bài gửi: 52
:
Trích:
Nguyên văn bởi tungtot_vl View Post
cái này còn phải xem cách mã hóa của bạn như thế nào. chữ xinchao mỗi chữ là 1 byte hay mỗi chữ là nhiều byte
có 2 cách lưu: trực tiếp và gián tiếp
lưu trực tiếp tức là lưu toàn bộ những gì bạn cần lưu vào eeprom sau đó đọc nó ra
gián tiếp tức là bạn dùng một biến trung gian để lưu nó vào eeprom sau đó khi cần lấy biế trung gian này ra rồi từ đó tìm lại cái bạn cần
Ví dụ như em khai báo:
Char Const a[7] = "XINCHAO" thì chúng sẽ là các ký tự mã ASCII phải ko anh?
xuanhiendk2 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 04-06-2009, 02:49 AM   #14
the_duyet
Đệ tử 1 túi
 
Tham gia ngày: Mar 2008
Nơi Cư Ngụ: Hạ Long City
Bài gửi: 18
:
Send a message via Yahoo to the_duyet
Talking

Bác nào có ví dụ về ghi và đọc eeprom cho giá trị 16 bit thì cho a e tham khảo với, chứ nói thế này ứng dụng khó quá. Giả sử :
Trích:
int16 a;
int8 b,c;
void ghi_eeprom()
{
b=a/255;
c=a%255;
write_eeprom(1,c);
write_eeprom(2,b);
}
void doc_eeprom()
{
b=read_eeprom(2);
c=read_eeprom(1);
a=b*255+c;
}
Thì nó chạy thế nào,mình đã chạy thử nhưng ko thực hiện được phép nhân bên trên.hix

thay đổi nội dung bởi: the_duyet, 04-06-2009 lúc 02:51 AM. Lý do: định dạng lại code
the_duyet vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 16-02-2009, 11:33 AM   #15
tungtot_vl
Đệ tử 6 túi
 
tungtot_vl's Avatar
 
Tham gia ngày: Jul 2007
Bài gửi: 154
:
lưu trực tiếp khi data bạn lưu vào eeprom phải nhỏ hơn dung lượng của eeprom khi đó code sẽ đơn giản hơn nhiều
lưu gián tiếp thì cần khi số byte của bạn cần lưu quá lớn, lớn hơn nhiều lần so với dung lượng eeprom của vdk bạn đang dùng. cái này code cần có thêm bộ giải mã để so sánh và lấy data ra. dương nhiên là data đã có sẳn và được lưu trong rom
tungtot_vl 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à 06:50 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