Talaan ng mga Nilalaman:

Ang KIM Uno - isang 5 € Microprocessor Dev Kit Emulator: 13 Hakbang (na may Mga Larawan)
Ang KIM Uno - isang 5 € Microprocessor Dev Kit Emulator: 13 Hakbang (na may Mga Larawan)

Video: Ang KIM Uno - isang 5 € Microprocessor Dev Kit Emulator: 13 Hakbang (na may Mga Larawan)

Video: Ang KIM Uno - isang 5 € Microprocessor Dev Kit Emulator: 13 Hakbang (na may Mga Larawan)
Video: Why the World Economy Would COLLAPSE Without This Company! 2024, Hunyo
Anonim
Image
Image
Ang KIM Uno - isang 5 € Microprocessor Dev Kit Emulator
Ang KIM Uno - isang 5 € Microprocessor Dev Kit Emulator
Ang KIM Uno - isang 5 € Microprocessor Dev Kit Emulator
Ang KIM Uno - isang 5 € Microprocessor Dev Kit Emulator

Ang KIM Uno ay isang portable, tinukoy ng software na dev kit para sa (retro) microprocessors. Ngunit hayaan mo akong ipakilala ang ideya nito sa pamamagitan ng pagbabalik sa oras:

Bumalik sa huling bahagi ng 2018 naisip ko, na nais kong bumuo ng isang maliit na portable microprocessor dev kit, tulad ng sikat na KIM-1 mula sa MOS Technology, Inc. at dinisenyo ni Chuck Peddle na kasangkot din sa paglikha ng 6502 CPU.

Ngunit ang pagbuo ng isang "hubad na buto" na dev kit na may discrete na mga sangkap ng lohika ay walang pagpipilian dahil kailangan nito ng isang malaking supply ng kuryente (dahil ang mga sinaunang aparato ay may posibilidad na kumuha ng isang seryosong kasalukuyang) at pati na rin ang pag-unlad ay magiging masinsinang oras. At gusto ko ito ngayon!

Samakatuwid, dinisenyo ko ang KIM Uno bilang isang portable na aparato, na umaangkop sa isang kamay at pinalakas ng dalawang bateryang CR2032. Gumagamit ito ng ATMega328p ("Arduino") microcontroller na tumatakbo sa 8 MHz upang tularan (o gayahin) ang isang ninanais na CPU. Tinitiyak din ng arkitektura na ito, na ang mga tinulad na CPU ay mapapalitan sa anumang bagay na umaangkop sa loob ng memorya ng flash ng microcontroller. Kaya't ito ay isang multi-purpose na aparato.

Pagkataon ay napanood ko kalaunan ang isang napakahusay na usapan - na tinawag na The Ultimate Apollo Guidance Computer Talk (34C3) - sa YouTube kung saan nabanggit ang "One Instruction Set Computers" o OISCs. Hindi ko alam ang tungkol sa kanila at nahanap ko ito bilang perpektong kandidato upang ipatupad ito.

Ginagaya ng KIM Uno ang isang CPU na may isang tagubilin lamang: subleq - ibawas at sangay kung mas mababa sa o katumbas ng zero.

Kung susundin mo ako sa pamamagitan ng Instructable na ito, maaari kang bumuo ng iyong sariling KIM Uno nang walang oras. At ang pinakamagandang bahagi - sa tabi ng katotohanang maaari mong baguhin ito sa iyong panlasa - ay, nagkakahalaga lamang ito ng 4, 75 € upang gawin (sa pagtatapos ng 2018).

Isang pahiwatig: mayroong isang Git repository na naglalaman ng lahat ng mga file na ibinigay ng iba't ibang mga hakbang ng itinuturo na ito. Kung sakaling nais mong baguhin ang ilang mga mapagkukunan at ibahagi ang mga ito sa amin lahat maaari kang gumawa ng isang PR. Ngunit maaari mo ring i-download ang lahat ng mga file nang sabay-sabay doon. Sa simpleng https://github.com/maxstrauch/kim-uno. Salamat!

Mayroong isa pang medyo kagiliw-giliw na proyekto, na tinatawag na pareho (KIM Uno), na gumagawa ng isang tunay na kopya ng 6502 KIM Uno. Tingnan ito dito Nagbebenta pa ang tagalikha ng kit. Kaya kung interesado ka sa 6502 at gusto ang proyektong ito, dapat kang tumingin doon!

Hakbang 1: Sourcing ang PCB

Sourcing ang PCB
Sourcing ang PCB
Sourcing ang PCB
Sourcing ang PCB

Tulad ng nakikita mo, ginamit ko ang pagkakataon na magdisenyo ng isang PCB at hayaan itong gawin nang propesyonal. Dahil ang pagmamanupaktura nito sa panlabas at pagpapadala nito sa iyo ay kukuha ng maraming oras (depende sa kung nasaan ka sa mundo;-)), ang pag-order nito ay ito ang unang hakbang. Pagkatapos ay maaari naming magpatuloy sa iba pang mga hakbang habang ang PCB ay ginawa at naipadala sa iyo.

Inorder ko ang aking mga PCB sa Tsina sa PCBWay sa halagang $ 5 lamang. Hindi ako nakakakuha ng anumang pakinabang para sa paglalahad ng PCBWay bilang aking tagagawa ng goto para sa mga PCB, ito ay gumagana nang maayos para sa akin at maaari ding gumana nang maayos para sa iyo. Ngunit maaari mong orderin ang mga ito sa anumang ibang lugar tulad ng JLCPCB, OSH Park o anumang lokal na kumpanya ng PCB.

Ngunit kung handa kang mag-order sa kanila sa PCBWay maaari mong i-download ang naka-attach na ZIP file na "kim-uno-rev1_2018-12-12_gerbers.zip" at i-upload ito nang direkta sa PCBWay nang walang pagbabago. Ito ang orihinal na file na ginamit ko upang mag-order ng mga PCB na makikita mo sa mga imahe.

Kung nag-order ka sa kanila mula sa ibang tagagawa maaaring kailanganin mong i-export muli ang mga ito mula sa orihinal na mapagkukunan ng KiCad, sapagkat nilikha ko sila sa mga pagtutukoy mula sa PCBWay na maaari mong makita dito. Para sa orihinal na mapagkukunan ng KiCad, i-download ang "kim-uno-kicad-source.zip" at i-extract ito.

Ngunit mayroong kahit isang pangalawang paraan: kung hindi mo nais na mag-order ng PCB, maaari kang bumuo ng iyong sariling bersyon gamit ang perfboard o kahit isang breadboard.

Gayunpaman: dahil ang mga PCB ay paparating na, maaari kaming tumuon sa iba pang mga bahagi! Halika sundan mo ako.

Hakbang 2: Sourcing ang Mga Sangkap

Sourcing ang Mga Sangkap
Sourcing ang Mga Sangkap
Sourcing ang Mga Sangkap
Sourcing ang Mga Sangkap
Sourcing ang Mga Sangkap
Sourcing ang Mga Sangkap

Ngayon kailangan mong makuha ang mga sangkap. Para dito makikita mo ang isang pangkalahatang-ideya ng imahe ng lahat ng mga bahagi at dami na kailangan mo, naka-attach sa hakbang na ito pati na rin isang BOM (kuwenta ng mga materyales).

Naglalaman ang BOM ng mga link sa eBay. Bagaman maaaring sarado ang mga alok na iyon kapag binasa mo ito, maaari mo itong magamit bilang panimulang punto. Ang ginamit na mga sangkap ay medyo pamantayan.

Sa mga sumusunod ay ipapaliwanag ko sa iyo ang lahat ng mga kinakailangang sangkap:

  • 7x 1 kΩ resistors para sa pitong segment na ipinapakita. Maaari mong bawasan ang halaga (hal. Hanggang 470 Ω) upang mas maliwanag ang mga ito, ngunit bawasan ito nang labis kung hindi man mamatay ang mga LED o mabilis na maubos ang baterya. Nalaman kong ang halagang ito ay gumagana para sa akin
  • 1x 10 kΩ bilang isang pull-up risistor para sa linya ng RESET ng microcontroller
  • 1x 100nF capacitor upang makinis ang anumang mga spike ng boltahe (na hindi dapat mangyari dahil gumagamit kami ng mga baterya, tama, ngunit para sa mahusay na panukalang-batas …)
  • 1x ATMega328P sa package na DIP-28 (karaniwang pinangalanan ATMega328P-PU)
  • 1x ang pangunahing PCB - tingnan ang nakaraang hakbang; alinman sa iniutos o binuo ng iyong sarili
  • 2x CR2032 na may hawak ng baterya
  • 1x SPDT (solong poste, dobleng itapon) switch na karaniwang may tatlong mga contact at sa bawat isa sa dalawang estado nito (alinman sa o off) kumokonekta ito ng dalawang mga contact
  • 20x mga pindutan ng push tactile para sa keyboard. Upang magamit ang likuran ng PCB Gumamit ako ng mga SMD tactile push button (ang karaniwang 6x6x6 mm) - medyo madali silang maghinang tulad ng makikita mo
  • OPSYONAL: 1x 1x6 pin header para sa pagkonekta sa programmer, ngunit opsyonal ito tulad ng makikita mo sa paglaon
  • 1x pitong segment na display na may 4 na digit at 1x pitong segment na display na may 2 na digit - kukuha lamang ang board ng 0.36 pulgada (9, 14 mm) na mga elemento na may karaniwang mga kable ng anode. Ang parehong mga kinakailangan ay mahalaga upang makakuha ng isang gumaganang yunit. Ngunit din ang ganitong uri ng pitong segment na pagpapakita ay napaka-karaniwan

Nakalakip sa hakbang na ito maaari mong makita ang file na "component-datasheets.zip" na naglalaman ng mas tumpak na impormasyon sa mga sukat at uri ng mga ginamit na sangkap. Ngunit ang karamihan sa mga bahagi ay napaka-pamantayan at maaaring ma-sourced nang madali para sa kaunting pera.

Ngayon kailangan mong maghintay hanggang sa magkaroon ka ng lahat ng mga sangkap na handa na upang magpatuloy sa paghihinang. Sa oras na ito maaari ka nang tumalon sa dulo at magbasa nang kaunti tungkol sa paggamit ng KIM Uno kung nais mo.

Hakbang 3: Pangkalahatang-ideya ng Soldering Tool

Pangkalahatang-ideya ng Soldering Tool
Pangkalahatang-ideya ng Soldering Tool
Pangkalahatang-ideya ng Soldering Tool
Pangkalahatang-ideya ng Soldering Tool

Para sa paghihinang at pagbuo ng KIM Uno kailangan mo ang mga tool na ipinakita ng mga imahe:

  • Wire cutter (upang putulin ang dulo ng mga bahagi ng mga wire)
  • Flat pliers
  • Pares ng tweezers
  • (disente) Maghinang na kung saan ay hindi makapal - Gumagamit ako ng 0.56 mm na panghinang
  • Isang soldering iron - hindi mo kailangan ng high-end soldering iron (dahil hindi rin kami gumagawa ng rocket science dito) - Ginagamit ko ang Ersa FineTip 260 sa mahabang panahon ngayon at talagang mabuti
  • Isang flux pen: ang pagdaragdag ng pagkilos ng bagay sa mga bahagi at pad ay ginagawang mas madali upang maghinang ito dahil ang solder pagkatapos ay "dumadaloy" ng sarili nitong sa tamang lugar *
  • Opsyonal: isang espongha (mula sa metalwool) para sa iyong panghinang na bakal

Upang ma-program sa paglaon ang KIM Uno kakailanganin mo rin ang:

  • isang computer gamit ang AVR-GCC toolchain at avrdude upang mai-upload ang firmware
  • isang ISP (programmer) - tulad ng nakikita mo sa imaheng ginagamit ko ang aking Arduino Uno bilang isang ISP na may isang espesyal na sketch - kaya hindi na kailangang bumili ng anumang magarbong hardware

* ilang gabay ng mga tao kailangan;-)

Handa ka na ba? Sa susunod na hakbang ay magsisimula na kaming tipunin ang KIM Uno.

Hakbang 4: Paghinang # 1: Pagdaragdag ng Mga Resistor at Capacitor

Paghihinang # 1: Pagdaragdag ng Mga Resistor at Capacitor
Paghihinang # 1: Pagdaragdag ng Mga Resistor at Capacitor
Paghihinang # 1: Pagdaragdag ng Mga Resistor at Capacitor
Paghihinang # 1: Pagdaragdag ng Mga Resistor at Capacitor
Paghihinang # 1: Pagdaragdag ng Mga Resistor at Capacitor
Paghihinang # 1: Pagdaragdag ng Mga Resistor at Capacitor
Paghihinang # 1: Pagdaragdag ng Mga Resistor at Capacitor
Paghihinang # 1: Pagdaragdag ng Mga Resistor at Capacitor

Dapat mong palaging gumana mula sa pinakamaliit (sa mga tuntunin ng taas ng sangkap) na mga sangkap muna, hanggang sa pinakamataas na bahagi na huling. Samakatuwid, nagsisimula kami sa pamamagitan ng pagdaragdag ng mga resistors at baluktot sa mga binti sa likuran upang ang resistors ay madaling maghinang at manatili sa lugar. Pagkatapos ay gupitin ang mahabang wires.

Gayundin, hindi ipinakita sa mga imahe, idagdag ang maliit na 100 nF capacitor sa parehong paraan.

Isang tip: itago ang mga binti ng kawad sa isang maliit na lalagyan, kung minsan ay madaling gamitin ito.

Hakbang 5: Paghihinang # 2: Pag-iipon ng Keyboard

Paghinang # 2: Pag-iipon ng Keyboard
Paghinang # 2: Pag-iipon ng Keyboard
Paghinang # 2: Pag-iipon ng Keyboard
Paghinang # 2: Pag-iipon ng Keyboard
Paghinang # 2: Pag-iipon ng Keyboard
Paghinang # 2: Pag-iipon ng Keyboard

Ang susunod na hakbang ay upang maghinang ng 20 SMD tactile switch. Dahil ang gawaing ito ay medyo nakakalikot, ginagawa namin ito ngayon, kapag ang PCB ay nakahiga sa workbench.

Magtatrabaho kami mula sa itaas hanggang sa ibaba (o mula kaliwa hanggang kanan kung ang PCB ay nakatuon tulad ng ipinakita sa mga larawan) at magsimula sa unang hilera: pumili ng isa sa apat na pad para sa bawat switch at basain ito ng flux pen.

Pagkatapos ay gumamit ng isang pares ng sipit upang kumuha ng isang switch at ilagay ito nang maingat sa apat na pad. Pagkatapos ay paghihinang lamang ang binti ng switch na nasa pad na iyong pinili at inihanda na may pagkilos ng bagay. Para sa mga ito dapat mong "grab" ng ilang panghinang gamit ang iyong bakal bago magsimula. Gamit ang pamamaraang ito, kumpletuhin ang buong hilera ng mga switch, paghihinang lamang ng isang binti.

Ang imahe na may mga arrow ay nagpapakita ng isang pagpapalaki kung paano eksaktong nagawa ang paghihinang.

Matapos mong solder ang buong hilera (isang pin lamang) maaari kang gumawa ng kaunting mga pagsasaayos sa pamamagitan ng pag-init ng back up ng pin at muling pagpoposisyon ng switch. Siguraduhin, na ang mga switch ay nakahanay hangga't maaari.

Kung masaya ka sa pagkakahanay, maaari mong basain ang lahat ng iba pang mga pin gamit ang flux pen at pagkatapos ay ihihinang ang mga ito sa pamamagitan ng paghawak nito sa soldering iron at pagdaragdag ng kaunting panghinang sa pamamagitan din nito. Makikita mo na ang solder ay sinipsip nang direkta sa pad.

Pagkatapos ng paghihinang ng isang hilera o kaya mapapansin mo na nakakuha ka ng hang nito at hindi ito ganoon kahirap ngunit paulit-ulit. Kaya't gawin lamang ang natitira at magtatapos ka sa isang natapos na keyboard nang walang oras.

Hakbang 6: Paghinang # 3: ang Pitong Segment na Pagpapakita, Lumipat at Pin Header

Paghinang # 3: ang Pitong Segment na Display, Switch at Pin Header
Paghinang # 3: ang Pitong Segment na Display, Switch at Pin Header
Paghinang # 3: ang Pitong Segment na Display, Switch at Pin Header
Paghinang # 3: ang Pitong Segment na Display, Switch at Pin Header
Paghinang # 3: ang Pitong Segment na Display, Switch at Pin Header
Paghinang # 3: ang Pitong Segment na Display, Switch at Pin Header

Ngayon ay maaari mong idagdag ang switch at pin header (opsyonal) sa pamamagitan ng paghawak nito gamit ang iyong daliri at paghihinang ng isang pin upang hawakan ito sa PCB, upang ma-solder mo ang iba pang mga pin at sa wakas ay hawakan ang paunang hawak na pin.

Mag-ingat na hindi mo masusunog ang iyong sarili sa mainit na bakal na panghinang. Kung hindi ka komportable sa ito, maaari kang gumamit ng kaunting tape (hal. Tape ng pintor) upang hawakan ang sangkap. Sa ganitong paraan mayroon kang parehong mga kamay na malayang ilipat.

Ang pitong segment na ipinapakita ay na-solder sa parehong paraan (tingnan ang imahe): inilalagay mo ito, hawakan ito gamit ang iyong kamay o tape at maghinang ng dalawang kabaligtaran na mga pin upang hawakan ito sa lugar habang maaari mong maghinang ang iba pang mga pin.

Ngunit mag-ingat at ilagay ang pitong segment na display sa tamang direksyon (na nakaharap sa decimal ang mga tuldok sa keyboard). Kung hindi man ikaw ay nasa problema …

Hakbang 7: Paghihinang # 4: Paghihinang ng Microcontroller

Paghihinang # 4: Paghihinang ng Microcontroller
Paghihinang # 4: Paghihinang ng Microcontroller

Ngayon na mayroon kang maraming kasanayan, maaari kang magpatuloy at ilagay sa microcontroller na may bingaw sa tuktok (o unang pin) na nakaharap patungo sa switch. Gamit ang Flat pliers maaari mong maingat na yumuko ang mga binti ng microcontroller nang kaunti, upang maitugma nila ang mga butas sa PCB.

Dahil ito ay isang masikip na akma, kailangan mo ng ilang kontroladong puwersa upang ilagay ang microcontroller. Ang bentahe ay, na hindi ito nahuhulog. Nangangahulugan ito, maaari mong kunin ang iyong oras at solder ito mula sa likuran.

Hakbang 8: Paghinang # 5: Idagdag ang Mga Hawak ng Baterya (huling Hakbang)

Paghinang # 5: Idagdag ang Mga Hawak ng Baterya (huling Hakbang)
Paghinang # 5: Idagdag ang Mga Hawak ng Baterya (huling Hakbang)
Paghinang # 5: Idagdag ang Mga Hawak ng Baterya (huling Hakbang)
Paghinang # 5: Idagdag ang Mga Hawak ng Baterya (huling Hakbang)
Paghinang # 5: Idagdag ang Mga Hawak ng Baterya (huling Hakbang)
Paghinang # 5: Idagdag ang Mga Hawak ng Baterya (huling Hakbang)

Sa wakas kailangan mong idagdag ang mga may hawak ng baterya sa likuran. Para sa mga ito, simpleng ginagamit mo ang flux pen at basa ang lahat ng apat na pad at pagkatapos ay kumuha ng solder sa iyong iron. Maingat na ihanay ang may hawak ng baterya sa parehong pad. Sa magkabilang dulo ng mga contact dapat mayroong parehong dami ng PCB pad na nakikita. Hawakan ang PCB pad at ang binti ng may hawak ng baterya gamit ang iyong bakal. Ang solder ay dadaloy sa ilalim ng pad at sa ibabaw nito at i-secure ito sa lugar tulad ng ipinakita sa imahe. Kung mayroon kang mga problema dito, maaari kang magdagdag ng karagdagang pagkilos ng bagay sa panulat.

Hakbang 9: Flashing ang Emulator

Flashing ang Emulator
Flashing ang Emulator
Flashing ang Emulator
Flashing ang Emulator
Flashing ang Emulator
Flashing ang Emulator

Sa naka-attach na archive ng zip na "kim-uno-firmware.zip" maaari mong makita ang source code para sa emulator kasama ang isang naipon na "main.hex" na maaari mong direktang i-upload sa microcontroller.

Bago mo talaga ito magamit, kailangan mong itakda ang mga fuse bits ng microcontroller, upang magamit nito ang panloob na 8 MHz na orasan nang hindi ito hinahati sa kalahati. Maaari mong tapusin ang trabaho sa sumusunod na utos:

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

Kung hindi mo alam ang avrdude: ito ay isang programa para sa pag-upload ng mga programa sa isang microcontroller. Maaari kang matuto nang higit pa tungkol dito. Karaniwang nai-install mo ito at pagkatapos ay handa na itong gamitin. Para sa iyong pag-set up maaaring kailanganin mong baguhin ang argument ng "-P" sa isa pang serial port. Mangyaring suriin sa iyong computer kung aling serial port ang ginagamit (hal. Sa loob ng Arduino IDE).

Pagkatapos nito maaari mong i-flash ang firmware sa microcontroller gamit ang utos na ito:

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

Muli: ang parehong bagay ay nalalapat sa "-P" tulad ng nasa itaas.

Dahil hindi ako nagmamay-ari ng isang "propesyonal" na ISP (In-System Programmer) palagi kong ginagamit ang aking Arduino UNO (tingnan ang imahe) at ang sketch na na-attach ko ("arduino-isp.ino", mula kay Randall Bohn). Alam ko na mayroong isang mas bagong bersyon, ngunit sa bersyon na ito ay nagkaroon ako ng zero na problema sa huling limang taon, kaya't pinapanatili ko ito. Gumagana lang ito. Gamit ang komento sa header ng sketch nakukuha mo ang pinout sa Arduino UNO at ginagamit ang iskema ng KIM Uno (tingnan ang naka-attach) maaari mong makuha ang pinout ng 1x6 ISP header sa KIM Uno. Ang square pin, malapit sa pitong segment na display ay pin 1 (GND). Ang mga sumusunod na pin ay (sa tamang pagkakasunud-sunod): RESET, MOSI, MISO, SCK, VCC. Maaari mong ikonekta ang VCC alinman sa 3V3 o sa 5V.

Kung hindi mo naidagdag ang 1x6 pin header maaari kang gumamit ng mga wire ng tinapay at ilagay ito sa mga butas ng koneksyon at i-anggulo ang mga ito sa iyong daliri - tulad ng ipinakita sa larawan. Gumagawa ito ng sapat na contact upang mai-flash ang firmware at maitakda ang mga piyus. Ngunit kung gusto mo ng isang mas permanenteng pag-set up, dapat mong tiyak na idagdag ang mga header ng 1x6 pin.

Mayroon akong dalawang mga aparato: isang bersyon ng produksyon nang walang mga header ng pin at isang bersyon ng pag-unlad na may mga header ng pin na iniiwan kong konektado at paulit-ulit kong ginagamit ito sa panahon ng pag-unlad. Mas komportable ito.

Hakbang 10: Tapos na

Tapos na
Tapos na
Tapos na
Tapos na

Ngayon ay tapos ka na at maaaring magsimulang magsulat ng iyong sariling mga subleq na programa sa papel, i-assemble ito at pagkatapos ay ipasok ito sa memorya.

Ang KIM Uno ay may kasamang paunang naka-program na pagkalkula ng Fibonacci na nagsisimula sa lokasyon ng memorya na 0x0a. Ito ay itinakda sa pamamagitan ng default sa n = 6 kaya dapat magresulta sa isang halaga ng 8. Pindutin ang "Pumunta" upang simulan ang pagkalkula.

Hakbang 11: Pagsusuri sa Disenyo ng PCB

Pagsusuri sa Disenyo ng PCB
Pagsusuri sa Disenyo ng PCB
Pagsusuri sa Disenyo ng PCB
Pagsusuri sa Disenyo ng PCB

Matapos makumpleto ang proyektong ito natagpuan ko ang isang pares ng mga puntos na kapansin-pansin at dapat talakayin sa isang bagong rebisyon ng lupon:

  • ang screen ng seda ng ATMega328p ay hindi ang karaniwang bingaw kung saan matatagpuan ang unang pin. Ang DIP-28 footprint ay walang kahit isang square pad kung saan matatagpuan ang unang pin. Tiyak na mapapabuti ito sa isang mas detalyadong silkscreen upang maiwasan ang pagkalito
  • ang header ng ISP ay walang mga label ng koneksyon sa sutla na screen. Ginagawa nitong mahirap makilala kung paano ito ikonekta sa ISP
  • ang header ng ISP ay maaaring mabago sa isang 2x6 pin header na may isang karaniwang layout ng pin upang maiwasan ang anumang pagkalito

Bukod sa mga puntong iyon medyo natutuwa ako kung paano ito nagtrabaho at nagtrabaho sa unang pagsubok.

Hakbang 12: Paano Mag-Program SUBLEQ?

Image
Image
Paano Mag-Program SUBLEQ?
Paano Mag-Program SUBLEQ?
Paano Mag-Program SUBLEQ?
Paano Mag-Program SUBLEQ?

Tulad ng nabanggit sa simula, ang kasalukuyang firmware ng KIM Uno ay gumaya sa isang One Instruction Set Computer (OISC) at nagbibigay ng tagubilin sa subleq upang maisagawa ang pagkalkula.

Ang tagubilin sa subleq ay nangangahulugang ibawas at sangay kung mas mababa sa o katumbas ng zero. Sa pseudo-code mukhang ito ang sumusunod:

subleq A B C mem [B] = mem [B] - mem [A]; kung (mem [B] <= 0) goto C;

Dahil ang KIM Uno ay gumaya ng isang 8-bit machine, ang lahat ng mga argumentong A, B at C ay 8 bit na halaga at samakatuwid maaari nitong tugunan ang isang kabuuang pangunahing memorya ng 256 byte. Malinaw na maaari itong mapalawak, sa pamamagitan ng paggawa ng mga halagang A, B at C na maraming halaga ng mga byte. Ngunit sa ngayon panatilihin nating simple.

Ang KIM Uno ay mayroon ding "mga peripheral": ang display at keyboard. Gumagamit ito ng isang memory mapped na arkitektura upang i-interface ang mga peripheral, kahit na ang memorya ng mapa ay napaka-simple:

  • 0x00 = ang Z register (zero) at dapat panatilihing zero.
  • 0x01 - 0x06 = anim na byte na kumakatawan sa halaga ng bawat mga segment ng pagpapakita (mula pakanan hanggang kaliwa). Isang halagang 0xf - tingnan ang source code (main.c) para sa higit pang mga detalye.
  • 0x07, 0x08, 0x09 = tatlong byte kung saan ang bawat byte ay kumakatawan sa dalawang pitong segment na nagpapakita (mula pakanan hanggang kaliwa). Pinapayagan ng mga lokasyon ng memorya ang simpleng pagpapakita ng isang resulta nang hindi pinaghahati ang resulta sa dalawang nibble upang ilagay ito sa iisang mga lokasyon ng memorya ng digit na 0x01 - 0x06.
  • 0x0a + = Ang isang programa ay nagsisimula sa 0x0a. Sa kasalukuyan ang "Go" key ay nagpapatupad mula sa 0x0a naayos.

Sa impormasyong ito maaari na ngayong magsulat ang isang programa sa assembler at ipasok ang mga tagubilin sa memorya at pagkatapos ay isagawa ito. Dahil mayroon lamang isang tagubilin, ang mga argumento lamang (A, B at C) ang ipinasok. Kaya pagkatapos ng tatlong lokasyon ng memorya ang mga susunod na argumento ng tagubilin ay nagsisimula at iba pa.

Nakalakip sa hakbang na ito maaari mong makita ang file na "fibonacci.s" at isang imahe din ng program na nakasulat sa kamay na isang halimbawa ng pagpapatupad ng Fibonacci. Ngunit maghintay: mayroong tatlong mga tagubiling ginamit - partikular ang ADD, MOV at HLT - na hindi subleq. "Ano ang deal? Hindi mo sinabi na iisa lang ang tagubilin, subleq?" tinatanong mo Napakadali nito: sa subleq maaaring madaling gayahin ng isang tao ang mga tagubiling iyon:

Ang MOV a, b - kopyahin ang data sa lokasyon a hanggang b ay maaaring binubuo ng:

  1. subleq b, b, 2 (susunod na tagubilin)
  2. subleq a, Z, 3 (susunod na tagubilin)
  3. subleq Z, b, 4 (susunod na tagubilin)
  4. subleq Z, Z, hal. 5 (susunod na tagubilin)

Gamit ang tampok na pagbabawas ng subleq, na kung saan ay mem - mem [a] at na-o-overtake ang mem sa resulta, ang halaga ay nakopya gamit ang zero register. At ang "subleq Z, Z, …" simpleng pag-reset ng zero register sa 0, anuman ang halaga ng Z.

ADD a, b - nagdaragdag ng mga halagang a + b at iniimbak ang kabuuan sa b na maaaring binubuo ng:

  1. subleq a, Z, 2 (susunod na tagubilin)
  2. subleq Z, b, 3 (susunod na tagubilin)
  3. subleq Z, Z, hal. 4 (susunod na tagubilin)

Kinakalkula lamang ng tagubiling ito ang mem - (- mem [a]) na mem + mem [a] sa pamamagitan din ng paggamit ng tampok na pagbabawas.

HLT - pinahinto ang CPU at tinatapos ang pagpapatupad:

Sa pamamagitan ng kahulugan alam ng emulator na nais ng CPU na wakasan kung tumalon ito sa 0xff (o -1 kung inaawit). Kaya isang simple

subleq Z, Z, -1

ginagawa ang trabaho at ipinapahiwatig sa emulator, na dapat itong wakasan ang pagtulad.

Gamit ang tatlong simpleng tagubilin na ito, ang Fibonacci algorithm ay maaaring ipatupad at mahusay na gumana. Ito ay, dahil ang OISC ay maaaring makalkula ang lahat ng bagay na ang isang "totoong" computer ay maaaring makalkula sa subleq lamang ng pagtuturo. Ngunit syempre, maraming mga tradeoff na magagawa - tulad ng haba ng code at bilis. Ngunit gayunpaman ito ay isang mahusay na paraan upang malaman at mag-eksperimento sa mababang antas ng software ng mga computer at computer.

Nakalakip sa hakbang na ito maaari mo ring makita ang zip archive na "kim_uno_tools.zip". Naglalaman ito ng ilang pangunahing assembler at simulator para sa KIM Uno. Ang mga ito ay nakasulat sa NodeJS - tiyaking na-install mo ito.

Pag-iipon ng mga programa

Kung pagtingin mo ang "fibonacci / fibonacci.s" makikita mo na ito ay ang mapagkukunan ng code para sa tinalakay na implementasyon ng fibonacci. Upang tipunin ito at gumawa ng isang programa dito, na maaaring tumakbo ang KIM Uno, ipasok mo ang sumusunod na utos (sa ugat ng nakuha na "kim_uno_tools.zip" archive):

node assemble.js fibonacci / fibonacci.s

at ito ay maaaring mag-print ng isang error kung nagkamali ka o natapon ang nagresultang programa. Upang mai-save ito, maaari mong kopyahin ang output at i-save ito sa isang file o simpleng patakbuhin ang utos na ito:

node assemble.js fibonacci / fibonacci.s> yourfile.h

Ang output ay naka-format sa isang paraan na maaari itong direktang maisama sa KIM Uno firmware bilang isang C header file, ngunit maaari din itong gamitin ng simulator upang gayahin. Ipasok lamang:

node sim.js yourfile.h

At ipapakita sa iyo ang resulta ng simulation at ang inaasahang output mula sa KIM Uno sa display.

Ito ay isang napaka-maikling pagpapakilala sa mga tool na ito; Inirerekumenda ko sa iyo na maglaro kasama nila at tingnan kung paano gumagana ang mga ito. Sa ganitong paraan makakakuha ka ng malalim na kaalaman at matutunan ang mga prinsipyo ng paggana sa likod ng mga CPU, tagubilin, assembler at emulator;-)

Hakbang 13: Outlook

Outlook
Outlook
Outlook
Outlook
Outlook
Outlook

Binabati kita

Kung nabasa mo ito marahil ay pinagdaanan mo ang buong itinuro at nagtayo ng iyong sariling KIM Uno. Ang ganda talaga nito.

Ngunit ang paglalakbay ay hindi nagtatapos dito - mayroong isang walang katapusang bilang ng mga pagpipilian kung paano mo maaaring baguhin ang KIM Uno at ipasadya ito sa iyong mga pangangailangan at kagustuhan.

Halimbawa ang KIM Uno ay maaaring nilagyan ng isang "totoong" retro CPU emulator na maaaring tularan ang sikat na MOS 6502 o Intel 8085, 8086 o 8088. Pagkatapos ay pupunta ito sa daan sa aking paunang paningin, bago ko malaman ang tungkol sa OISCs.

Ngunit may mga posibleng iba pang paggamit, dahil ang disenyo ng hardware ay medyo pangkaraniwan. Ang KIM Uno ay maaaring magamit bilang…

  • … Isang remote control hal. para sa mga CNC o iba pang mga aparato. Marahil ay naka-wire o nilagyan ng isang IR diode o anumang iba pang wireless sender
  • … isang (hexadecimal) calculator ng bulsa. Ang firmware ay maaaring iakma nang napakadali at ang disenyo ng board ay hindi kailangang baguhin nang labis. Marahil ang silkscreen ay maaaring iakma sa mga pagpapatakbo ng matematika at ang puwang sa pagitan ng mga segment ay maaaring alisin. Maliban dito, handa na ito para sa pagbabagong ito

Inaasahan kong napakasaya mo sa pagsunod at sana ay maitayo ang KIM Uno tulad ng pagdidisenyo at pagpaplano ko rito. At kung pahabain mo ito o binago - mangyaring ipaalam sa akin. Cheers!

Paligsahan sa PCB
Paligsahan sa PCB
Paligsahan sa PCB
Paligsahan sa PCB

Runner Up sa PCB Contest

Inirerekumendang: