Cách sử dụng Arduino EEPROM để lưu dữ liệu giữa các chu kỳ nguồn

Cách sử dụng Arduino EEPROM để lưu dữ liệu giữa các chu kỳ nguồn

Bạn có biết Arduino có thể lưu trữ dữ liệu khi nó bị tắt không? Không phải là bản phác thảo được lưu trữ trong bộ nhớ flash. Tôi đang nói về dữ liệu biến trong EEPROM. Hãy tham gia cùng tôi khi tôi chỉ cho bạn cách đọc và viết nó cũng như những gì nó có thể làm cho các dự án của bạn.





Nếu bạn là người mới sử dụng Arduino, hãy đảm bảo rằng bạn đã xem qua hướng dẫn cho người mới bắt đầu .





EEPROM là gì?

EEPROM là viết tắt của Điện xóa được Programmable Read-Only Memory . Đó là một loại bộ nhớ không bay hơi. Đừng lo lắng nếu bạn không hiểu điều đó có nghĩa là gì. Nó chỉ đơn giản là lưu trữ dữ liệu ngay cả khi nguồn điện bị loại bỏ (không giống như RAM , cần điện để giữ lại bất kỳ dữ liệu nào).





EEPROM được tích hợp vào vô số bộ xử lý, chẳng hạn như mảng cổng lập trình trường (FPGA) được sử dụng trong Matrix Creator Pi HAT. Tất cả các Arduinos đều có sẵn EEPROM, nhưng dung lượng thay đổi theo từng kiểu máy. Hãy chắc chắn rằng bạn đã xem hướng dẫn mua hàng của chúng tôi để biết thêm chi tiết về mỗi bảng.

Làm thế nào nó hoạt động?

EEPROM được xóa bằng điện và được lập trình bằng Đường hầm Fowler-Nordheim . Bạn không cần phải biết các chi tiết kỹ thuật để có thể sử dụng nó. Tiền đề cơ bản là điện được sử dụng để thay đổi dữ liệu nhị phân (nhị phân là gì). Nó có thể được đọc, xóa và viết lại bằng điện tử.



May mắn thay, Ngôn ngữ Arduino giúp bạn dễ dàng thay đổi dữ liệu mà không cần bằng cấp về khoa học máy tính.

Kỳ vọng cuộc sống

Mặc dù có thể dễ dàng sử dụng EEPROM trong Arduino, nhưng nó có tuổi thọ hạn chế. EEPROM được chỉ định để xử lý 100.000 chu kỳ đọc / xóa. Điều này có nghĩa là bạn có thể ghi và sau đó xóa / ghi lại dữ liệu 100.000 lần trước khi EEPROM trở nên không ổn định. Thực tế, Atmel (các nhà sản xuất chất bán dẫn Arduino 'Chip') có thể xử lý số chu kỳ cao hơn hoặc thấp hơn, tùy thuộc vào dung sai của từng bộ xử lý.





Khi một vị trí đã được viết và xóa quá nhiều lần, nó có thể bắt đầu trở nên không đáng tin cậy. Nó có thể không trả về dữ liệu chính xác hoặc trả về giá trị từ một bit lân cận.

Điều này nghe có vẻ giống như rất nhiều lần ghi, nhưng có thể dễ dàng đạt đến giới hạn này nếu đọc và viết theo chương trình (trong vòng , Ví dụ). Việc đọc dữ liệu không làm suy giảm silicon, chỉ có viết lách . Bạn có thể đọc dữ liệu từ EEPROM bao nhiêu tùy thích mà không sợ!





Điều quan trọng cần lưu ý là giới hạn này áp dụng cho từng vị trí bộ nhớ. Arduino của bạn có thể có sẵn 1.000 vị trí bộ nhớ trở lên trong EEPROM, vì vậy nếu bạn ghi quá nhiều lần vào một vị trí, thì chỉ vị trí đó bị ảnh hưởng chứ không phải bất kỳ vị trí nào khác. Sau này tôi sẽ thảo luận mặc san lấp mặt bằng , có thể giảm hao mòn EEPROM bằng cách phân phối dữ liệu đồng đều - điều mà SSD tận dụng.

Nó hữu ích cho điều gì?

EEPROM cực kỳ hữu ích cho các dự án Arduino của bạn. Vì nó ghi nhớ dữ liệu ngay cả khi nguồn điện bị ngắt, bạn có thể lưu trữ trạng thái của Arduino. Có thể bạn có thể chế tạo một tháp pháo laser ghi nhớ vị trí của nó hoặc còn lại bao nhiêu 'đạn'. Bạn có thể sử dụng nó để kiểm soát thiết bị của mình và ghi lại số lần thiết bị của bạn đã được kích hoạt.

EEPROM phù hợp nhất cho những thứ như cài đặt hoặc điểm số cao. Nếu bạn muốn thường xuyên ghi dữ liệu phức tạp, có thể xem xét một lá chắn ethernet (có khe cắm SD tích hợp) hoặc Raspberry Pi.

Đọc và viết

Bây giờ lý thuyết đã xong, chúng ta hãy xem cách đọc và ghi một số dữ liệu! Đầu tiên, hãy bao gồm thư viện (điều này đi kèm với Arduino IDE):

#include

Bây giờ hãy viết một số dữ liệu:

EEPROM.write(0, 12);

Điều này viết số 12 đến vị trí EEPROM 0 . Mỗi lần ghi mất 3,3 mili giây ( bệnh đa xơ cứng , 1000ms = 1 giây). Lưu ý cách bạn không thể viết thư ( char ), chỉ cho phép các số từ 0 đến 255. Đây là lý do tại sao EEPROM là lý tưởng cho cài đặt hoặc điểm số cao, nhưng không tốt cho tên hoặc từ của người chơi. Có thể lưu trữ văn bản bằng phương pháp này (bạn có thể ánh xạ từng chữ cái trong bảng chữ cái thành một số), tuy nhiên bạn sẽ cần phải có nhiều vị trí bộ nhớ - một vị trí cho mỗi chữ cái.

Đây là cách bạn đọc dữ liệu đó:

cách sửa lỗi âm thanh trên windows 10
EEPROM.read(0);

Số không là địa chỉ bạn đã viết thư trước đó. Nếu bạn chưa viết thư tới một địa chỉ trước đây, nó sẽ trả về giá trị lớn nhất ( 255 ).

Có một số phương pháp hữu ích hơn một chút có sẵn. Giả sử bạn muốn lưu trữ một vị trí thập phân hoặc một chuỗi:

EEPROM.put(2,'12.67');

Điều này ghi dữ liệu đến nhiều vị trí - một cái gì đó sẽ dễ dàng để tự viết, nhưng không kém phần tiện dụng. Bạn vẫn cần phải theo dõi số lượng vị trí mà nó đã được ghi vào, vì vậy bạn không vô tình ghi đè lên dữ liệu của mình! Bạn phải sử dụng hiểu được phương pháp để lấy lại dữ liệu này:

float f = 0.00f;
EEPROM.get(2, f);

Giá trị từ get được lưu trữ trong float NS Biến đổi. Lưu ý cách điều này được khởi tạo với 0,00f như giá trị. Các NS cho trình biên dịch biết rằng bạn có thể muốn lưu trữ một số lượng lớn trong biến này, vì vậy nó thiết lập một số cấu hình bổ sung trong quá trình biên dịch.

Các Tài liệu EEPROM trên Trang web Arduino có rất nhiều ví dụ khác.

Mang san lấp mặt bằng

Cân bằng độ mòn là một kỹ thuật được sử dụng để giảm độ mài mòn và tăng tuổi thọ của EEPROM. Nếu bạn chỉ đang thực hiện một dự án nhỏ, bạn có thể không cần phải lo lắng về điều này.

Điều đơn giản nhất bạn có thể làm để duy trì tuổi thọ của EEPROM là giới hạn việc ghi của bạn ở một vị trí cụ thể. Bạn có thể thực hiện việc này bằng cách đọc địa chỉ trước và nếu giá trị bạn muốn ghi đã có sẵn thì không cần phải viết lại (hãy nhớ rằng việc đọc dữ liệu không có hại gì). Đây là cách bạn sẽ làm điều đó:

int safeWrite(int data, address) {
if(EEPROM.read(address) != data) {
EEPROM.write(address, data);
}
}

Đó là một đoạn mã khá đơn giản, tuy nhiên nó chỉ hoạt động với các số nguyên! Thay vì phát minh lại bánh xe, hãy sử dụng chức năng được tích hợp trong thư viện Arduino EEPROM:

EEPROM.update(address, val);

Phương thức này có chính xác chữ ký giống như viết , mặc dù nó có thể làm giảm đáng kể số lần ghi cần thiết!

Nếu bạn cần ghi nhiều dữ liệu và lo lắng về việc làm mòn silicon, bạn có thể theo dõi số lần ghi mà bạn thực hiện, mặc dù điều này sử dụng nhiều dữ liệu hơn. Đây là một triển khai sơ bộ trong mã giả :

var address = 0
var writeCount = 0
if(writeCount > 75,000)
writeCount = 0
address += 1
EEPROM.write(address, data)

Bạn sẽ cần phải lưu trữ địa chỉ và writeCount trong EEPROM (và writeCount sẽ cần được chia thành các vị trí địa chỉ). Phần lớn thời gian, mức độ bảo vệ này sẽ không cần thiết. Arduinos cũng rất rẻ, vì vậy bạn có thể thấy dễ dàng hơn khi mua một bản sao lưu!

Bây giờ bạn đã biết đủ để thực hiện một số dự án tuyệt vời. Hãy cho chúng tôi biết nếu bạn làm điều gì đó thú vị! Bạn có thể nhận ra tất cả các thiết bị trong hình không? Để lại cho chúng tôi một bình luận dưới đây!

Đăng lại Đăng lại tiếng riu ríu E-mail 5 mẹo để nạp đầy năng lượng cho máy VirtualBox Linux của bạn

Bạn mệt mỏi với hiệu suất kém do các máy ảo cung cấp? Đây là những gì bạn nên làm để tăng hiệu suất VirtualBox của mình.

Đọc tiếp
Chủ đề liên quan
  • DIY
  • Arduino
  • Thiết bị điện tử
Giới thiệu về tác giả Joe Coburn(136 bài báo đã xuất bản)

Joe tốt nghiệp ngành Khoa học Máy tính tại Đại học Lincoln, Vương quốc Anh. Anh ấy là một nhà phát triển phần mềm chuyên nghiệp và khi anh ấy không lái máy bay không người lái hay viết nhạc, anh ấy thường có thể bị bắt gặp chụp ảnh hoặc sản xuất video.

Xem thêm từ Joe Coburn

Theo dõi bản tin của chúng tôi

Tham gia bản tin của chúng tôi để biết các mẹo công nghệ, đánh giá, sách điện tử miễn phí và các ưu đãi độc quyền!

Bấm vào đây để đăng ký
Thể LoạI Diy