Làm thế nào để tạo mạch nhớ vĩnh viễn 1 bit?


13

Tôi muốn tạo một mạch đơn giản để lưu trữ hoặc lưu 1 bit dữ liệu. Mạch phải có khả năng ghi nhớ trạng thái của đèn LED (bật hoặc tắt) ngay cả khi nguồn cung cấp bị ngắt khỏi mạch. Tôi cần nó để hoạt động như ổ cứng, bộ nhớ flash hoặc thẻ nhớ SD của điện thoại di động.

Tôi tạo một mạch điện như trong hình, Đầu ra là một đèn LED nối tiếp với điện trở 470 ohm. Tôi sử dụng hai nút ống lót để sạc hoặc xả tụ điện để đèn LED đầu ra bật hoặc tắt.

Sau khi ngắt kết nối nguồn hoặc tắt điện, Mạch có thể nhớ trạng thái của đèn LED trong vài phút.

Sau 2 hoặc 3 phút, tụ phóng điện hoàn toàn và mạch bị mất dữ liệu.

nhập mô tả hình ảnh ở đây Làm thế nào tôi có thể ngăn chặn tụ điện xả? hoặc làm thế nào tôi có thể làm chậm tốc độ xả để mạch bị mất dữ liệu sau một tuần trở lên?

Trong mạch này, tôi sử dụng 555 làm biến tần (không phải cổng) nhưng tôi có thể sử dụng bất kỳ IC nào khác, Mục đích của tôi chỉ là tạo một bộ nhớ vĩnh viễn đơn giản.


1
Làm thế nào bạn không thích sử dụng một tế bào tiền xu? Không có cách nào để sao chép một ô EEPROM / flash / FRAM ở cấp vĩ mô.
Ignacio Vazquez-Abrams

8
@ IgnacioVazquez-Abrams Bạn có thể sử dụng rơle chốt ...
helloworld922

2
@MichaelGeorge: Không, toàn bộ điểm của rơle chốt là nó sử dụng một nam châm vĩnh cửu để bảo vệ trạng thái của nó mà không cần sử dụng nguồn điện bên ngoài. Bạn chỉ cần một xung điện để thay đổi trạng thái của nó.
Dave Tweed

6
Bạn có thể nhận được một tụ điện để giữ phí của nó trong một tuần với một số thiết kế cẩn thận và xây dựng: m.electronicdesign.com/analog/...
pjc50

3
Liên quan đến việc xả tụ điện: chúng có thể giữ điện áp trong một thời gian dài, nếu ngắt kết nối đúng cách. robotroom.com/Capacitor-Self-Discharge-1.html
FarO

Câu trả lời:


29

Bộ nhớ không biến đổi điện tử ban đầu được dựa trên lõi ferrite. Mặc dù tương đối dễ dàng để từ hóa lõi như vậy theo hướng này hay hướng khác để lưu trữ một hoặc một số không, nhưng phải mất một số mạch khá phức tạp để đọc lại một cách đáng tin cậy.

Các chip không biến đổi hiện đại phụ thuộc vào bộ lưu trữ điện tích, nhưng để làm cho công việc này hoạt động, bạn cần có khả năng tạo ra một tụ điện về cơ bản không có rò rỉ, và cách đọc ra điện tích đó. Điều này chỉ có thể được thực hiện trong bối cảnh vi điện tử, trong đó tụ điện là một miếng kim loại nhỏ ("cổng nổi") được bọc hoàn toàn trong thủy tinh (silicon dioxide) và được đọc bằng phương tiện ảnh hưởng của nó trên một bóng bán dẫn gần đó .

Một lựa chọn khác là RAM điện từ (FRAM), sử dụng vật liệu điện môi đặc biệt có hai trạng thái phân cực ổn định, riêng biệt. Một lần nữa, điều này chỉ hoạt động trong vi điện tử.

Do đó, bạn cần chọn một số hiện tượng vật lý khác để lưu trữ thông tin của bạn. Một lựa chọn rõ ràng là rơle chốt, lưu trữ thông tin ở vị trí vật lý của phần ứng của nó, được giữ ở một trong hai vị trí ổn định bằng nam châm vĩnh cửu hoặc lò xo. Vị trí có thể được thay đổi bằng cách áp dụng một dòng điện tương đối ngắn và việc đọc được thực hiện bằng cách gắn các tiếp điểm điện vào phần ứng.



Vì bạn chỉ có một lõi, bạn không thể đọc nó bằng cảm biến hiệu ứng Hall hay sao?
user253751

1
@immibis: Không dễ. Từ trường gần như được chứa hoàn toàn bên trong lõi, với rất ít rò rỉ bên ngoài.
Dave Tweed

8

Tạo một mạch bật công tắc cơ, ví dụ. hộp vô dụng. Mạch sẽ cần được cấp nguồn để thay đổi / đọc trạng thái nhưng nó sẽ giữ nó ở giữa.


6

Một giải pháp đơn giản sẽ là một bộ điều khiển vi mô như PIC12F635 , có sẵn trong một DIP 8 chân hoặc nhỏ hơn, và có mạch đồng hồ tích hợp và mạch đặt lại màu nâu (cái sau rất quan trọng để duy trì tính toàn vẹn của EEPROM không biến đổi lưu trữ).

Mã yêu cầu không nhiều, một dự án khởi đầu tốt.

Các bộ phận bên ngoài duy nhất cần có sẽ là một tụ điện bỏ qua và một điện trở giới hạn dòng điện cho đèn LED.

Giải pháp rất đơn giản có lẽ là rơle tín hiệu chốt 2 cuộn.


6

Thiết bị điện tử thuần túy sẽ không tạo ra một tế bào bộ nhớ vĩnh viễn, nhưng điện tích trong một tụ điện có thể tiếp cận nó (sẽ cần được làm mới thường xuyên). Bộ nhớ EEPROM / Flash kéo dài yêu cầu này đến 10 năm, vì vậy với mục đích thực tế, nó được gọi là vĩnh viễn. Nhưng đây không phải là thứ bạn đạt được với các thành phần thông thường.

Bộ nhớ vĩnh viễn thực sự sử dụng một số loại hiện tượng ổn định vật lý. Từ hóa của lõi ferrite được Dave sử dụng rộng rãi (đã từng nghe về một "bãi rác lõi"?). Rơle bi-ổn định (hoặc chốt) được đề cập bởi hellowworld922 dễ sử dụng hơn.

Khi bạn nhìn vào cách thức này được thực hiện trong các máy tính ban đầu, bạn phải nhận ra rằng có sự cân bằng giữa độ phức tạp của ô đơn và độ phức tạp của mạch lái xe. Một lõi ferrite rất đơn giản, nhưng việc lái xe và đặc biệt là mạch đọc rất phức tạp. Đối với rơle ổn định hai chiều thì ngược lại: rơle khá phức tạp trên mỗi bit, nhưng mạch điều khiển rất đơn giản.

Mục đích của bạn là gì?

  • Nếu bạn muốn tạo một ô chỉ để giải trí, hãy sử dụng rơle ổn định hai chiều.

  • Nếu bạn muốn demo cách nó được thực hiện trong thực tế (DRAM / Flash) mà không thực tế, hãy sử dụng một khoản phí được lưu trữ trong một tụ điện và làm mới nó thường xuyên.

  • Nếu bạn muốn làm cho một cái gì đó thực tế, hãy sử dụng một bộ điều khiển vi mô nhỏ có EEPROM tích hợp (hoặc có thể tự lập trình FLASH của nó).


5

Một cầu chì. Nó có thể gây khó chịu khi thay thế thường xuyên, vì vậy bạn có thể nâng cấp lên một bộ ngắt.


5
Đây là một chút mỏng cho một câu trả lời trên EE.SE. Xin hãy giải thích.
Nick Alexeev

2
Vì vậy, ... xuất hiện 1 theo mặc định (hiện tại sẽ vượt qua), để đặt thành 0, bạn gửi một dòng điện qua cầu chì để thổi nó, bây giờ hiện tại sẽ không vượt qua, để đặt lại 1, bạn thay thế cầu chì?
Michael

1
Tôi thích những suy nghĩ vượt trội ở đây. Khi bạn nhấn nút để tắt đèn LED, nó sẽ ngắt cầu dao. Khi bạn nhấn nút để bật đèn LED, nó sẽ thiết lập lại bộ ngắt. Nó chỉ là một phiên bản kỳ lạ của rơle chốt. Có lẽ không phải là lựa chọn tốt nhất, nhưng tôi vẫn thích sự sáng tạo.
MichaelS

1
Tôi chỉ đơn giản là đề cập đến cách các thiết bị ROM sớm hoạt động. Chúng là một loạt các cầu chì. Thổi cầu chì nơi bạn muốn số không. Tôi không nghĩ rằng nó sẽ đòi hỏi cái nhìn sâu sắc hơn. Trường học rất cũ.
William Giá

3

Giải pháp thực tế:

Rơle chốt như được đề cập bởi @DaveTweed là đơn giản nhất.

Nếu bạn muốn một giải pháp trạng thái rắn, bạn có thể sử dụng IC bộ nhớ giao diện song song như thế này . Bạn chỉ có thể buộc các dòng địa chỉ vào một địa chỉ cố định và chỉ sử dụng một trong các dòng dữ liệu. Bạn sẽ cần một số logic keo bổ sung.

Giải pháp thú vị:

Nếu bạn đang tìm kiếm một dự án để thể hiện bộ nhớ thì bạn có thể sử dụng một điện từ với một số lõi kích động. Bão hòa lõi theo một hướng để lưu trữ 1, bão hòa nó theo hướng khác để lưu trữ 0. Điều đó cần phải ghi.

Sau đó gắn nó ngay phía trên một cảm biến như cảm biến hội trường này . Sau đó, bạn có thể nhìn vào cực tính của trường còn lại bằng cảm biến hội trường (chỉ là một bộ so sánh tương tự) để xác định trạng thái.


3

Từ câu trả lời của cầu chì / cầu dao được đưa ra bởi William Price đã đưa ra giải pháp rõ ràng nhất:

Một công tắc.

Lấy đèn đi. Cắm nó vào. Bật nó lên. Rút phích cắm điện. Di chuyển nó đến Hawaii. Cắm nó vào.
Nó bật lại.

Tắt nó đi. Rút phích cắm điện. Đem nó về nhà. Cắm nó vào.
Nó ở lại.

Nếu bạn muốn một máy tính kích hoạt / hủy kích hoạt đèn LED, nó không hữu ích. Tuy nhiên, nếu bạn sử dụng công tắc bật tắt nút nhấn và điện từ được kích hoạt bằng điện tử, bạn có thể hoàn thành công việc. Nhấn nút để bật đèn LED, nó kích hoạt điện từ, đèn LED bật. Đẩy lại, đèn LED tắt. Rút phích cắm và nút vẫn được đặt thành bật hoặc tắt.

Nếu bạn muốn giữ lại chức năng "điều này nếu chắc chắn bật, đó chắc chắn là tắt" (thay vì bật tắt), bạn có thể có nút trên cùng kích hoạt một điện từ nhấn trên đỉnh của công tắc lật. Sau đó, nút dưới cùng kích hoạt một điện từ thứ hai nhấn vào phía dưới của công tắc lật.

Không nói đây là cách tốt nhất để làm điều đó, nhưng nó hoạt động.


1
Tất cả những gì bạn đã làm là mô tả cách xây dựng rơle có thể đóng lại, đây là một trong những giải pháp đầu tiên được đề xuất.
Dave Tweed

Phần thứ hai, vâng, chỉ là một mô tả về rơle ổn định hai chiều, có thể hữu ích nếu anh ta quan tâm đến việc xây dựng rơle của riêng mình. Tuy nhiên, phần đầu tiên thì không. Tôi không nghĩ nó phù hợp với mục đích của câu hỏi (tôi cho rằng anh ta thích học điện tử hơn là xây dựng thiết kế đơn giản nhất có thể), nhưng một công tắc bật tắt là một thiết kế đơn giản, dễ dàng hơn các bit điện tử và đáp ứng các yêu cầu được đưa ra trong vài câu đầu tiên.
MichaelS

Bạn có thể đúng, nhưng chúng tôi sẽ không bao giờ chắc chắn vì OP không bao giờ quay lại để thảo luận về nó - mặc dù anh ấy đã "chấp nhận" câu trả lời của tôi. Tôi đã giải thích mục đích chung của câu hỏi là đề cập đến bộ nhớ có thể ghi lại bằng điện tử, dựa trên "Mạch có thể nhớ trạng thái của đèn LED" . Điều này sẽ loại trừ bộ nhớ chỉ đọc (công tắc, bộ nhảy, điốt, v.v.) và bộ nhớ ghi một lần (cầu chì).
Dave Tweed

Suy nghĩ của tôi là trạng thái của đèn LED liên quan trực tiếp đến nút nào được nhấn lần cuối. Từ quan điểm logic, việc nắm bắt trạng thái của các nút giống hệt như chụp trạng thái của đèn LED.
MichaelS

2

Giải pháp một thành phần đơn giản nhất sẽ là rơle ổn định hai chiều. Và bạn sẽ chỉ cần một điện trở để đọc trạng thái.


2

Bạn có thể sử dụng một vi điều khiển được tích hợp sẵn trong EEPROM. PIC16F84A 8 bit có 64 byte EEPROM, tốt cho 10.000.000 thường và tối thiểu 1.000.000 ghi vào mỗi byte (điều này được gọi là độ bền byte). PIC được chọn trong một câu trả lời khác, PIC12F635 có EEPROM 128 byte và độ bền byte là 100.000 ghi. Các PIC24F16KA102 , một bộ xử lý 16-bit, có 512 byte EEPROM và cũng là một sức chịu đựng byte 100.000 viết.

OP không cho biết tần suất đèn LED sẽ nhấp nháy. Đối với mục đích của cuộc thảo luận này, giả sử nó là bốn lần một phút.

Một năm nữa nó sẽ nhấp nháy.

4*60*24*365= =2,102,400 tTôimeS.

Vì EEPROM cần nắm bắt cả hai sự kiện bật và tắt cuối cùng, nên nó sẽ được ghi thành hai lần con số đó, tương đương khoảng 4.2 triệu lần . Trong năm năm, đây là 21 triệu lần.

Rõ ràng, điều này sẽ vượt quá thông số kỹ thuật của bất kỳ EEPROM nào mà tôi hiện được tích hợp trong một vi điều khiển.

Nhưng có một giải pháp đơn giản cho việc này. Thay vì sử dụng cùng một byte nhiều lần để theo dõi trạng thái bật hoặc tắt, người ta có thể sử dụng một mảng byte, làm đầy toàn bộ chip.

Bạn cần hai byte cho mỗi phần tử trong mảng. Vì vậy, một EEPROM 64 byte, giống như một trong PIC16F84A, có thể chứa 32 phần tử. Mỗi lần bạn viết vào EEPROM, bạn viết 0 vào byte trạng thái (nghĩa là phần tử này có dữ liệu) và 0 cho byte dữ liệu (đèn LED đã tắt) hoặc 0xFF (đèn LED được bật lần cuối). Lần tới khi bạn truy cập EEPROM, bạn lập chỉ mục qua các phần tử cho đến khi bạn tìm thấy một phần tử có byte trạng thái 0xFF, sau đó sử dụng phần tử đó. Nếu không còn lại, sau đó khởi tạo lại EEPROM và bắt đầu lại (đối với PIC cấp thấp, điều này có nghĩa là ghi 0xFF cho mỗi byte trạng thái; đối với PIC24, có một lệnh để xóa toàn bộ EEPROM). Nếu bạn cần biết trạng thái cuối cùng của đèn LED, bạn lập chỉ mục qua mảng như trước đây, nhưng bây giờ quay lại một phần tử và đọc byte dữ liệu.

enter image description here

Điều này về cơ bản chia số lượng truy cập cho một byte cho hệ số 16 cho PIC16F84A (16 chứ không phải 32 vì mỗi byte trạng thái được ghi thành hai lần). Vì vậy, nó sẽ có thể xử lý tổng cộng 16 triệu ghi, đủ cho gần bốn năm dữ liệu. Và PIC12F635 với EEPROM lớn hơn nhưng độ bền byte nhỏ hơn 100K, sẽ có thể xử lý tổng cộng 3,2 triệu lần ghi, đủ dùng trong chín tháng.

PIC24F16KA102, với EEPROM 512 byte và tính năng xóa hàng loạt, sẽ có thể xử lý 25,6 triệu lần ghi, đủ trong hơn năm năm.

Nếu tốc độ chớp mắt chỉ là bốn lần mỗi giờ thay vì bốn lần mỗi phút , thì điều này có nghĩa là tổng cộng 70.080 ghi mỗi năm. Ngay cả PIC12F635, với độ bền 100.000 ghi trên mỗi byte, sẽ tồn tại trong 45 năm!


Bạn có thể không viết thư cho EEPROM cho đến khi mất điện. Các tụ điện nên lưu trữ đủ điện tích để giữ cho uC chạy đủ lâu để ghi trạng thái hiện tại. Điều này có thể làm tăng đáng kể tuổi thọ của EEPROM của bạn.
MichaelS

Ngoài ra, tại sao không sử dụng nhiều bit trên mỗi byte? Byte đầu tiên lưu trữ 7 bit dữ liệu đếm và 1 bit dữ liệu LED. Lần đầu tiên bạn viết, bạn đặt byte thành 0000001L, sau đó 0000010L, v.v. Khi đạt đến 1111111L, bạn đặt lại byte tiếp theo cho tất cả các số 0. Sau khi đến byte cuối cùng, bạn đặt lại byte đầu tiên thành số không. Sau đó, vị trí đọc tiếp theo của bạn là byte đầu tiên có 7 bit trên cùng là 0 <7 bit <= 127 và vị trí ghi tiếp theo là byte đầu tiên có 7 bit <127. Bây giờ bạn đã tăng gần gấp đôi số lần truy cập của mình vì (gần như ) mỗi lần ghi là một byte thay vì hai.
MichaelS

@MichaelS tôi cũng nghĩ thế. Đầu tiên, bạn không thể đi từ 11111110 đến 11111101 vì bạn không thể viết 1 (Tôi đã đảo ngược điều kiện bắt đầu của bạn.) Thay vào đó bạn viết 0, mỗi lần một byte trên byte. Nhưng nó thực sự không có tác dụng gì trong việc giới hạn số lần ghi trên mỗi byte - cuối cùng bạn phải ghi vào mỗi byte tám lần thay vì một lần.
tcrosley

Tôi chưa sử dụng các thiết bị PIC chính xác trong câu hỏi, nhưng tôi hiểu là bạn xóa tất cả dữ liệu, sau đó thay đổi bất kỳ bit nào không nên mặc định cùng một lúc. Vì vậy, nếu "bị xóa" có nghĩa là tất cả 1 giây, thì bạn sẽ xóa mọi thứ và thay đổi bit 1-6 và có thể là L. Tiếp theo, bạn sẽ xóa mọi thứ và thay đổi bit 1-5, 7, có thể là L. Đến cuối đếm , bạn chỉ thay đổi một vài bit (1110110L -> 1110111L chỉ thay đổi bit 4 và L). Bởi vì có 50% cơ hội cho mỗi lần xóa và 50% mỗi lần ghi, cho một bit nhất định bị xóa, đó là trung bình 100% hoặc 8 bit cho mỗi chu kỳ xóa / ghi.
MichaelS

Với phương thức của bạn, toàn bộ byte trạng thái sẽ bị xóa một thời gian trước khi sử dụng, sau đó được đặt thành 0 khi sử dụng hoặc 16 bit cho mỗi chu kỳ xóa / ghi. Đồng thời, toàn bộ byte dữ liệu của bạn có 50% cơ hội mỗi lần xóa, 50% cơ hội cho mỗi lần ghi hoặc trung bình 8 bit cho mỗi chu kỳ xóa / ghi. Tổng số sau đó là 24 bit mỗi chu kỳ. Ngay cả khi chúng ta giả sử mỗi chu kỳ xóa / ghi là tương đương trên mỗi byte, thì nó vẫn thay đổi hai byte thay vì một chu kỳ. (Không thể chỉnh sửa nhận xét trên, ý tôi là 50/50 cho một bit nhất định được thay đổi , không bị xóa, trong câu cuối cùng.)
MichaelS

2

Đây có thể là một gợi ý rất ngây thơ ... nhưng về việc xây dựng một chốt bóng bán dẫn công suất thấp được điều khiển bởi pin nút . Sau đó sử dụng đầu ra từ đó để đưa vào OP-amp được điều khiển bởi nguồn điện . Bằng cách đó, bạn dỡ pin nút của dòng cho ăn đầu ra hữu ích; bạn không thể sử dụng nó trong khi nguồn cung bị tắt, phải không?

EDIT: Ngoài ra - theo nhận xét bên dưới - nên làm cho nó để chốt được cách ly với OP-amp nếu nguồn cung bị mất. Bất kỳ loại rơle nào - hoặc mạch tương đương - được cung cấp bởi nguồn cung cấp sẽ có thể thực hiện công việc ở đó.

Xem xét rằng một chiếc đồng hồ đeo tay đơn giản có thể được điều khiển bởi pin nút trong nhiều năm, cung cấp năng lượng cho một chốt đơn giản sẽ mang lại cho nó một vòng đời cho mỗi pin kéo dài một thập kỷ. Bạn thậm chí có thể đặt hai pin song song để có thể trao đổi chúng - một lúc - mà không làm mất thông tin.


Chỉ có rất ít Op-Amps có sẵn cho phép điện áp ở đầu vào cao hơn điện áp cung cấp, đó sẽ là trường hợp trong khi tắt máy.
Arsenal

Nếu đó là trường hợp, không có cách nào để tắt đầu vào cho OP-amp nếu nguồn cung bị mất, về cơ bản là cách ly chốt? Bất kỳ loại rơle nào - hoặc mạch tương đương - sẽ thực hiện thủ thuật ở đó, phải không?
MichaelK

0

Một CPLD nhỏ có thể được lập trình để điều khiển giao thức cần thiết để ghi một tập hợp các giá trị đơn giản vào một bus I2C.

NXP tạo ra một loạt các ký ức rất nhỏ, nhằm thay thế các công tắc nhúng, ví dụ PCA8550 / PCA9561.

Kết hợp cả hai và bạn có một công tắc trạng thái rắn rất nhỏ mà nhớ trạng thái của nó.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.