ZUERST LESEN! Die hier oben angegebene Datei entspricht nur dem Stand bei Eröffnung des Threads. Die aktuellste Version ist immer unter http://developer.berlios.de/projects/avr-chipbasic/ oder weiter unten im Thread zu finden. Etwas später als geplant ist die Mega32-Version vom BASIC-Computer nun doch fertiggeworden. Da die Version für den Mega16 nicht mehr weiterentwickelt wird und maximal noch Bugfixes erhält, habe ich einen neuen Thread aufgemacht. Was gibt es Neues. Naja, einiges hatte ich ja bereits angekündigt, hier nochmal die Übersicht: - RGB-TV 23 Zeilen mit 30 Zeichen, 256 Zeichen mit 8 Farben - Anschluss für FBAS-CPLD vorbereitet - Gross- und Kleinbuchstaben, 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 Daten-EEPROM und Temperatursensoren - Weitestgehend Tiny-BASIC kompatible Programmiersprache mit Erweiterungen - Programmgröße 51 Zeilen a 32 Zeichen, 4 Programme im Flash - Programmübergreifender Subroutinenaufruf möglich - Programm Up- und Download via einfachen Texttransfer - Screenshot Funktion - Listingdruck - Fullscreen-Editor mit aussagekräftigen Fehlermeldungen - Breakpoints/Tastenkombination für Monitorafruf - Monitor mit Programm-, Variablen- und Stackanzeige - Einzelschrittbetrieb, Wechsel zur Anzeige - EEPROM mit EPOKE/EPEEK als Datenspeicher nutzbar Da die Zeichen 0x80 bis 0x8f noch nicht belegt sind, sind Vorschläge willkommen. Viel Spaß damit und ein schönes Wochenende wünscht Jörg
Hallo liebe Forumsgemeinde, also ich habe mit der neuen V0.84 ein kleines Problem: Meine selbst geschriebenen Programme können nicht abgespeichert werden. Ich hatte vorher die Version 0.72 auf einem Mega16 und damit gings prima. Ich benutze noch die ältere Platinen-Revision ohne die SMDs unten den Speichern. Den Fehler auf der Platine (unter bzw. neben den EEProms, fehlende Masse) hatte ich behoben und somit lief die V0.72 prima. Seit ich den Mega32 nehme läuft es soweit aber die externen EEProms werden a) nicht genutzt? und b) ich kann nix speichern. Nach dem Speichern ist der Editor leer. Wenn ich im Editor ein kleines Programm schreibe und danach sofort F10 drücke zum ausführen, sagt er mir, das ich erst speichern soll :-( Wo ist der Fehler? Mega32 defekt? oder läuft es mit der alten revision der Platine nicht? Würde mich sehr über eine Hilfestellung freuen. Viele Grüße Harry
@Harry Die 32-er Version läuft auch mit dem alten Board. Ich habe lediglich SS auf den SPI-Port geführt (für evtl. Erweiterungen), den Masse-Pin vom Video-Steckverbinder zur Synchronisation des Quarzoszillators umfunktioniert und ein paar Abblockkondensatoren hinzugefügt. Diese Änderungen sind für den normalen Betrieb aber nicht notwendig und ich arbeite selbst mit einer noch älteren Board-Version. Als erstes würde ich überprüfen, ob die Lockbits unprogrammiert sind (0xff) da es so aussieht, dass nichts in den Flash geschrieben werden kann. Ich werde aber heute abend mal zum Test einen neuen Mega32 mit der veröffentlichten Version flashen. Den externen Programm-EEPROM habe ich "wegrationalisiert", da ich das ganze mehr als eine Art "Chip mit integrierter Entwicklungsumgebung" betrachte. Wenn es gebraucht wird, kann ich es auch in einer späteren Version wieder reinnehmen. Gruß Jörg
Guten Abend Jörg, vielen Dank für die schnelle Antwort. Leider bin ich noch nicht dazu gekommen es zu testen. Werde aber natürlich berichten wie es funktioniert hat, bzw. ob irgendwelche LockBits gesetzt waren/sind. Zumindest ist es erstmal mit den externen Programm-EEproms geklärt. Aber als externen RAM (Peek, Poke) kann ich doch nutzen oder? Auf jeden Fall ein super Projekt find ich. Was man nicht so alles aus den "kleinen Dingern" so rausholen kann ;-) Es Grüßt der etwas übermüdete Harry
Zusatz: Ich hätte schon gern das externe Programm-EEProm wieder, es passten dort ja 8-10 kleine Programme rein. Fand ich eigentlich recht nett. Wenn Du es umgesetzt hast das man die Programme gegenseitig (XCALL) aufrufen kann. warum nicht wieder nutzen? Man könnte natürlich auch den Mega644 nehmen ;-) Wäre doch auch nicht schlecht. Damit könntest Du Dich auch austoben was den Sprachumfang angeht. Ich fände es z.B. klasse wenn man I2C direkt aus Basic ansteuern könnte..zur Not mit Call Befehlen auf "Maschinen Ebene?" Bitte nicht falsch verstehen, es ist natürlich keine Kritik, nur vielleicht als kleine Anregung. Das ganz erinnert mich sehr an meine alte ZX80/81er Zeit. Einige hab ich hier auf noch rumfliegen^^ Nette Grüße Harry
>>...den Masse-Pin vom
Video-Steckverbinder zur Synchronisation des Quarzoszillators
umfunktioniert...
Hallo,
das klingt interessant !
Was soll da passieren ?
Wie soll der Quarzoszillator worauf syncronisiert werden ?
Gruß Jan
@Harry in einen externen 24C65 passen jetzt nur noch 4 (ohne Programmnamen 5) Programme. Deshalb will ich eigentlich in Richtung Datatflash gehen und habe schonmal SS auf den ISP-Stecker gelegt. Da Dataflashmodul soll dann einfach auf die ISP-Schnittstelle gesteckt werden, damit hat die dann auch im Betrieb einen Nutzen. Eine Erweiterung der I2C-Möglichkeiten werde ich mir mal überlegen. Vielleicht parallele IO, Realtime Clock und LCD, vielleicht auch universeller. @JanB Das habe ich deshalb gemacht, um meinen FBAS-Encoder (auch hier in der Codesammlung, das Testbild dort stammt vom 32-er Basic) einfach anschließen zu können. Da der interne Quarzoszillator dafür ungeeignet ist, synchronisiere ich den internen Oszillator auf den 16MHz-Ausgang vom CPLD um Jittereffekte ("Schwimmen" des Bildes) zu vermeiden. Stecke ich stattdessen ein Adapterkabel auf Scart an, läuft der Oszillator einfach frei. Damit gibt es einfach mehr Anschlußmöglichkeiten, ohne die Hardware ändern zu müssen. Gruß Jörg
@Jörg Okay, hast mich überzeugt. 4 bzw. 5 Programme machen "den Kohl" dann auch nicht Fett. Externe Flash-Module hätten was ;-) Vor allem weil die SD-Karten ja inzwischen echt nix mehr kosten. Bei parallele IO, wie wäre es mit 'PCF8574 Befehlen', In(Adresse, Variable) Out(Adresse, Byte) einfach, effizient und für vieles zu nutzen. Ich hoffe das ich zu meinem Problem evtl. heute Abend berichten kann, weil zum Speichern hab ich noch nix machen können. Eine vermuttung habe ich noch, der Mega32 hat zu meiner Schande mal kurzzeitig falsch herum im Sockel gesteckt, evtl. hat er doch einen wegbekommen, es waren nur bruchteile von sekunden aber man weiß nie... Das möchte ich doch erstmal testen.... Gruß Harry
Guten Abend, also gute Neuigkeiten, es waren wirklich "nur" die Fuse Einstellungen. Vielen Dank für den Tip, daran hätte ich als letztes Gedacht da ich mit dem Mega32 bereits ne weile gearbeitet hatte und dachte die wären so relativ "Allgemein gültig" eingestellt gewesen. Ich freue mich schon auf das/die nächsten Updates^^ Liebe Grüße Harry
Gute Idee, vielleicht auch noch kleines Omega. Ich habe auch schon an ein paar diagonal aufgeteilte Felder gedacht. Neue Version folgt in den nächsten Tagen, wenn ich nen PC8547 getestet habe. Gruß Jörg
Folgende Gedanken zum I2C, die das ganze etwas universeller machen. Die I2C- und auch andere neue Funktionen könnten einfach über das Array laufen. Beispiele: IWRITE adr,arraypos,anzahl IREAD adr,arraypos,anzahl oder noch einfacher, da Lesen/Schreiben schon in der Adresse codiert ist: ICOMM adr,arraypos,anzahl 01 A=$FF:IC $40,0,1:IC $41,0,1 02 ?B setzt beim PC8574 mit der Adresse 0 alle Ausgänge auf High (können als Eingänge gelesen werden), liest den aktuellen Status der Pins in die Arrayzelle 0 ein und gibt den Wert dezimal aus. Da der Mega32 genügend RAM hat, könnte das Array auch wieder von den Variablen entkoppelt und etwas größer werden. Wäre das so OK? Gruß Jörg
Habe gerade dieses Projekt endeckt: http://www.ulrichradig.de/home/index.php/cpld/8bit_c_graka Vieleicht könnte man dieses Ding irgedwie and den Einchip-Computer anschließen. Hat nähmlich ne Menge Farben.
Hallo Jörg, also ich finde die Idee gut. Somit stehen alle wege in Verbindung mit I2C offen. Dein Mini-Computer wird vermutlich nach Griechenland auswandern und meinem alten Herren ein wenig das Computern näher bringen ;-) Ich habe immer nach einer möglichkeit gesucht meinem alten Herren einen Computer zu geben der einfach und verständlich ist. Basic ist einfach und das kpl. System ist gut zu verstehen. Ich baue mir natürlich noch eine zweite Version für den Eigenbedarf ;-) Es ist wirklich mal ein sinnvolles Projekt! Liebe Grüße Harry
Hat vieleicht jemand ne Idee wie ich die ganzen fuses in PonyProg setzen muss damit dass funktioniert? Ich habe dass Datenblatt durchsuch auch etwas über fuses gefunden. Aber dieses Fach-English macht mich ganz verrückt. Einer von euch muss diesen Einchip-Copmputer doch schon aufgebaut haben. Wie hast du die Fuses gestzt? Danke schonmal
Die Fuses müssen folgendermassen programmiert werden (steht auch in der LIESMICH-Datei): FUSE LOW: 0xef FUSE HIGH: 0xd1 Wie es beim PonyProg geht weiss ich leider nicht, da ich uisp oder avrdude unter Linux nutze. Zum Thema Grafikkarte: Bei z.B. 6x10 Pixeln/Zeichen braucht man im Grafikmodus mit 256 Farben für die gleiche Operation ca. 60x mehr Taktzyklen als im Textmodus. Wenn der Controller dadurch von der Bildausgabe entlastet ist, erhöht sich die Geschwindigkeit etwa um den Faktor 4, die resultierende Geschwindigkeit als ungefähr um den Faktor 15 langsamer. Bei der Grafikkarte nach Ulrich Radig braucht man aber mindestens 6 Takte, um ein Pixel zu setzen. Gegenüber 2 Takten im Textmodus beim ChipBASIC ergibt das einen Gesamtfaktor von 45 für die reine Ausgabe. Wenn die Daten aus einem Character-ROM im AVR ausgelesen werden müssen, kommt man locker auf einen Faktor von geschätzt 90-100. Um mit dem Basic-Computer sinnvoll arbeiten zu können, bräuchte die Grafikkarte einen Textmodus. Gruß Jörg
Danke für die ausfühliche Antwort. Die fuses habe cih in diesen fuse-rechner eigegeben http://palmavr.sourceforge.net/cgi-bin/fc.cgi?P_PREV=ATmega32&P=ATmega32&V_LOW=ef&V_HIGH=d1&O_HEX=Apply+user+values&M_LOW_0x3F=0x21&M_LOW_0x40=&M_LOW_0x80=0x80&M_HIGH_0x01=&M_HIGH_0x06=0x00&M_HIGH_0x08=&M_HIGH_0x10=&M_HIGH_0x20=0x00&M_HIGH_0x40=0x00&M_HIGH_0x80=&B_JTAGEN=P&B_SPIEN=P&B_SUT0=P&B_CKSEL3=P&B_CKSEL2=P&B_BOOTSZ1=P&B_CKSEL1=P&B_BOOTSZ0=P damit ich die in ponyprog verwenden kann. ABER: Da steht CKOPT unprogrammed obwohl dann die maximal Frequenz 8MHZ ist. hab ich da was falsch versatanden?
Nut ne kleine Frage am Rande: Könnte man noch nen Bootloader in den Atmega Quetschen? So dass man Updates übers Windoofs Terminal reinläd?
Das mit der CKOPT liegt an der Synchronisierbarkeit über externen Takt. Wenn ich sie programmiere, läuft der Oszillator bei extern eingespeisten 16MHz (FBAS-Encoder) oftmals nicht an. Bootloader (über XModem) hatte ich schon mal in einer (nichtveröffentlichten) Version drin, der konnte sogar zwischen BASIC-Programmen und Updates unterscheiden. Liegt momentan auf Eis, da der Speicher im Bootloader-Bereich nicht für alles (Bootloader, Video_interrupt, Zeichensatz) ausgereicht hatte. Werde ich mich demnächst mal wieder damit befassen... Gruß Jörg
Glaubst du die neue Version kommt bis Anfang April raus? Sonst bestell ich jetzt schon Tiel für die alte.
Wann die nächste Version fertig wird, lässt sich nicht so genau sagen. Ich habe das Wochenende angepeilt, aber Familie geht vor. Aber auf jeden Fall wird sich so schnell nichts an der Hardware ändern. Gruß Jörg
Hallo nochmal, könnte man per I²C Temepratur einlesen und per Parallele Schnittstelle auf LCD wieder ausgeben? Oder fehlen zum LCD ansteuern die benötigten Befehlen im Basic?
@Robin Befehle dafür gibt es nicht. Aber da sich der Parallelport auch als normales IO programmieren lässt (DIR,IN,OUT) könnte man die Routinen auch in BASIC schreiben. Zuerst normal auf den Bilschirm schreiben, dann Zeiche für Zeichen in einer Subroutine mit GCHAR einlesen und über den Parallelport ausgeben. Eventuell könnte ich auch einen Befehl kreieren, der einen angegebenen Bildschirmausschnitt auf ein am Parallelport angeschlossenes LCD kopiert. Eine andere Variante, die ich mir schon überlegt habe, das LCD mit einem Mega8 zu versehen und dann per I2C anzusteuern. Mit einem gescheiten Befehlssatz könnte man dann über die gleiche Schnittstelle LCD oder eine "TV-Grafikkarte" ansteuern, ohne sich groß darum kümmern zu müssen, was nun wirklich dranhängt. Wenn dann das BASIC noch ein bisschen angepasst wird, könnte man zum Beispiel mit PRINT #3;@2,2;"Temperatur: ";A ein an die I2C angeschlossenes Display direkt ansteuern. Gruß Jörg
Ich hab nur mal eine kurze Frage, wozu dienen die Pullup Widerstände R12-R14? hängt das damit zusammen das über den selben port die videosignalgenerierung stattfindet? Soweit ich weiß haben doch die avrs portpins alle interne pullups die per software aktivierbar sind. und dann noch eine frage, warum sind an der parallel schnittstelle die vielen vorwiderstände R1-R8, wenn man doch jetzt zum beispiel den internen ad wandler benutzt müsste man doch auch den spannungsabfall (auch wenn der sehr klein ist) an den vorwiderständen berücksichtigen. oder hab ich nicht aufgepasst? für eine antwort wäre ich sehr dankbar. ps: ist wirklich ein tolles projekt, wenn ich überlege das der "kleine" AVR bald mehr kann als der gute alte brotkasten :-)
Ja, richtig. Die Pullups sind notwendig, weil auch an den als Eingänge konfigurierten Pins die Portsignale durch die Videoausgabe mit wechseln. Dadurch werden die internen Pullups ständig ein- und ausgeschaltet. Die Widerstände am Parallelport begrenzen den Ausgangsstrom, dadurch kann beim Experimentieren auch ein Anschluß nach Masse oder 5V gelegt werden, ohne dass ein zu hoher Strom fliesst. Bei einem Eingangswiderstand von 100MOhm lt. Datenblatt sollten sich die paar Ohm nicht im Ergebnis bemerkbar machen. Gruß Jörg
"Pünktlich zu Ostern" eine neue Version des BASIC-Computers. Es gibt einige neue Funktionen und auch einige Änderungen. Die Hardwaredokumentation für das Dataflash-Modul steht noch aus, im Moment ragt die Platine 4,5cm nach oben. Angeschlossen habe ich den AT45DB081B an die SPI-Schnittstelle, CS geht an das erst bei der 32er Version verdrahtete SS, SCK an SCK, SI an MOSI, SO an MISO und RESET an RESET. Die Stromversorgung habe ich über eine grüne LED zwischen 5V und VCC des Dataflash realisiert. Dokumentation folgt aber erst in den nächsten Tagen. (und wahrscheinlich auch noch einige Bugfixes) Was ist noch neu: - delta, my und omega im Zeichensatz - Universelle I2C Routine ICOMM - DATA zur Array-Belegung - Letzter INPUT-Wert kann als Text ins Array kopiert werden - Array hat 256 Bytes im RAM, +512 Bytes über Puffer im Dataflash - Dataflash-Puffer können vom Flash gelesen und auch geschrieben werden. - Klammeraffe ist auch wieder über ALT/ALTGR+Q erreichbar Da der letzte bei INPUT eingegebene Wert jetzt auch als Text verfügbar ist, kann mit einem angeschlossenem PS2 Barcodescanner leicht z.B. ein mobiles Datenerfassungssystem realisiert werden. Da mehr als 1200 Bps über die serielle Schnittstelle nicht möglich sind, könnte man auch einen ATmega8 als Seriell-IO I2C Slave realisieren. Sofern Interesse besteht. Jetzt erstmal frohe Ostern Jörg
Joerg Wolfram wrote: > "Pünktlich zu Ostern" eine neue Version des BASIC-Computers. Es gibt > einige neue Funktionen und auch einige Änderungen. Die > Hardwaredokumentation für das Dataflash-Modul steht noch aus, im Moment > ragt die Platine 4,5cm nach oben. Angeschlossen habe ich den AT45DB081B > an die SPI-Schnittstelle, CS geht an das erst bei der 32er Version > verdrahtete SS, SCK an SCK, SI an MOSI, SO an MISO und RESET an RESET. > Die Stromversorgung habe ich über eine grüne LED zwischen 5V und VCC des > Dataflash realisiert. Dokumentation folgt aber erst in den nächsten > Tagen. (und wahrscheinlich auch noch einige Bugfixes) Es tut mir leid aber obwohl ich nicht der Grünschnabel vom Lande bin, versteh ich nicht was du sagen willst. Besonders: "Die > Hardwaredokumentation für das Dataflash-Modul steht noch aus, im Moment > ragt die Platine 4,5cm nach oben." Warum 4,5 cm? Was hat dass damit zutun? oder: >Angeschlossen habe ich den AT45DB081B > an die SPI-Schnittstelle, CS geht an das erst bei der 32er Version > verdrahtete SS, SCK an SCK, SI an MOSI, SO an MISO und RESET an RESET. warum sond din an die ISP schnittstelle? was ist CS? Erst bei der 32er Version? So wie ich dass gesehen habe ist 16er und 32er Layout gleicht? Biiiittttee erklärs mir?
Naja, vielleicht war es schon etwas spät... Ich hab den Dataflash erstmal provisorisch an einen Stecker angelötet und auf die ISP gesteckt. Deswegen fehlt noch die Platine dazu. Der Dataflash hat 1MByte, die man aus dem BASIC ansprechen kann. Er hat zwei Puffer von je 256 Bytes, die ganz einfach das Array (welches jetzt 256Bytes gross ist) um 512 Bytes erweitern. Mit den Befehlen FREAD und FWRITE können die beiden Puffer aus einer Flash-Page gelesen oder dahin geschrieben werden. Beim ersten Mega16-Layout fehlt die Verbindung von der ISP zu SS am Controller noch und kann einfach mit einem Stückchen Draht hergestellt werden. Meine "Verdrahtungsbeschreibung" war für die Leute gedacht, die es schonmal selbst ausprobieren wollen. Inzwischen habe ich aber auch schon ein kleines Layout fertig und werde vielleicht schon morgen mal eine Platine machen. Hier nochmal die Beschaltung, etwas übersichtlicher: Platine Dataflash =============================== +5V --|>|- VCC,WP (über grüne LED) ATMEGA SS ------ CS ATMEGA MOSI ------ SI ATMEGA MISO ------ SO ATMEGA SCK ------ SCK RESET ------ RESET GND ------ GND Die ISP-Schnittstelle ist ja normalerweiese frei und so hat man z.B. 1MByte Speicherplatz für Daten (z.B. Datenlogger). Eventuell auch später für weitere Programme. Gruß Jörg
Vielen Dank! Jetzt hab ich alles soweit verstanden. Würde auch gerne mit diesen "Dataflash" baustein arbeiten, ABER ich finde ihn ihn keinem Laden. Nicht Reichelt, nicht Conrad, nicht CSD. Wo hast du den her? Oder gibt es alternativen?
Ich hab vor einiger Zeit ein paar bei Ebay ersteigert. Als Quelle fällt mir z.B. http://www.darisus.de ein, die haben den AT45DB041B-SU mit 512kBytes (2048 pages) für 2,38€ und auch noch manch andere "Exoten". Allerdings in einem anderen Gehäuse (SOIC 8) als ich sie habe (SOIC 28). Gruß Jörg
So,jetzt nochmal die aktuelle Version mit vervollständigter Dokumentation. Jörg
Hallo, Habe ein Problem. R17 ist nicht im Bestückungsplan und auch auf dem Layout. Hab ich da was verkehrt verstanden?
Hallo, Eine letzte wichtige Frage noch. Mein BASIC-Computer funktioniert jetzt eigentlich ganz gut bisauf, das dass wenn ich Quelltext eingebe manchmal zufallige Zeichen auftauchen oder ganz plötzlich ist da ne Leerzeile. Auch in den Zeilen 40-51 sind manchmal irgendwelche buchstaben oder zeichen. Kann dass daran liegen dass ich statt 22pf für den Quarz 33p genommen habe. Bei Reichelt stand zu dem Quarz 33p nehemen. Deshalb habe ich gedacht dass wird wohl stimmen. Achso nochwas: R27 habe ich bestückt Und wie gesagt R17 ist nicht im Layout verzeichnet. ABer ich glaube der ist nicht für mein Problem verantwotlicht
Achso fällt mir noch was dazu ein. Deine Besispileprogramme Pong, und Ballgate funktionieren bei mir nicht. Bei Pong macht der ball heftige schnelle zuckende rauf runter bewegungen. Bei ballgate fehlen die locher in den herankommenden wänden und ich kann die punkte nicht aufsammeln. Dass kann doch nur am Quarz liegen oder?
@Robin R17 war mal ursprünglich als Pullup für den RESET-Pin gedacht, und ist nicht unbedingt notwendig. Irgendwann beim layouten ist er einfach rausgeflogen. Bei den beiden Beispielen hast Du recht, die aktuellen sind leider nur in der Dokumentation drin. Wenn das Programm vom Editor aus gestartet wird, kann es sein, dass nach dem Programmende der Editorbereich vor dem Einlesen des Programms aus dem Flash nicht richtig gelöscht wird. Das hängt mit Testanzeigen während der Entwicklung zusammen und sollte in der (heute abend) kommenden Version behoben sein. Wenn aber z.B. nach dem Speichern vagabundierende Zeichen in den Zeilen auftauchen ist es ratsam, die Spannungsversorgung (Abblockkondensatoren) zu überprüfen. Wenn das Bild stabil am TV steht, sollte es auf keinem Fall am Quarz liegen. Gruß Jörg
Da bild steht Stabil und es tauchen auch keine Zeichen NACH dem Speichern auf. Also hast du wohl recht. Übirgens vieleicht könntest du so ne Art Bereich auf deine Homepage eröffnen wo Leute ihre Programme für den Computer reinposten. Nur ne Idee Danke erstmal
Hallo Robin, die Idee ist gut - dann muß das Rad nicht dauernd neu erfunden werden... Gruß Otto
Danke Man könnte ja auch einfach nen Neuen Thread in der Codesammlung aufmachen z.B. "BASIC-Computer Progs" Wenn Jörg damit einverstanden wär würd ich dass machen.
Zuerst mal vielen Danf fürs Testen. Ich versuche zwar auch immer die Release-Versionen zu testen, aber der Funktionsumfang ist mittlerweise einfach zu gross um alle Bugs zu "erwischen". Zum Download steht die neue Version 0.88 mit einigen Bugfixes und einer neuen Funktion APRINT. Die funktioniert fast genauso wie PRINT, schreibt aber anstelle auf den Bildschirm in das Array. PRINT #3... geht auch, aber hier lässt sich der Startpunkt im Array nicht festlegen. Damit sollte es relativ einfach möglich sein, z.B. ein LCD an den Parallelport anzuschliessen. Man müsste sich nur noch in BASIC eine Routine schreiben, die einen Bereich des Arrays ausliest und an das Display schickt. Wobei wir gleich beim nächsten Thema sind. Die Idee mit der Codesammlung auf meiner Homepage hatte ich auch schon gehabt, bis jetzt hat sich aber noch zuviel an der Syntax geändert und dann passiert es wie mit den zwei Spielen, die nicht mehr richtig funktionierten. Da der Mega32 mittlerweise auch schon recht voll geworden ist, würde ich ein feature-freeze vorschlagen, also (vorerst) keine neuen Funktionen mehr einzubauen und die bestehenden in ihrer Syntax nicht mehr zu ändern. Natürlich könnt Ihr gerne Threads zur BASIC-Programmierung aufmachen, da habe ich absolut nix dagegen. Ich finde das sogar gut, denn mehr Feedback bedeutet ja auch letztendlich bessere Codequalität für das System an sich. Gruß Jörg
Danke dass Editor Problem ist jetzt "fast" weg. Ich habe immernoch dass wenn ich einfach nur schreibe oder den Curso ein bisschen durch den text bewege er zeichen hinzufügt oder ändert. Ist aber auf KEINEN fall schlimm. Dass passiert nicht allzu oft. Dann habe ich nocht wenn ich eine Datei zum PC Sende dann wird nicht die gesendet die ich mit dem grünen Pfeil auswähle sondern die die als Deafult makiert ist. Dann habe ich noch ne Frage: Wo sind die neuen Zeichen z.B. µ kann ich nicht wie in WIndows mit Alt Gr+M machen? P.S:Hoffe das dass mit dem Bereich auf deiner Page klappt wäre echt super.
Achso ganz vergessen: Was für einen Drucker kann man den anschließen? Ich meine man kann ja keine Treiber installieren. Müsste also irgend ein einfacher sein. Aber welcher?
Da hat sich jetzt noch ne Frage angehäuft. Ich habe gelesen dass man bei der Mega 16 Version "16" Programme im Externen EEprom speichern kann. WIESO kannn man dass nicht in der Mega 32 Version? Oder geht dass und ich weis nicht wie?
Hallo Jörg, ich hatte jetzt länger nicht reingeschaut umd muß zugeben der "Kleine" entwickelt sich prächtig!! Finde ich wirklich Klasse was Du ihm inzwischen alles beigebracht hast. Von der Leistung her wird er bald den ZX81 überbieten ;-) Mach weiter so! Liebe Grüße aus Berlin Harry
Hallo,
wenn gerade Fragestunde ist: ich bekomme unter
keiner Adresse einen Wert aus den Temperatursensoren.
Es sind "LM75CIM-5" (SMD), da keine anderen erhältlich waren
Ist es richtig, das der Chip die "Hauptadresse" vorgibt
und von hier 8 Adressen 000 bis 111 liegen ?
@Robin:
Joerg schrieb weiter oben:
>Den externen Programm-EEPROM habe ich "wegrationalisiert"
Viele Grüße Otto
Schade dass er den "Wegrationalisiert hat" @Otto: Hast du alle 3 Adress Pins mit Masse verbunden? dann wäre die Adresse Logischer Weise "000". Warscheinlich haste dass gemacht, aber ich frage ja nur.
Hallo Robin, ja - damit habe ich angefangen und nun mittlerweile bis "6" alles mal durchprobiert... Allerdings hab ich noch "V0.84". Funktionieren die Sensoren denn bei Dir? Wenn ja, unter welcher Adresse? Gruss Otto
Leider habe ich keine Sensoren. Habe mir aber gleich Version 0.88 geholt asl sie da war. Ist doch keine Mühe dass da mal eben ISP drauszu machen.
Sagt er denn nach dem Ausführen des Programms: "ISP Error" oder was passiert da genau?
Hallo Robin, vielen Dank für Deine Antwort - das "updaten" von der "16" auf die "32" Version hatte ich durchgeführt, aber über die Ostertage keine Zeit gehabt - jetzt wollte ich erstmal abwarten, ob noch "Bugfixes" kommen... Ja - ich bekomme unter allen Adressen "I²C-Error". Das Programm-EEProm in der "ATMEGA16"-Version hatte aber einwandfrei funktioniert. Gruß Otto
Erstmal vielen Dank für die Fragen und Hinweise. 1.Speichern nur Default ----------------------- Das mit dem Default-Programm betrifft Speichern und Drucken. Im Moment muss man sich halt damit befelfen, vorher das Default-Programm zu ändern, wird beim nächsten Release behoben. 2. Druckertreiber ----------------- Da nur reine ASCII-Zeichen gedruckt werden, sollte es mit den meisten Druckern ohne Probleme funktionieren. Ausnahme sind reine Postscript-Drucker wie z.B. Tektronix Phaser, da funktioniert es leider nicht. 3.Sonderzeichen --------------- Theoretisch könnte man das µ oder auch noch andere Zeichen (z.B. Umlaute)direkt per Tastatur zugänglich machen. Die Frage ist aber dann, wie werden sie codiert, da nicht ASCII. Probleme gibt es soweohl beim Dateitransfer als auch beim Drucken. Und wenn ich mich nach X11 und UTF-8 auf meinem Rechner richte, wird es auf W* Rechnern mit hoher Wahrscheinlichkeit nicht passen. Am einfachsten ist es, sich die Belegung mit dem Charset-Programm anzuschauen. Bei Ausgaben reicht dann z.B. ein %13 für delta %14 für my %15 für omega %28 für das Gradzeichen (Im Moment liegen noch irgendwelche Zeichen auf den Umlauten, werde ich aber noch wegmachen...) 4.Programme im EEPROM --------------------- In einen 24C64 passen auch nur noch 4-5 Programme, deswegen habe ich es weggelassen. Vielleicht lässt sich noch was mit dem Dataflash machen... Gruß Jörg
Hallo Jörg, kannst Du bitte einen Hinweis zu den Temperatursensoren geben ? Viele Grüße Otto
@Otto Wenn alle Adress-Pins auf Masse liegen, gibt TEMP(0) das Ergebnis, nicht TEMP(1). lässt sich denn das Programm-EEPROM ansprechen (ab Version 0.87)? DATA 1024,0,0,12 ICOMM $A0,1024,3:SYNC 2 ICOMM $A0,1024,2 ICOMM $A1,1024,1 PRINT @(1024) sollte "12" anzeigen. Nach einem I2C-Error ist es meist ratsam, mit CTRL-ALT-DEL den Compi neu zu starten (vorher Programm speichern!). Damit wird das I2C-Interface neu initialisiert. Ansonsten kann es passieren, dass weiterhin I2C-Eroor angezeigt wird, obwohl es gehen müsste. Das Temp-Uhr Programm habe ich gerade nochmal getestet, funktioniert ohne Probleme. Gruß Jörg
Hallo Jörg,
Ja, ich hatte, wie im "Demo" mit "Temp(0)"
angefangen
>CTRL-ALT-DEL
vielen Dank für den Tip - das versuche ich mal
Viele Grüße
Otto
PS: kommen noch "bugfixes"?
Ein paar Bugs sind ja schon gefunden worden, ich will aber vor dem nächsten Update eine Backup/Restore Funktion über das nicht mehr benutzte Programm-EEPROM testen. Dann müsste man nicht vor jedem Update die Programme sichern. Wenn keine schwerwiegenden Bugs dazukommen, sollte es am WE soweit sein. Gruß Jörg
Ich glaube ich habe noch nen Fehler gefunden. Wenn ich dieses Programm starte: 01: DIR 0 02: Print DIN(1) Sagt er: Unknowed Keyword in 02:01
@joerg also erstmal muß ich meinen respekt vor diesem projekt bekunden. finds echt irre was du aus nem einzelnen chip so alles rausholst. klasse. weiter so.
@robin t. wenn du datenflashes suchst, schau mal bei kessler-elektronik rein. da bekommt man die at45db (1,2,4,8,16 MBit) recht preiswert (ca 3-4 euro).
Hallo Jörg, ich hätte noch die Bitte, ob Du nähere Angaben zum Anschluß der "LM75" - Temperatursensoren liefern könntest - evtl. auch, wo und wie Du Deinen Sensor an- geschlossen hast (z.B. externe Platine) und ob zusätzliche Maßnahmen erforderlich sind. "Meine" Verdrahtung der "I²C" - Schnittstelle: Pin 1: + -> Pin 8 LM75 Pin 2: SCL -> Pin 2 Pin 3: SDA -> Pin 1 Pin 4: GND -> Pin 4 und 5,6,7 (Adresse "0") Habe ich da einen Denkfehler ? Versuchsweise habe ich noch einmal den ATMEGA16 mit externem Programmeeprom gesteckt - kein Problem. Zugriff auf "LM75" über A=TEMP(0) -> "I2C-Error" Gruß Otto
Auch ist mir aufgefallen. Müsste dass hier nicht eigentlich funktionieren? OUT 255,0 Oder kann man nicht alle Ausgägne gleichzeitig mit dem Befehl setzen?
Ich kann nicht wiederstehen mal ein paar Fotos von meinen "kleinen" Freund zu schicken. Hier die ganze Station.
Hallo, ganz wichtig ist vor Allem ein ordnungsgemäßer und ESD geschützter Aufbau einschließlich einer ausgeklügelten Gehäusekonstruktion. Gruß Otto
Hallo Robin, ich oute mich nur sehr ungern......... Der Sinn und Zweck meiner aktuellen Übung ist die Anzeige diverser Meßwerte als Ziffern und Balkengrafiken auf dem Monitor eines Hybrid-PKW. Nun ist es raus und hat auch nicht besonders weh getan. Danach habe ich ein paar kleine Automatisierungsideen. Gruß Otto
@Otto versuch mal, SCL und SDA zu vertauschen, mein Testkabel geht: +5V PIN 1 PIN 2 GND Sorry, da stimmen Schaltplan und Layout leider nicht überein. Muss ich noch ändern. @Robin Da ist mir ein Schreibfehler in der Doku unterlaufen, es muss natürlich IN(1) heissen. Bei OUT wird als erstes die Bitnummer und dann der Wert angegeben. Wenn es nützlich wäre, könnte ich z.B. ein "BOUT" und "BIN" reinmachen, die den Parallelport byteweise ansprechen. Gruß Jörg
Ich habe jetzt probiert und folgendes würde gehen: Adresse bei IN(adr) und OUT adr,val adr 0-7 spricht ein Bit an adr 255 spricht das ganze Byte an wäre das so OK? Gruß Jörg
Hallo Jörg, ja funktioniert - super vielen Dank !!!! ======================================== Habe heute schon einen KTY10-6 drangebastelt, das ging auch aber so ist natürlich besser. Hat sich etwas an den "Print"-Formatierungs- anweisungen geändert ? Die Anzeige ist anders als erwartet.... Viele Grüße Otto
Die Formatierung habe ch nicht geändert, nur die direkte Zeichenausgabe mit %... ist neu dazugekommen. Vielleicht kannst Du mir mal "Soll" und "Ist" beschreiben. Gruß Jörg
Hallo Jörg, ich wars selber... der Monitor war rechts einfach zu Ende - es funktioniert, zeigt aber "vorne" 2 Leerziffern an und daher war "hinten" kein Platz mehr für das Komma, die Nachkommastelle und das "°" - Zeichen. Einige Mal war ich kurz davor "SDA" und "SCL" zu tauschen - hätte ich nur - hinterher ist man immer schlauer. Nochmal vielen Dank ! Otto
@Joerg: Das wäre SUPER. Bit und Byteweise auszugeben und einzulesen. Also dass ma z.B. auch: Out 64,1 Eingeben könnte damit ich auch z.B. den 2. und 6. gleichzeitig auf high oder low setzen kann.
Habe mich etwas komisch ausgedrückt. Ich meine ganz Konkret 0-255 ansprechen. so wäre es super
Achso es wäre auch sehr schön wenn man etwas noch kürzeres als: sync 1 hätte. dass ich ein frequenz von etwa 100-200 hz erzeugen könnte.
Um Inkompatibilitäten mit bestehenden Versionen zu vermeiden, hätte ich folgenden Vorschlag: adr 0-7 spricht ein Bit an adr 255 spricht das ganze Byte an adr 256-511 stellt eine Maske dar, Bits bei denen das Maskenbit 0 ist, werden nicht geändert und sind auch bei IN() immer Null. Das mit schnelleren Timern ist so eine Sache, da eigentlich alles aus den 15625 (oder 15734 bei NTSC) kHz Zeilenfrequenz abgeleitet werden muss. Deswegen geht auch die serielle Schnittstelle nur mit 1200 Bps. Als ein weiteres Zusatzprojekt habe ich schon einen I2C-Slave mit einem Mega8 oder Mega88 angefangen. * schnellere serielle Schnittstelle mit 256 Bytes FIFO * 4 PWM-Kanäle (Mega88) * Timer 1 als Frequenzgenerator oder Zähler * zusätzliche IO Da sich das Teil noch in der Planungsphase befindet, sind Vorschläge gerne gesehen. Gruß Jörg
Ja gut. dass mit 255 alle an ist auch nicht schlecht. WÄre aber schön wenn du vieleicht einen Extra Befehl für 0-255 machen könntest. Aber wenns nicht geht gehts nicht
Es wäre dann halt nur der Offset von 256, also z.B. OUT M+256,0 um die in der Maske M bestimmten Bits auf Null zu setzen. Es sind ja nicht nur Zahlen, sondern fast beliebige Ausdrücke für alle Argumente möglich. Gruß Jörg
USB, die Schnittstelle scheint ja sehr relevant. Ein einfaches Prog. für den PC, eins für den uC um einfache USB-I/Os zu ermöglichen: Motto: INusb data OUTusb data oder so Ich habe keine Ahnung von Basic - nur ein Vorschlag. Es gibt ja eine Softwarelösung für die USB-Scjnittstelle, die aber einiges erfordert. Gruß c.
Kommt dass Update heute noch oder erst morgen? Oder überhaupt dieses Wochenende?
Wahrscheinlich kommt das Update erst nächste Woche, es git noch einiges zu testen, auch noch ein paar andere Projekte und tagsüber hat die Familie Vorrang. Gruß Jörg
Hallo Jörg, auch vielen Dank für die ICOMM-Routine - ich habe heute mal damit rumgespielt und auch Resultate erzielt. nun hätte ich noch ein paar (dumme) Fragen: - weshalb ergeben "temp(0)" und "IC $91,0,1" unterschiedliche Werte? - hast Du achon mal eine (I²C) - RTC angeschlossen - wenn ja: welche? - verwendest Du eine Zusatzplatine für Deine Sensoren (+ggf. RTC)? - wäre Dein "pre-release" der "high-speed RS232" eingeschränkt einsetzbar? Soll kein "nerven" sein - sind einfach nur Fragen... Viele Grüße Otto
Ich hab da noch ne Idee. Ich weiß zwar dass man ein LCD am Parralelport des Mini-PC´s anschliessen kann ABER man könnte aich mittels PCF8577 ein LCD am I²C anschliessen. Nur müsste man dazu einen I²C-Befehl habe z.B. LCDOUT adr,"String" Wäre doch echt super dann hat man den Parport noch für andere Aufgaben wie z.B. Messen oder Steuern.
@Otto ich hab letztens zwei DS3232 RTC als Sample gekriegt, bin aber noch nicht dazugekommen. Das "Pre-Release" ist noch nicht einsetzbar, da noch ein paar wichtige Dinge fehlen und der Code noch sehr unübersichtlich ist. Vielleicht wird es aber schon mit der nächsten Version (wahrscheinlich am WE). @Robin Meine Idee ist, einen Mega8 oder Mega88 als LCD-Controller zu nehmen (s.o.), angesteuert würde er über I2c. Im Basic sähe es dann ungefähr so aus: APRINT 1024,$80,$E0,"Hallo",0 ICOMM adresse,1024,0 ICOMM mit Länge 0 wird ausgeben, bis 0x00 im Arrayelement steht (nächste Version). Die Ansteuerung via I2C will ich etwas allgemein halten, um sie auch später für andere Zwecke nutzen zu können: 111yyyyy = Y-Koordinate (0-30, 31 für weitere Befehle) 10xxxxxx = X-Koordinate (0-63) 1100cccc = Hintergrundfarbe (soweit vorhanden) 1101cccc = Vordergrundfarbe (soweit vorhanden) Gruß Jörg
Man könnte doch auch statt den 24C64 einfach 24C512 reinmachen. Dann passen da doch MINDESTENS 10 Programme drauf. Dann könntest du die 4 Plätze KOMPLETT aus den Flash des ATMegas nehmen und hast mehr Platz zum Entwickeln. So und jetzt noch etwas worauf ich richtig Spitz bin :) Könnte man nich so ne art Startbildschirm reinmachen der ETWA 3Sec angezeigt wird. z.B.:"Atmel BASIC-PC" und ne hübsche grafik darunter. Dann kommt das Menü. Ware doch unheimlich stylisch
Hallo Jörg, ist ein irre Projekt! denke auch daran, wenn du lcd routinen bastelst, daß es auch 4x40 displays mit 2 EN Anschlüssen gibt. Der 2. EN ist bei normalen Displays halt unbeschaltet. Locate sollte einfach den wert verlangen,der dem LCD RAM Pointer zugewiesen wird. Es gibt einfach zu viele Arten von Displays, als daß man hier mit zeile,spalte arbeiten könnte. Andere Basics bieten upperline,lowerline. Ich halte das für ungeeignet. frohes schaffen, Andreas
@Robin Die Idee, Programme aus dem externen EEPROM auszuführen, hatte ich am Anfang auch. Das Hauptproblem ist die Geschwindigkeit, denn durch die Videoausgabe kann man nur 1 Zeichen pro Zeile vom I2C einlesen. Im ungünstigsten Fall (ganze Zeile muss eingelesen werden) ergibt sich dadurch eine Verlangsamung um den Faktor 10. @Andreas Die LCD-Ansteuerung bekommt einen eigenen Controller, der dann über I2C angesteuert wird. Man hat dann zwar für jedes Display einen spezifischen Controller, das Grundsystem bleibt aber gleich. Gruß Jörg
Hallo Joerg. Ich wollte dann auchmal ein bisschen in der Software vom BASIC-PC rumprogrammieren. Aber ich komme nicht weiter. Ich habe avr_libmake in den Ordner vom PC kopiert. avra ist installiert. aber wenn ich in der Konsole eingeben" "./avr_libmake main.as" sagt er
1 | Pass 1... |
2 | Pass 2... |
3 | main.asm(75) : error : [Macro: macros.inc: 31:] Relative address out of range (-2048 <= k <= 2047) |
4 | main.asm(78) : error : No register associated with XL |
5 | main.asm(78) : error : ldi can only use a high register (r16 - r31) |
6 | main.asm(79) : error : No register associated with XL |
7 | main.asm(80) : error : No register associated with XL |
8 | main.asm(80) : error : ldi can only use a high register (r16 - r31) |
9 | main.asm(81) : error : No register associated with XL |
10 | main.asm(82) : error : No register associated with XL |
11 | main.asm(82) : error : ldi can only use a high register (r16 - r31) |
12 | main.asm(83) : error : No register associated with XL |
13 | main.asm(83) : Maximum error count reached. Exiting... |
14 | done
|
15 | |
16 | |
17 | Assembly aborted with 10 errors and 0 warnings. |
Die ersten zeilen vom avr_libmake sehen so aus:
1 | $libpath="libs.inc"; |
2 | $listfile="libmake.lst"; |
3 | $asmfile=$ARGV[0]; |
4 | $assembler="avra $asmfile"; |
5 | |
6 | $jumps=0; |
7 | $calls=0; |
8 | $funct=0; |
9 | $libs=0; |
10 | $incfiles=0; |
11 | |
12 | $dummy=`rm -f libs.inc`; |
13 | $dummy=`rm -f macros.inc`; |
14 | $dummy=`touch libs.inc`; |
15 | $dummy=`touch macros.inc`; |
Ich verstehe nicht warum er beim compilieren diese Fehler anzeigt. Die definitions.asm von allen Librarys sind in der main includet
hast Du die m32def.inc (von Atmel) mit in das Verzeichnis kopiert? Da die nicht von mir ist, fehlt sie halt in den Archiven. Normalerweise sollten schon im Pass 1 die Fehlermeldungen kommen. Der erste Fehler entsteht daraus, dass der erste Pass nicht erfolgreich war und die Sprünge/Calls nicht bei Bedarf von relativ nach absolut umgestellt wurden. Die anderen Fehler zeigen, dass der Assembler mit XL nix anfangen kann. Dass XL r26 ist, steht in der def. Eventuell mal probieren, ob im frisch ausgepacktem Archiv avra main.asm geht. Gruß Jörg
m32dev.inc habe ich bereits eingefügt. Und wie gesagt alle definitions der libarys werden included. Deshalb verstehe ich die fehler nicht. Habe es schon mit Frisch ausgepackten Archiv probiert geht auch nicht. AUch avra main.asm geht nicht
Hat sich erledigt. JHUHUU Die eine m32def.inc war von den AVRFreaks. weil ich sie bei Atmel nicht gefunden hatte. Jetzt habe ich die richtige und kann Programmieren was dass Zeug hält. Vielen dank für den Tip.
Allerding findet er unter Linux mit UISP diesen Brenner noch nicht :) Er sagt immer Brenner nicht angeschlossen. Alle Parport_pc, parport, ppdev u.s.w habe ich alles aktiviert. Er sagt lediglich dass er den Brenner nicht findet. ich rufe folgendes auf uisp -dprog=dapa So steht auf so ner seite wo ich den brenner gefunden habe. Kennst du einen Programmer der ähnlich einfach aufzubauen ist. Und mit uisp oder anderem unter Linux läuft?
Das direkte Anschliessen funktioniert nicht bei allen Parallelports. Besser ist ein STK200-kompatibler Nachbau (findet sich auf dieser Seite bei den Artikeln). Ich habe mir inzwischen einen USBasp gebaut (mit avrdude), da mein Laptop beim Parallelport nach einer gewissen Zeit alle Signale auf Null zieht und so dann immer einen Reset am Controller auslöst. Um den USBasp zu programmieren braucht man aber einen anderen funktionierenden Flasher... Gruß Jörg
Nachtrag: Der Aufruf wäre dann: uisp -dprog=stk200 --erase --download if=main.hex Gruß Jörg
Wann kommt denn die neue Version? P.S.: Will nicht nerven sry wenns so rüberkommt.
Hallo Leute, laßt den Joerg doch mal machen. Ihr vergesst vielleicht das es alles freiwillig ist und die, ich nenne sie mal Kollegen, auch noch sicher anderes zu tun haben als zu Programmieren wenn es nur ein Hobby ist. Schaut mal raus, was wir für geniales Wetter haben ;-) Wenn Joerg wieder was hat, wird er sicher was dazu schreiben.... Sonst er hat noch ne Homepage ;-) In diesem Sinne Harry
Sorry, dass es etwas länger dauert, aber ich möchte die nächste Version etwas ausführlicher entwickeln und testen, bevor ich sie freigebe. Und dann kommen noch Jobwechsel und Umzug dazu... Momentan überarbeite ich die I2C-Routinen, um LCD's und schnellere serielle Schnittstellen anschliessen zu können. Dafür muss die libmio in weiten Teilen umgeschrieben werden, damit ich ein standardisiertes Interface zur Ausgabe habe. Mit einem 20x2 LCD und Mega8 funktioniert es auch schon zum grössten Teil, wahrscheinlich werde ich die serielle Schnittstelle mit integrieren. Problem ist noch die Kommunikation, da der Basic-Controller ja nicht weiss, wann ein Zeichen gekommen ist. Meine aktuelle Idee ist, bei einer Länge von 0 und Lesemodus wird das erste Zeichen als Anzahl der verfügbaren Bytes gelesen. Der Slave-Controller dient dann als Puffer, wenn kein Zeichen nach der letzten Abfrage gekommen ist, gibt er 0x00 als erstes Byte zurück. Da der Basic-Controller aber schon ein ACK gesendet hat, muss ich entweder noch ein Dummy-Byte ohne ACK einlesen oder einfach nur eine Stop-Condition senden. Ein weiterer Gedanke ist, die Positionierung mit in die PRINT-Anweisung packen zu können. Da das bei vielen Basic-Dialekten mit dem Klammeraffen erfolgt, wird wohl die Variable A als neue Arrayvariable dran glauben müssen... Sinn des Ganzen ist, auch mit PRINT #I2C-Adresse direkt auf das LCD (via I2C-Controller) schreiben zu können. Da aber die Änderung der Syntax für den Arrayzugriff eine recht einschneidende Änderung ist, muss so etwas reiflich überlegt und ausgiebig getestet werden. Ich melde mich auf jeden Fall wieder, wenn es was Neues gibt. Gruß Jörg
Ich entschulide mich nochmal für dass dauernde fragen nach Version. Umzug und Jobwechsel und an der Software arbeiten kann schon ziemlich viel auf einmal sein.Du hattes was von Mega8 LCD ansteuern gesagt. Ist damit diese geplante erweiterung gemeint die auch schnellere TImer und schnellere Schnittstelle machen soll? Wenn ja und wenn es festeht dass der mega8 genommen wird würde ich dass gerne mal wissen weil ich dringend bei reichelt bestellen muss und dann würde ich den sofort mitbestellen.
Ja, es wird definitiv ein Mega8 mit externem 16MHz Quarz und folgendes soll hinein: - LCD Ansteuerung (4-Bit mode) - serielle Schnittstelle mit Puffer - 4xPWM (8 Bit) - 1xFrequenzgenerator mit DDS - Konfiguration (LCD-Typ, serielle Datenrate,...) Allerdings muss ich noch Funktionen und insbesondere das Übertragungsprotokoll über den I2C-Bus festlegen. Gruß Jörg
Hallo Jörg, das ist ein geniales Projekt. Es macht viel Spass mitzulesen und mitzubasteln. Ich habe einen Vorschlag was man noch in den MEGA8 reinpacken könnte: Einen Decoder für RC5 Signale. Damit könnte man dann Anwendungen auch mit einer IR-Fernbedienung statt mit der PS2- Tastatur steuern. Ich denke, Platz und Rechenzeit müsste doch jetzt im "Co-Prozessor" vorhanden sein. Gruss Reiner
Hallo, ich bin wieder da!!! zumindest sind die wichtigsten Kartons schonmal ausgepackt und es gibt endlich eine neue Version. Was ist neu: - Arrayzugriffe erfolgen jetzt mit AR() - Klammeraffe @ kann zur Positionierung benutzt werden - Copy&Paste im Editor - einfachere I2C-Kommunikation mit externen Modulen - Bugfixes Wird nun ein Ausgabekanal >3 geöffnet, wird automatisch auf den I2C-Baustein mit der Kanalnummer als Device-Adresse ausgegeben. Ist beim Einlesen von Daten über den I2C-Bus die angegebene Datenlänge 0, dann wird als erstes die Anzahl der abzuholenden Daten eingelesen. Den APRINT-Befehl zur Ausgabe in das Array habe ich wieder verworfen und durch PRINT #3 ersetzt, ich hoffe das ist nicht allzu schlimm. Gruß Jörg
Tolle sache mit dem Copy & Paste. Aber wen ich den Programmtitel ändere verschluckt er immer die ersten 1 oder 2 Zeichen davon. Ich muss erst 2 Leerzeichen und dann den Titel eingeben.
Hmm, da ist noch ein Fehler reingerutscht. Die Routine, die den Programmnamen in den Flash scheibt, weiss noch nicht dass sich die Position um 2 Stellen nach links verschoben hat. Werde ich heute oder morgen noch korrigieren. Gruß Jörg
Leider hat es wieder mal etwas länger gedauert, ich habe die Cursorsteuerung im Editor etwas überarbeitet. Sie ist jetzt dem etwas ähnlicher, wie man es vom PC gewohnt ist. Ausserdem haben in der assemblierten Version ein paar Zeichen gefehlt. Ich hatte zwar µ und Konsorten in die Zeichentabelle eingetragen, aber nicht das generate-Script aufgerufen. Bei der Gelegenheit sind gleich noch ein paar Lücken im Zeichensatz aufgefüllt worden. Da der Mega32 mittlerweile auch fast "voll" ist, wird es mit aller Wahrscheinlichkeit nur noch Bugfixes geben. Das LCD/seriell-Modul (I2C-Slave) demnächst wohl als separates Projekt. Viele Grüße, Jörg
Hallo Jörg. Ich arbeite gerade daran ein Menü vom BASIC-PC zu meinem Computer per RS-232 auf Terminal zu schicken. Aber wie schaffe ich es der er immer den nächsten Text an link an den Rand und eine Zeile Tiefer schreibt (Also ganz normal ne neue zeile beginnt und da weiter schreibt)? Danke
Hallo Robin, hast Du auch "CR+LF" (carriage return + line feed) = 0x10 + 0x13 gesendet ? Gruß Otto
Danke für deine Antwort. Leider glaube ich dass ich dem BASIC-PC nicht dazu bewegen kann diese Zeichen über die Serielle Schnittstelle auszugeben.
Hallo Robin, wieso das denn nicht - steht doch auf Jörgs HP: SPUT 10 gibt einen Zeilenvorschub an die serielle Schnittstelle aus. Otto
Hallo Jörg, jetzt habe ich mal wieder eine dumme Frage: ich habe mir bei "C" ein Keypad gekauft, daß auch theoretisch funktioniert..... Nur weil ich "NUM-LOCK" nicht aktivieren kann, ist es nicht möglich Ziffern einzugeben. Müsste es gehen ? Gruß Otto
Ergänzung: geht unter XP, geht unter DOS aber geht gar nicht am Chipbasic (RKEY liefert bei allen Tasten "0") Otto
Kannst Du mit irgendeinem Programm die Scancodes anzeigen lassen? Bei ungenutzten Scancodes liefert RKEY immer Null zurück. Gruß Jörg
Hallo Joerg, ein geeignetes Scantool habe ich leider nicht gefunden und die Tastatur erst mal zur Seite gelegt.... Mein Problem ist ja immer noch, das Chipbasic mit einem CAN232 "CAN-Dongle" zu verbinden. Meine Hoffnung, dies auf 1200 BAUD zu setzen, war leider unbegründet - minimal geht "2400" So weit, so schlecht - also überlegte ich zunächst, einen "Umsetzer" von "1200" auf "2400" BAUD zu realisieren. Dabei kam mit dann der (bessere) Gedanke, einen "I2C" zu "RS232" - Umsetzer zu programmieren. So habe ich eine 2. Chipbasic - Platine mit einem "Mega16" bestückt, die Hardware-UART angeschmissen, die "RS232-Pins" umverdrahtet und es funktioniert auch ohne Probleme (sendet "Otto" und empfängt Tasten......) Nun kämpfe ich mit der "HW-TWI" - leider "rührt sich gar nichts": - Chipbasic meldet beim Schreiben an den "Slave" (das ist die 2. Chipbasic-Platine) immer "I2C-Error" und diese erhält somit auch keine Daten..... Die Adresseinstellungen stimmen miteinander überein. Der "LM75" funktioniert. Hast Du irgendetwas "in der Schublade" ? Viele Grüße Otto
Hallo Joerg, "copy und paste" ist wirklich hilfreich, vielen Dank! Leider bin ich noch mal auf den Schalplan hereingefallen... der Zugriff auf den "ATMEGA16" funktioniert jetzt..... aber nur theoretisch. Irgendwie scheint es ein Problem bei meinem Aufruf der ICOMM-Routine zu geben - ich bekomme auch aus dem externen Daten-Eeprom keine Daten ausgelesen. Zum testen habe ich das von Dir oben gepostete Beispiel verwendet: DATA 1024,0,0,12 bringt "syntax error" also habe ich das Array "manuell" gefüllt (For-Next) ICOMM $A0,1024,3:SYNC 2 ICOMM $A0,1024,2 ICOMM $A1,1024,1 PRINT @(1024) DATA 1024,"Hallo",0 bringt: return w/o call Kannst Du bitte helfen? Was habe ich nicht verstanden ? Gruß Otto
Hi, Also ich habe nochmal ein paar Vorschläge. Es wäre sehr interessand und auch sehr hilfreich Texte(String) in Variablen zu speichern und auch z.B. per RS232 zu empfangen und zu senden. Warscheinlich ist es garnicht möglich aber ne frage ist es wert.
@Otto ich habe vorsichtshalber einen neuen Mega32 mit dem Hexfile aus dem Archiv der 0.93-er Version geflasht und kann die Fehlermeldungen leider nicht nachvollziehen. Evtl. nochmal neu Flashen. Bei der aktuellen Version wird das Array nicht mehr über @() sondern über AR() angeprochen. @Robin Ausgabe auf seriell geht mit PRINT #1... oder selbstgestrickt aus dem Array: 10 A=AR(P) 11 IF A=0 THEN SPUT 10:RETURN 12 SPUT A: P=P+1:GOTO 10 Eingabe kann man sich leicht im BASIC mit RKEY oder WKEY zusammenbasteln. Im Moment habe ich nicht allzuviel Zeit und so befindet sich der Peripherie-Controller noch im Planungsstadium. Dabei will ich einen "relativ neuen" Weg beschreiten, dass man sich seine Controllerfunktionen weitestgehend ohne Programmierkenntnisse LabView-ähnlich zusammenklicken und dann über ein einfaches Kabel (mit galvanischer Trennung) zum Controller schicken kann. Gruß Jörg
Hallo Joerg, vielen Dank für Deinen Test - evtl. hatte ich zu viele "Experimente" gemacht, die dann zu den Fehlermeldungen führten.... jetzt funktioniert es auf jeden Fall: 01 CLS :?"I2C-Test":Y=2:WAIT 10 02 DATA 1024,0,"Hallo Ihr Da!",0 03 DATA 1039,0,"Test 1234",0 04 FOR X= 1 TO 30: 05 CALL 16:SYNC 3:AR(1024)=0 06 CALL 20:SYNC 1 07 PO Y,X-1:EMIT AR(0):?LO(AR(0)) 08 NEXT :Y=Y+1:GO 4 09 15 ?"Write I2C "; 16 IC $40,1024+X,1 17 RE 18 19 ?"Read I2C "; 20 IC $41,1024,1 21 RE Dieses "Programm" definiert 2 Strings im Array, sendet sie über die I2C-Schnittstelle aus (Zeile 16). Hier "werkelt" ein Mega16 und setzt die Information auf RS232 um (57,6 KBAUD) (später Daten an das CAN-Dongle) Die Informationen von der RS232-Schnittstelle kommen dann ebenfalls über I2C zurück (Zeile 20) und werden in Zeile 7 mit "EMIT" ausgegeben. (später Daten vom CAN-Dongle an die Balkengrafik) Nun kämpfe ich noch mit kleineren Problemen, bin aber guter Dinge..... Gruß Otto
Hallo Joerg, vielen Dank für Deinen Test - evtl. hatte ich zu viele "Experimente" gemacht, die dann zu den Fehlermeldungen führten.... jetzt funktioniert es auf jeden Fall: 01 CLS :?"I2C-Test":Y=2:WAIT 10 02 DATA 1024,0,"Hallo Ihr Da!",0 03 DATA 1039,0,"Test 1234",0 04 FOR X= 1 TO 30: 05 CALL 16:SYNC 3:AR(1024)=0 06 CALL 20:SYNC 1 07 PO Y,X-1:EMIT AR(0):?LO(AR(0)) 08 NEXT :Y=Y+1:GO 4 09 15 ?"Write I2C "; 16 IC $40,1024+X,1 17 RE 18 19 ?"Read I2C "; 20 IC $41,1024,1 21 RE Hier ein kleines Testprogramm (für Terminal-PGM). Dieses "Programm" definiert 2 Strings im Array, sendet sie über die I2C-Schnittstelle aus (Zeile 16). Hier "werkelt" ein Mega16 und setzt die Information auf RS232 um (57,6 KBAUD) (später Daten an das CAN-Dongle) Die Informationen von der RS232-Schnittstelle kommen dann ebenfalls über I2C zurück (Zeile 20) und werden in Zeile 7 mit "EMIT" ausgegeben. (später Daten vom CAN-Dongle an die Balkengrafik) Nun kämpfe ich noch mit kleineren Problemen, bin aber guter Dinge..... Gruß Otto
Hi, Irgendjemand hatte es schonmal vorgeschlagen aber ich habe noch ne Frage dazu. Könnte man nicht viel mehr Programme in dem BASIC-PC rein proppen wenn da ein ATMEGA644 drinne ist? Ich meine der ist Pinkompatibel und hat auch mehr speicher. Damit sind ganz neue Möglichkeiten da.
Natürlich gäbe es mit dem Mega644 mehr Möglichkeiten. Aber nach der Erhöhung der Programmanzahl würden schnell weitere Begehrlichkeiten auftauchen. Bei mehr RAM könnten die Programme mehr Zeilen haben, bei 20MHz Takt liessen sich mehr Zeichen auf dem Bildschirm darstellen und so weiter... Und schwupps ensteht daraus ein neue Projekt, welches auch gepflegt sein will. Im Moment arbeite ich an Bugfixes für die 32-er Variante, das braucht genügend Zeit. Den 32-er zugunsten des 644 aufzugeben halte ich für keine gute Idee. Und ein hier auch schon angesprochenes Problem, die serielle Schnittstelle im Videointerrupt mit all ihren Folgen wird damit nicht gelöst. Zu einem "würdigen Nachfolger" gibt es schon verschiedene Ideen, wahrscheinlich auf Basis eines Mega128 oder eines kleinen Coldfire von Freescale. Aber bis dahin wird wohl noch einige Zeit vergehen... Gruß Jörg
Hallo Leute, ich habe jetzt neulich eine Digicam bekommen bei der wohl der Blitz kaputt war. Ist eine Billigproduktion also ausschlachten. Da drinne ist ein Display für dass ich sogar ein Datenblatt gefunden habe (unglaublich!). Ich frage mich jetzt: "kann man dieses Display an den BASIC-PC anschließen?" Also ich habe im Datenblatt von RGB Eingängen gelesen aber nichts von H-oder Vsync. Ich hoffe jemand kann mir helfen. P.S.: Sorry für meine Rechtschreibung, aber ich schreibe nur mit der linken Hand... in der rechten sieht man den Eingebranten Abdruck vom Lötkolben :)
Wenn Du Dir die Signale und Timing-Diagramme (3 Taktsignale) im Datenblatt ansiehst müsste eigentlich auffallen, dass sich das Teil nicht einfach an eine Videoquelle anschliessen lässt. Mit nem eigenen Controller sollte es gehen, die Frage ist halt, ob sich der Aufwand für ein Display lohnt. Gruss Jörg
Ichhabe mit die Platine(Digicam) nochmal angeschaut und in unmittelbarer Nahme ist ein SMD-Baustein namens "UPS051". Ich habe Google mal nach dem Datenblatt angesträngt und auch etwas gefunden... ein Appilaction Note. Das ist der Display-Controller. Im diesem Note steht ein Kompletter Schaltplan der die Eingange: Rot, Grün, Blau und HSYNC und VSYNC hat. Ich denke den Löte ich mal aus mach mir eine mini-Platte und dann sollte es funktionieren.
Geiles Projekt! Ich bin zwar erst 14, will aber das ganze auch mal ausprobieren - auf einer Standardplatine und mit einem ATMega8 (Druckerport brauch ich nich) Geht das?(Bei bedarf auch mit weniger Programm etc.) Programmieren ist für mich kein Problem, ich kann (leichte sachen): Basic, Visual Basic, Delphi, C++ (Windoof mag ich trotzdem nich :-) ) Kleine Anregung: USB..., LAN...
Hallo Sam, im Prinzip brauchst du keine geätzte Leiterplatte, es reicht auch eine ganz normale Lochrasterplatine. Du brauchst nur den Teil des Videosignals der dir das BAS Signal erzeugt, also sprich diese 4 Widerstände, und natürlich eine PS2 Tastatur um mit dem Rechner arbeiten zu können. Mehr nicht, aber zum einen verlierst du dadurch einiges an Möglichkeiten (serielle Kommunikation, Eingaben und Ausgaben) also alles das womit man irgendwas steuern oder regeln kann. Der Druckerport ist nämlich gleichzeitig auch die Möglichkeit kleine Relais (auch wenn mir jetzt einige Widersprechen werden aber es geht sogar direkt) oder LEDs mit dem Rechner steuern zu koennen. Allerdings auf einem Mega8 wird das ganze in der Form wie jetzt nicht laufen, weil der hat einfach zu wenig Speicher (8KB) im Gegensatz zu dem verwendeten Mega32 mit 32 KB. Das ginge nur wenn du den Quellcode drastisch kürzen würdest, sprich alles das was du nicht brauchst rauswirfst. So wie ich das einschätze wird aber selbst das nicht ausreichen um auch nur ein bischen Grafik mit dem Chipbasic machen zu können. Zumal der komplette Quellcode liegt ja offen (GPL sei dank) ich hab da auch mal kurz reingeguckt und ob wohl ich auch einfache C Kenntnisse habe muss ich bei diesem Quellcode passen weil der Code einfach zu umfangreich ist. Der Quellcode nutzt fast den ganzen Flashspeicher des Mega32 aus. Wenn du dich da rantrauen willst, wünsch ich dir jetzt schon viel Spaß. Das was Joerg Wolfram da geschaffen hat ist wirklich eine spitzen Leistung. Nebenbei ein Mega32 ist auch nicht viel teurer als ein 8ter zumindest bei dem Elektronikdiscounter mit dem großen R. (3,95 €) Ich würde dir empfehlen wenn dus wirklich nurmal austesten willst kauf dir nen Mega32 direkt mit passenden Quarz dazu und bau das ganze auf Lochrasterplatine auf (ist auch eine schöne Lötübung :-) Nochmals vielen Dank an dieser Stelle an den Autor der Schaltung.
Erstmal vielen Dank für die Lorbeeren... Mega8 geht leider nicht, da allein schon die Zeichentabelle für den Farbmodus 5 Kilobytes groß ist. Was jetzt nun doch definitiv kommen wird, ist eine Mega644 Version. Im Moment gibt es aber noch Probleme mit unnachvollziehbaren Ausfällen der PWM von Timer 2 welches auch eventuell im Controller liegen könnte. Hier schonmal ein paar geplante Features: - gleiche Hardware-Basis wie die 16-er und 32-er Version - evtl. FB-Decoder über freien Pin - 20MHz Takt - gleiche Bildschirmauflösung, Module für FBAS und VGA anschliessbar - für jedes Zeichen Vorder- und Hintergrundfarbe festlegbar - in den Flash passt ein "Set", Laden/Speichern über Dataflash-Modul Ein Set besteht aus: - 4 Programme a 99 Zeilen - 4 forgefertigte "Screens" die mittels Befehl geladen werden können - Alternativer Font (im Programm umschaltbar) - "Screen"-Editor - Font-Editor - "Set"-Verwaltung - Update-Funktion - Vorcompilierung von Konstanten beim Speichern -> Geschwindigkeit Wie es letztendlich wird, hängt von Zeit (und Speicherplatz) ab, Ihr könnt gerne Eure Vorschläge schreiben... Gruß Jörg
Danke für eure Antworten! Welche datei in dem Ordner "v0.93" ist eigentlich genau die Quelldatei für Chipbasic? Ich blick da nicht so ganz durch. Momentan habe ich keinen ATMega32 da, aber drei 8ter, 8-farbig brauch ich nicht, ich bekomme wahrschenlich sowieso nur ein altes dunkelgrau/lila/grün-Handydisplay, da müsste ich den Zeichensatz ändern, (wenn ich wüsste wo der ist =)) und was mit der Grafikansteuerung machen, ich weiß leider nur noch nicht, wie man das Handydisplay ansteuern muss. Damit will ich sowas wie ein kleines PDA/Notebook bauen. Dafür wäre eine Festplattenansteuerung(gegebenfalls über 2ten ATMega8 oder 16)echt nicht schlecht, SD-Karten würden auch reichen. Ach ja, wisst ihr, wo es PS2-Tastaturen gibt, die in etwa so sind wie die vom Commodore(oder wie der Rechner hieß)? Grüße, Sam
Warum nicht die nächste version mit nem mega256? und dann SD Karte als Programmspeicher :). Da lässt sich EINIGES machen! Achja und wenn viele Interesse Zeigen mal ein paar Platinen ätzen lassen.
@Sam Es gibt nicht DIE Quelldatei, das Ganze besteht aus einer Menge Modulen und Bibliotheken. Die Zeichensätze befinden sich im libmio-Verzeichnis (cchartable.inc für normale Darstellung und mchartable.inc für die Textzeilen im Editor). Um ein Handydisplay anzusteuern, müsste die libmio in weiten Teilen neu geschrieben werden, da die Ansteuerung komplett anders ist. @Philipp Das mit der SD-Karte habe ich auch schon angedacht, hab aber noch 20++ Dataflash rumliegen die auch mal verbaut werden wollen... Da ich sowieso ein Dateisystem benötige, liesse sich das ja vom Medium-Treiber (Sektorebene) trennen und könnte so mit verschiedenen Speichermedien umgehen. Bei den Platinen deutet sich bereits mind. eine Möglichkeit an, dazu später vielleicht mehr. Gruß Jörg
Kann man mit diesem System eigentlich eine Normale Festplatte ansteuern? Gruß Sam
Sam, mach' Dich erst mal schlau, was dieser Mini-Computer hier kann und welche Peripherie er hat. Dann lies Dir das Datenblatt zum verwendeten Mikrocontroller durch und überleg Dir mal die Unterschiede zwischen diesem µC und einem "normalen" PC. Und erst dann, darfst Du wieder eine (unqualifizierte) Frage stellen ...
Balu hat schon recht aber trotzdem möchte ich mal meinen Senf dazu geben. Also ich denke wenn man sich eine kleine Routine schreibt und ein bisschen Hadware von I²C auf IDE oder Parralelport auf IDE dann sollte dass Funktionieren. Allerding sehr langsam. Vileicht zu langsam für ne Platte.
Hallo, erstmal ein paar Neuigkeiten: Die neuen Videomodi (Normal und Editor) funktionieren schon, allerdings nur auf TV. Bei VGA ist leider die horizontale Austastlücke zu kurz um serielle Schnittstelle, Tastatur und Sound zu handeln. Daher habe ich mir folgendes überlegt: Tastatur und Sound auf einen Mega8 oder Mega88 auslagern, serielle Schnittstelle direkt an den UART (bei bestehenden Boards lässt sich das relativ leicht mit Durchtrennen von 2 Leiterbahnen und Anlöten von 2 Drähtchen realisieren). Am Mega8 wäre dann auch noch Platz für z.B. ein LCD, verbunden werden beide Teile über I2C. Beim Start wird der I/O Coprozessor abgefragt, ist er nicht vorhanden wird automatisch das Programm gestartet. Nachteile: - es ist eigentlich kein Einchip-Computer mehr - bestehende Boards müssen ergänzt werden Vorteile: - Serielle Schnittstelle mit einstellbarar Baudrate - Systemupdate über seriellen Port ist einfacher realisierbar - geringfügig höhere Geschwindigkeit - Anschlussmöglichkeit für Eigenbautastaturen Da ich die Anzahl der zu pflegenden Versionen möglichst gering halten will, würde mich interessieren inwieweit Interesse an einer solchen Lösung besteht. Ein schöne Wochenende... Gruß Jörg
Diese Lösung hört sich einfach nur Geil an! Wie gleube ich schinmal jemand gesagt hat: "Es wäre schade wenn dass Projekt daran scheitern würde wenn man es auf einen Chip begrenzen will". Mach doch ruhig ein Chip mehr drauf. Darin sehe ich keinen Nachteil. Nur die Vorteile :) Danke für deine Mühen.
Hallo Jörg, mir ist alles recht, solange Du weiter machst..... Schönes WE und Gruß Otto
nimm mege8 oder mega32, sind altbekannte chips die auch fast jeder bastler in der kiste hat.
Hallo Jörg,
> nimm mega8 oder mega32....
sehe ich ähnlich - jedoch hätte MEGA16 und MEGA32 den Vorteil,
dass die Erweiterungen notfalls auch auf einer 2.
"Basic-Computer-Platine" aufgebaut werden könnte.....
Gruss Otto
Der Mega88 kam mir nur in den Sinn, da er auch mit dem Haupttakt von 20MHz laufen könnte. Tastatur, I2C und LCD brauchen keine genaue Zeitbasis, Soundausgabe schon. Da das derzeitige Leiterplattendesign sowieso recht "gehäuseuntauglich" ist gehen meine derzeitigen Überlegungen in Richtung Europakartenformat. Und dann wäre auch ein zweiter 40-pinner kein größeres Problem (obwohl ich die Einchiplösung immer noch nicht ganz abgeschrieben habe). Gruß Jörg
Wenn du nen zweiten chip nimmst, dann könntest du die videoerzeugung auslagern, und so mehr modi, höhere auflösung, oder mehr farben erzeugen. und der ganze rest wird wenniger abhängig vom video-timing. Der m32 lässt sich (solange man nicht auf den eeprom zugreift)auch mit 20mhz takten
Ich bin auch für nen 2. Chip. An einem beißt du dir früher oder später die Zähne aus...wäre schade
Und man kann mehr features etc einbauen. Irgendwann kommt dann noch ein tiny für den sound, grins. und man hat ne kleine spielekonsole G
Hallo, oder einen Propeller Chip von Parallax als Coprozessor :-) Der kann mit seinen 8 CPU Kernen locker gleichzeitig schnelle Farbgrafik auf Pixelebene erzeugen, komplexen Stereo-Sound generieren, eine SD-Karte ansteuern, Joysticks, Tastatur und Maus abfragen ... Der ATMega hätte dann die ganze Rechenleistung fürs BASIC. Geht zwar am eigentlichen Projekt vorbei, wär aber ein genialer kleiner BASIC-Computer / Spielconsole :-) Gruß Andreas
Au ja! Da wäre dann schon ein High End Basic PC :) Aber die Lösung mit dem Mega 8 als 2nd Chip reicht mir erstmal :)
Der Propeller Chip kostet halt leider immer noch 17 Euro in Deutschland, in USA nur 9 Euro ... Aber braucht als DIP40 auch nicht mehr Platz wie ein Mega32 und fast keine externen Bauteile (1 Quarz, 1 8pol. EEPROM). Damit wären halt Sachen wie Sprites und superschnelle hochauflösende Farbgrafik machbar. Der Propeller kann auch in Software ein Farbsignal zum direkten einspeissen in den Antenneneingan erzeugen, ohne Modulator, + FBAS + VGA Es gibt zwar auch ein BASIC für den Propeller, das ist aber sehr eingeschränkt. Aber als Coprozesor zu einem 64K ATMega wär das schon ein sehr Leistungsfähiges System. http://youtube.com/watch?v=kA8sq_7nYlE
Das größte Problem am Propeller sehe ich darin, dass es keine Tools für Linux gibt. Und da ich möglicht M$-inkompatibel bleiben will, fallen VMware oder Wine auch aus. Dann schon lieber ein ARM oder Coldfire und der AVR als IO-Prozessor.. Da der Quellcode des BASIC-Computers modular ist und unter der GPL steht, kann ja durchaus sich jemand die Arbeit machen... Gruss Jörg
Ich arbeite auch fast nur mit Linux. Aber für manches muss hat VMWare herhalten ... Einen GPL Assembler in Java gibt es bereits, http://www.cliff.biffle.org/software/propeller/propasm/ Linux und Mac Versionen der Propeller Tools sind wohl lang angekündigt, und werden nochmal solang auf sich warten lassen :-( Andreas
...Es gibt zwar auch ein BASIC für den Propeller, das ist aber sehr eingeschränkt.... da irrrrrst du. dieses spin ist hervorragend, kannste sogar asm-macros einbinden. gibt nicht schöneres um schnell zum erfolg zu kommen.
Core, ich meinte nicht Spin sondern das Tiny Basic, welches mit dem Hydra-Kit geliefert wird und direkt auf dem Propeller läuft. Gruß Andreas
zwei ram bausteine und ein paar zähler müssten als pseudo-grafikkarte ausreichen!?
Hallo, Ich bastel mir gerade einen Akkuentladegerät-Teil (Ist nur nen ding mit Zellenzahleinstellung und Konstantstromsenke) für den BASIC Computer. Um die genauigkeit der Messungen zu erhöhen wäre eine Referenz Des ATmega32 AD-Wandlers auf 2,5V zu verkleiner. Momentan ist die ja auf 5V. Ich habe gelesen dass der mega32 eine Interne Referenz von 2,56V hat. Könnte man die im BASIC einschalten? Ich mache auch ein Layout in zum größten Teil SMD. Wenn interesse Besteht kann ich dass ja wenns fertig ist mal Posten. Ich schreibe auch ein Programm dazu welches die Enlade-Kurve aufzeichnet und im Externen-EEprom speichert. Gruß Robin T.
Habe gerade herrausgefunden dass die Interne Refrerenz ja schon aktiv ist. Sry. Habe Die Hardware und dass Layout fertig. Aber mit der Software komme ich nicht weiter. Im Pseudografik Modus. Ist 0,0 glaube ich oben Link. Oder oben rechts. Ist aber auch egal, denn ich weis dass Y=0 oben ist. Das macht die Sache schwieriger. Könnte man nicht 0,0 unten Rechts in die Ecke machen? Danke
Hallo Robin, das ist doch kein grosses Problem: Du testest, welchem Wert "rechts unten" entspricht - z.B. X=60, Y=40 Dann ist der Wert für X: 60 minus "Dein X" und der Wert für Y: 40 minus "Dein Y". ..................60 .................... .................... .................... 40.........."Dein 0" Gruss Otto
@Robin 0,0 ist links oben, Umrechnung lässt sich leicht "von Hand" oder mit einer Subroutine erledigen. Verschiedene ADC-Referenzen könnte ich mit einbauen, dazu müsste dann im einfachsten Fall zur ADC-Kanalnummer 8 oder 16 dazuaddiert werden. GRuß Jörg
Da ich gerade ein bisschen Zeit habe, an der 644er Version zu basteln, würde ich gerne wissen, wie hoch das Interesse an einer VGA-Ausgabe eigentlich ist. Ein entsprechend programmiertes CPLD braucht man auf jeden Fall dafür, die Logik ist schon relativ komplex. Ich benötige VGA selbst nicht mehr (zumindest für dieses Projekt) und möchte nicht wegen eines Features, welches vielleicht die wenigsten brauchen, unnötige Kompromisse eingehen. Ansonsten läuft das neue Videosystem und die Anpassung vom Programm-Editor ist auch fast fertig. Aufgrund der größeren Pagesize beim Mega644 habe ich die maximal nutzbaren Programmzeilen auf 95 begrenzt. Bis zum ersten Release wird es aber noch eine ganze Weile dauern... Gruß Jörg
Hallo Joerg, für mein Projekt benötige ich keine VGA-Grafik. Eine höhere Auflösung der Grafik und mehr Farben wäre aber nicht schlecht - ich weiß jedoch nicht, ob Du das einfacher als VGA realisieren könntest. Gruss Otto
Ich brauche auch kein VGA. Wie ist es denn eigentlich mit der schnelleren RS232 und dem Display anschluss? Gruß Robin T.
Nach langer Zeit will ich mal wieder ein Lebenszeichen von mir geben. Aus Zeit- und Aufwandsgründen bleibt die Hardware in ihrer gegenwärtigen Form auch für die 644er Version bestehen und ein erstes Release wird es wohl nicht vor Mitte November geben. Displayanschluss geht entweder über den Parallelport (kann man leicht in BASIC realisieren) oder über I2C und einen zweiten Controller. Für die serielle Schnittstelle habe ich eine theoretische Lösung gefunden, die bis zu 19200Bps erlaubt, aber wahrscheinlich nur bei PAL funktioniert und auch einige gravierende Änderungen am Code mit sich zieht. Da mir die 1200 reichen um hin und wieder ein Programm zu übertragen ist noch fraglich, ob ich das weiter verfolge... Zum Thema Auflösung: Die Grundauflösung bleibt gleich, dafür kann für jedes einzelne Zeichen Vorder- und Hintergrundfarbe angegeben werden. Zudem kann aus zur Zeit aus zwei (festen) Zeichensätzen ausgewählt werden. Den editierbaren Zeichensatz und auch den Screen-Editor habe ich wieder verworfen, da das einem einfachen Programmaustausch später nur im Wege steht. Es gibt aber auf jeden Fall Symbole für feiner aufgelöste Balken... Viele Grüße Jörg
Hallo Joerg, vielen Dank für Dein Lebenszeichen - ich warte gerne......Mein Display kann leider nur "NTSC" - aber für die RS232 habe ich meinen TWI-RS232-Umsetzer (in einem MEGA16 nur wegen dem RAM.....), der z. Zt. störungsfrei mit 57kBaud läuft - also mach Dir wegen mir deswegen keine Sorgen.... Gruss Otto
Hallo erstmal. Schön dass noch dran gearbeitet würd. Ich finde auch dass die Baudrate nicht so wichtig ist. Ich würde gerne NTSC und PAL behalten. Gruß Robin T.
Hallo Jörg, ich komme (und einige mehr) aus der gleichen "Ecke" wie der Gast "Otto" und wir beobachten schon eine Weile mit großem Interesse die Aktivitäten von "unserem Otto". Ich finde Deine Aktivitäten mit dem Atmel Chip sehr interessant. Deswegen habe ich mir und einem Freund so ein "Ding" gebaut. Mit der Hilfe von Otto laufen diese "Dinger" auch sehr gut. Der Charme dieser Mega32 ist die Einfachheit des Aufbaus und seine universelle Verwendungsmöglichkeiten. Es wird aber immer eine Gratwanderung bleiben wenn man hardwareseitig seine Funktionen erweitert. Viel Erfolg bei weiteren Projekten wünscht der Paule, der sich auch schon über das "Ding" freut.
An der Hardware ändert sich nichts, ausser das anstelle des Mega32 eine Mega644 in die Fassung gesteckt wird und der 16MHz Quarz durch einen mit 20MHz ausgetauscht wird. Die höheren Übertragungsraten will ich damit erreichen, dass die Schnittstelle anstelle 1x je Zeile jetzt 5x gesetzt und abgefragt wird. Aufgrund eines Features des 644 lässt sich das leider nicht auf den Mega32 übertragen. Im Bildbereich werden dazu lediglich insgesamt 6 Pixel um 20% "gestreckt", in den Bereichen ohne Bilddarstellung müssen zusätzliche Interrupts erzeugt werden. 19200 werden aber doch nicht gehen, da bei ca. 15KHz Zeilenfrequenz auch 2 Bitwechsel in einer Zeile vorkommen können, und dafür reicht die Zeit zur Auswertung am Ende der Zeile nicht aus. Gruß Jörg
Hmmm...Pustekuchen! Bei der höheren Baudrate hat mir Atmel mit den Double-Buffering der Compare-register einen dicken Strich durch die Rechnung gemacht. Damit ist es nämlich nicht möglich, zusätzliche Interrupts innerhalb eines PWM-Zyklus zu generieren. Naja, aber einen Versuch war es wert... Dafür gibts was Neues in pukto Grafik. Die Version mit dem Mega644 wird, wenn auch stark beschränkt) Vollgrafik können. Neben dem normalen Textmodus sollte noch folgendes möglich sein: 168 x 116 Pixel, 2 aus 8 Farben 120 x 76 Pixel, 4 aus 8 Farben 84 x 58 Pixel, 8 aus 8 Farben Allerdings werden in den neuen Modi Sachen wie z.B. INPUT nicht mehr funktionieren. Viele Grüße Jörg
Ich hatte da noch eine Frage. Könnte man eine IDE Festplatte an den Paralellport anschlißen und dann im Hauptmenü einen Menüpunkt machen wo man einstellen kann ob eine dran ist wie groß die ist. Dann kann man alle Daten übertragen und wieder abrufen. Oder man könnte ein Diskettenlaufwerk anschließen und mit einem Menüpunkt(Auf Diskette übertragen) die Daten übertragen.
Nein, das geht nicht so einfach. In der 644er Version kann man Programme auch auf dem Dataflash speichern, ob das auch auf die 32er Version rückportierbar ist, weiss ich noch nicht. Gruß Jörg
Hallo, mal eine ganz andere Frage, braucht eigentlich jemand den Sourcecode? Ich bin im Moment am überlegen, die Mega644-er Version nur noch als Freeware zu veröffentlichen. Nicht dass ich etwas verbergen möchte, aber das nachträgliche Kommentieren von teilweise automatisch per Scripten erzeugtem Sourcecode verbraucht viel Zeit und "einfach so" unkommentiert nützt der Code sowieso nicht viel und will ich ihn auch nicht veröffentlichen. Und die meisten Mails die ich dazu bekommen habe, waren Anfragen ob ich PCB's verkaufe. Gruß Jörg
Also ich brauch ihn nicht denn ich kann sowieso keine µC programmieren. Und ich habe an deinen versionen auch nichts zum verbessern :)
Hallo Joerg, unbedingt benötige ich ihn auch nicht, obwohl ich damals auf der Suche nach der Nichtfunktion des Temperatursensors schon mal reingesehen habe, um z. B. die I2C-Adresse zu kontrollieren..... Gruss Otto
Hallo, nach doch etwas längerer Pause möchte ich wenigstens mal einen Screenshot der aktuellen Version veröffentlichen. Da Projekt wird wohl noch ein paar Wochen brauchen, da noch ein paar Tests anstehen und die Dokumentation erst angefangen ist. Mittlerweile habe ich auch den Meg644 fast voll, bis auf ein paar Reserven für Bugfixes. Durch die neuen 3 Grafikmodi (s.o.) mussten Teile der Videobibliothek umgeschrieben werden und die Entwicklung einigermassen schneller Bitblt-Funktionen hat fast einen Monat gebraucht. Bei der Oberfläche hat sich auch einiges geändert, so sind jetzt fast immer am unteren Bildschirmrand 5 farbige Felder zu sehen. Diese zeigen die aktuelle Belegung der Tasten ESC und F1-F4 an. Mit einem kleinen Aufkleber auf der Tastatur muss man sich dann auch das nicht mehr merken... Auch wenn das erhoffte Feedback der 32-er Version ausgeblieben ist, wird der Code auch weiterhin unter der GPL stehen. Bis die Doku zumindest in Grundzügen fertig ist, wird es kein öffentliches Release geben. Bei Interesse könnte ich aber in diesem (alten) Thread schon mal ein Hexfile posten. Gruß Jörg
Das Dataflash-"Filesystem" ist auch (fast) fertig, Es lassen sich einzelne Programme oder auch alle Programme auf einmal laden/speichen und Dateien löschen. Mit sog. User-Dateien geht das auch aus dem BASIC heraus.
schade das dieses programm nicht in dem normalen avr-studio-asm geschrieben wurde.
Hallo Jörg, gut,daß es nun weitergeht. Ich habe so nach und nach im stillen Kämmerlein alle Varianten des Basic-Computers (mit leicht verändertem Layout) durch gespielt. Die Temperaturanzeige hatte sogar einen praktischen Nutzen. Ich bin also sehr an der neuesten Version interessiert. Viele Grüße Hans-Jürgen
@Joerg: Hut ab ! Ich beobachte schon länger wieviel Zeit und Liebe Du in das Projekt steckst. Leider habe ich noch keine Anwendung. Mir würde aber so etwas wie eine MiniSPS Steuerung mit Auswahl von verschiedenen Programmen vorschweben.... Gruß Sven
Hallo Jörg, das sieht ja schon richtig gut aus und nett von Dir, dass Du einen Zwischenstand postest. Wie sieht eigentlich die Hardware mittlerweile aus - ist es eine Lochrasterplatine oder hast Du schon Layout? Bleiben alle anderen Features erhalten und gibt es neue? Viele Grüsse Otto
@joerg muß wiedereinmal meinen tiefen respekt vor deiner arbeit bekunden. dein avr-basic-chip-computer ist echt geil. bin echt begeistert was du so alles in das dingen reinpackst/reinpacken kannst. weiter so !! interesse an dem source-code hätte ich evtl. ich programmiere zwar nur in c, aber um zu schauen wie du manche sachen löst wäre es sicherlich interessant. gruß rene
@alle zuerst mal vielen Dank für die Vorschuss-Lorbeeren... Von der Hardware-Seite her sieht es so aus, dass man gegenüber der alten Version nur den Controller und den Quarz tauschen muss. Dadurch bleibt es (leider) auch bei den 8 Farben anstatt 16 die die Software hergeben würde. Das Basic hat sich etwas geändert, insbesondere gibt es jetzt ein GOSUB und verschieden lange Abkürzungen. GOSUB 50 ruft das Unterprogramm in Zeile 50 auf GOS 2,50 ruft das Unterprogramm in Zeile 50 von Programm 2 auf - 4 Videomodi, Text und 3x Grafik, Pseudografik bleibt natürlich bestehen - In allen 3 Grafikmodi werden die Farben über eine Palette eingestellt - erweiterte Zeichenfunktionen (Kreise, drawto) - wählbares Tastaturlayout (DE,US und ein evtl. länderspezifisches) - Clone-Funktion (Controllersoftware kann sich komplett kopieren) - Erweiterte Sprite-Funktionen und mehr Sprites, Daten liegen im Array - Vergrößertes Array mit 768 Bytes - 95 Zeilen je Programm - Zahlenwerte und Funktionen werden "vorcompiliert" gespeichert ... Im Moment bin ich noch dabei, das Error-Handling a la "ON ERROR GOTO" zu erweitern. Gruß Jörg
Cool! Die Screenshots sehe sehr vielversprechend aus. Ein Hex-File hier zu posten find ich gut. Mal so als Demo. Mach weiter so. Gruß Robin T.
Hallo Leute, sorry das ich diesen alten Thread nochmal ausgrabe aber ich bekomme es einfach nicht hin ein Programm im Editor bei der Version 0.93 abzuspeichern.Sobald ich y drücke ist alles wieder Weg.Hab schon die Fuses gecheckt aber keine der Lock Fuses ist gesetzt. Welchen grund könnte es noch geben warum es nicht klappt? MfG Flo
Ich schaue mal in den nächsten Tagen nach, muss aber erstmal Mega32 und 16MHz Quarz rauskramen... Jörg
Hi, ich hab die Homepage endlich mal angesehen und bin dabei auf das Pacman-Programm gestoßen. Wenn ich das richtig verstanden habe benötigt das den kompletten Speicher. Da hätte ich nun einen "Verbesserungsvorschlag": Wie wäre es mit einer Möglichkeit, ein Programm bzw. einen Programmteil nachzuladen ? nur so als Idee, Gruß klaus
klaus schrieb: > Hi, > > ich hab die Homepage endlich mal angesehen und bin dabei auf das > Pacman-Programm gestoßen. Wenn ich das richtig verstanden habe benötigt > das den kompletten Speicher. > Da hätte ich nun einen "Verbesserungsvorschlag": > Wie wäre es mit einer Möglichkeit, ein Programm bzw. einen Programmteil > nachzuladen ? > > nur so als Idee, > Gruß klaus Das Problem hatte ich schon beim ChipBasic 2 angesprochen... 95 Zeilen Programmcode sind halt zuwenig. Beim "nachladen" eines Programmteils erhöht sich ebenfalls die Anzahl der Zeilen.... Das heist: Hier muss der nutzbare Programmspeicher erhöht werden. Entweder mit EEProms mit mehr Speicherplatz, oder mit einen anderen MCU. Das OS muss dann natürlich auch angepasst werden...
Oh, ich hatte da an einen/den "Stick" gedacht, der in den ISP-Port gesteckt wird. Das "Dataflash-Modul". Aber vielleicht sollte ich mir erstmal ALLES durchlesen bevor ich meinen Senf dazu abgebe... Ich hab' immer "gewartet" bis ich so 'nen kleinen TV gekauft hatte und dann aber das Interesse verloren, als der AVR immer größer wurde (Mega8-->16-->32-->64). Aber vielleicht war das ja auch ein anderes Projekt, denn jetzt fällt mir auf, dass im Titel "...Mega32" steht. Ich mach' normalerweise nur mit kleinen AVRs rum. Liegt auch daran, dass ich für make (WinAVR/gnu-C) zu blöd bin und mir kommerzielle Vollversionen keine 300 Euronen wert sind; 2 oder 4 kByte Code haben's bisher eigentlich meist getan... Gruß klaus PS. ich will KEINE Bemerkungen/Diskussion wegen "WinAVR... ganz einfach... wenn's erstmal eingerichtet ist...". Ich habe das mal ein ganzes Wochenende versucht und jetzt hab ich sowas von "die Schnauze voll".
Nach ein paar Jahren gibt es eine kleine Erweiterung, und zwar die Unterstützung für Tastaturen mit US-Layout. http://www.jcwolfram.de/projekte/avr/chipbasic32/main.php Jörg
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.