Funkcionális számítógép készítése Arduino Uno-ból

Van ott Arduino-rajongó?

Hé, gondoltam erre és minél többet gondolkodom rajta, annál inkább azt hiszem, hogy valóban meg tudom ezt csinálni.Az ötletem alapvetően a következő: Készítsen egy funkcionális számítógépet egy Arduino Uno mikrovezérlőből.

A számítógépem egyetlen célja a képesség a BASIC programok szerkesztésére és végrehajtására. Ez minden. Csak a programozáshoz szeretném, mivel ez csak az egyetlen dolog, ami jelenleg érdekel 🙂

Tehát ahogy látom, három fő hardverelemre lesz szükségem:

  1. a kijelző valamilyen formája (VGA képernyő vagy valami hasonló)
  2. a billentyűzet bevitelének valamilyen módja, és
  3. az adatok külső memóriába történő tárolásának valamilyen módja .

Tud valaki valamilyen módon erre? Tudok néhány módot a képernyőn való megjelenítésre, de nem ismerek jó API / hardver komponenst a billentyűzet bevitelének regisztrálásához vagy tárolja a külső memóriát.

Ehhez sok segítségre lesz szükségem. Tudna valaki segíteni nekem, és ötleteket, hasznos tippeket és javaslatokat kínálni a jó hardverhez / egy jó nyílt forráskódú könyvtárhoz, vagy kettőhöz, vagy három, vagy tíz?

Hozzáadva:

Blog Arduino Uno számítógép készítése mindenkinek, akit érdekel.

Megjegyzések

  • Ez hangzik mint az én hajszálú projektem;) Várom, hogy halljam, hogyan állsz vele. Remélem, hogy ‘ blogot ad a fejlődésről.
  • Csak egy hasonló projektre akartam felhívni a figyelmet, amely érdekes lehet. A Parallax Propeller chip meglehetősen sokat fejlődött, ami a BASIC-ot illeti. Legalább két különböző tolmács áll rendelkezésre. Ráadásul képes közvetlenül kimenni a jelet a monitor TV-jébe.
  • Ott ‘ még a Demo Board , amely rendelkezik VGA, TV, PS / 2 billentyűzettel és egérrel, hanggal és még néhány csatlakozóval. Most már tudom, hogy ezt Arduinóval akarod megtenni, de legalább használhatnád az ott bemutatott táblák vázlatait, hogy néhány alapvető mutatót kapjunk arról, hogy hogyan csinálták a jelképzést és így tovább (it ‘ s mind szoftveresen).
  • Szintén +1, ha ilyesmit akarsz csinálni! Emlékszem még az általános iskolában, amikor az Orao számítógépet Pentium III számítógépekre költöztettük. A BASIC elvesztette varázsát.
  • A A VGA-kijelző használatával fel kell venni egy LCD-pajzsot, és azt használni a kijelzőhöz. Lehet, hogy hunyorítania kell, de a kapcsolattartás SOKKAL könnyebb lesz!

Válasz

A billentyűzet lehet egyszerűen PS / 2 billentyűzettel végezhető – ez csak soros, és rengeteg oktatóanyag van hozzá.

Az adatok tárolása egyszerűen SD-kártyán történhet – van egy pajzs

Ami a videót illeti – ez sokkal nehezebb. Ha azt szeretné, hogy az Arduino például PAL videojelet generáljon, akkor a munkáját kivágja. Igen, ez lehetséges, és valaki létrehozott egy Arduino “pong” játékot, de ez nagyon vaskos grafika és csak fekete-fehér.

A VGA használatához valamilyen felületre van szükség, hogy elvégezhesse a munkát. A Sparkfun eladta a Picaso videokártyát , amely működőképessé tehető az Arduino-val, de sajnos ezt megszüntették, és egyelőre nincsenek tervek a cserére. .

TBH a legjobb megoldás az lenne, ha valami Wyse terminált használna, és teljes egészében soros kommunikációval kommunikálna az Arduinóval. Sokkal egyszerűbb, mint a videojelekkel és ilyesmivel kavarni.

Válasz

Látom itt Olin pontját – ha csak a BASIC-ot akarod szerkeszteni / futtatni / megtanulni, csak használj számítógépet .

Ha azonban a cél egy olyan számítógép létrehozása, amely képes futtatni a BASIC-ot, és megismerheti a hardvert és az alacsonyabb szintű megvalósítást egyszerre, akkor ez egy kicsit más. , ez nagyszerű módja az ismeretek fejlesztésének, és biztos vagyok benne, hogy sokat fogsz kihozni belőle. Mivel Steven megemlíti az összes zavaros és (többnyire) lényegtelen réteget, amelyek pl. A Windows eltávolítható, így az alapvető (szójáték nélküli) fogalmak megmaradnak.

Mindenesetre érdemes megnéznie egy kicsit erőteljesebb dolgot, például a PIC32-et ehhez, mivel képesnek kell lennie az összes funkció (például az alap VGA) kezelésére a sajátja.
Itt van egy Arduino kompatibilis tábla, a UNO32
A Maximite egy számítógép, amely BASIC tolmácsot használ egy PIC32 körül, érdemes néhány ötletet megnéznie a Tervezés és kivitelezés oldalon.

Megjegyzések

  • Tekintettel a Microsoft ‘ PC-k specifikációira, amelyek a Microsoft Basic-et Z80 alatt futtatják, nem lehet valódi probléma .

Válasz

Szerencséd van, valahogy, mert én most egy arduino PC-n dolgozom! Ez nem sok, csak az első modell. A firmware szintén nagyon egyszerű, és van egy kis API-ja. De a dolog működik! Nem elég jó a BASIC (vagy bármely más nyelv, kivéve a saját nyelvét) szerkesztéséhez, de ez csak az első modell. A mobo meglehetősen egyszerű, én pedig ezt használtam. Itt található a firmware:

 #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; } } } } 

A módszer leírását nehéz megmagyarázni, de a kód nyers bájtként van tárolva. Hamarosan fel kell készülnöm egy fejlesztő szoftverrel. Remélem, ez segít! Ha valaha is ezt szeretné használni bármilyen projektnél, BIOS.mk8 fájlnak kell lennie az SD gyökérkönyvtárában, különben a rendszer nem fog működni.

Megjegyzések

  • Szerencsés, ha nem ‘ nem találta ki azt a három évet, amióta először kérdezte
  • @ScottSeidman Igen, jó. Ezenkívül a firmware még tesztelés alatt áll, és ez verzióból hiányoznak a legfontosabb elemek.

Válasz

Minden tisztelettel David Brinnek (történetesen nagyon szeretem a könyveit; Nem vagyok képes megítélni, mennyire jó asztrofizikusként), ő sem programozó, sem oktató.

A PC-k kezdeteiben jártam és kódoltam, és elég sok BASIC kódot írtam. És azóta szakmailag írtam a kódot.

A BASIC akkori használatát az volt, hogy két lehetősége a BASIC használata vagy az összeállításban való írás volt, és az összeállítást nehezebb volt megérteni, és még sok minden más nehézkes használni. Tehát, BASIC.

Az azóta eltelt 30 év alatt jelentős javulások történtek a programozás terén. A feleségem egy kezdő programozási órát tanít, amely Alice-t használ (www.alice.org), és fogalmilag sokkal jobb, mint a régebbi megközelítések.

Úgy gondolom, hogy Brin megoldása elég elegáns volt. Felépíthet valami nagyon egyszerűt egy Raspberry PI-re. Az arduino-n azt hiszem, hogy kihívást jelent. hogy minden szükségeset 2K RAM-ba töltsön; amihez bármilyen operációs rendszert / monitort kell tartania, amit végül ír, parancsértelmezőt, a megjelenítéshez szükséges kódot és magának az alapprogramnak a tárhelyét.

Nem említsd meg azt a tényt, hogy nagyon sok nehéz és egyedi programozást kell végrehajtanod, hogy egyszerű env-be tudj írni kódot vasalás.

Válasz

Nem értem. Ha csak eszközzel szeretne programozni a Basic-ben, futtasson egy basic-et tolmács a számítógépén. Nem értem, hogyan várja az Arduino segítségét ebben. Az Arduino egy mikrovezérlő, sok divatos szoftverrel a hardver részleteinek elrejtésére. Ennek költségei részben alacsonyabb teljesítményt és több erőforrás-felhasználást jelentenek, mint a puszta mikrokontrolleren közvetlenül futó egyenértékű program. Most Arduino kódot szeretne írni, hogy újra általános célú számítógéppé alakítsa, és így futtathat egy Basic tolmácsot ezen az általános számítógépen? Ennek kevés értelme van.

Mivel az egyetlen célja az, hogy képes legyen szerkeszteni és futtatni az Basic programokat (futtasson egy Basic tolmácsot), először is kezdjen egy általánosabb célú számítási platformmal, lehetőleg még egy is már elérhető egy Basic tolmács. A számítógéped pontosan ilyen platform. Ha azt szeretné, hogy ez külső hardver legyen, akkor úgy hangzik, hogy a készen kapható egykártyás számítógép sokkal jobban megfelelne az Ön igényeinek, mint egy Arduino.

Hozzáadva:

Ön most azt mondja, hogy ne akarj futtatni egy PC-n, és ezt a linket feltüntetni arról, hogy valaki azt akarja, hogy a Basic parancssori parancsot nyújtsa a gyerekének. Igaz, hogy nem olvastam el az egész cikket (nem szeretem, ha linkekkel válaszolnak az emberek. Tudnod kell tudni hogy néhány mondatban önállóan közölje a véleményét), de nem látom, hogy egy parancssort futtató számítógép, az Basic tolmács nem foglalkozik-e a problémájával. Miért nem engedélyezett a Basic tolmács futtatása a PC-n, de rendben van futni egy Arduinón? Ne feledje, elölről elmondta, hogy egyetlen célja az Basic programok szerkesztése és futtatása volt. Ebben a nyilatkozatban semmi nem mondja meg, hogy milyen hardveren kell futtatnia, és a későbbi magyarázatok egyike sem magyarázza meg, hogy a számítógép miért nem működik jól.

Valószínűleg vannak Basic értelmezők, amelyek a parancssoron futnak. A régi A QBASIC továbbra is működhet bizonyos DOS kompatibilitási módokban. Még ha nem is, mivel hajlandó erre szánni a hardvert, a DOS és a QBASIC futtatása egy PC-n nem biztosítja, amit kért?

Megjegyzések

  • Az volt a lényegem, hogy nem akarok ‘ programozni PC-n. Hasonló környezetben szeretnék programozni, mint például egy Texas Instruments TI-84 +. Az okom erre? Nézze meg a következő linket: ” Miért Johnny ‘ t Code ” salon.com/technology/feature/2006/09/14/basic/index.html
  • Ez nem igazán válasz.Igen, lehet, hogy az OP ötlete kissé középen maradt, de hol lennénk, ha soha senki nem próbálkozna semmi szokatlannal, vagy nem lépné túl a már létező határait? Az OP-nak azt mondani, hogy ‘ ostoba ötlet, nem hasznos és nem is konstruktív. Az OP úgy döntött, hogy ő ‘ szívesen csinálja, és segítséget kér tőlünk. ‘ nem kérdezi, hogy ez jó ötlet-e vagy sem ‘. Igen, lehet, hogy rossz ötletről van szó, de az OP rengeteg mindent megtanul, miközben rájön, ami maga is értékesebb lehet, mint a végeredmény.
  • @Majenko: Amit írtam, az egy ésszerű válasz arra, amit az OP eredetileg írt. Ne feledje, azt mondta, hogy ” Az egyetlen célom ezzel a számítógéppel a BASIC programok szerkesztésének és futtatásának képessége . Ez nem mond ‘ semmit arról, hogy alternatív hardveren fut. Nyilvánvalóan egyszerű parancssori alapértelmező tolmácsot akar a gyerekek tanításához. Hogyan nem érvényes válasz egy ilyen dolog PC-n? Nem ‘ ta a QBASIC-t futtató számítógép, vagy valami, amit pontosan ‘ kér?
  • @Olin Az OP egyetért velem … azt hiszem, rosszul értelmezed a kérdést.
  • @Olin – Meg tudom érteni a Buttokat. Emlékszel az otthoni számítógépekre a 70-es évek végén, a 80-as évek elején? Hozzáadott egy 74LS373 leképezett memóriát, és az poke utasításokkal vezérelheti az I / O-kat. Nincs telepíthető virtuális COM illesztőprogram, nincs USB bármilyen hídhoz, nincs összetett fejlesztői IDE betöltésre. Az SBC-k összehasonlíthatók, de általában hiányzik az otthoni számítógépek billentyűzet / videó felülete (és kazettatárolója!).

Válasz

Válasz

Tetszik egy közös alkalmazás, például a BASIC futtatásának ötlete Arduino-n főleg, ha saját maga készítette. Tetszik a kényelem, ha egy praktikus, akkumulátorral működő Arduino eszköz futtatja a kívánt alkalmazást. Ha én lennék, akkor talán Arduino MEGA-t használnék, így elegendő tűm lenne a kezelőhöz és SD-pajzs a tároláshoz.

VGA helyett színes grafikus LCD-t vagy TFT-képernyőt választanék a programozás és a kapcsolatok egyszerűsége érdekében a dátum és az idő (RTC) nyomon követésének módja, és mi az alkalmazás internet vagy hálózat nélkül (ethernet pajzs)? Lehet, hogy extra I2C RAM-ok (24LC256)? És néhány I2C MCP223017, hátha szükségem lenne néhány extra portra. Mi lenne, ha több Arduino párhuzamos feladatot végezne? Ez javítaná a teljesítményt. Biztos vagyok benne.

Megjegyzések

  • A közösség nagyra értékeli az adatlapokra mutató linkeket. Kérjük, ne használjon túl sokat nagybetűkkel, és győződjön meg róla, hogy válasza olvasható a szóközök hozzáadásával.
  • Valójában ez egy nagyon rossz minőségű válasz. De vannak itt olyan érzések, amelyeket érdemes megtisztítani és jobban bemutatni.

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük