Crearea unui computer funcțional dintr-un Arduino Uno

Ceva pasionați de Arduino acolo?

Hei, m-am gândit la asta și Cu cât mă gândesc mai mult la asta, cu atât mai mult cred că pot face acest lucru. Ideea mea este în esență aceasta: Creați un computer funcțional dintr-un microcontroler Arduino Uno.

Singurul meu obiectiv pentru acest computer este abilitatea pentru a edita și executa programe BASIC. Atât. Îl doresc doar pentru programare, întrucât „este aproape singurul lucru care mă interesează acum 🙂

Deci, așa cum o văd, voi avea nevoie de trei componente hardware principale:

  1. o formă de afișare (ecran VGA sau ceva)
  2. o modalitate de a înregistra intrarea de la tastatură și
  3. o modalitate de a stoca date în memoria externă .

Știe cineva vreun mod de a face acest lucru? Știu modalități de afișare pe ecran, dar nu știu o componentă hardware / API bună pentru a înregistra intrarea tastaturii sau stochează memoria externă.

Voi avea nevoie de mult ajutor în această privință. Poate cineva să mă ajute și să ofere idei și sfaturi utile și sugestii pentru hardware bun / o bibliotecă open source bună sau două, sau trei, sau zece?

Adăugat:

Blog Crearea unui computer Arduino Uno pentru oricine este interesat.

Comentarii

  • Sună ca genul meu de proiect de păr;) Aștept cu nerăbdare să aflu cum te descurci. Sper că ‘ îți vei blogua progresul.
  • Am vrut doar să subliniez un proiect similar care ar putea fi de interes. Cipul Parallax Propeller a cunoscut o dezvoltare destul de mare în ceea ce privește BASIC. Există cel puțin doi interpreți disponibili. În plus, are capacitatea de a emite semnal direct către un televizor al unui monitor.
  • Există ‘ chiar și Demo Board care are VGA, TV, tastatură și mouse PS / 2, audio și încă puțini conectori. Acum știu că doriți să faceți acest lucru cu un Arduino, dar cel puțin puteți folosi schemele de bord prezentate acolo pentru a obține niște indicatori de bază despre modul în care au generat semnalul și așa mai departe (it ‘ s toate în software).
  • De asemenea, +1 pentru că doriți să faceți așa ceva! Îmi amintesc înapoi la școala elementară când ne-am mutat de la computerul Orao la computerele Pentium III BASIC și-au pierdut farmecul.
  • O alternativă la utilizarea unui afișaj VGA este să ridicați un ecran LCD și să îl utilizați pentru afișaj. Poate că va trebui să vă strângeți, dar interfața cu acesta va fi mult mai ușoară!

Răspuns

Tastatura poate fi făcut pur și simplu folosind o tastatură PS / 2 – este doar serial, și există o mulțime de tutoriale acolo pentru asta.

Stocarea datelor se poate face pur și simplu pe un card SD – există un scut afară acolo deja pentru a face acest lucru.

În ceea ce privește videoclipul – asta este considerabil mai dificil. Dacă doriți ca Arduino să genereze un semnal video PAL, de exemplu, atunci aveți lucrarea tăiată pentru dvs. este posibil, și cineva a creat un joc „pong” Arduino, dar are o grafică foarte grosă și doar alb-negru.

Pentru VGA veți avea nevoie de o formă de interfață pentru a vă face treaba. Sparkfun obișnuia să vândă placa video Picaso care ar putea fi pusă în funcțiune cu Arduino, dar, din păcate, a fost întreruptă și nu există încă planuri pentru o înlocuire .

TBH cel mai bun pariu ar fi să folosiți ceva de genul unui terminal Wyse și să comunicați cu Arduino complet utilizând serial. Mult mai simplu decât să te amesteci cu semnalele video și altele.

Răspuns

Văd punctul lui Olin aici – dacă doriți doar să editați / rulați / învățați BASIC, folosiți doar un computer .

Cu toate acestea, dacă scopul este provocarea de a crea un computer care să poată rula BASIC și să învețe despre hardware și implementarea la un nivel inferior în același timp, atunci acest lucru este puțin diferit. Sunt totul pentru lucruri de genul acesta , este „o modalitate excelentă de a îmbunătăți cunoștințele și sunt sigur că veți obține multe din ele. După cum Steven menționează toate straturile confuze și (în cea mai mare parte) irelevante care de ex. Windows-ul poate fi îndepărtat, lăsând conceptele de bază (fără joc de cuvinte).

Oricum, s-ar putea să doriți să vă uitați la ceva mai puternic, cum ar fi PIC32, pentru că ar trebui să poată face față tuturor funcționalităților (de exemplu, VGA de bază) pe este propriu.
Iată o placă compatibilă Arduino, UNO32
Maximite este un computer cu interpret BASIC bazat pe un PIC32, poate doriți să consultați Proiectare și construcție pentru câteva idei.

Comentarii

  • Având în vedere specificațiile PC ‘ care rulează Microsoft Basic sub un Z80, nu ar trebui să existe nicio problemă reală .

Răspuns

Noroc, cam așa, pentru că lucrez de fapt la un PC arduino chiar acum! Nu este mult, însă, doar primul model. Firmware-ul este, de asemenea, foarte simplu și are un set de API mic. Dar lucrul funcționează! Nu este suficient de bun pentru a edita BASIC (sau orice altă limbă, cu excepția propriei sale), dar acesta este doar primul model. Mobo este destul de simplu și am folosit acest . Iată firmware-ul pe care l-am folosit:

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

Descrierea metodei este greu de explicat, dar codul este stocat ca octeți bruti. Ar trebui să am programul de dezvoltare în curând … Sper că acest lucru vă va ajuta! Dacă vreți vreodată să folosiți acest lucru pentru orice proiecte, TREBUIE SĂ AVEȚI un fișier BIOS.mk8 în directorul rădăcină al SD sau sistemul nu va funcționa.

Comentarii

  • Norocos într-adevăr, dacă el ‘ nu și-a dat seama în cei trei ani de când a întrebat pentru prima dată
  • @ScottSeidman Da, punct bun. De asemenea, firmware-ul este încă în testare și acest lucru versiunii îi lipsesc elemente cheie.

Răspuns

Cu tot respectul lui David Brin (se întâmplă să-mi placă foarte mult cărțile sale; Nu sunt calificat să judec cât de bun este ca astrofizician), nu este nici programator, nici educator.

În primele zile ale computerelor am fost în jur și codificam și am scris o cantitate echitabilă de cod BASIC. Și de atunci scriu cod profesional.

Motivul pentru care am folosit BASIC pe atunci a fost că cele două opțiuni ale tale erau să folosești BASIC sau să scrii în asamblare, iar asamblarea era atât mai greu de înțeles, cât și mult mai mult greoi de utilizat. Deci, BASIC.

În cei peste 30 de ani de atunci, au existat îmbunătățiri semnificative în instruirea programării. Soția mea predă o clasă de programare care folosește Alice (www.alice.org), și este „mult mai bună din punct de vedere conceptual decât abordările mai vechi.

Cred că soluția lui Brin a fost destul de elegantă. Puteți construi ceva destul de simplu pe un Raspberry PI. Pe arduino, cred că va fi o provocare pentru a încărca tot ce aveți nevoie în 2K de memorie RAM; aceasta trebuie să conțină orice sistem de operare / monitor la care scrieți, un interpretor de comandă, cod pentru afișare și stocare pentru programul de bază în sine.

menționează faptul că va trebui să faci o mulțime de programări dificile și personalizate, astfel încât să poți scrie cod într-un călcare.

Răspuns

Nu îl primesc. Dacă doriți doar să aveți un mijloc de programare în Basic, rulați un element de bază interpret pe computerul dvs. Nu înțeleg cum vă așteptați ca Arduino să vă ajute în acest sens. Arduino este un microcontroler cu o mulțime de software de lux pentru a ascunde detaliile hardware. O parte din costul acestuia este o performanță mai mică și o utilizare mai mare a resurselor decât programul echivalent care rulează direct pe microcontrolerul gol. Acum doriți să scrieți codul Arduino pentru a-l transforma înapoi într-un computer cu scop mai general, astfel încât să puteți rula la rândul dvs. un interpret de bază pe acel computer cu scop general? Acest lucru nu are prea mult sens.

Deoarece singurul dvs. obiectiv este să puteți edita și executa programe de bază (rulați un interpret de bază), începeți cu o platformă de calcul mai generală, de preferință chiar și una care are deja un interpret de bază disponibil. PC-ul dvs. este exact o astfel de platformă. Dacă doriți ca acesta să fie hardware extern, sună ca un computer single-board de pe raft care ar satisface nevoile dvs. mult mai bine decât un Arduino.

Adăugat:

Acum spuneți că Nu vreau să rulez pe un computer și să site-ul acestui link despre cineva care dorește linia de comandă de bază pentru ca copilul său să învețe. Desigur, nu am citit întregul articol (nu îmi plac oamenii care răspund cu linkuri. Ar trebui să puteți pentru a-ți spune punctul în mod independent în câteva propoziții), dar nu văd cum un computer care execută o linie de comandă Interpretul de bază nu abordează problema ta. De ce interpretul de bază nu are voie să ruleze pe un PC, dar este OK să rulezi pe un Arduino? Amintiți-vă, ați spus în față că singurul dvs. obiectiv era să editați și să rulați programe de bază. Nimic din această declarație nu spune ce hardware trebuie să ruleze și niciuna dintre explicațiile ulterioare nu explică de ce un PC nu ar merge bine.

Există probabil interpreți de bază care rulează pe linia de comandă. QBASIC ar putea funcționa în continuare în unele moduri de compatibilitate DOS. Chiar dacă nu, din moment ce sunteți dispus să dedicați hardware acestui lucru, cum rulați DOS și QBASIC pe un PC nu oferă ceea ce ați cerut? / h3>

  • Ideea mea a fost că nu ‘ nu vreau să programez pe un PC. Vreau să programez într-un mediu similar cu, de exemplu, un Texas Instruments TI-84 +. Motivul meu pentru asta? Consultați următorul link, ” De ce Johnny Can ‘ t Code ” salon.com/technology/feature/2006/09/14/basic/index.html
  • Acesta nu este cu adevărat un răspuns.Da, ideea PO poate fi puțin la stânga de centru, dar unde am fi dacă nimeni nu ar încerca vreodată ceva ieșit din comun sau să depășească limitele a ceea ce există deja? A spune OP-ului că ‘ este o idee prostească nu este nici utilă, nici constructivă. PO a decis că ‘ i-ar plăcea să o facă și ne solicită ajutor cu privire la modul în care putem face acest lucru. El ‘ nu întreabă dacă ‘ este o idee bună sau nu. Da, s-ar putea să fie o idee proastă ™, dar PO va învăța o sumă imensă în timp ce o va afla, ceea ce poate fi mai valoros decât rezultatul final.
  • @Majenko: Ceea ce am scris este un răspuns rezonabil la ceea ce a scris inițial PO. Amintiți-vă, a spus ” Singurul meu obiectiv pentru acest computer este abilitatea de a edita și executa programe BASIC ” . Acest lucru nu ‘ nu spune nimic despre faptul că rulează pe hardware alternativ. Se pare că vrea un simplu interpret de bază pentru linia de comandă pentru învățarea copiilor. Cum se execută așa ceva pe un PC nu este un răspuns valid? Nu ‘ este un computer care rulează QBASIC sau ceva exact ce cere ‘?
  • @Olin OP este de acord cu mine … cred că interpretezi greșit întrebarea.
  • @Olin – Pot să înțeleg Butts. Vă amintiți computerele de la sfârșitul anilor 70, începutul anilor 80? Ați adăugat o memorie mapată 74LS373 și ați putea controla I / OS prin instrucțiuni poke. Fără drivere COM virtuale de instalat, fără USB pe orice punte, fără IDE complex de dezvoltator de încărcat. SBC-urile sunt comparabile, dar în general nu au interfața tastatură / video (și stocarea casetei!) A computerelor de acasă.

Răspuns

Răspuns

Îmi place ideea de a rula o aplicație comună, cum ar fi BASIC pe un Arduino mai ales dacă l-ai construit singur. Îmi place comoditatea de a avea un dispozitiv Arduino la îndemână, alimentat cu baterii, care rulează aplicația dorită. Dacă aș fi eu, aș folosi poate un Arduino MEGA așa că aș avea suficienți pini pentru tastatură și un scut SD pentru stocare.

Aș alege un ecran LCD color sau un ecran TFT peste VGA pentru simplitate în programare și conexiuni, un mod de a ține evidența datei și orei (RTC) și ce este o aplicație fără internet sau rețea (scut Ethernet)? RAM-uri I2C suplimentare (24LC256) poate? Și câteva I2C MCP223017 doar în cazul în care aș avea nevoie de câteva porturi suplimentare. Ce zici de mai multe Arduino să facă o sarcină paralelă? Acest lucru ar îmbunătăți performanța. Sunt sigur.

Comentarii

  • Comunitățile apreciază linkurile către fișele tehnice. De asemenea, vă rugăm să nu folosiți prea mult majuscule și asigurați-vă că răspunsul dvs. poate fi citit adăugând spații albe.
  • Într-adevăr, acesta este un răspuns de calitate foarte slabă. Dar există câteva sentimente aici care ar putea fi utile dacă sunt curățate și prezentate mai bine.

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *