Simon nói không có vi điều khiển


8

Tôi muốn tạo ra trò chơi kinh điển của Simon Says không sử dụng gì ngoài các mạch logic, đèn LED và IC, không có Vi điều khiển như Arduino.

Tôi muốn sử dụng 4 đèn LED và 4 công tắc Tactile cho mạch này.

Tôi đang làm điều này như một bài tập giáo dục cho bản thân mình, tôi không học điện tử tuy nhiên tôi đang học Khoa học Máy tính.

Tôi hiểu rằng tôi sẽ cần một số thành phần bao gồm bộ đếm thập kỷ và bộ định thời 555.

Tuy nhiên, câu hỏi của tôi là, làm thế nào tôi có thể quyết định đèn LED nào sẽ hiển thị theo thứ tự ngẫu nhiên? Tôi hiểu rằng tôi có thể thập kỷ quầy / Flip Flops để lưu trữ chuỗi trong bộ nhớ.

Câu trả lời:


5

Nói chung để tạo ra các số "ngẫu nhiên" trong phần cứng (cho mục đích cấp độ giải trí), bạn có thể làm một số việc như sử dụng một cơ chế hơi khó đoán và kết hợp nó với một cơ chế có thể dự đoán được, nhưng không rõ ràng.

Ví dụ: nếu bạn có bộ đếm chạy nhanh và lấy mẫu đầu ra bất cứ khi nào người dùng nhấn nút (chẳng hạn như trong khi phát lại chuỗi trước đó) sẽ hơi ngẫu nhiên, vì chúng có thể mất nhiều thời gian khác nhau. Nhưng ai đó chơi trò chơi hệ thống bằng cách nhấn các nút rất nhanh có thể có xu hướng nhận được cùng một vài giá trị (mặc dù nếu đồng hồ nằm trong dải MHz có thể không phải là mối quan tâm thực tế).

Ngược lại, bạn có thể sử dụng Thanh ghi thay đổi phản hồi tuyến tính (Wikipedia) cung cấp chức năng kết hợp của trạng thái hiện tại một thanh ghi thay đổi trở lại đầu vào của nó, để tạo ra một chuỗi không dễ thấy đối với con người, mặc dù đầu ra của nó cho cùng một đầu vào sẽ thực sự hoàn toàn có thể dự đoán được. Được sử dụng bởi chính nó, đây sẽ không phải là một ý tưởng hay vì nó sẽ cung cấp các trình tự giống nhau mỗi lần chơi trò chơi và nhanh chóng được ghi nhớ bởi một người dùng lặp lại.

Nhưng, nếu bạn kết hợp hai phương pháp, chẳng hạn như sử dụng bộ hẹn giờ để có được giá trị bắt đầu không thể đoán trước, sau đó sử dụng thanh ghi dịch chuyển phản hồi tuyến tính để trộn nó (hoặc có thể để LFSR chạy tự do trên đồng hồ nhanh và lấy mẫu dựa trên tương tác người dùng) bạn sẽ có thể nhận được một cái gì đó đủ ngẫu nhiên cho một trò chơi giải trí.

Một nguồn khác bạn có thể thử sẽ là các bit thứ tự thấp của bộ chuyển đổi tương tự sang số.

Dù bạn làm gì, có lẽ bạn sẽ muốn mô phỏng nó (và cả thiết kế hệ thống tổng thể của bạn) trước khi bạn xây dựng mạch. Dự án đủ phức tạp để sử dụng một GPU nhỏ hoặc CPLD lớn hơn có thể đáng giá.

Và cuối cùng hãy nhớ rằng trong lịch sử, trò chơi Simon ban đầu rõ ràng đã sử dụng bộ vi xử lý đầu tiên, TMS1000. Nói chung, các hoạt động tuần tự phức tạp có thể được thực hiện hiệu quả hơn theo cách đó, với các máy trạng thái chỉ được chọn cho các vấn đề đơn giản, phải chạy cực nhanh hoặc đang học thay thế cho công việc cuối cùng đối với các vấn đề đó.

Biên tập:

http://www.waitingforfriday.com/index.php/Reverse_engineering_an_MB_Electronic_Simon_game

Chứa một số quan sát thú vị, bao gồm một sự thay đổi cuối cùng từ TMS1000 sang phiên bản có thể được gắn nhãn tùy chỉnh. Liên quan hơn đến câu hỏi của bạn, nó gợi ý rằng bản gốc đã tạo ra các số ngẫu nhiên bằng cách lấy mẫu bộ đếm chạy miễn phí khi người dùng nhấn nút ;-)


Tôi tự hỏi có bao nhiêu chip, hoặc CPLD phức tạp như thế nào, sẽ được yêu cầu để xây dựng một "bộ xử lý" có thể xử lý một trò chơi tương tự như đơn vị thương hiệu Simon bằng cách sử dụng "chương trình" được lưu trữ trong ROM? Tôi đoán là nó có thể được thực hiện với ít hơn một chục chip rời rạc và ROM 32Kx8 hoặc nhỏ hơn; Càng nhiều chip, ROM càng nhỏ sẽ được yêu cầu. Nếu không cần "trò chơi 2", thanh ghi dịch chuyển phản hồi dựa trên phần mềm có thể xử lý bất kỳ độ dài "chuỗi" nào với 40 bit lưu trữ (khi chọn chuỗi màu, hãy chạy LFSR 20 bit cho đến khi nhấn nút , sau đó sao chép nó ...
supercat

... đến một thanh ghi dự phòng. Sau đó phát chuỗi được tạo bởi LFSR đó, sao chép thanh ghi dự phòng trở lại LFSR và đợi người dùng nhấn các nút trong chuỗi đó.
supercat
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.