- EEPROM trong PIC16F877A:
- Sơ đồ mạch và giải thích:
- Mô phỏng sử dụng PIC EEPROM:
- Lập trình PIC cho EEPROM:
- Đang làm việc:
Trong hướng dẫn này, chúng ta sẽ học cách dễ dàng lưu dữ liệu bằng EEPROM có trong Vi điều khiển PIC16F877A. Trong hầu hết các dự án thời gian thực, chúng tôi có thể phải lưu một số dữ liệu không được xóa ngay cả khi tắt nguồn. Điều này nghe có vẻ như là một quá trình phức tạp, nhưng với sự trợ giúp của Trình biên dịch XC8, nhiệm vụ này có thể được thực hiện chỉ bằng một dòng mã. Nếu dữ liệu lớn tính theo Mega byte thì chúng ta có thể giao diện thiết bị lưu trữ như thẻ SD và lưu trữ những dữ liệu đó trên chúng. Nhưng chúng ta có thể tránh được những quá trình mệt mỏi đó nếu dữ liệu nhỏ, chúng ta có thể chỉ cần sử dụng EEPROM có trong Vi điều khiển PIC để lưu dữ liệu của chúng ta và truy xuất bất cứ lúc nào chúng ta muốn.
Đây hướng dẫn PIC EEPROM là một phần của một chuỗi các PIC Vi điều khiển Hướng dẫn, trong đó chúng tôi bắt đầu từ một mức độ rất cơ bản. Nếu bạn chưa học các hướng dẫn trước thì tốt hơn là nên xem chúng ngay bây giờ, bởi vì hướng dẫn này giả định rằng bạn đã quen với Giao diện LCD với Vi điều khiển PIC và Sử dụng ADC với Vi điều khiển PIC.
EEPROM trong PIC16F877A:
EEPROM là viết tắt của “Bộ nhớ chỉ đọc có thể xóa và lập trình được bằng điện tử”. Như tên cho thấy nó là một bộ nhớ hiện diện bên trong Vi điều khiển PIC, trong đó chúng ta có thể ghi / đọc dữ liệu bằng cách lập trình nó để làm như vậy. Dữ liệu được lưu trong này sẽ chỉ bị xóa nếu nó được đề cập đến việc làm như vậy trong chương trình. Dung lượng lưu trữ có sẵn trong EEPROM khác nhau tùy theo từng vi điều khiển; các chi tiết sẽ được cung cấp trong Datasheet như bình thường. Trong trường hợp của chúng tôi đối với PIC16F877A, không gian có sẵn là 256 byte như đã đề cập trong biểu dữ liệu đặc điểm kỹ thuật của nó. Bây giờ chúng ta hãy xem cách chúng ta có thể sử dụng 256 byte này để đọc / ghi dữ liệu bằng cách sử dụng một thiết lập thử nghiệm đơn giản.
Sơ đồ mạch và giải thích:
Sơ đồ mạch cho dự án được hiển thị ở trên. Chúng tôi đã giao diện một màn hình LCD để trực quan hóa dữ liệu được lưu và truy xuất. Một chiết áp bình thường được kết nối với kênh AN4 Analog nên nguồn cấp vào điện áp thay đổi, điện áp thay đổi này sẽ được sử dụng làm dữ liệu được lưu trong EEPROM. Chúng tôi cũng đã sử dụng một nút nhấn trên RB0, khi nhấn nút này, dữ liệu từ kênh Analog sẽ được lưu trong EEPROM.
Kết nối này có thể được thực hiện trên breadboard. Các sơ đồ chân của PIC Vi điều khiển được thể hiện trong bảng dưới đây.
S.Không: |
Số PIN |
Tên ghim |
Kết nối với |
1 |
21 |
RD2 |
RS của LCD |
2 |
22 |
RD3 |
E của LCD |
3 |
27 |
RD4 |
D4 của LCD |
4 |
28 |
RD5 |
D5 của LCD |
5 |
29 |
RD6 |
D6 của LCD |
6 |
30 |
RD7 |
D7 của LCD |
7 |
33 |
RBO / INT |
Nút ấn |
số 8 |
7 |
AN4 |
Chiết áp |
Mô phỏng sử dụng PIC EEPROM:
Dự án này cũng liên quan đến một Mô phỏng được thiết kế bằng Proteus, sử dụng nó mà chúng ta có thể mô phỏng hoạt động của dự án mà không cần bất kỳ phần cứng nào. Chương trình cho mô phỏng này được đưa ra ở cuối hướng dẫn này. Bạn chỉ cần sử dụng tệp Hex từ đây và mô phỏng toàn bộ quá trình.
Trong quá trình mô phỏng, bạn có thể hình dung giá trị ADC Hiện tại và dữ liệu được lưu trong EEPROM trên màn hình LCD. Để lưu giá trị ADC hiện tại vào EEPROM chỉ cần nhấn công tắc được kết nối với RB0 và nó sẽ được lưu. Ảnh chụp nhanh của mô phỏng được hiển thị bên dưới.
Lập trình PIC cho EEPROM:
Mã hoàn chỉnh cho hướng dẫn này được đưa ra ở cuối hướng dẫn này. Trong chương trình của chúng tôi, chúng tôi phải đọc các Giá trị từ mô-đun ADC và khi một nút được nhấn, chúng tôi phải lưu giá trị đó trong EEPROM của chúng tôi. Vì chúng ta đã tìm hiểu về ADC và giao diện LCD, tôi sẽ giải thích thêm về mã để lưu và truy xuất dữ liệu từ EEPROM.
Theo Datasheet “Các thiết bị này có 4 hoặc 8K từ chương trình Flash, với dải địa chỉ từ 0000h đến 1FFFh cho PIC16F877A”. Điều này có nghĩa là mỗi không gian lưu trữ EEPROM có một địa chỉ mà nó có thể được truy cập và trong MCU của chúng tôi, địa chỉ bắt đầu từ 0000h đến 1FFFh.
Để lưu dữ liệu bên trong một địa chỉ EEPROM cụ thể, chỉ cần sử dụng dòng dưới đây.
eeprom_write (0, adc);
Ở đây “adc” là một biến kiểu số nguyên trong đó dữ liệu được lưu hiện diện. Và “0” là địa chỉ của EEPROM mà dữ liệu của chúng ta được lưu trên đó. Cú pháp “eeprom_write” được cung cấp bởi trình biên dịch XC8 của chúng tôi, do đó các thanh ghi sẽ được trình biên dịch tự động quản lý.
Để truy xuất dữ liệu đã được lưu trữ trong EEPROM và lưu nó vào một biến, có thể sử dụng dòng mã sau.
Sadc = (int) eeprom_read (0);
Ở đây, “Sadc” là biến trong đó dữ liệu từ EEPROM sẽ được lưu. Và “0” là địa chỉ của EEPROM mà từ đó chúng ta đang truy xuất dữ liệu. Cú pháp “eeprom_read” được cung cấp bởi trình biên dịch XC8 của chúng tôi, do đó các thanh ghi sẽ được trình biên dịch tự động quản lý. Dữ liệu được lưu trong EEPROM sẽ ở kiểu thập lục phân. Do đó, chúng tôi chuyển đổi chúng sang kiểu số nguyên bằng cách thêm tiền tố a (int) trước cú pháp.
Đang làm việc:
Khi chúng tôi hiểu cách hoạt động của mã và sẵn sàng với phần cứng, chúng tôi có thể kiểm tra mã. Tải mã lên Vi điều khiển PIC của bạn và cấp nguồn cho thiết lập. Nếu mọi thứ hoạt động như mong đợi thì bạn sẽ thấy các giá trị ADC hiện tại được hiển thị trên màn hình LCD. Bây giờ bạn có thể nhấn nút để lưu giá trị ADC vào EEPROM. Bây giờ bạn kiểm tra xem giá trị đã được lưu hay chưa bằng cách tắt toàn bộ hệ thống và bật lại. Khi bật nguồn, bạn sẽ thấy giá trị đã lưu trước đó trên màn hình LCD.
Hoạt động hoàn chỉnh của dự án này để sử dụng Vi điều khiển PIC EEPROM được hiển thị trong video dưới đây. Hy vọng bạn đã hiểu hướng dẫn và thích làm nó. Nếu bạn có bất kỳ nghi ngờ nào, bạn có thể viết chúng vào phần bình luận bên dưới hoặc đăng chúng trên diễn đàn của chúng tôi.