Aus meinen Experimenten a la "Was passt alles in einen ATMega16?" ist ein kleiner BASIC-programmierbarer Einchip-Computer entstanden. Features: - 23 Zeilen a 30 Zeichen mit maximal 8 Farben (RGB in PAL/NTSC) - Zeichensatz (128 Zeichen) mit Grossbuchstaben und Pseudografik - Anschluss PS2-Tastatur - Einkanaliger Tonausgang mit Hüllkurve, Rauschgenerator - Serielle Schnittstelle 1200 Baud mit Ladungspumpe über Timerausgang - parallele Druckerschnittstelle, auch als IO nutzbar - I2C Schnittstelle für "EEPROM-Disk" und Temperatursensoren - Jumper für PAL/NTSC, Auto-Run und Synchronsignal-Erzeugung (HSYNC/CSYNC) - Programme mit maximal 20 Zeilen werden im internen EEPROM gespeichert - Programm Up- und Download via Xmodem-Protokoll - Listingdruck - Weitestgehend Tiny-BASIC kompatible Programmiersprache mit Erweiterungen - Fullscreen-Editor mit aussagekräftigen Fehlermeldungen Dokumentation und ein paar Programmbeispiele sind mit dabei, Assemblierung des unmodifizierten Quelltextes ist wahrscheinlich nur mit dem AVRA Assembler unter Linux möglich.
Da ich zum Assemblieren das Tool "avr-libmake" benutze, hier noch ein Link auf meine Homepage, wo sich auch noch andere Projekte finden lassen: http://www.jcwolfram.de Ich weiss jetzt nicht, inwieweit PERL bei W* -Usern verbreitet ist, dann liessen sich in Zusammenarbeit die Funktionsfähigkeit der Scripte auf beide Betriebssysteme erweitern.
Kannst du mal einen Link zu einem Dekomprimierungsprogramm posten, welches dieses ominöse tar.gz beherrscht? Sollte möglichst frei sein und ohne Installation auskommen. Danke.
Beeindruckendes Projekt! 7-Zip muß zwar installiert werden, aber ist klasse (z.B. Bedienung: Rechtsklick auf komprimierten Ordner und 7-Zip bietet entpacken an), ist frei und macht keinen Quatsch (Quelltexte ebenso downloadbar). http://www.7-zip.org/
Hallo zusammen, mit Winzip läßt sich das ganze ebenfalls öffnen/ansehen/entpacken. Zum Projekt: Respekt ... Gruss Christoph
Schönes Projekt, kommt richtig Retro-Feeling auf. Muss man gleich an den seligen ZX-81 denken. Gibt es auch eine Liste mit wichtigen PEEKs und POKEs? :-)
So etwas habe ich mir schon immer gewünscht, dabei ist doch erst nächste Woche Weihnachten, absolut genial!!!! Ich hatte auch schon einmal so ein Projekt in Planung, ich wollte allerdings anstatt des Videoausgangs ein LCD-Display anschließen um damit auch unterwegs spielen zu können. Viele Grüße DLS
Wahnsinn, gratuliere! Wie lange hast du für dieses Projekt gebraucht? Wenn ich mit meiner soeben fertiggewordenen Gamekonsole vergleiche, dann erblasse ich vor Neid ;-)
wow das ist wirklich ein sehr interessantes projekt :). ich versuche auch schon seit längerem sowas zu konstruieren aber bis jetzt ist es immer an einem funktionierenden grafik-modul gescheitert. deinem projekt liegt allerdings alles bei was man benötigt ;). ich könnte mir ja mal so eine platine ätzen und aufbauen! allerdings hab ich nur nen mega32 da, das sollte aber eigentlich keinen unterschied machen oder?
achja was noch ganz schön wäre, falls ich die nicht übersehen hab, eine partlist damit man sich schonmal alle teile raussuchen kann :).
@Thomas: Peek und Poke gibt es schon, aber nur für externes Daten-EEPROM. Direkter Zugriff auf die Hardware ist meist der Anfang von Inkompatibilitäten... @DLS Wenn man Jumper 1 und 2 schliesst (NTSC, Synchronisation getrennt), kann man zum Beispiel ein NEC NL 3224AC35-01 5" Display (gibts manchmal bei ebay) direkt anschliessen. Grosse Teile des Programmes habe ich auch damit getestet, um den heimischen Fernseher nicht zu blockieren ;-) @Philipp Die wichtigsten Teile stehen rechts oben im Stromlaufplan. Danke für den Hinweis, in der nächsten Version wird es auch eine Stückliste geben. Der Mega32 sollte es auch tun, eventuell nochmal die Fuses kontrollieren.
Alle Achtung, das ist ja ein tolles Projekt! Ich werde es mir sicher mal nachbauen. Ich würde mir dann wahrscheinlich auch ein kleines LCD (das 132x176 vom S65, oder ein einfaches 128x64 (Pollin o.ä.)) und eine Mini-Tastatur dranfummeln (zum Unterwegs-Spielen s.o.).
Hallo Joerg, ich habe es heute endlich geschafft die Hardware aufzubauen. Ist schon eine beeinduckende Geschwindigkeit wie der Computer läuft, super Arbeit deinerseits. Das einzige Manko was ich auf die schnelle gefunden habe ist die Begrenzung auf 20 Programmzeilen. Ließe sich durch den Einsatz eines ATMega32 die Zeilenzahl verdoppeln? Viele Grüße
Oder mega128 mit externem ram. da kann man 64kb ranhängen, das dürfte potent genug sein, oder?
>- Programme mit maximal 20 Zeilen werden im internen EEPROM gespeichert
Was hat dann der RAM mit der möglichen anzahl von Programmzeilen zu tun?
Oder hab ich was falsch verstanden?
Erstmal vielen Dank für das Interesse an dem Projekt. Im Moment bin ich dabei, den Code zu optimieren, Fehler auszubügeln und ein paar neue Funktionen zu implementieren. Dazu gehören Linien zeichnen, einfache Abfrage von Cursor- und Shifttasten sowie "Pseudo"-Sprites. Die neue Version wird wahrscheinlich Ende der Woche fertig sein. @DLS ich arbeite schon an einem Konzept, um den Platz im EEPROM besser zu nutzen. Auf einem Mega16 wären dann maximal ca. 25 Zeilen und auf einem Mega32 60 Zeilen möglich. @Sebastian Die Variante mit dem externen RAM hatte ich mir auch schon überlegt, aber das widerspricht halt dem Einchip-Prinzip, welches ich gerne beibehaltem möchte.
mmhh okay... mit nem mega128 hättest du trotzdem 4kb ram zur verfügung.. und mehr eeprom. einziges manko er ist halt ned als dil verfügbar...
ATmega644P ist Pinkompatibel. Allerdings müsste man mehr am Sourcecode anfassen, anders als ATmega16->32 sind die Register nicht mehr alle "kompatibel".
Wie wäre es mit enm I²C EEProm... oaky nicht mehr einchip aber nen DIL6 wird ja wohl noch passen :)
Ja ich denke ein "externes" EEPROM macht das ganze wesendlich interessanter, da 20/25 zeilen code doch etwas wenig sind.
Hallo Hmmm...nicht so stur auf das Einchip-Konzept verrennen! Wäre doch irgendwie schade, wenn nur aus diesem Grund nicht mehr aus dem Computer würde. ;-) Gruss Michael
und nem tiny45 oder tiny85 als coprozessor für 3d berechnungen, frech grins
@joerg wolfram respekt !! geiles projekt. was man nicht alles in einen kleinen mega-16 reingedrückt bekommt. echt coole sache. btw. : hat jemand vielleicht einen link zu einem basic-interpreter der in C geschrieben ist ? gruß rene
Man könnte bei der Ein-Chip-Lösung bleiben, wenn man z.B. einen Mega-32 verwendet und den Basic-Code in das freie Flash schreibt. So extrem oft wird der Code ja auch nicht geändert, dass man innerhalb von Wochen die max. Schreibzyklen des Flash erreichen würde...
man könnte auch so ne copy funktion ins booten einbauen. ich mache das bei eeprom basierten lösungen, bei denen ich nicht will dass immer an die selbe stelle geschrieben wird. beim nächsten start erhöht sich ein zähler an stelle 1 und das offset beginnt nun woanders...
Was hat denn die EEPROM Größe mit der Zeilenanzahl zu tun? Wenn dann mit der ZEICHENanzahl, oder nicht? Oder speicherst du die Zeilen mit fester Länge im EEPROM?
kannst du den code nicht für den avrasm32 umsetzen. ist glaube ich der bekannteste. danke. mfg
Vielleicht mal ein paar Interna, um einige Fragen zu beantworten. Das Programm wird zum Editieren komplett im RAM gehalten, anders ist m.E. kein vernünftiges Arbeiten möglich. Beim Speichern wird jede Zeile auf Schlüsselwörter untersucht und dann in das EEPROM geschrieben. Nicht nur wegen der begrenzten Programmierzyklen, sondern hauptsächlich aus Geschwindigkeitsgründen haben die Zeilen eine feste Länge im EEPROM, der Rest wird mit $FF aufgefüllt. Zusätzlich wird vor jedem Schreibvorgang die EEPROM-Zelle gelesen und verglichen, ob überhaupt programmiert werden muss. Selbst wenn man die Zeilenlänge variablel macht, gibt das verfügbare RAM die Grenzen vor. Wenn das Programm läuft, wird die benötigte Zeile, deren Adresse sich ja leicht ausrechnen lässt in einen Puffer im RAM kopiert. Das allerdings nur, wenn sie sich nicht schon dort befindet. Also eine Art Cache. Da der Flash des Mega16 bei der kommenden Version nun bis zum Rand voll ist, werde ich danach das Projekt für den Mega32 bei gleicher Hardwarebasis weiterentwickeln. Eventuell auch mit direkter Abarbeitung von Programmen aus externem EEPROM oder Dataflash. Eure Vorschläge sind alle interessant, aber in den Foren hier scheint es eine gewisse "Featuritis" zu geben, die manche Projekte schon vor Beginn begraben hat. Deshalb nehmt es mir bitte nicht übel, wenn ich vor allen Dingen meine eigenen Pläne umsetze. Und man kann auch einfache Spiele wie z.B. Pong mit 20 Zeilen Basic schreiben, ein paar Tage Geduld auf die neue Version braucht´s aber noch... viele Grüße Jörg
Hallo Joerg, ist ja nicht negativ gemeint - nur wenn nur noch "eine Zeile fehlen würde damit das Programm läuft" ist es schade, wenn man keine mehr eingeben kann.... Gruss KSB
Wie versprochen eine neue, fehlerbereinigte und erweiterte Version. Neben neuen Funktionen habe ich auch den Editor überarbeitet. Er beherrscht jetzt Scrolling und ist so auch für Programme mit mehr Zeilen gut gerüstet. Aus gleichem Grund habe ich auch die Transferfunktionen von X-Modem auf Texttransfer umgestellt. Für die kommende Mega32-Version will ich schon mal ein paar Eckpunkte veröffentlichen: - Programmgröße 50 Zeilen, 4-8 Programme im Flash - EEPROM mit POKE/PEEK als Datenspeicher nutzbar - Zusätzliche Funktionen für Steuerungszwecke - eventuell Textmodus mit 35 Zeilen/Zeile im Editor - Auslagerung des Speicherinterfaces in Bibliotheken viele Grüße Jörg
Hallo Jörg, ich habe das Teil mal aufgebaut und muss sagen, ich bin beeindruckt. Da ich einen anderen Controller benutzt habe, musste ich neu kompilieren. Weil das AVRStudio mit den verschachtelten Macros nicht klargekommen ist, habe ich mir AVRA für Windows besorgt und im AVRStudio die AVRASM32.EXE mit der AVRA.EXE ersetzt. Damit hat es dann problemlos funktioniert. Eine Anmerkung habe ich noch. Wer den TV Scarteingang benutzt, muss auf Pin 16 eine Spannung von 3V legen, damit der TV auf RGB umschaltet. (solltest Du eventuell in der Schaltung vermerken) Auf externen AV Eingang kann man ja per FB umschalten, auf RGB aber nicht.
habe ich mir AVRA für Windows besorgt und im AVRStudio die AVRASM32.EXE mit der AVRA.EXE ersetzt.... hallo, den AVRA für Windows suche ich auch zum neucompilieren, finde ihn überhaupt nicht, kannst du mal die www.... geben mfg
Den Download von Avra findet man hier: http://sourceforge.net/project/showfiles.php?group_id=55499 Gruß Jörg
> hat jemand vielleicht einen link zu einem basic-interpreter der in C > geschrieben ist ? guckst du: http://www.sics.se/~adam/ubasic/
Sehr beeindruckend, es gibt aber ein paar Punkte, die man besser machen kann. 1. Nutz den SPI für das Bild damit bekommst Du locker 40 Zeichen pro Zeile. Du brauchst aber für Farbe dann etwas externe Logik. 2. Mach FM-Synthese. :) OK PM-Synthese, die geht mit etwa 18-19 Taktzyklen. pro Stimme. 3. Schau Dir mal den ZX80/ZX81 von der Firma Sinclair an. Das ist ein benutzbarer Computer mit BASIC und nur 1024 Byte RAM. Darin ist auch das RAM für die Graphik drin. http://www.worldofspectrum.org/ZX81BasicProgramming/ ist das offizielle Benutzerhandbuch. Wenn Du Dir das etwas anschaust, wirst Du feststellen, dass man selbst da noch viel optimieren kann. :) 4. Warum müssen denn die Programme im EEPROM drin sein? 5. Ich würde den normalen Editor nehmen, keinen Vollbildeditor. Vollbildeditoren sind so ungewöhnlich zu benutzen. Man hat so viele Zeilen und die machen das unübersichtlich.
@Christian 1.SPI wollte ich nicht benutzen, da damit ohne zusätzliche Logik keine Farbe geht. Ausserdem kann man es wenn SS mit PIN 3 vom Programmiersteckverbinder verbunden wird, auch für Erweiterungen benutzen. So habe ich noch ein paar Dataflash rumliegen und will die später vielleicht noch als externen Speicher nutzen. Die kommende Version hat einen anderen Textmodus im Editor, damit sind dann 35 Zeichen (theoretisch auch mehr) pro Zeile möglich. Es sollte aber auch kein Problem sein, die Video-Interruptroutine in der libmio teilweise zu ersetzen. 2.DDS wirst Du aber trotzdem brauchen, um einigermaßen genaue Halbtonschritte hinzubekommen. Aber vielleicht habe ich da auch einen Denkfehler. 3.Natürlich lässt sich noch einiges in Richtung Speicherverbrauch optimieren, das geht aber meist dann zu Lasten der Wiederverwendbarkeit und Wartbarkeit von Programmteilen. Und dann steht halt auch die Frage nach dem Zeitaufwand. 4.Die neue Version speichert (vorerst) die Programme im Flash, allerdings sind sie halt nach jedem Flashen weg. Geplant ist eine Auswahl (Flash/EEPROM/Dataflash), eventuell auch gemischt. 5.Den normalen Editor wie z.B. beim ZX Spectrum mag ich wiederum nicht so, aber das ist halt auch Geschmackssache. @Alle Im Moment bin ich bei 5 Programmen zu 50 Zeilen und 32 nutzbaren Zeichen je Zeile im Flash. Mehr Zeilen passen momentan nicht in den RAM. Vom EEPROM lassen sich 1000 Bytes im Programm nutzen, der Rest dient zur Konfiguration. Für größere Programme habe ich den Vorschlag, dass sich die Programme gegenseitig mit z.B. "RUN Nr." aufrufen können. Auch steht noch die Frage, inwieweit ein Upgrade über die (relativ langsame) serielle Schnittstelle sinnvoll ist. Als Zeitpunkt schätze ich mal 1-2 Wochen bis zum nächsten Release. Jörg
Joerg Wolfram wrote: > @Christian > > 1.SPI wollte ich nicht benutzen, da damit ohne zusätzliche Logik keine > Farbe geht. Ja, aber da reichen evtl. schon 3 Widerstände. :) > 2.DDS wirst Du aber trotzdem brauchen, um einigermaßen genaue > Halbtonschritte hinzubekommen. Aber vielleicht habe ich da auch einen > Denkfehler. Klar DDS brauchst Du auch, die Idee ist nur, die Phase synchron mit der n-fachen Frequenz des Signales zu multiplizieren. Dadurch kann man schöne Klänge bauen. Trotzdem sehr schöne Arbeit.
Hallo, erst mal muss ich das Projekt loben, hab lange kein so interessantes Projekt mehr gesehen. Ich hab allerdings mal eine Frage zu der Ladungspumpe. Ist der Kondensator C2 nicht falsch angeschlossen? GND ist ja im Bezug auf den Ausgang der Ladungspumpe positiv. Oder hab ich da was falsch verstanden? Achim
Stimmt, der ist verkehrt eingezeichnet. Werde ich beim nächsten Update mit ändern. Jörg
Christian Berger, du vergisst, das die bildausgabe durch ein hf-gerät gemacht wurde, ist wie ein 2. computer nur für die bildausgabe. nachdenken!!!
Jetzt könnte man den Basic Computer doch noch in das Chatboard einbauen und noch ein kleines LCD drann. http://www.myplace.nu/avr/avrchatboard/index.htm Hehehe Gruß, Feadi
Hallo Joerg,
folgende Frage:
> - Serielle Schnittstelle 1200 Baud mit Ladungspumpe über Timerausgang
ohne mir jetzt große Gedanken über den Grund zu machen,
frage ich mal einfach ganz dumm:
- was ist der Grund für dies Begrenzung auf 1200 Baud ?
- wäre theoretisch auch 2400 möglich ?
Es geht um den Anschluß eines Gerätes, dass leider als
minimale Baudrate 2400 hat.....
Gruss Otto
Das "Problem" ist, dass der UART bereits durch die PS2-Tastatur belegt ist. Damit blieb nur das Empfangen und Senden im Horizontal-Interrupt übrig. Und der hat entweder 15625Hz (PAL) oder 15748Hz (NTSC). Diese Frequenzen stehen leider in einem "krummen" Verhältnis zu den üblichen seriellen Bitraten. Bei 1200bps ist der Fehler noch klein genug um toleriert zu werden, bei 2400 (die mir auch lieber wären) gab es gelegentlich Fehler. Eventuell lässt sich das noch optimieren. Was noch besser wäre, eine andere Lösung für die Tastatur zu finden. Im ungünstigsten Fall kommen 2 Bits pro Bildzeile von der PS2-Schnittstelle, aus diesem Grund fallen externe Interrupts weg. Einfach die Clock-Leitung während des sichtbaren Bereiches auf 0 ziehen klappt such nur bei manchen Tastaturen. Solange ich nichts anderes (unter den gegebenen Bedingungen funktionierendes) gefunden habe, werden es halt nur 1200 bps bleiben.
Hallo Joerg, vielen Dank für die Antwort - für meine "Anwendung" könnte ein "gelegentlicher Fehler" evtl. akzeptiert werden, da er kurze Zeit später wieder "ausgebügelt" wird - gäbe es eine "Patch - Möglichkeit" ? Gruss Otto
Wirklich tolles Projekt! Meinen Respekt! Einfach genial was man alles rausholen kann! Was mich vor allem interressiert, ist die Videoverarbeitung. Diese kann ich vielleicht für meinen Einchiprechner (erstellt 1987) mit Z8 Clone übernehmen. Dieser Rechner arbeitet leider nur mit 8 Zeilen und 13 Zeichen. Das stört mich im Moment am meißten! Er hat auch einen Tiny_Basic_Interpreter u.v.m. Vielleicht kann ich deinen Rechner koppeln und ihn für die Bildschirmerzeugung vergattern? viele Grüße Peter
Tja, es hat doch etwas länger gedauert, aber gibt halt einfach wichtigeres als kleine schwarze "Tausendfüßler". Soweit möglich, habe ich die Syntax an die kommende Mega32-Version angepasst. Die Zeilenanzahl beim Übertragen über die Serielle Schnittstelle ist nicht mehr fest und die Screenshots werden als Hexadezimalzahlenfolgen übertragen. Die Mega32-er Version ist fast fertig, allerdings sind noch ein paar Bugs im Monitor und im Bootloader. Ansonsten sieht es so aus: - Programmgröße 51 Zeilen, 4 Programme im Flash - EEPROM mit EPOKE/EPEEK als Datenspeicher nutzbar - Textmodus mit 32 nutzbaren Zeichen/Zeile im Editor - 256 darstellbare Zeichen (anstelle 128) - Zeichenfunktionen mit 8 statt 4 Farben - Breakpoints/Tastenkombination für Monitorafruf - Monitor mit Programm-, Variablen- und Stackanzeige - Einzelschrittbetrieb, Wechsel zur Anzeige - Bootloader zum Updaten Eine Umstellung auf 2400 Baud will ich noch testen, kann aber etwas dauern. Soweit Interesse zum Testen besteht, kann ich auch vorab das Hexfile posten. viele Grüße Jörg
Zum Thema verfügbare Zeilenzahl bei der 32-er Version ist mir noch folgendes eingefallen: XCALL prognr,zeile könnte Unterprogramme in anderen Programmen aufrufen, wie eine Art Library. Mit Return wird dann wieder normal zurückgesprungen. Damit ließe sich der gesamte verfügbare Programmspeicher für eine Anwendung nutzen. Jörg
Hallo Joerg, ich habe diesen Thread und Dein Projekt mit Aufmerksamkeit vefolgt. Und natürlich den Mini_Basic Rechner nachgebaut. Ich bin total begeistert, er hat auf Anhieb funktioniert. Bislang läuft er noch mit dem Atmega16, aber bei nächster Gelegenheit "rüste" ich auf. Ich kann mir nur wünschen, daß Du bis dahin noch viele schöne Ideen in die Praxis umsetzt. In der Anlage ein Foto meiner neuen "Computeranlage". Viele Grüße Frank
Ich hab mal ne frage womit öffne ich die beiden Dateien chipbasic_05 und chipbasic-adapters_05 die einen soind bilder schon kalr aber die anderen kann ich auch mit eagel net öffnen
Die 4 SMD Dinger sind nehme ich an Wiederstände nur leider weis ich nicht welche werte die haben im Schaltplan hab ich nur einen gefunden die anderen 3 sind nicht aufgefürt. Ich hätte sowieso viel lieber nen Bestückungsplan mit nummerierten Bautelen dass man nur nummer schaltplan und bestückungsplan gucken brauch.
Ups... Da fehlt ja der Bestückungsplan im Archiv. Sorry, ist mir wahrscheinlich beim Kopieren passiert. Die 4 SMD-Teile sind Abblock-Kondensatoren, die müssen nicht unbedingt alle bestückt werden (die erste Version ging auch ohne, man kann sie aber dort auch noch nachträglich zwischen die Leiterbahnen löten...). Für die Störsicherheit ist es besser, ansonsten kann es beim Speichern von Programmen Fehler geben. Gruß Jörg
Danke für den Hinweis. Wer schön wenn du den Bestückungsplan noch mit reinpacken könntest. Danke
Was mir noch aufgefallen ist. Die Kondensatoren am Quarz sind beide 22p für nen 16 MHz Quarz wären 32p besser geeignet.
Hallo Habe leider immernoch nicht verstanden wie ich diesen Computer an meinen Fernseher anschließe. Welcher Pin von 9 Poligen D-Sup muss denn an den Skat? Oder gehts auch an diesen Gelben VIedeo anschluss vorneß Bitte helft mir
Hallo Robin T., es geht in schwarz/weiß auch mit dem "gelben" Anschluß, den Du an der Platine an Pin 8 (FBAS) des Video Sub-D anschließen mußt... Otto
Vielen Dank! Dachte schon dass keiner hier mal reinschaut und guckt. Danke
Bei der Mega32 Version sind auch die Pläne für den Anschluss an TV und Scart mit dabei, in der Meg16 Version fehlen sie noch. Grup Jörg
Möchte ich mir auch mit einem Atmega644 Bauen. Für das projekt giebt es 10 von 10 Punkten!!!
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.