Créer un ordinateur fonctionnel à partir dun Arduino Uno

Des passionnés dArduino?

Hé, jy ai réfléchi et plus jy pense, plus je pense pouvoir le faire. Mon idée est essentiellement la suivante: créer un ordinateur fonctionnel à partir dun microcontrôleur Arduino Uno.

Mon seul objectif pour cet ordinateur est la capacité pour éditer et exécuter des programmes BASIC. Cest tout. Je ne le veux que pour la programmation, car cest à peu près la seule chose qui mintéresse en ce moment 🙂

Donc, de la façon dont je le vois, jaurai besoin de trois composants matériels principaux:

  1. une forme daffichage (écran VGA ou quelque chose)
  2. une manière denregistrer lentrée au clavier, et
  3. une manière de stocker des données dans la mémoire externe .

Est-ce que quelquun connaît un moyen de faire cela? Je connais des moyens dafficher sur un écran, mais je ne connais pas un bon composant API / matériel pour enregistrer les entrées clavier ou pour stocker de la mémoire externe.

Je vais avoir besoin de beaucoup daide à ce sujet. Quelquun peut-il maider et me proposer des idées et des conseils et suggestions utiles pour un bon matériel / une bonne bibliothèque open source, ou deux, ou trois ou dix?

Ajouté:

Blog Créer un ordinateur Arduino Uno pour toute personne intéressée.

Commentaires

  • Cela semble comme mon genre de projet au cerveau;) Jai hâte de savoir comment vous vous en sortez. Jespère que vous ‘ bloguerez vos progrès.
  • Je voulais juste signaler un projet similaire qui pourrait être intéressant. La puce Parallax Propeller a beaucoup évolué en ce qui concerne BASIC. Il y a au moins deux interprètes différents disponibles. De plus, il a la capacité de transmettre directement le signal à un téléviseur dun moniteur.
  • Il y a ‘ même les Carte de démonstration qui a VGA, TV, clavier et souris PS / 2, audio et quelques autres connecteurs. Maintenant, je sais que vous voulez faire cela avec un Arduino, mais au moins vous pouvez utiliser les schémas de carte présentés ici pour obtenir des indications de base sur la façon dont ils ont généré le signal et ainsi de suite (il ‘ s tout en logiciel).
  • Également +1 pour vouloir faire quelque chose comme ça! Je me souviens de l’école primaire lorsque nous avons déménagé de l’ordinateur Orao vers des ordinateurs Pentium III BASIC a perdu tout son charme.
  • Une alternative à lutilisation dun écran VGA consiste à prendre un écran LCD et à lutiliser pour lécran. Vous devrez peut-être plisser les yeux, mais interagir avec lui sera BEAUCOUP plus facile!

Réponse

Le clavier peut être fait simplement en utilisant un clavier PS / 2 – ce nest que série, et il y a beaucoup de tutoriels là-bas pour cela.

Le stockage des données peut être fait simplement sur une carte SD – il y a un bouclier il y a déjà pour le faire.

Quant à la vidéo – cest beaucoup plus difficile. Si vous voulez que lArduino génère un signal vidéo PAL par exemple, alors vous avez du pain sur la planche. Oui, cest est possible, et quelquun a créé un jeu Arduino « pong », mais ce sont des graphismes très volumineux et uniquement en noir et blanc.

Pour VGA, vous aurez besoin dune forme dinterface pour faire le travail à votre place. Sparkfun vendait la carte vidéo Picaso qui pouvait être conçue pour fonctionner avec lArduino, mais hélas, elle a été abandonnée et il ny a pas encore de plans de remplacement .

TBH votre meilleur pari serait dutiliser quelque chose comme un terminal Wyse et de communiquer avec lArduino entièrement en utilisant la série. Beaucoup plus simple que de jouer avec les signaux vidéo et autres.

Réponse

Je vois le point dOlin ici – si vous voulez seulement éditer / exécuter / apprendre BASIC, utilisez simplement un PC .

Cependant, si lobjectif est de créer un ordinateur qui peut exécuter BASIC et en apprendre davantage sur le matériel et limplémentation de niveau inférieur en même temps, alors cest un peu différent. Je suis tout à fait pour des choses comme ça , cest un excellent moyen daméliorer les connaissances et je suis sûr que vous en retirerez beaucoup. Comme Steven mentionne toutes les couches déroutantes et (principalement) non pertinentes qui, par exemple, Windows peut être supprimé, laissant les concepts de base (sans jeu de mots).

Quoi quil en soit, vous pourriez vouloir regarder quelque chose dun peu plus puissant comme le PIC32 pour cela, car il devrait être capable de gérer toutes les fonctionnalités (par exemple, VGA de base) sur il « est propre.
Voici une carte compatible Arduino, la UNO32
La Maximite est un ordinateur avec interpréteur BASIC basé sur un PIC32, vous pouvez consulter le Conception et construction pour quelques idées.

Commentaires

  • Compte tenu des spécifications des PC ‘ exécutant Microsoft Basic sous un Z80, il ne devrait pas y avoir de réel problème .

Réponse

Vous avez de la chance, en quelque sorte, car je travaille actuellement sur un PC Arduino! Ce nest pas grand-chose cependant, seulement le premier modèle. Le firmware est également très simple, et a un petit ensemble dAPI. Mais, le truc fonctionne! Pas assez bon pour éditer BASIC (ou nimporte quel langage sauf le sien), mais cest seulement le premier modèle. Le mobo est assez simple, et jai utilisé this . Voici le firmware que jai utilisé:

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

La description de la méthode est difficile à expliquer, mais le code est stocké sous forme doctets bruts. Je devrais avoir un logiciel de développement bientôt … Jespère que cela vous aidera! Si jamais vous voulez lutiliser pour des projets, VOUS DEVEZ AVOIR UN fichier BIOS.mk8 sur le répertoire racine de la SD ou le système ne fonctionnera pas.

Commentaires

  • Heureusement, sil na ‘ t compris dans les trois ans depuis quil a demandé pour la première fois
  • @ScottSeidman Ouais, bon point. De plus, le micrologiciel est toujours en test, et ce il manque des éléments clés dans la version.

Réponse

Avec tout le respect que je vous dois à David Brin (jaime beaucoup ses livres; Je ne suis pas qualifié pour juger de ses qualités dastrophysicien), il nest ni programmeur ni éducateur.

Jétais là et je codais au début des PC, et jai écrit une bonne quantité de code BASIC. Et jécris du code de manière professionnelle depuis lors.

La raison pour laquelle nous utilisions BASIC à lépoque était que vos deux options étaient dutiliser BASIC ou décrire en assemblage, et lassemblage était à la fois plus difficile à comprendre et bien plus lourd à utiliser. Donc, BASIC.

Depuis plus de 30 ans, il y a eu des améliorations significatives dans lenseignement de la programmation. Ma femme enseigne un cours de programmation débutant qui utilise Alice (www.alice.org), et cest bien mieux conceptuellement que les anciennes approches.

Je pense que la solution de Brin était assez élégante. Vous pourriez construire quelque chose dassez simple sur un Raspberry PI. Sur larduino, je pense que ce sera difficile pour remplir tout ce dont vous avez besoin dans 2K de RAM; cela doit contenir le système dexploitation / moniteur que vous finissez par écrire, un interpréteur de commandes, du code pour faire laffichage et du stockage pour le programme de base lui-même.

Ne pas mentionnez le fait que vous allez devoir faire beaucoup de programmation difficile et personnalisée pour pouvoir écrire du code dans un environnement simple le repassage.

Réponse

Je ne comprends pas. Si vous voulez seulement avoir un moyen de programmer en Basic, lancez un interprète sur votre PC. Je ne comprends pas comment vous vous attendez à ce que lArduino vous aide. LArduino est un microcontrôleur avec de nombreux logiciels sophistiqués pour masquer les détails matériels. Une partie du coût est une baisse des performances et une plus grande utilisation des ressources que le programme équivalent sexécutant directement sur le microcontrôleur nu. Vous voulez maintenant écrire du code Arduino pour le transformer en un ordinateur plus général, tout cela pour pouvoir à votre tour exécuter un interpréteur de base sur cet ordinateur polyvalent? Cela na pas de sens.

Puisque votre seul objectif est de pouvoir éditer et exécuter des programmes de base (exécutez un interpréteur de base), commencez par une plate-forme informatique plus générale, de préférence même celle qui dispose déjà dun interpréteur de base. Votre PC est exactement une telle plate-forme. Si vous voulez quil sagisse dun matériel externe, il semble quun ordinateur monocarte standard répondrait bien mieux à vos besoins quun Arduino.

Ajouté:

Vous dites maintenant que vous ne veut pas fonctionner sur un PC et site ce lien sur quelquun qui veut la ligne de commande Basic pour que son enfant puisse apprendre. Certes, je nai pas lu larticle en entier (je naime pas que les gens répondent avec des liens. Vous devriez pouvoir pour énoncer votre point de façon indépendante en quelques phrases), mais je ne vois pas comment un PC exécutant une ligne de commande Linterpréteur de base ne résout pas votre problème. Pourquoi linterpréteur de base nest-il pas autorisé à fonctionner sur un PC mais cest OK fonctionner sur un Arduino? Noubliez pas que vous avez dit demblée que votre seul objectif était déditer et dexécuter des programmes de base. Rien dans cette déclaration ne dit sur quel matériel il doit fonctionner, et aucune de vos explications ultérieures nexplique pourquoi un PC ne ferait pas laffaire.

Il y a probablement des interpréteurs de base qui fonctionnent sur la ligne de commande. Lancien QBASIC peut toujours fonctionner dans certains modes de compatibilité DOS. Même si ce nest pas le cas, étant donné que vous « êtes prêt à y consacrer du matériel, comment exécuter DOS et QBASIC sur un PC ne fournit-il pas ce que vous avez demandé?

Commentaires

  • Mon point était que je ne ‘ pas vouloir programmer sur un PC. Je souhaite programmer dans un environnement similaire, par exemple, à un Texas Instruments TI-84 +. Ma raison à cela? Consultez le lien suivant,  » Why Johnny Can ‘ t Code  » salon.com/technology/feature/2006/09/14/basic/index.html
  • Ce nest pas vraiment une réponse.Oui, lidée du PO est peut-être un peu à gauche du centre, mais où en serions-nous si personne nessayait quelque chose dextraordinaire, ou pour repousser les limites de ce qui existe déjà? Dire à lOP quelle ‘ est une idée idiote nest ni utile ni constructive. LOP a décidé quil ‘ aimerait le faire, et nous demande de laide sur la façon de procéder. Il ‘ ne demande pas si ‘ est une bonne idée ou non. Oui, cest peut-être une mauvaise idée ™, mais lOP en apprendra énormément tout en le découvrant, ce qui en soi peut être plus précieux que le résultat final.
  • @Majenko: Ce que jai écrit est un réponse raisonnable à ce que le PO a écrit à lorigine. Noubliez pas, il a dit  » Mon seul objectif pour cet ordinateur est la possibilité de modifier et dexécuter des programmes BASIC  » . Cela ‘ ne dit rien à propos de son exécution sur un autre matériel. Apparemment, il veut un simple interpréteur de base en ligne de commande pour enseigner aux enfants. Comment exécuter une telle chose sur un PC nest-il pas une réponse valable? Nest-ce pas ‘ un PC exécutant QBASIC ou quelque chose exactement ce quil ‘ demande?
  • @Olin Le PO est daccord avec moi … Je pense que vous interprétez mal la question.
  • @Olin – Je peux comprendre Butts. Vous vous souvenez des ordinateurs personnels de la fin des années 70, du début des années 80? Vous avez ajouté une mémoire mappée 74LS373 et vous pouvez contrôler les E / S via des instructions poke. Pas de pilotes COM virtuels à installer, pas de clé USB vers nimporte quel pont, pas dIDE de développeur complexe à charger. Les SBC sont comparables, mais nont généralement pas linterface clavier / vidéo (et le stockage de cassettes!) Des ordinateurs personnels.

Réponse

Réponse

Jaime lidée dexécuter une application commune, telle que BASIC sur un Arduino surtout si vous lavez fabriqué vous-même. Jaime la commodité davoir un appareil Arduino pratique et alimenté par batterie exécutant lapplication que je voulais. Si cétait moi, jutiliserais peut-être un Arduino MEGA pour avoir suffisamment de broches pour le clavier et un blindage SD pour le stockage.

Je choisirais un écran LCD graphique couleur ou un écran TFT sur VGA pour la simplicité dans la programmation et les connexions, un moyen de garder une trace de la date et de lheure (RTC), et quest-ce quune application sans Internet ni réseau (bouclier Ethernet)? RAM I2C supplémentaires (24LC256) peut-être? Et quelques I2C MCP223017 juste au cas où jaurais besoin de quelques ports supplémentaires. Que diriez-vous de plusieurs Arduino faisant une tâche parallèle? Cela améliorerait les performances, jen suis sûr.

Commentaires

  • Les liens vers les fiches techniques sont appréciés par la communauté. Veuillez également ne pas en utiliser trop en majuscules et assurez-vous que votre réponse est lisible en ajoutant des espaces.
  • En létat, cest une réponse de très mauvaise qualité. Mais il y a des sentiments ici qui pourraient valoir la peine sils sont nettoyés et mieux présentés.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *