สารบัญ:

KIM Uno - ไมโครโปรเซสเซอร์ 5 ยูโร Dev Kit Emulator: 13 ขั้นตอน (พร้อมรูปภาพ)
KIM Uno - ไมโครโปรเซสเซอร์ 5 ยูโร Dev Kit Emulator: 13 ขั้นตอน (พร้อมรูปภาพ)

วีดีโอ: KIM Uno - ไมโครโปรเซสเซอร์ 5 ยูโร Dev Kit Emulator: 13 ขั้นตอน (พร้อมรูปภาพ)

วีดีโอ: KIM Uno - ไมโครโปรเซสเซอร์ 5 ยูโร Dev Kit Emulator: 13 ขั้นตอน (พร้อมรูปภาพ)
วีดีโอ: Let's Play PC Building Simulator (Session 3 ) 2024, มิถุนายน
Anonim
Image
Image
KIM Uno - ไมโครโปรเซสเซอร์ 5 ยูโร Dev Kit Emulator
KIM Uno - ไมโครโปรเซสเซอร์ 5 ยูโร Dev Kit Emulator
KIM Uno - ไมโครโปรเซสเซอร์ 5 ยูโร Dev Kit Emulator
KIM Uno - ไมโครโปรเซสเซอร์ 5 ยูโร Dev Kit Emulator

KIM Uno เป็นชุดเครื่องมือพัฒนาแบบพกพาที่กำหนดโดยซอฟต์แวร์สำหรับไมโครโปรเซสเซอร์ (ย้อนยุค) แต่ให้ฉันแนะนำแนวคิดนี้โดยย้อนเวลากลับไป:

ย้อนกลับไปเมื่อปลายปี 2018 ในใจฉัน ฉันต้องการสร้างชุดอุปกรณ์ไมโครโปรเซสเซอร์แบบพกพาขนาดเล็ก เช่นเดียวกับ KIM-1 ที่มีชื่อเสียงจาก MOS Technology, Inc. และออกแบบโดย Chuck Peddle ซึ่งเกี่ยวข้องกับการสร้างซีพียู 6502 ด้วย

แต่การสร้างชุดเครื่องมือสำหรับนักพัฒนาแบบ "เปล่าเปลือง" ที่มีส่วนประกอบลอจิกแบบไม่ต่อเนื่องนั้นไม่มีทางเลือก เนื่องจากจำเป็นต้องใช้แหล่งจ่ายไฟขนาดใหญ่ (เนื่องจากอุปกรณ์โบราณเหล่านั้นมักจะใช้กระแสไฟที่รุนแรง) และการพัฒนาก็ต้องใช้เวลามากเช่นกัน และฉันต้องการมันตอนนี้!

ดังนั้นฉันจึงออกแบบ KIM Uno ให้เป็นอุปกรณ์พกพาซึ่งถือได้ด้วยมือเดียวและใช้พลังงานจากแบตเตอรี่ CR2032 สองก้อน ใช้ไมโครคอนโทรลเลอร์ ATMega328p ("Arduino") ที่ทำงานที่ 8 MHz เพื่อจำลอง (หรือจำลอง) CPU ที่ต้องการ สถาปัตยกรรมนี้ยังช่วยให้แน่ใจว่าซีพียูที่จำลองนั้นสามารถใช้แทนกันได้กับทุกอย่างที่เหมาะกับหน่วยความจำแฟลชของไมโครคอนโทรลเลอร์ จึงเป็นเครื่องเอนกประสงค์

บังเอิญฉันดูการพูดคุยที่ดีจริงๆ - เรียกว่า The Ultimate Apollo Guidance Computer Talk (34C3) - บน YouTube ซึ่งมีการกล่าวถึง "One Instruction Set Computers" หรือ OISC ฉันไม่รู้เกี่ยวกับพวกเขาและพบว่าสิ่งนี้เป็นตัวเลือกที่สมบูรณ์แบบที่จะนำไปใช้

KIM Uno จำลองซีพียูด้วยคำสั่งเดียว: subleq - ลบและแยกสาขาหากน้อยกว่าหรือเท่ากับศูนย์

หากคุณปฏิบัติตามคำแนะนำนี้ร่วมกับฉัน คุณสามารถสร้าง KIM Uno ของคุณเองได้ในเวลาไม่นาน และส่วนที่ดีที่สุด - นอกเหนือจากความจริงที่ว่าคุณสามารถปรับเปลี่ยนได้ตามรสนิยมของคุณ - คือมีค่าใช้จ่ายเพียง 4, 75 ยูโรในการทำ (ณ สิ้นปี 2018)

คำแนะนำหนึ่งข้อ: มีที่เก็บ Git ที่มีไฟล์ทั้งหมดที่มีให้โดยขั้นตอนต่างๆ ของคำแนะนำนี้ ในกรณีที่คุณต้องการแก้ไขทรัพยากรบางส่วนและแบ่งปันกับเรา คุณสามารถทำ PR ได้ แต่คุณยังสามารถดาวน์โหลดไฟล์ทั้งหมดได้ในคราวเดียว เพียงไปที่ https://github.com/maxstrauch/kim-uno ขอบคุณ!

มีโครงการที่น่าสนใจอีกโครงการหนึ่งที่เรียกว่าโครงการเดียวกัน (KIM Uno) ซึ่งทำแบบจำลองจริงของ 6502 KIM Uno ตรวจสอบออกที่นี่ ผู้สร้างยังขายชุดอุปกรณ์ ดังนั้นหากคุณสนใจ 6502 และชอบโครงการนี้ ต้องไปที่นั่น!

ขั้นตอนที่ 1: การจัดหา PCB

การจัดหา PCB
การจัดหา PCB
การจัดหา PCB
การจัดหา PCB

อย่างที่คุณเห็น ฉันใช้โอกาสนี้ในการออกแบบ PCB และปล่อยให้มันทำอย่างมืออาชีพ เนื่องจากการผลิตภายนอกและการจัดส่งถึงคุณจึงใช้เวลานาน (ขึ้นอยู่กับว่าคุณอยู่ที่ไหนในโลก;-)) การสั่งซื้อจึงเป็นขั้นตอนแรก จากนั้นเราสามารถดำเนินการตามขั้นตอนอื่นๆ ในขณะที่ทำ PCB และส่งถึงคุณ

ฉันสั่งซื้อ PCB ของฉันในประเทศจีนที่ PCBWay ในราคาเพียง $5 ฉันไม่ได้รับประโยชน์ใด ๆ จากการนำเสนอ PCBWay ในฐานะผู้ผลิต goto สำหรับ PCBs เพียงว่ามันใช้ได้ดีสำหรับฉันและอาจทำงานได้ดีสำหรับคุณ แต่คุณสามารถสั่งซื้อได้ที่อื่น เช่น JLCPCB, OSH Park หรือบริษัท PCB ในพื้นที่

แต่ถ้าคุณยินดีที่จะสั่งซื้อที่ PCBWay คุณสามารถดาวน์โหลดไฟล์ ZIP ที่แนบมา " kim-uno-rev1_2018-12-12_gerbers.zip" และอัปโหลดโดยตรงไปยัง PCBWay โดยไม่มีการเปลี่ยนแปลงใดๆ นี่คือไฟล์ต้นฉบับที่ฉันใช้ในการสั่งซื้อ PCB ที่คุณเห็นในภาพ

หากคุณสั่งซื้อจากผู้ผลิตรายอื่น คุณอาจต้องส่งออกซ้ำจากแหล่ง KiCad ดั้งเดิม เนื่องจากฉันสร้างผลิตภัณฑ์เหล่านี้ด้วยข้อมูลจำเพาะจาก PCBWay ที่คุณสามารถหาได้ที่นี่ สำหรับแหล่ง KiCad ดั้งเดิม ให้ดาวน์โหลด " kim-uno-kicad-sources.zip" และแตกไฟล์ออกมา

แต่ยังมีวิธีที่สอง: หากคุณไม่ต้องการสั่ง PCB คุณสามารถสร้างเวอร์ชันของคุณเองได้โดยใช้ perfboard หรือแม้แต่เขียงหั่นขนม

อย่างไรก็ตาม เนื่องจาก PCB อยู่ในระหว่างดำเนินการ เราจึงสามารถมุ่งเน้นไปที่ส่วนอื่นๆ ได้! มาตามฉันมา

ขั้นตอนที่ 2: การจัดหาส่วนประกอบ

การจัดหาส่วนประกอบ
การจัดหาส่วนประกอบ
การจัดหาส่วนประกอบ
การจัดหาส่วนประกอบ
การจัดหาส่วนประกอบ
การจัดหาส่วนประกอบ

ตอนนี้คุณต้องได้รับส่วนประกอบ สำหรับสิ่งนี้ คุณจะพบภาพภาพรวมของส่วนประกอบและปริมาณทั้งหมดที่คุณต้องการ ซึ่งแนบมากับขั้นตอนนี้ รวมถึง BOM (รายการวัสดุ)

BOM มีลิงก์ไปยัง eBay แม้ว่าข้อเสนอเหล่านั้นอาจถูกปิดเมื่อคุณอ่านข้อความนี้ คุณสามารถใช้เป็นจุดเริ่มต้นได้ ส่วนประกอบที่ใช้นั้นค่อนข้างมาตรฐาน

ต่อไปนี้ ฉันจะอธิบายส่วนประกอบที่จำเป็นทั้งหมดให้คุณฟัง:

  • ตัวต้านทาน 7x 1 kΩ สำหรับจอแสดงผลทั้งเจ็ดส่วน คุณลดค่าลงได้ (เช่น 470 Ω) เพื่อให้สว่างขึ้น แต่ควรลดให้น้อยลง ไม่งั้นไฟ LED จะหมดหรือแบตเตอรี่หมดเร็วมาก ฉันพบว่าค่านี้ใช้ได้ผลสำหรับฉัน
  • 1x 10 kΩ เป็นตัวต้านทานแบบดึงขึ้นสำหรับสาย RESET ของไมโครคอนโทรลเลอร์
  • ตัวเก็บประจุ 1x 100nF เพื่อทำให้แรงดันไฟกระชาก (ซึ่งไม่ควรเกิดขึ้นเนื่องจากเราใช้แบตเตอรี่ใช่ แต่สำหรับการวัดที่ดี …)
  • 1x ATMega328P ในแพ็คเกจ DIP-28 (ปกติจะมีชื่อว่า ATMega328P-PU)
  • 1x PCB หลัก - ดูขั้นตอนก่อนหน้า; ไม่ว่าจะสั่งหรือสร้างเอง
  • ที่ใส่แบตเตอรี่ 2x CR2032
  • 1x SPDT (ขั้วเดียว, สวิตช์สองครั้ง) ซึ่งโดยทั่วไปมีสามหน้าสัมผัสและในทุกสถานะสองสถานะ (เปิดหรือปิด) จะเชื่อมต่อสองหน้าสัมผัส
  • ปุ่มกดสัมผัส 20x สำหรับแป้นพิมพ์ ในการใช้ด้านหลังของ PCB ฉันใช้ปุ่มกดแบบสัมผัส SMD (ปุ่มมาตรฐานขนาด 6x6x6 มม.) - ง่ายต่อการบัดกรีอย่างที่คุณเห็น
  • ตัวเลือก: ส่วนหัวพิน 1x 1x6 สำหรับเชื่อมต่อโปรแกรมเมอร์ แต่ตัวเลือกนี้เป็นทางเลือกที่คุณจะเห็นในภายหลัง
  • จอแสดงผลเจ็ดส่วน 1x พร้อมตัวเลข 4 หลักและจอแสดงผลเจ็ดส่วน 1x พร้อมตัวเลข 2 หลัก - บอร์ดจะใช้องค์ประกอบเพียง 0.36 นิ้ว (9, 14 มม.) พร้อมการเดินสายขั้วบวกทั่วไป ข้อกำหนดทั้งสองมีความสำคัญในการรับหน่วยงาน แต่การแสดงเจ็ดส่วนประเภทนี้เป็นเรื่องธรรมดามาก

แนบไปกับขั้นตอนนี้ คุณจะพบไฟล์ " component-datasheets.zip" ซึ่งมีข้อมูลที่แม่นยำยิ่งขึ้นเกี่ยวกับขนาดและประเภทของส่วนประกอบที่ใช้ แต่ส่วนประกอบส่วนใหญ่เป็นมาตรฐานและสามารถหาได้ง่ายด้วยเงินเพียงเล็กน้อย

ตอนนี้คุณต้องรอจนกว่าคุณจะมีส่วนประกอบทั้งหมดพร้อมที่จะทำการบัดกรีต่อไป ในช่วงเวลานี้ คุณสามารถข้ามไปยังจุดสิ้นสุดแล้วอ่านเล็กน้อยเกี่ยวกับการใช้ KIM Uno ได้หากต้องการ

ขั้นตอนที่ 3: ภาพรวมเครื่องมือบัดกรี

ภาพรวมเครื่องมือบัดกรี
ภาพรวมเครื่องมือบัดกรี
ภาพรวมเครื่องมือบัดกรี
ภาพรวมเครื่องมือบัดกรี

สำหรับการบัดกรีและสร้าง KIM Uno คุณต้องมีเครื่องมือที่แสดงโดยรูปภาพ:

  • เครื่องตัดลวด (เพื่อตัดปลายสายส่วนประกอบ)
  • คีมแบน
  • คู่ของแหนบ
  • (พอใช้) บัดกรีที่ไม่หนามาก - ฉันใช้หัวแร้ง 0.56 มม
  • หัวแร้ง - คุณไม่จำเป็นต้องมีหัวแร้งระดับไฮเอนด์ (เพราะเราไม่ได้ทำวิทยาศาสตร์จรวดที่นี่ด้วย) - ฉันใช้ Ersa FineTip 260 มาเป็นเวลานานแล้วและมันดีจริงๆ
  • ปากกาฟลักซ์: การเพิ่มฟลักซ์ให้กับส่วนประกอบและแผ่นอิเล็กโทรดทำให้บัดกรีได้ง่ายขึ้นมาก เนื่องจากการบัดกรีแล้ว "ไหล" ด้วยตัวเองไปยังที่ที่ถูกต้อง*
  • ทางเลือก: ฟองน้ำ (จากโลหะวูล) สำหรับหัวแร้งของคุณ

ในการตั้งโปรแกรม KIM Uno ในภายหลัง คุณจะต้อง:

  • คอมพิวเตอร์ที่มีชุดเครื่องมือ AVR-GCC และหลีกเลี่ยงการอัปโหลดเฟิร์มแวร์
  • ISP (โปรแกรมเมอร์) - อย่างที่คุณเห็นในภาพ ฉันใช้ Arduino Uno เป็น ISP ที่มีภาพสเก็ตช์พิเศษ - ดังนั้นจึงไม่จำเป็นต้องซื้อฮาร์ดแวร์แฟนซีใดๆ

* คำแนะนำบางอย่างโดยมนุษย์ที่จำเป็น;-)

คุณพร้อมไหม? ในขั้นตอนต่อไป เราจะเริ่มประกอบ KIM Uno

ขั้นตอนที่ 4: การบัดกรี #1: การเพิ่มตัวต้านทานและตัวเก็บประจุ

การบัดกรี #1: การเพิ่มตัวต้านทานและตัวเก็บประจุ
การบัดกรี #1: การเพิ่มตัวต้านทานและตัวเก็บประจุ
การบัดกรี #1: การเพิ่มตัวต้านทานและตัวเก็บประจุ
การบัดกรี #1: การเพิ่มตัวต้านทานและตัวเก็บประจุ
การบัดกรี #1: การเพิ่มตัวต้านทานและตัวเก็บประจุ
การบัดกรี #1: การเพิ่มตัวต้านทานและตัวเก็บประจุ
การบัดกรี #1: การเพิ่มตัวต้านทานและตัวเก็บประจุ
การบัดกรี #1: การเพิ่มตัวต้านทานและตัวเก็บประจุ

คุณควรทำงานจากส่วนประกอบที่เล็กที่สุด (ในแง่ของความสูงของส่วนประกอบ) ก่อน ไปจนถึงส่วนประกอบสูงสุดที่อยู่สุดท้าย ดังนั้นเราจึงเริ่มต้นด้วยการเพิ่มตัวต้านทานและงอขาที่ด้านหลังเพื่อให้ตัวต้านทานง่ายต่อการบัดกรีและอยู่ในตำแหน่ง หลังจากนั้นก็ตัดสายยาว

นอกจากนี้ ที่ไม่แสดงในรูปภาพ ให้เพิ่มตัวเก็บประจุขนาดเล็ก 100 nF ในลักษณะเดียวกัน

เคล็ดลับข้อหนึ่ง: เก็บขาลวดไว้ในภาชนะขนาดเล็ก บางครั้งอาจมีประโยชน์

ขั้นตอนที่ 5: การบัดกรี #2: การประกอบคีย์บอร์ด

การบัดกรี #2: การประกอบคีย์บอร์ด
การบัดกรี #2: การประกอบคีย์บอร์ด
การบัดกรี #2: การประกอบคีย์บอร์ด
การบัดกรี #2: การประกอบคีย์บอร์ด
การบัดกรี #2: การประกอบคีย์บอร์ด
การบัดกรี #2: การประกอบคีย์บอร์ด

ขั้นตอนต่อไปคือการประสานสวิตช์สัมผัส 20 SMD เนื่องจากงานนี้ค่อนข้างยุ่ง เราจึงทำตอนนี้เมื่อ PCB วางราบบนโต๊ะทำงาน

เราจะทำงานจากบนลงล่าง (หรือจากซ้ายไปขวาหาก PCB วางแนวตามที่แสดงในรูปภาพ) และเริ่มต้นด้วยแถวแรก: เลือกหนึ่งในสี่แผ่นสำหรับสวิตช์ทุกตัวและเปียกด้วยปากกาฟลักซ์

จากนั้นใช้แหนบจับสวิตช์และวางตำแหน่งอย่างระมัดระวังบนแผ่นรองทั้งสี่ จากนั้นประสานเฉพาะขาของสวิตช์ซึ่งอยู่บนแผ่นรองที่คุณเลือกและเตรียมด้วยฟลักซ์ สำหรับสิ่งนี้ คุณควร "คว้า" บัดกรีด้วยเตารีดของคุณก่อนที่จะเริ่ม ใช้วิธีนี้ทำสวิตช์ทั้งแถวให้สมบูรณ์โดยบัดกรีขาเดียว

ภาพที่มีลูกศรแสดงการขยายวิธีการบัดกรีอย่างแม่นยำ

หลังจากที่คุณบัดกรีทั้งแถวแล้ว (ขาเดียวเท่านั้น) คุณสามารถปรับเปลี่ยนเล็กน้อยได้โดยการอุ่นพินสำรองและจัดตำแหน่งสวิตช์ใหม่ ตรวจสอบให้แน่ใจว่าสวิตช์อยู่ในตำแหน่งที่เหมาะสมที่สุด

หากคุณพอใจกับการจัดตำแหน่ง คุณสามารถทำให้หมุดอื่นๆ ทั้งหมดเปียกด้วยปากกาฟลักซ์ จากนั้นบัดกรีโดยการสัมผัสด้วยหัวแร้งและเพิ่มการบัดกรีเล็กน้อยโดยการสัมผัสด้วย คุณจะเห็นว่าบัดกรีถูกดูดโดยตรงบนแผ่น

หลังจากบัดกรีเป็นแถวหรือประมาณนั้น คุณจะสังเกตเห็นว่าคุณชินกับมันแล้ว และมันก็ไม่ได้ยากขนาดนั้นแต่ซ้ำซาก ดังนั้นเพียงแค่ทำส่วนที่เหลือแล้วคุณจะจบลงด้วยคีย์บอร์ดที่เสร็จแล้วในเวลาไม่นาน

ขั้นตอนที่ 6: การบัดกรี # 3: การแสดงผลเจ็ดส่วน, สวิตช์และส่วนหัวของหมุด

การบัดกรี #3: การแสดงผลเซเว่นเซกเมนต์ สวิตช์ และส่วนหัวของพิน
การบัดกรี #3: การแสดงผลเซเว่นเซกเมนต์ สวิตช์ และส่วนหัวของพิน
การบัดกรี #3: การแสดงผลเซเว่นเซกเมนต์ สวิตช์ และส่วนหัวของพิน
การบัดกรี #3: การแสดงผลเซเว่นเซกเมนต์ สวิตช์ และส่วนหัวของพิน
การบัดกรี #3: การแสดงผลเซเว่นเซกเมนต์ สวิตช์ และส่วนหัวของพิน
การบัดกรี #3: การแสดงผลเซเว่นเซกเมนต์ สวิตช์ และส่วนหัวของพิน

ตอนนี้คุณสามารถเพิ่มสวิตช์และส่วนหัวของพิน (อุปกรณ์เสริม) ได้โดยใช้นิ้วจับและบัดกรีหนึ่งพินเพื่อยึดไว้กับ PCB เพื่อให้คุณสามารถประสานหมุดอื่น ๆ และในที่สุดก็แตะหมุดยึดเริ่มต้น

ระวังอย่าเผาตัวเองด้วยหัวแร้งร้อน หากคุณไม่สะดวกใจกับสิ่งนี้ คุณสามารถใช้เทปกาวเล็กน้อย (เช่น เทปจิตรกร) เพื่อยึดส่วนประกอบ วิธีนี้จะทำให้มือทั้งสองข้างของคุณมีอิสระในการเคลื่อนไหว

จอแสดงผลทั้งเจ็ดส่วนมีการบัดกรีในลักษณะเดียวกัน (ดูภาพ): คุณใส่ไว้ จับไว้ด้วยมือหรือเทป แล้วบัดกรีหมุดอีกสองอันที่อยู่ตรงข้ามกันเพื่อยึดไว้ ในขณะที่คุณสามารถบัดกรีหมุดอื่นๆ ได้

แต่ระวังและวางส่วนแสดงผลเจ็ดส่วนไปในทิศทางที่ถูกต้อง (โดยให้จุดทศนิยมหันไปทางแป้นพิมพ์) มิฉะนั้นคุณกำลังมีปัญหา …

ขั้นตอนที่ 7: การบัดกรี #4: การบัดกรีไมโครคอนโทรลเลอร์

การบัดกรี #4: การบัดกรีไมโครคอนโทรลเลอร์
การบัดกรี #4: การบัดกรีไมโครคอนโทรลเลอร์

ตอนนี้คุณฝึกฝนมามากแล้ว คุณสามารถใส่ไมโครคอนโทรลเลอร์ลงในไมโครคอนโทรลเลอร์โดยให้รอยบากด้านบน (หรือพินแรก) หันไปทางสวิตช์ การใช้คีมปากแบนจะทำให้ขาของไมโครคอนโทรลเลอร์โค้งงอได้เล็กน้อย เพื่อให้เข้ากับรูบน PCB

เนื่องจากเป็นขนาดที่พอดี คุณจึงต้องมีแรงควบคุมเพื่อใส่ไมโครคอนโทรลเลอร์เข้าไป ข้อดีคือไม่หลุดออกมา ซึ่งหมายความว่าคุณสามารถใช้เวลาและประสานจากด้านหลัง

ขั้นตอนที่ 8: การบัดกรี #5: เพิ่มที่ใส่แบตเตอรี่ (ขั้นตอนสุดท้าย)

การบัดกรี #5: เพิ่มที่ใส่แบตเตอรี่ (ขั้นตอนสุดท้าย)
การบัดกรี #5: เพิ่มที่ใส่แบตเตอรี่ (ขั้นตอนสุดท้าย)
การบัดกรี #5: เพิ่มที่ใส่แบตเตอรี่ (ขั้นตอนสุดท้าย)
การบัดกรี #5: เพิ่มที่ใส่แบตเตอรี่ (ขั้นตอนสุดท้าย)
การบัดกรี #5: เพิ่มที่ใส่แบตเตอรี่ (ขั้นตอนสุดท้าย)
การบัดกรี #5: เพิ่มที่ใส่แบตเตอรี่ (ขั้นตอนสุดท้าย)

สุดท้ายคุณต้องเพิ่มที่ใส่แบตเตอรี่ที่ด้านหลัง สำหรับสิ่งนี้ คุณเพียงแค่ใช้ปากกาฟลักซ์และทำให้แผ่นอิเล็กโทรดทั้งสี่เปียก จากนั้นจึงทำการบัดกรีบนเตารีดของคุณ จัดตำแหน่งที่วางแบตเตอรี่อย่างระมัดระวังบนแผ่นอิเล็กโทรดทั้งสอง ที่ปลายทั้งสองด้านของหน้าสัมผัสควรมีแผ่น PCB จำนวนเท่ากันที่มองเห็นได้ แตะแผ่น PCB และขาของที่ใส่แบตเตอรี่ด้วยเตารีด บัดกรีจะไหลอยู่ใต้แผ่นรองและทับและยึดเข้าที่ตามที่แสดงในภาพ หากคุณมีปัญหากับสิ่งนี้ คุณสามารถเพิ่มฟลักซ์เพิ่มเติมด้วยปากกาได้

ขั้นตอนที่ 9: กระพริบ Emulator

กระพริบโปรแกรมจำลอง
กระพริบโปรแกรมจำลอง
กระพริบโปรแกรมจำลอง
กระพริบโปรแกรมจำลอง
กระพริบโปรแกรมจำลอง
กระพริบโปรแกรมจำลอง

ในไฟล์ zip ที่แนบมา " kim-uno-firmware.zip" คุณสามารถค้นหาซอร์สโค้ดสำหรับโปรแกรมจำลองพร้อมกับ "main.hex" ที่คอมไพล์แล้ว ซึ่งคุณสามารถอัปโหลดไปยังไมโครคอนโทรลเลอร์ได้โดยตรง

ก่อนที่คุณจะสามารถใช้งานได้จริง คุณต้องตั้งค่าฟิวส์บิตของไมโครคอนโทรลเลอร์ เพื่อให้ใช้นาฬิกา 8 MHz ภายในโดยไม่แบ่งครึ่ง คุณสามารถทำงานให้เสร็จได้ด้วยคำสั่งต่อไปนี้:

avrdude -c stk500v1 -b 9600 -v -v -P /dev/cu.usbmodem1421 -p m328p -U lfuse:w:0xe2:m -U hfuse:w:0xd9:m -U efuse:w:0xff:m

หากคุณไม่รู้จัก avrdude: เป็นโปรแกรมสำหรับอัปโหลดโปรแกรมไปยังไมโครคอนโทรลเลอร์ คุณสามารถเรียนรู้เพิ่มเติมเกี่ยวกับเรื่องนี้ได้ที่นี่ โดยทั่วไปคุณติดตั้งแล้วพร้อมใช้งาน สำหรับการตั้งค่าของคุณ คุณอาจต้องเปลี่ยนอาร์กิวเมนต์ของ "-P" เป็นพอร์ตอนุกรมอื่น โปรดตรวจสอบบนคอมพิวเตอร์ของคุณว่าใช้พอร์ตอนุกรมใด (เช่น ภายใน Arduino IDE)

หลังจากนี้ คุณสามารถแฟลชเฟิร์มแวร์ไปยังไมโครคอนโทรลเลอร์ได้ด้วยคำสั่งนี้:

avrdude -c stk500v1 -b 9600 -v -v -P /dev/cu.usbmodem1421 -p m328p -U แฟลช:w:main.hex

อีกครั้ง: สิ่งเดียวกันกับ "-P" ข้างต้น

เนื่องจากฉันไม่ได้เป็นเจ้าของ ISP "มืออาชีพ" (โปรแกรมเมอร์ในระบบ) ฉันจึงใช้ Arduino UNO ของฉันเสมอ (ดูภาพ) และภาพร่างที่ฉันแนบ ("arduino-isp.ino" จาก Randall Bohn) ฉันรู้ว่ามีเวอร์ชันที่ใหม่กว่า แต่สำหรับเวอร์ชันนี้ ฉันไม่มีปัญหากับมันเลยตลอดห้าปีที่ผ่านมา ดังนั้นฉันจึงเก็บมันไว้ มันใช้งานได้ การใช้ความคิดเห็นในส่วนหัวของแบบร่างคุณจะได้พินเอาต์บน Arduino UNO และใช้แผนผังของ KIM Uno (ดูที่แนบมา) คุณจะได้รับพินเอาต์ของส่วนหัว 1x6 ISP บน KIM Uno หมุดสี่เหลี่ยมใกล้กับจอแสดงผลเจ็ดส่วนคือพิน 1 (GND) หมุดต่อไปนี้อยู่ในลำดับที่ถูกต้อง: RESET, MOSI, MISO, SCK, VCC คุณสามารถเชื่อมต่อ VCC กับ 3V3 หรือ 5V

หากคุณไม่ได้เพิ่มส่วนหัวของพิน 1x6 คุณสามารถใช้สายเขียงหั่นขนมและใส่เข้าไปในรูเชื่อมต่อแล้วทำมุมด้วยนิ้วของคุณ - ตามที่แสดงในภาพ ทำให้มีการติดต่อมากพอที่จะแฟลชเฟิร์มแวร์และตั้งค่าฟิวส์ แต่ถ้าคุณชอบการตั้งค่าแบบถาวรมากกว่านี้ คุณควรเพิ่มส่วนหัวพิน 1x6 อย่างแน่นอน

ฉันมีสองอุปกรณ์: เวอร์ชันที่ใช้งานจริงที่ไม่มีส่วนหัวของพิน และเวอร์ชันสำหรับการพัฒนาที่มีส่วนหัวของพิน ซึ่งฉันปล่อยให้เชื่อมต่อและใช้งานซ้ำแล้วซ้ำอีกในระหว่างการพัฒนา แบบนี้สบายกว่าเยอะ

ขั้นตอนที่ 10: เสร็จสิ้น

ที่เสร็จเรียบร้อย
ที่เสร็จเรียบร้อย
ที่เสร็จเรียบร้อย
ที่เสร็จเรียบร้อย

ตอนนี้คุณทำเสร็จแล้ว และสามารถเริ่มเขียนโปรแกรมย่อยของคุณเองบนกระดาษ ประกอบมันแล้วป้อนลงในหน่วยความจำ

KIM Uno มาพร้อมกับการคำนวณ Fibonacci ที่ตั้งโปรแกรมไว้ล่วงหน้าโดยเริ่มต้นที่ตำแหน่งหน่วยความจำ 0x0a มันถูกตั้งค่าโดยค่าเริ่มต้นเป็น n = 6 ดังนั้นควรให้ผลลัพธ์เป็นค่า 8 กด "ไป" เพื่อเริ่มการคำนวณ

ขั้นตอนที่ 11: การวิเคราะห์การออกแบบ PCB

การวิเคราะห์การออกแบบ PCB
การวิเคราะห์การออกแบบ PCB
การวิเคราะห์การออกแบบ PCB
การวิเคราะห์การออกแบบ PCB

หลังจากทำโปรเจ็กต์นี้เสร็จ ฉันพบบางประเด็นที่น่าสังเกตและควรได้รับการแก้ไขในการแก้ไขบอร์ดใหม่:

  • ซิลค์สกรีนของ ATMega328p ไม่มีรอยบากปกติในตำแหน่งที่พินแรกตั้งอยู่ รอยเท้า DIP-28 ไม่มีแม้กระทั่งแผ่นสี่เหลี่ยมที่มีพินแรกอยู่ ควรปรับปรุงให้ดียิ่งขึ้นด้วยซิลค์สกรีนที่มีรายละเอียดมากขึ้นเพื่อป้องกันความสับสน
  • ส่วนหัวของ ISP ไม่มีป้ายกำกับการเชื่อมต่อบนซิลค์สกรีน ทำให้ยากต่อการจดจำวิธีเชื่อมต่อกับ ISP
  • สามารถเปลี่ยนส่วนหัวของ ISP เป็นส่วนหัวของพิน 2x6 ที่มีรูปแบบพินมาตรฐานเพื่อป้องกันความสับสน

นอกเหนือจากประเด็นเหล่านั้นแล้ว ฉันค่อนข้างพอใจกับผลลัพธ์ที่ได้และได้ผลในการลองครั้งแรก

ขั้นตอนที่ 12: จะตั้งโปรแกรม SUBLEQ ได้อย่างไร

Image
Image
จะตั้งโปรแกรม SUBLEQ ได้อย่างไร?
จะตั้งโปรแกรม SUBLEQ ได้อย่างไร?
จะตั้งโปรแกรม SUBLEQ ได้อย่างไร?
จะตั้งโปรแกรม SUBLEQ ได้อย่างไร?

ดังที่กล่าวไว้ตอนต้น เฟิร์มแวร์ปัจจุบันของ KIM Uno จำลอง One Instruction Set Computer (OISC) และจัดเตรียมคำสั่งย่อยเพื่อดำเนินการคำนวณ

คำสั่ง subleq ย่อมาจาก subtract และ branch ถ้าน้อยกว่าหรือเท่ากับศูนย์ ใน pseudo-code ดูเหมือนว่าต่อไปนี้:

subleq A B C mem[B] = mem [B] - mem[A]; ถ้า (mem[B] <= 0) ไปที่ C;

เนื่องจาก KIM Uno จำลองเครื่อง 8 บิต อาร์กิวเมนต์ A, B และ C ทั้งหมดจึงเป็นค่า 8 บิต ดังนั้นจึงสามารถระบุหน่วยความจำหลักทั้งหมดได้ 256 ไบต์ เห็นได้ชัดว่าสิ่งนี้สามารถขยายได้โดยการสร้างค่า A, B และ C แบบหลายไบต์ แต่สำหรับตอนนี้ขอทำให้มันง่าย

KIM Uno ยังมี "อุปกรณ์ต่อพ่วง": จอแสดงผลและคีย์บอร์ด มันใช้สถาปัตยกรรมที่แมปหน่วยความจำเพื่อเชื่อมต่ออุปกรณ์ต่อพ่วงเหล่านั้น แม้ว่าแผนที่หน่วยความจำจะง่ายมาก:

  • 0x00 = การลงทะเบียน Z (ศูนย์) และควรเป็นศูนย์
  • 0x01 - 0x06 = หกไบต์ซึ่งแสดงถึงค่าของทุกส่วนของการแสดงผล (จากขวาไปซ้าย) ค่า 0xf - ดูซอร์สโค้ด (main.c) สำหรับรายละเอียดเพิ่มเติม
  • 0x07, 0x08, 0x09 = สามไบต์โดยที่ทุก ๆ ไบต์แสดงถึงสองเจ็ดเซกเมนต์ที่แสดง (จากขวาไปซ้าย) ตำแหน่งหน่วยความจำนี้ช่วยให้แสดงผลได้อย่างง่ายดายโดยไม่ต้องแยกผลลัพธ์ออกเป็นสองส่วนเพื่อวางไว้ในตำแหน่งหน่วยความจำหลักเดียว 0x01 - 0x06
  • 0x0a+ = โปรแกรมเริ่มต้นที่ 0x0a ขณะนี้คีย์ "Go" ทำงานจาก 0x0a คงที่

ด้วยข้อมูลนี้ เราสามารถเขียนโปรแกรมในแอสเซมเบลอร์และป้อนคำสั่งลงในหน่วยความจำแล้วดำเนินการได้ เนื่องจากมีเพียงคำสั่งเดียว จึงป้อนเฉพาะอาร์กิวเมนต์ (A, B และ C) ดังนั้นหลังจากสามตำแหน่งหน่วยความจำ อาร์กิวเมนต์คำสั่งถัดไปจะเริ่มขึ้นเป็นต้น

แนบไปกับขั้นตอนนี้ คุณจะพบไฟล์ " fibonacci.s" และรูปภาพของโปรแกรมที่เขียนด้วยลายมือซึ่งเป็นตัวอย่างการใช้งาน Fibonacci แต่เดี๋ยวก่อน: มีสามคำสั่งที่ใช้ - โดยเฉพาะ ADD, MOV และ HLT - ซึ่งไม่ใช่ subleq "ข้อตกลงคืออะไร? คุณบอกว่ามีเพียงคำสั่งเดียวเท่านั้น subleq?" คุณกำลังถาม? มันง่ายมาก: ด้วย subleq เราสามารถเลียนแบบคำสั่งเหล่านั้นได้ง่ายมาก:

MOV a, b - คัดลอกข้อมูลที่ตำแหน่ง a ถึง b สามารถประกอบด้วย:

  1. subleq b, b, 2 (คำสั่งถัดไป)
  2. subleq a, Z, 3 (คำสั่งถัดไป)
  3. subleq Z, b, 4 (คำสั่งถัดไป)
  4. subleq Z, Z เช่น 5 (คำสั่งถัดไป)

การใช้คุณสมบัติการลบของ subleq ซึ่งทำ mem - mem[a] และเขียนทับ mem ด้วยผลลัพธ์ ค่าจะถูกคัดลอกโดยใช้ zero register และ "subleq Z, Z, …" เพียงแค่รีเซ็ตการลงทะเบียนศูนย์เป็น 0 โดยไม่คำนึงถึงค่าของ Z

เพิ่ม a, b - เพิ่มค่า a + b และเก็บผลรวมใน b สามารถประกอบด้วย:

  1. subleq a, Z, 2 (คำสั่งถัดไป)
  2. subleq Z, b, 3 (คำสั่งถัดไป)
  3. subleq Z, Z เช่น 4 (คำสั่งถัดไป)

คำแนะนำนี้เพียงคำนวณ mem - (- mem[a]) ซึ่งเป็น mem + mem[a] โดยใช้คุณลักษณะการลบด้วย

HLT - หยุด CPU และสิ้นสุดการดำเนินการ:

ตามคำจำกัดความ อีมูเลเตอร์จะรู้ว่า CPU ต้องการยุติหากมันข้ามไปที่ 0xff (หรือ -1 หากมีการซิงก์) ง่ายมาก

ย่อย Z, Z, -1

ทำงานและระบุให้โปรแกรมจำลองทราบว่าควรยุติการจำลอง

ด้วยการใช้คำสั่งง่ายๆ สามคำสั่งนี้ อัลกอริธึม Fibonacci สามารถใช้งานได้และทำงานได้ดี เนื่องจาก OISC สามารถคำนวณทุกอย่างที่คอมพิวเตอร์ "ของจริง" สามารถคำนวณได้โดยใช้คำสั่งย่อยเท่านั้น แต่แน่นอนว่า มีข้อเสียมากมายที่ต้องทำ เช่น ความยาวและความเร็วของโค้ด แต่ถึงกระนั้นก็ยังเป็นวิธีที่ยอดเยี่ยมในการเรียนรู้และทดลองกับการเขียนโปรแกรมซอฟต์แวร์และคอมพิวเตอร์ระดับต่ำ

แนบไปกับขั้นตอนนี้ คุณยังสามารถค้นหาไฟล์ zip " kim_uno_tools.zip" ได้อีกด้วย ประกอบด้วยแอสเซมเบลอร์และโปรแกรมจำลองพื้นฐานสำหรับ KIM Uno พวกเขาเขียนด้วย NodeJS - ตรวจสอบให้แน่ใจว่าคุณได้ติดตั้งแล้ว

โปรแกรมประกอบ

หากคุณดูที่ "fibonacci/fibonacci.s" คุณจะพบว่ามันคือซอร์สโค้ดสำหรับการใช้งาน fibonacci ที่กล่าวถึง ในการประกอบและสร้างโปรแกรมที่ KIM Uno สามารถรันได้ คุณต้องป้อนคำสั่งต่อไปนี้ (ในรูทของไฟล์เก็บถาวร "kim_uno_tools.zip" ที่แยกออกมา):

โหนด assemble.js fibonacci/fibonacci.s

และมันจะพิมพ์ข้อผิดพลาดหากคุณทำผิดพลาดหรือทำให้โปรแกรมผลลัพธ์ออกมา หากต้องการบันทึก คุณสามารถคัดลอกเอาต์พุตและบันทึกลงในไฟล์หรือเรียกใช้คำสั่งนี้:

โหนด assemble.js fibonacci/fibonacci.s > yourfile.h

เอาต์พุตถูกจัดรูปแบบในลักษณะที่สามารถรวมโดยตรงในเฟิร์มแวร์ KIM Uno เป็นไฟล์ส่วนหัว C แต่โปรแกรมจำลองสามารถใช้เพื่อจำลองได้ เพียงป้อน:

โหนด sim.js yourfile.h

และคุณจะเห็นผลการจำลองและผลลัพธ์ที่คาดหวังจาก KIM Uno บนจอแสดงผล

นี่เป็นการแนะนำสั้น ๆ เกี่ยวกับเครื่องมือนี้ ฉันแนะนำให้คุณลองเล่นกับพวกเขาและดูว่าพวกมันทำงานอย่างไร วิธีนี้จะทำให้คุณได้รับความรู้เชิงลึกและเรียนรู้หลักการทำงานเบื้องหลัง CPU, คำแนะนำ, แอสเซมเบลอร์ และอีมูเลเตอร์;-)

ขั้นตอนที่ 13: Outlook

Outlook
Outlook
Outlook
Outlook
Outlook
Outlook

ยินดีด้วย

หากคุณอ่านข้อความนี้ คุณอาจอ่านคำแนะนำทั้งหมดนี้ และสร้าง KIM Uno ของคุณเอง นี้เป็นสิ่งที่ดีจริงๆ

แต่การเดินทางไม่ได้สิ้นสุดที่นี่ มีตัวเลือกมากมายให้คุณปรับเปลี่ยน KIM Uno และปรับแต่งตามความต้องการและความชอบของคุณ

ตัวอย่างเช่น KIM Uno สามารถติดตั้งตัวจำลอง CPU ย้อนยุค "ของจริง" ซึ่งอาจเลียนแบบ MOS 6502 หรือ Intel 8085, 8086 หรือ 8088 ที่มีชื่อเสียง จากนั้นมันจะไปถึงวิสัยทัศน์เริ่มต้นของฉัน ก่อนที่ฉันจะได้เรียนรู้เกี่ยวกับ OISC

แต่มีการใช้งานอื่นๆ ที่เป็นไปได้ เนื่องจากการออกแบบฮาร์ดแวร์ค่อนข้างทั่วไป KIM Uno สามารถใช้เป็น …

  • … รีโมตคอนโทรล เช่น สำหรับ CNC หรืออุปกรณ์อื่นๆ อาจมีสายหรือติดตั้งไดโอด IR หรือผู้ส่งไร้สายอื่น ๆ
  • … เครื่องคิดเลขพกพา (เลขฐานสิบหก) เฟิร์มแวร์สามารถปรับได้ง่ายมากและการออกแบบบอร์ดไม่จำเป็นต้องเปลี่ยนแปลงมากนัก บางทีซิลค์สกรีนสามารถปรับให้เข้ากับการดำเนินการทางคณิตศาสตร์ได้ และช่องว่างระหว่างเซกเมนต์สามารถลบออกได้ นอกเหนือจากนี้พร้อมแล้วสำหรับการเปลี่ยนแปลงครั้งนี้

ฉันหวังว่าคุณจะสนุกกับการติดตามและหวังว่าจะสร้าง KIM Uno อย่างที่ฉันได้ออกแบบและวางแผน และหากคุณขยายหรือแก้ไข - โปรดแจ้งให้เราทราบ ไชโย!

การประกวด PCB
การประกวด PCB
การประกวด PCB
การประกวด PCB

รองชนะเลิศในการประกวด PCB

แนะนำ: