Vytvoření funkčního počítače z Arduino Uno

Někteří nadšenci Arduina?

Hej, přemýšlel jsem o tom a čím víc o tom přemýšlím, tím víc si myslím, že to dokážu. Můj nápad je v zásadě takový: Vyrobte funkční počítač z mikrokontroléru Arduino Uno.

Mým jediným cílem pro tento počítač je schopnost upravovat a spouštět základní programy. To je vše. Chci to jen pro programování, protože to je právě teď jediná věc, která mě teď zajímá 🙂

Takže jak to vidím, budu potřebovat tři hlavní hardwarové komponenty:

  1. nějaká forma displeje (obrazovka VGA nebo tak něco)
  2. nějaký způsob registrace vstupu z klávesnice a
  3. nějaký způsob ukládání dat do externí paměti .

Ví někdo o nějakém způsobu, jak to udělat? Vím o způsobech zobrazení na obrazovce, ale neznám dobrou API / hardwarovou součást pro registraci vstupu z klávesnice nebo pro ukládat externí paměť.

Budu v tom potřebovat hodně pomoci. Může mi někdo pomoci a nabídnout nápady a užitečné tipy a návrhy na dobrý hardware / dobrou otevřenou knihovnu, nebo dvě, nebo tři nebo deset?

Přidáno:

Blog Vytváření počítače Arduino Uno pro každého, kdo má zájem.

Komentáře

  • To zní jako můj druh vlasového projektu;) Těším se, až uslyším, jak to zvládnete. Doufám, že ‚ budete blogovat o svém pokroku.
  • Chtěl jsem jen poukázat na podobný projekt, který by vás mohl zajímat. Čip Parallax Propeller zaznamenal značný vývoj, co se týká BASIC. K dispozici jsou nejméně dva různí tlumočníci. Navíc má schopnost přímo vysílat signál na televizi monitoru.
  • K dispozici jsou i ‚ i Demo Board , který má VGA, TV, PS / 2 klávesnici a myš, audio a několik dalších konektorů. Nyní vím, že to chcete udělat s Arduinem, ale alespoň byste mohli použít zde představená schémata k získání některých základních ukazatelů, jak generovali signál atd. (It ‚ vše v softwaru).
  • Také +1 za to, že chcete něco takového udělat! Vzpomínám si na základní školu, když jsme přestěhovali z Orao počítače na počítače Pentium III BASIC ztratili všechno své kouzlo.
  • Alternativa k pomocí displeje VGA je zvednout štít LCD a použít jej pro displej. Možná budete muset přimhouřit oči, ale propojení s ním bude mnohem jednodušší!

Odpovědět

Klávesnici lze provádí se jednoduše pomocí klávesnice PS / 2 – je to jen sériové a je zde spousta návodů.

Ukládání dat lze provádět jednoduše na SD kartu – je zde štít už to udělat.

Pokud jde o video – to je podstatně těžší. Pokud chcete, aby Arduino generovalo například videosignál PAL, máte svou práci za sebou. Ano, je je možné, a někdo vytvořil „pongovou“ hru Arduino, ale je to velmi podivná grafika a pouze černobílá.

U VGA budete potřebovat nějakou formu rozhraní, které vám udělá práci. Sparkfun prodával grafickou kartu Picaso , kterou lze použít pro práci s Arduino, ale bohužel již byla ukončena a zatím neexistují žádné plány na výměnu .

TBH nejlepší by bylo použít něco jako terminál Wyse a komunikovat s Arduino úplně pomocí sériového připojení. Mnohem jednodušší než hraní si s video signály a podobně.

Odpověď

Vidím zde Olinovu pointu – pokud chcete pouze editovat / spouštět / učit se BASIC, stačí použít PC .

Je-li však úkolem vytvořit počítač, který dokáže spustit BASIC a současně se seznámit s hardwarem a implementací na nižší úrovni, pak je to trochu jiné. Jsem pro takové věci Je to skvělý způsob, jak zlepšit znalosti a jsem si jistý, že z toho budete mít hodně. Jak Steven zmiňuje všechny matoucí a (většinou) irelevantní vrstvy, které např. Okna mohou být odstraněna, takže zůstávají základní koncepty (není určena slovní hříčka).

Každopádně možná byste se kvůli tomu chtěli podívat na něco trochu výkonnějšího, jako je PIC32, protože by měl být schopen zvládnout všechny funkce (např. základní VGA) na je vlastní.
Tady je deska kompatibilní s Arduino, UNO32
The Maximite je počítač s překladačem BASIC založeným na PIC32, možná byste se měli podívat na Design and Construction pro několik nápadů.

Komentáře

  • Vzhledem ke specifikacím PC ‚ s Microsoft Basic pod Z80 by neměl existovat žádný skutečný problém .

Odpověď

Vaše štěstí, tak nějak, protože právě teď pracuji na arduino PC! Není to moc, pouze první model. Firmware je také velmi jednoduchý a má malou sadu API. Ale věc funguje! Není to dost dobré na úpravu BASIC (nebo jiného jazyka kromě jeho vlastního), ale toto je pouze první model. Mobo je docela jednoduché a použil jsem toto . Zde je firmware, který jsem použil:

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

Popis metody je těžké vysvětlit, ale kód je uložen jako nezpracované bajty. Brzy bych měl mít vývojový software … Doufám, že to pomůže! Pokud jej budete chtít použít pro jakékoli projekty, Musíte mít soubor BIOS.mk8 v kořenovém adresáři SD, jinak nebude systém fungovat.

Komentáře

  • Naštěstí, pokud has ‚ t na to přišel za tři roky, co se poprvé zeptal
  • @ScottSeidman Jo, dobrá poznámka. Také firmware je stále v testování, a to ve verzi chybí klíčové prvky.

Odpověď

Se vší úctou Davidu Brinovi (jeho knihy se mi hodně líbí; Nejsem kvalifikovaný k posouzení, jak dobrý je jako astrofyzik), není ani programátorem, ani pedagogem.

Byl jsem kolem a programoval jsem v počátcích počítačů a napsal jsem slušné množství kódu BASIC. A od té doby jsem psal kód profesionálně.

Důvod, proč jsme tehdy používali BASIC, byl ten, že vaše dvě možnosti byly použít BASIC nebo psát v sestavě, a sestavě bylo těžší porozumět a mnohem více těžkopádné. Takže ZÁKLADNÍ.

Za 30 a více let od té doby došlo k významnému zlepšení výuky programování. Moje žena učí začínající třídu programování, která používá Alice (www.alice.org), a je to koncepčně mnohem lepší než starší přístupy.

Myslím, že Brinovo řešení bylo docela elegantní. Na Raspberry PI byste mohli postavit něco docela jednoduchého. Na arduinu si myslím, že to bude náročné zaplnit vše, co potřebujete, do 2K RAM; to musí obsahovat jakýkoli OS / Monitor, který skončíte při psaní, interpret příkazů, kód pro zobrazení a úložiště samotného základního programu.

Ne zmínit skutečnost, že budete muset udělat spoustu obtížného a vlastního programování, abyste mohli psát kód v jednoduchém prostředí žehlení.

Odpovědět

Nechápu to. Pokud chcete mít program pouze v Basic, spusťte základní tlumočník na vašem PC. Nechápu, jak očekáváte, že s tím Arduino pomůže. Arduino je mikrokontrolér se spoustou efektního softwaru pro skrytí hardwarových detailů. Součástí nákladů je nižší výkon a vyšší využití zdrojů než ekvivalentní program běžící přímo na holém mikrokontroléru. Nyní chcete napsat kód Arduino, abyste jej změnili zpět na počítač s obecnějším účelem, vše, abyste mohli na tomto počítači s obecným účelem zase spustit tlumočníka Basic? To nedává smysl.

Jelikož vaším jediným cílem je mít možnost upravovat a spouštět základní programy (spouštět tlumočník Basic), začněte nejprve s obecnější výpočetní platformou, nejlépe dokonce s takovou, která již má k dispozici tlumočník Basic. Váš počítač je přesně taková platforma. Pokud chcete, aby to byl externí hardware, zní to, jako by vám palubní počítač s jednou deskou vyhovoval vašim potřebám mnohem lépe než Arduino.

Přidáno:

Nyní říkáte, že nechci běžet na PC a umisťovat tento odkaz na někoho, kdo chce, aby se jeho dítě učilo z příkazového řádku Basic. Je pravda, že jsem nečetl celý článek (nemám rád lidi, kteří by odpovídali pomocí odkazů. Měli byste být schopni uvést svůj bod samostatně v několika větách), ale nechápu, jak počítač se spuštěním příkazového řádku Základní tlumočník neřeší váš problém. Proč základní tlumočník nesmí běžet na počítači, ale je to v pořádku běžet na Arduinu? Nezapomeňte, že jste předem řekli, že vaším jediným cílem bylo upravit a spustit základní programy. Nic v tomto prohlášení neříká, na jakém hardwaru musí běžet, a žádné z vašich následných vysvětlení nevysvětluje, proč by počítač nebyl v pořádku.

Pravděpodobně existují základní tlumočníci, kteří běží na příkazovém řádku. Starý QBASIC může i nadále fungovat v některém režimu kompatibility s DOS. I když ne, protože jste tomu ochotni věnovat hardware, jak běh DOS a QBASIC na PC neposkytuje to, o co jste žádali?

Komentáře

  • Chtěl jsem, aby se mi ‚ nechtělo programovat na PC. Chci programovat v podobném prostředí, jako je například Texas Instruments TI-84 +. Můj důvod? Podívejte se na následující odkaz “ Proč Johnny nemůže ‚ t Code “ salon.com/technology/feature/2006/09/14/basic/index.html
  • Toto opravdu není odpověď.Ano, myšlenka OP může být trochu vlevo od středu, ale kde bychom byli, kdyby nikdo nikdy nezkusil něco neobvyklého, nebo posunout hranice toho, co již existuje? Říkat OP, že je to ‚ hloupá myšlenka, není ani užitečné, ani konstruktivní. OP se rozhodl, že ‚ by to chtěl udělat, a žádá nás o pomoc, jak na to. ‚ se neptá, zda je to ‚ dobrý nápad nebo ne. Ano, možná to bude Bad Idea ™, ale OP se naučí obrovské množství, zatímco zjistí, že to samo o sobě může být cennější než konečný výsledek.
  • @Majenko: To, co jsem napsal, je rozumná odpověď na to, co OP původně napsal. Nezapomeňte, že řekl “ Mým jediným cílem pro tento počítač je schopnost upravovat a spouštět ZÁKLADNÍ programy “ . To ‚ neříká nic o tom, že běží na alternativním hardwaru. Zjevně chce jednoduchý tlumočník pro příkazový řádek pro výuku dětí. Jak běží taková věc na PC není platná odpověď? Není na počítači spuštěn QBASIC ‚ ta PC nebo něco, o co přesně ‚ žádá?
  • @Olin OP souhlasí se mnou … myslím, že interpretujete otázku špatně.
  • @Olin – rozumím Buttsovi. Pamatujete si na domácí počítače koncem 70. a začátkem 80. let? Přidali jste paměť mapovanou na 74LS373 a I / O jste mohli ovládat pomocí příkazů poke. Žádné virtuální ovladače COM k instalaci, žádné USB na jakékoli mosty, žádné složité vývojářské IDE k načtení. SBC jsou srovnatelné, ale obecně jim chybí rozhraní klávesnice / videa (a kazetové úložiště!) Domácích počítačů.

Odpovědět

Odpověď

Líbí se mi myšlenka spuštění běžné aplikace, například BASIC na Arduinu zvláště pokud jste si jej sami postavili sami. Mám rád pohodlí praktického zařízení Arduino napájeného z baterie, na kterém běží aplikace, kterou jsem chtěl. Kdybych to byl já, mohl bych použít Arduino MEGA, takže bych měl dostatek pinů pro klávesnici a SD štít pro uložení.

Vybral bych barevný grafický LCD nebo TFT displej přes VGA pro jednoduchost programování a připojení, způsob sledování data a času (RTC) a co je to aplikace bez internetu nebo sítě (ethernetový štít)? Možná I2C RAM (24LC256)? A několik I2C MCP223017 jen pro případ, že bych potřeboval několik dalších portů. Co takhle více Arduino dělat paralelní úkol? To by zlepšilo výkon, jsem si jistý.

Komentáře

  • Komunita oceňuje odkazy na datové listy. Také prosím nepoužívejte příliš mnoho velká písmena a ujistěte se, že je vaše odpověď čitelná přidáním bílých mezer.
  • Toto je velmi špatná kvalita odpovědi. Existují však určité sentimenty, které by mohly být užitečné, kdyby byly vyčištěny a lépe prezentovány.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *