Aus einem Arduino Uno einen funktionierenden Computer machen

Gibt es Arduino-Enthusiasten da draußen?

Hey, ich habe darüber nachgedacht und Je mehr ich darüber nachdenke, desto mehr denke ich, dass ich dies tatsächlich tun kann. Meine Idee ist im Grunde: Machen Sie aus einem Arduino Uno-Mikrocontroller einen funktionierenden Computer.

Mein einziges Ziel für diesen Computer ist die Fähigkeit BASIC-Programme bearbeiten und ausführen. Das ist alles. Ich möchte es nur für die Programmierung, da dies fast das einzige ist, woran ich gerade interessiert bin 🙂

So wie ich es sehe, benötige ich drei Haupthardwarekomponenten:

  1. irgendeine Form einer Anzeige (VGA-Bildschirm oder so)
  2. eine Möglichkeit, Tastatureingaben zu registrieren und
  3. eine Möglichkeit, Daten in einem externen Speicher zu speichern .

Kennt jemand eine Möglichkeit, dies zu tun? Ich kenne Möglichkeiten, um auf einem Bildschirm anzuzeigen, aber ich kenne keine gute API / Hardwarekomponente zum Registrieren von Tastatureingaben oder zu Speichern Sie externen Speicher.

Ich werde hierzu viel Hilfe benötigen. Kann mir jemand helfen und Ideen und nützliche Tipps und Vorschläge für gute Hardware / eine gute Open-Source-Bibliothek oder zwei anbieten? oder drei oder zehn?

Hinzugefügt:

Blog Erstellen eines Arduino Uno-Computers für alle Interessierten.

Kommentare

  • Das klingt wie meine Art von haarsträubendem Projekt;) Ich freue mich darauf zu hören, wie Sie damit umgehen. Ich hoffe, Sie ‚ werden Ihre Fortschritte bloggen.
  • Ich wollte nur auf ein ähnliches Projekt hinweisen, das von Interesse sein könnte. Der Parallax Propeller -Chip hat sich in Bezug auf BASIC stark weiterentwickelt. Es stehen mindestens zwei verschiedene Dolmetscher zur Verfügung. Außerdem kann das Signal direkt an ein Fernsehgerät eines Monitors ausgegeben werden.
  • Es gibt ‚ sogar das Demo Board mit VGA, TV, PS / 2-Tastatur und -Maus, Audio und einigen weiteren Anschlüssen. Jetzt weiß ich, dass Sie dies mit einem Arduino tun möchten, aber zumindest könnten Sie die dort vorgestellten Kartenschemata verwenden, um einige grundlegende Hinweise zu erhalten, wie sie die Signalerzeugung usw. durchgeführt haben (it ‚ s alles in Software).
  • Auch +1, wenn Sie so etwas machen wollen! Ich erinnere mich, dass wir in der Grundschule vom Orao -Computer auf Pentium III-Computer umgezogen sind. BASIC hat all seinen Charme verloren.
  • Eine Alternative zu Bei Verwendung eines VGA-Displays wird ein LCD-Schild aufgenommen und für das Display verwendet. Möglicherweise müssen Sie blinzeln, aber die Anbindung wird VIEL einfacher!

Antwort

Die Tastatur kann sein Dies geschieht einfach mit einer PS / 2-Tastatur – es ist nur seriell, und es gibt viele Tutorials dafür.

Das Speichern von Daten kann einfach auf einer SD-Karte erfolgen – es gibt eine Abschirmung Das gibt es schon.

Was das Video betrifft – das ist erheblich schwieriger. Wenn Sie möchten, dass der Arduino beispielsweise ein PAL-Videosignal erzeugt, ist Ihre Arbeit für Sie ausgeschnitten. Ja, das ist es ist möglich, und jemand hat ein Arduino „Pong“ -Spiel erstellt, aber es ist eine sehr klobige Grafik und nur Schwarzweiß.

Für VGA benötigen Sie eine Schnittstelle, um die Arbeit für Sie zu erledigen. Sparkfun verkaufte früher die Picaso-Grafikkarte , die für die Verwendung mit dem Arduino geeignet war. Leider wurde sie eingestellt, und es gibt noch keine Pläne für einen Ersatz .

TBH Am besten verwenden Sie ein Wyse-Terminal und kommunizieren vollständig mit dem Arduino über die Seriennummer. Viel einfacher als mit Videosignalen und so weiter zu spielen.

Antwort

Ich sehe Olins Punkt hier – wenn Sie nur BASIC bearbeiten / ausführen / lernen möchten, verwenden Sie einfach einen PC

Wenn das Ziel jedoch die Herausforderung ist, einen Computer zu erstellen, auf dem BASIC ausgeführt werden kann und der gleichzeitig etwas über die Hardware und die Implementierung auf niedrigerer Ebene lernen kann, ist dies etwas anders. Ich bin alles für solche Dinge Es ist eine großartige Möglichkeit, das Wissen zu verbessern, und ich bin sicher, dass Sie viel davon haben werden. Wie Steven alle verwirrenden und (meistens) irrelevanten Schichten erwähnt, die z. Windows kann entfernt werden, wobei die grundlegenden Konzepte (kein Wortspiel beabsichtigt) erhalten bleiben.

Auf jeden Fall möchten Sie vielleicht etwas Stärkeres wie das PIC32 ansehen, da es in der Lage sein sollte, alle Funktionen (z. B. Basis-VGA) zu nutzen Es ist eine eigene.
Hier ist eine Arduino-kompatible Karte, die UNO32
Die Maximite ist ein Computer mit einem BASIC-Interpreter, der auf einem PIC32 basiert. Vielleicht möchten Sie sich das Design and Construction für einige Ideen ansehen.

Kommentare

  • Angesichts der Spezifikationen von PCs ‚, auf denen Microsoft Basic unter einem Z80 ausgeführt wird, sollte es kein wirkliches Problem geben .

Antwort

Sie haben Glück, weil ich gerade an einem Arduino-PC arbeite! Es ist jedoch nicht viel, nur das erste Modell. Die Firmware ist auch sehr einfach und hat einen kleinen API-Satz. Aber das Ding funktioniert! Nicht gut genug, um BASIC (oder eine andere Sprache als die eigene) zu bearbeiten, aber das ist es Nur das erste Modell. Der Mobo ist recht einfach und ich habe this verwendet. Hier ist die Firmware, die ich verwendet habe:

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

Die Methodenbeschreibung ist schwer zu erklären, aber der Code wird als Rohbyte gespeichert. Ich sollte bald Entwicklungssoftware haben … Ich hoffe, das hilft! Wenn Sie dies jemals für Projekte verwenden möchten, Sie müssen eine BIOS.mk8-Datei im Stammverzeichnis der SD haben, sonst funktioniert das System nicht.

Kommentare

  • Glücklich, wenn er ‚ hat es in den drei Jahren, seit er
  • @ScottSeidman zum ersten Mal gefragt hat, nicht herausgefunden. Ja, guter Punkt. Außerdem wird die Firmware noch getestet, und dies In der Version fehlen wichtige Elemente.

Antwort

Bei allem Respekt an David Brin (ich mag seine Bücher sehr; Ich bin nicht qualifiziert zu beurteilen, wie gut er als Astrophysiker ist, er ist weder Programmierer noch Pädagoge.

Ich war in den Anfängen von PCs in der Nähe und habe programmiert, und ich habe eine ganze Menge BASIC-Code geschrieben. Und seitdem schreibe ich Code professionell.

Der Grund, warum wir damals BASIC verwendet haben, war, dass Ihre beiden Optionen darin bestanden, BASIC zu verwenden oder in Assembly zu schreiben, und Assembly war sowohl schwerer zu verstehen als auch viel mehr umständlich zu bedienen. Also, BASIC.

In den mehr als 30 Jahren seitdem hat sich der Programmierunterricht erheblich verbessert. Meine Frau unterrichtet eine anfängliche Programmierklasse, die Alice verwendet (www.alice.org). und konzeptionell ist es weitaus besser als die älteren Ansätze.

Ich denke, Brins Lösung war ziemlich elegant. Auf einem Raspberry PI könnte man etwas ziemlich Einfaches bauen. Auf dem Arduino denke ich, dass es eine Herausforderung sein wird Um alles, was Sie brauchen, in 2 KB RAM zu packen, muss es das Betriebssystem / den Monitor enthalten, das Sie am Ende schreiben, einen Befehlsinterpreter, Code für die Anzeige und Speicher für das Basisprogramm selbst.

Nicht Erwähnen Sie die Tatsache, dass Sie eine Menge schwieriger und benutzerdefinierter Programmierungen durchführen müssen, damit Sie Code in einer einfachen Umgebung schreiben können Bügeln.

Antwort

Ich verstehe es nicht. Wenn Sie nur ein Mittel zum Programmieren in Basic haben möchten, führen Sie ein Basic aus Dolmetscher auf Ihrem PC. Ich verstehe nicht, wie Sie erwarten, dass der Arduino dabei hilft. Der Arduino ist ein Mikrocontroller mit viel ausgefallener Software, um die Hardwaredetails zu verbergen. Ein Teil der Kosten hierfür ist eine geringere Leistung und ein höherer Ressourcenverbrauch als das entsprechende Programm, das direkt auf dem bloßen Mikrocontroller ausgeführt wird. Jetzt möchten Sie Arduino-Code schreiben, um ihn wieder in einen Universalcomputer umzuwandeln, damit Sie wiederum einen Basic-Interpreter auf diesem Universalcomputer ausführen können? Dies ist wenig sinnvoll.

Da Ihr einziges Ziel darin besteht, Basic-Programme zu bearbeiten und auszuführen (einen Basic-Interpreter ausführen), sollten Sie zunächst mit einer allgemeineren Computerplattform beginnen, vorzugsweise sogar mit einer solchen hat bereits einen Basic-Interpreter zur Verfügung. Ihr PC ist genau eine solche Plattform. Wenn Sie möchten, dass dies externe Hardware ist, klingt es so, als würde ein Standard-Einplatinencomputer Ihre Anforderungen viel besser erfüllen als ein Arduino.

Hinzugefügt:

Sie sagen jetzt, dass Sie Ich möchte nicht auf einem PC laufen und diesen Link über jemanden veröffentlichen, von dem die Befehlszeile Basic für sein Kind lernen soll. Zugegeben, ich habe nicht den gesamten Artikel gelesen (ich mag es nicht, wenn Leute mit Links antworten. Sie sollten in der Lage sein um Ihren Standpunkt unabhängig in ein paar Sätzen darzulegen), aber ich sehe nicht, wie ein PC, auf dem ein Befehlszeilen-Basic-Interpreter ausgeführt wird, Ihr Problem nicht angeht. Warum darf der Basic-Interpreter nicht auf einem PC ausgeführt werden, aber es ist in Ordnung auf einem Arduino laufen? Denken Sie daran, Sie haben vorab gesagt, dass Ihr einziges Ziel darin bestand, Basisprogramme zu bearbeiten und auszuführen. Nichts in dieser Anweisung sagt aus, auf welcher Hardware es ausgeführt werden muss, und keine Ihrer nachfolgenden Erklärungen erklärt, warum ein PC nicht gut funktioniert.

Es gibt wahrscheinlich Basisinterpreter, die in der Befehlszeile ausgeführt werden. Die alte QBASIC funktioniert möglicherweise immer noch in einem DOS-Kompatibilitätsmodus. Auch wenn dies nicht der Fall ist, liefert die Ausführung von DOS und QBASIC auf einem PC nicht das, wonach Sie gefragt haben, da Sie bereit sind, Hardware dafür bereitzustellen?

Kommentare

  • Mein Punkt war, dass ich ‚ nicht auf einem PC programmieren möchte. Ich möchte in einer ähnlichen Umgebung wie beispielsweise einem Texas Instruments TI-84 + programmieren. Mein Grund dafür? Schauen Sie sich den folgenden Link an: “ Warum Johnny ‚ t Code “ salon.com/technology/feature/2006/09/14/basic/index.html
  • Dies ist keine wirkliche Antwort.Ja, die Idee des OP mag etwas links vom Zentrum liegen, aber wo wären wir, wenn niemand jemals etwas Außergewöhnliches ausprobieren oder die Grenzen dessen, was bereits existiert, verschieben würde? Dem OP zu sagen, dass es ‚ eine dumme Idee ist, ist weder hilfreich noch konstruktiv. Das OP hat entschieden, dass er ‚ dies gerne tun würde, und bittet uns um Hilfe bei der Vorgehensweise. Er ‚ fragt nicht, ob es ‚ eine gute Idee ist oder nicht. Ja, es mag eine schlechte Idee sein, aber das OP wird eine Menge lernen, während es das herausfindet, was selbst wertvoller sein kann als das Endergebnis.
  • @Majenko: Was ich geschrieben habe, ist eine vernünftige Antwort auf das, was das OP ursprünglich geschrieben hat. Denken Sie daran, er sagte “ Mein einziges Ziel für diesen Computer ist die Fähigkeit, BASIC-Programme zu bearbeiten und auszuführen “ . Dies ‚ sagt nichts darüber aus, was auf alternativer Hardware ausgeführt wird. Anscheinend möchte er einen einfachen Basisdolmetscher für das Unterrichten von Kindern. Wie ist es keine gültige Antwort, so etwas auf einem PC auszuführen? Ist ‚ kein PC, auf dem QBASIC ausgeführt wird, oder etwas genau das, wonach er ‚ fragt?
  • @Olin Das OP stimmt zu mit mir … Ich denke, Sie interpretieren die Frage falsch.
  • @Olin – Ich kann Butts verstehen. Erinnern Sie sich an Heimcomputer Ende der 70er, Anfang der 80er? Sie haben einen Speicher mit der Zuordnung 74LS373 hinzugefügt und können E / A über poke -Anweisungen steuern. Keine zu installierenden virtuellen COM-Treiber, kein USB zu irgendwelchen Bridges, keine komplexe Entwickler-IDE zum Laden. SBCs sind vergleichbar, es fehlt jedoch im Allgemeinen die Tastatur- / Videoschnittstelle (und der Kassettenspeicher!) Der Heimcomputer.

Antwort

Antwort

Ich mag die Idee, eine gemeinsame App wie BASIC auf einem Arduino auszuführen vor allem, wenn Sie es selbst von Hand gebaut haben. Ich mag die Bequemlichkeit, ein handliches, batteriebetriebenes Arduino-Gerät zu haben, auf dem die gewünschte App ausgeführt wird. Wenn ich es wäre, würde ich vielleicht ein Arduino MEGA verwenden, damit ich genug Stifte für die Tastatur und eine SD-Abschirmung für die Speicherung hätte.

Ich würde ein Farbgrafik-LCD oder einen TFT-Bildschirm über VGA wählen Zur Vereinfachung der Programmierung und der Verbindungen, zur Verfolgung von Datum und Uhrzeit (RTC) und was ist eine App ohne Internet oder Netzwerk (Ethernet Shield)? Zusätzliche I2C-RAMs (24LC256) vielleicht? Und ein paar I2C MCP223017 für den Fall, dass ich ein paar zusätzliche Ports benötige. Wie wäre es mit mehreren Arduinos, die eine parallele Aufgabe ausführen? Das würde die Leistung verbessern, da bin ich mir sicher.

Kommentare

  • Links zu Datenblättern werden von der Community geschätzt. Bitte verwenden Sie auch nicht zu viel Großbuchstaben und stellen Sie sicher, dass Ihre Antwort lesbar ist, indem Sie Leerzeichen hinzufügen.
  • Wie es ist, ist dies eine Antwort von sehr schlechter Qualität. Es gibt jedoch einige Gefühle, die sich lohnen könnten, wenn sie bereinigt und besser präsentiert werden.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.