Toimivan tietokoneen tekeminen Arduino Unosta

Onko Arduino-harrastajia siellä?

Hei, olen ajatellut tätä ja mitä enemmän ajattelen sitä, sitä enemmän uskon voivani todella tehdä tämän. Ideani on pohjimmiltaan seuraava: Tee toimiva tietokone Arduino Uno -mikro-ohjaimesta.

Ainoa tavoitteeni tälle tietokoneelle on kyky muokata ja suorittaa BASIC-ohjelmia. Siinä kaikki. Haluan sen vain ohjelmointia varten, koska se on melkein ainoa asia, josta minua kiinnostaa juuri nyt 🙂

Joten näen sen, tarvitsen kolme päälaitteistokomponenttia:

  1. jonkinlainen näyttö (VGA-näyttö tai jokin muu)
  2. jokin tapa rekisteröidä näppäimistösyöttö ja
  3. jokin tapa tallentaa tietoja ulkoiseen muistiin .

Tietääkö kukaan keinoja tehdä tämä? Tiedän tapoja näyttää ruudulla, mutta en tiedä hyvää sovellusliittymää / laitteistokomponenttia näppäimistön syötteen rekisteröimiseksi tai tallentaa ulkoista muistia.

Tarvitsen paljon apua tässä asiassa. Voisiko kukaan auttaa minua ja tarjota ideoita ja hyödyllisiä vinkkejä ja ehdotuksia hyvälle laitteistolle / hyvälle avoimen lähdekoodin kirjastolle tai kahdelle, tai kolme tai kymmenen?

Lisätty:

Blogi Arduino Uno -tietokoneen luominen kaikille kiinnostuneille.

Kommentit

  • Tämä kuulostaa kuten eräänlainen hiuspohjainen projekti;) Odotan innolla kuulevani kuinka pääset siihen. Toivon, että ’ blogitat edistymisesi.
  • Halusin vain tuoda esiin samanlaisen projektin, joka saattaa kiinnostaa sinua. Parallax Potkuri -siru on kehittänyt melko paljon BASICin osalta. Saatavilla on vähintään kaksi erilaista tulkkia. Lisäksi sillä on mahdollisuus lähettää signaalia suoraan näytön televisioon.
  • Siellä ’ jopa Demokortti , jossa on VGA, TV, PS / 2-näppäimistö ja hiiri, ääni ja muutama muu liitin. Nyt tiedän, että haluat tehdä tämän Arduinon kanssa, mutta ainakin voit käyttää siellä esitettyjä piirilevykaavioita saadaksesi joitain perusvinkkejä siitä, miten he tekivät signaalinmuodostuksen ja niin edelleen (it ’ s kaikki ohjelmistona).
  • Myös +1, jos haluat tehdä jotain tällaista! Muistan jo peruskoulussa, kun muutimme Orao -tietokoneesta Pentium III -tietokoneisiin BASIC menetti kaiken viehätyksensä.
  • Vaihtoehto VGA-näytön käyttäminen on poimia LCD-suojus ja käyttää sitä näytössä. Saatat joutua käpertymään, mutta sen kanssa tekeminen on paljon helpompaa!

Vastaa

Näppäimistö voi olla tehdään yksinkertaisesti PS / 2-näppäimistöllä – se on vain sarja, ja siellä on paljon opetusohjelmia.

Tietojen tallentaminen voidaan tehdä yksinkertaisesti SD-kortilla – suoja on ulospäin siellä on jo tehtävä se.

Mitä tulee videoon – se on huomattavasti vaikeampaa. Jos haluat Arduinon tuottavan esimerkiksi PAL-videosignaalin, sinun on leikattava työsi puolestasi. Kyllä, se on mahdollista, ja joku on luonut Arduinon ”pong” -pelin, mutta se on erittäin paksu grafiikka ja vain mustavalkoinen.

VGA: lle tarvitset jonkinlaisen käyttöliittymän työn tekemiseen puolestasi. Sparkfun myi aikaisemmin Picaso-näytönohjaimen , joka saatettiin toimimaan Arduinon kanssa, mutta valitettavasti se on lopetettu eikä korvausta ole vielä suunniteltu. .

TBH, paras vaihtoehto olisi käyttää jotain Wyse -päätettä ja kommunikoida Arduinon kanssa täysin sarjaliitännällä. Paljon yksinkertaisempaa kuin sekoittaminen videosignaalien ja vastaavien kanssa.

Vastaa

Näen Olinin huomautuksen täällä – jos haluat muokata / suorittaa / oppia BASICia, käytä vain tietokonetta .

Jos tavoitteena on kuitenkin luoda tietokone, joka voi käyttää BASICia ja oppia laitteistosta ja alemman tason toteutuksesta samanaikaisesti, tämä on hieman erilainen. , se on loistava tapa parantaa tietoa ja saat varmasti siitä paljon hyötyä. Kuten Steven mainitsee kaikki sekavat ja (enimmäkseen) epäolennaiset kerrokset, jotka esim. Windows on riisuttu, jättäen peruskäsitteet.

Joka tapauksessa saatat haluta tarkastella jotain hiukan tehokkaampaa, kuten PIC32, koska sen pitäisi pystyä käsittelemään kaikki toiminnot (esim. perus-VGA) se on oma.
Tässä on Arduino-yhteensopiva levy, UNO32
Maximite on tietokone, jonka BICIC-tulkki perustuu PIC32: een. Haluat ehkä etsiä muutamia ideoita Suunnittelu ja rakentaminen -tilasta.

Kommentit

  • Ottaen huomioon PC ’ -tietokoneiden tekniset tiedot, jotka käyttävät Microsoft Basicia Z80: n alla, ei pitäisi olla todellista ongelmaa .

Vastaa

Onneasi, tavallaan, koska työskentelen todella arduino-tietokoneella juuri nyt! Se ei kuitenkaan ole paljon, vain ensimmäinen malli. Laiteohjelmisto on myös hyvin yksinkertainen ja siinä on pieni sovellusliittymä. Mutta asia toimii! Ei tarpeeksi hyvä muokkaamaan BASICia (tai muuta kieltä paitsi sen omaa kieltä), mutta tämä on vain ensimmäinen malli. Mobo on melko yksinkertainen, ja käytin tätä . Tässä on käytetty laiteohjelmisto:

 #include <LCD4884.h> #include <SD.h> #include <SPI.h> #include <SoftwareSerial.h> void setup() { lcd.LCD_init(); lcd.LCD_clear(); lcd.LCD_write_string_big(0, 0, "Gilbert", MENU_NORMAL); pinMode(10, OUTPUT); delay(3000); } byte line = 10; SoftwareSerial FC(8,9); byte RAM[501]; byte Error = 0; char tempString[15]; void loop() { // <editor-fold defaultstate="collapsed" desc="Initilization"> FC.begin(4800); if (!FC.available()) { lcd.LCD_clear(); lcd.LCD_write_string(0, 0, "FC Failed!", MENU_NORMAL); delay(1000); } int address = 1; lcd.LCD_clear(); lcd.LCD_write_string(0, 0, "SD Init...", MENU_NORMAL); if (!SD.begin(10)) { lcd.LCD_clear(); lcd.LCD_write_string(0, 0, "SD Failed!", MENU_NORMAL); while (true) { ; } } lcd.LCD_clear(); lcd.LCD_write_string(0, 0, "Loading...", MENU_NORMAL); File file; file = SD.open("BIOS.mk8", FILE_READ); RAM[0] = 53; RAM[file.read()] = 8; while (file.available()) { RAM[address] = file.read(); address++; } address++; RAM[address] = 55; long loops = 0; long time1 = 0; long time2 = 0; address = 0; byte instruction = 0; int exeaddress; byte tempbyte; lcd.LCD_clear(); lcd.LCD_write_string(0, 0, "EMU. Started", MENU_NORMAL);// </editor-fold> //emulation loop while(true){ switch(RAM[address]){ // <editor-fold defaultstate="collapsed" desc="Codes 1-10"> case 1: {//getCycleCount[intvar i] tempbyte = (loops) / ((time2 - time1) / 1000); convert(address + 1); writeInt(exeaddress, tempbyte); break; } case 2: {//getTemp[intvar i] tempbyte = (((analogRead(A1) / 1024.0) * 5.0) - .5) * 100; convert(address + 1); writeInt(exeaddress, tempbyte); break; } case 3: {//getKey[intvar i] //Up 745 //Down 332 //Left 0 //Right 509 //Center 145 switch (analogRead(A0)) { case 745: { tempbyte = 1; break; } case 332: { tempbyte = 2; break; } case 0: { tempbyte = 3; break; } case 509: { tempbyte = 4; break; } case 145: { tempbyte = 5; break; } } convert(address + 1); writeInt(exeaddress, tempbyte); break; } case 4: {//printLine[variable v] if (line > 70) { lcd.LCD_clear(); line = 0; } switch(RAM[address + 1]){ case 9:{ tempbyte = RAM[address + 1]; tempString[0] = char(tempbyte); break; } case 15:{ convert(address + 1); break; } } lcd.LCD_write_string(0, line, tempString, MENU_NORMAL); line += 10; break; } case 5: {//exe detector exeaddress = address; break; } case 7: {//lcdClear lcd.LCD_clear(); line = 0; break; } case 10: {//declareInteger[string name] convert(address + 1); tempbyte = 0; while (tempbyte != 15) { RAM[address + tempbyte + 1] = tempString[tempbyte]; } break; }// </editor-fold> case 11:{//getError[intvar i] tempbyte = Error; Error = 0; convert(address + 1); writeInt(exeaddress, tempbyte); break; } case 12:{//deadlock while(true){;} break; } case 13:{//assignInteger[int value, intvar i] tempbyte = RAM[address + 1]; convert(address + 2); writeInt(exeaddress, tempbyte); break; } case 14:{//transferInteger[intvar i1, intvar i2] convert(address + 1); writeInt(exeaddress, RAM[getIntAddr(exeaddress)]); break; } } // <editor-fold defaultstate="collapsed" desc="post loop process"> address++; time2 = millis(); loops++; if (loops < 0) { loops = 0; }// </editor-fold> } } void convert(int startAddress){ byte charadd = 0; while(RAM[startAddress] != 6){ tempString[charadd] = RAM[startAddress]; charadd++; startAddress++; } } void writeInt(int exeStart, byte value){ byte count = 0; char compare[15]; while(true){ if (RAM[exeStart] == 9) { exeStart++; while (count != 15) { compare[count] = RAM[exeStart]; exeStart++; count++; } if(compare == tempString){ RAM[exeStart + 2] = value; break; }else{ exeStart += 3; } if(RAM[exeStart] == 8){ Error = 1; } } } } int getIntAddr(int exeStart){ byte count = 0; char compare[15]; while(true){ if (RAM[exeStart] == 9) { exeStart++; while (count != 15) { compare[count] = RAM[exeStart]; exeStart++; count++; } if(compare == tempString){ return RAM[exeStart + 2]; break; }else{ exeStart += 3; } if(RAM[exeStart] == 8){ Error = 1; } } } } 

Menetelmän kuvausta on vaikea selittää, mutta koodi on tallennettu raakatavuina. Minulla pitäisi olla kehittämisohjelmisto pian valmiina … Toivottavasti tämä auttaa! Jos haluat joskus käyttää sitä mihin tahansa projektiin Sinulla on oltava BIOS.mk8 -tiedosto SD-kortin juurihakemistossa tai järjestelmä ei toimi.

Kommentit

  • Onnekas, jos hän ei ole ’ tajunnut sen kolmen vuoden kuluessa siitä, kun hän ensin kysyi
  • @ScottSeidman Joo, hyvä asia. Myös laiteohjelmistoa testataan edelleen, ja versiosta puuttuu keskeisiä elementtejä.

Vastaa

Kaikella kunnioituksella David Brinille (minä satun pitämään hänen kirjoistaan paljon; Minulla ei ole pätevyyttä arvioida kuinka hyvä hän on astrofyysikkona), hän ei ole ohjelmoija tai kouluttaja.

Olin mukana ja koodasin tietokoneiden alkuaikoina ja kirjoitin melkoisen määrän BASIC-koodia. Ja olen kirjoittanut koodia ammattimaisesti siitä lähtien.

Siksi käytimme tuolloin BASICia, että kaksi vaihtoehtoa olivat käyttää BASICia tai kirjoittaa kokoonpanossa, ja kokoonpanoa oli sekä vaikeampaa ymmärtää että paljon muuta hankala käyttää. Joten, BASIC.

Yli 30 vuoden ajan ohjelmoinnin opetuksessa on tapahtunut merkittäviä parannuksia. Vaimoni opettaa aloittavaa ohjelmointikurssia, joka käyttää Alicea (www.alice.org), ja se on paljon paremmin käsitteellisesti kuin vanhemmat lähestymistavat.

Mielestäni Brinin ratkaisu oli melko tyylikäs. Voit rakentaa jotain melko yksinkertaista Vadelma PI: lle. Arduinossa mielestäni se on haastavaa. täyttää kaikki tarvitsemasi 2K RAM-muistiin; siinä on oltava mitä tahansa käyttöjärjestelmää / näyttöä, jonka päätät kirjoittaa, komentotulkki, koodi näytön suorittamiseksi ja itse perusohjelman tallennustila.

Ei mainitse se tosiasia, että joudut tekemään paljon vaikeita ja mukautettuja ohjelmointia, jotta voit kirjoittaa koodia yksinkertaisessa env: ssä silitys.

Vastaa

En ymmärrä sitä. Jos haluat, että sinulla on vain keinot ohjelmoida Basicissa, suorita basic tulkki tietokoneellasi. En ymmärrä, kuinka luulet Arduinon auttavan tässä. Arduino on mikrokontrolleri, jossa on paljon hienoja ohjelmistoja laitteiston yksityiskohtien piilottamiseksi. Osa kustannuksista on alhaisempi suorituskyky ja enemmän resurssien käyttöä kuin vastaava ohjelma, joka suoritetaan suoraan paljaalla mikro-ohjaimella. Nyt haluat kirjoittaa Arduino-koodin muuttaaksesi sen takaisin yleiskäyttöisemmäksi tietokoneeksi, jotta voit vuorostaan käyttää Basic-tulkkia kyseisessä yleiskäyttöisessä tietokoneessa? Tällä ei ole juurikaan järkeä.

Koska ainoa tavoitteesi on pystyä muokkaamaan ja suorittamaan Basic-ohjelmia (suorittamaan Basic-tulkki), aloita ensin yleiskäyttöisemmällä laskentatasolla, mieluiten jopa sellaisella, joka hänellä on jo Basic-tulkki käytettävissä. Tietokoneesi on täsmälleen tällainen alusta. Jos haluat, että tämä on ulkoinen laitteisto, kuulostaa siltä, että hyllyltä poistettava yksi kortti tietokone vastaisi tarpeitasi paljon paremmin kuin Arduino.

Lisätty:

Sanot nyt älä halua ajaa tietokoneella ja sijoittaa tätä linkkiä joku haluaa komentorivin Basic lapselta oppia. Tosin en luen koko artikkelia (en pidä ihmisistä, jotka vastaavat linkeillä. Sinun pitäisi pystyä ilmaista mielipiteesi itsenäisesti muutamassa lauseessa), mutta en näe, kuinka komentoriviä käyttävä tietokone Basic-tulkki ei käsittele ongelmaa. Miksi Basic-tulkin ei sallita toimia tietokoneella, mutta se on OK juosta Arduinolla? Muista, että sanoit etukäteen, että ainoa tavoitteesi oli muokata ja suorittaa Basic-ohjelmia. Mikään siinä lausunnossa ei kerro, millä laitteistolla sen on suoritettava, eikä mikään myöhemmistä selityksistäsi selitä, miksi tietokone ei toimi kunnolla.

Komentorivillä toimii luultavasti Basic-tulkkeja. Vanha QBASIC saattaa silti toimia joissakin DOS-yhteensopivuustiloissa. Vaikka ei, vaikka olisit valmis omistautumaan laitteistolle, miten DOS: n ja QBASIC: n suorittaminen tietokoneella ei tarjoa pyytämääsi?

Kommentit

  • Tarkoitan, että en halua ’ halua ohjelmoida tietokoneelle. Haluan ohjelmoida samankaltaiseen ympäristöön kuin esimerkiksi Texas Instruments TI-84 +. Syynäni tähän? Katso seuraava linkki: ” Miksi Johnny voi ’ t Code ” salon.com/technology/feature/2006/09/14/basic/index.html
  • Tämä ei ole oikeastaan vastaus.Kyllä, toimenpideohjelman idea saattaa jäädä hieman keskelle, mutta missä olisimme, jos kukaan ei koskaan kokeisi mitään tavallisesta poikkeavaa, tai ylittää jo olemassa olevan rajan? Sanominen OP: lle, että se on ’ typerä idea, ei ole hyödyllinen eikä rakentava. OP on päättänyt, että hän ’ haluaisi tehdä sen, ja pyytää meiltä apua sen jatkamiseen. Hän ’ ei kysy, onko se ’ hyvä idea vai ei. Kyllä, se voi hyvinkin olla huono idea ™, mutta OP oppii valtavan määrän huomatessaan sen, mikä itsessään voi olla arvokkaampi kuin lopputulos.
  • @Majenko: Kirjoitin on kohtuullinen vastaus siihen, mitä OP alun perin kirjoitti. Muista, että hän sanoi ” Ainoa tavoitteeni tälle tietokoneelle on kyky muokata ja suorittaa BASIC-ohjelmia ” . Tämä ei ’ t sano mitään siitä, että se toimii vaihtoehtoisella laitteistolla. Ilmeisesti hän haluaa yksinkertaisen komentorivin perustulkin lasten opettamiseen. Kuinka tällaisen asian suorittaminen tietokoneella ei ole kelvollinen vastaus? Eikö ’ ta-tietokone ajaa QBASICia tai jotain mitä hän ’ pyytää?
  • @Olin OP on samaa mieltä kanssani … Luulen, että tulkitset kysymyksen väärin.
  • @Olin – ymmärrän Buttsin. Muistatko kotitietokoneet 70-luvun lopulla, 80-luvun alun? Lisäsit muistin, joka on kartoitettu 74LS373, ja voisit hallita I / O: ita poke -lausekkeiden avulla. Ei asennettavia virtuaalisia COM-ohjaimia, ei USB: tä mihin tahansa siltaan, ei monimutkaista kehittäjän IDE: tä ladattavaksi. SBC: t ovat vertailukelpoisia, mutta niiltä puuttuu yleensä kotitietokoneiden näppäimistö / videoliitäntä (ja kasettitallennustila!).

Vastaa

vastaus

Pidän ajatuksesta käyttää yleistä sovellusta, kuten BASIC, Arduinossa varsinkin jos olet itse rakentanut sen. Pidän siitä, että kätevä, paristokäyttöinen Arduino-laite käyttää haluamaasi sovellusta. Jos se olisin minä, käytän ehkä Arduino MEGA: ta, joten minulla olisi tarpeeksi nastoja näppäimistöä varten ja SD-suojus tallennusta varten.

Valitsin värillisen grafiikan LCD: n tai TFT-näytön VGA: n yli ohjelmoinnin ja yhteyksien yksinkertaisuuden vuoksi tapa seurata päivämäärää ja kellonaikaa (RTC) ja mikä on sovellus ilman internetiä tai verkkoa (ethernet-kilpi)? Ehkä ylimääräiset I2C-muistit (24LC256)? Ja muutama I2C MCP223017 vain siinä tapauksessa, että tarvitsisin muutaman ylimääräisen portin. Entä jos useat Arduinot tekevät rinnakkaisen tehtävän? Se parantaisi suorituskykyä, josta olen varma.

Kommentit

  • Yhteisö arvostaa linkkejä taulukoihin. Älä myöskään käytä liikaa isoilla kirjaimilla ja varmista, että vastauksesi on luettavissa lisäämällä välilyöntejä.
  • Se on nykyäänkin erittäin huonolaatuinen vastaus. Mutta tässä on joitain näkemyksiä, jotka voivat olla hyödyllisiä, jos ne puhdistetaan ja esitetään paremmin.

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *