Hallo, in folgenden Beitrag konnte man für den 8052 Basic V1.31 laden. Beitrag "MCS basic-52 V1.3 Interpreter" Ich habe einen 80C31 und möchte diesen gerne auch mit Basic betreiben Adressen: EPROM von $0000 bis $7FFF RAM von $8000 bis $FFFF Beim Basic für den 8052 sieht der Adressbereich so aus Adressen: ROM von $0000 bis $1FFF RAM von $2000 bis $7FFF EPROM von $8000 bis $FFFF Im Anhang der Schaltplan zur besseren Übersicht. Hier die Vektoren aus dem Basic V1.31 192: ; TRAP VECTORS TO MONITOR 193: ; 194: ; RESET TAG (0AAH) ---------2001H 195: ; 196: ; TAG LOCATION (5AH) ------ 2002H 197: ; 198: ; EXTERNAL INTERRUPT 0 ---- 2040H 199: ; 200: ; COMMAND MODE ENTRY ------ 2048H 201: ; 202: ; SERIAL PORT ------------- 2050H 203: ; 204: ; MONITOR (BUBBLE) OUTPUT - 2058H 205: ; 206: ; MONITOR (BUBBLE) INPUT -- 2060H 207: ; 208: ; MONITOR (BUBBLE) CSTS --- 2068H 209: ; 210: ; GET USER JUMP VECTOR ---- 2070H 211: ; 212: ; GET USER LOOKUP VECTOR -- 2078H 213: ; 214: ; PRINT AT VECTOR --------- 2080H 215: ; 216: ; INTERRUPT PWM ----------- 2088H 217: ; 218: ; EXTERNAL RESET ---------- 2090H 219: ; 220: ; USER OUTPUT-------------- 4030H 221: ; 222: ; USER INPUT -------------- 4033H 223: ; 224: ; USER CSTS --------------- 4036H 225: ; 226: ; USER RESET -------------- 4039H 227: ; 228: ; USER DEFINED PRINT @ --- 403CH Hier noch die Sprungadressen: LJMP 2040H LJMP 2050H LJMP 2068H LJMP 2088H LJMP 4003H LJMP 400BH LJMP 4013H LJMP 401BH LJMP 4023H LJMP 402BH LJMP 4036H LCALL 2040H LCALL 2048H LCALL 2060H LCALL 2078H LCALL 2090H LCALL 4030H LCALL 4033H LCALL 4039H LCALL 403CH LCALL INC3210 ACALL X3120 ACALL DEC3210 CALL DEC3211 ORG 1FEBH ORG 1F78H EQU 1990H Reicht es diese einfach anzupassen und ja wie?
:
Bearbeitet durch User
Ein prinzipielles Problem ist die Benutzung eines 8031/8051. Dieser besitzt den wichtigen 2ten Timer nicht, so das alleine dafür erhebliche Änderungen im Code vorgenommen werden müssten. Im Normalfall wird Timer 2 fürs Terminal als Baudratengenerator benutzt. Mein Rat wäre, den 80C31 zu ziehen und stattdessen einen z.B. AT89S52 mit dem Basic zu flashen und einzusetzen. Wenn du auf dem alten EPROM Sockel dann /WE mitverdrahtest und dort einen 32k RAM einsetzt, sollte BASIC sofort anspringen. Ein besonderes Schnäppchen wäre die Belegung des originalen RAM Sockel mit einem EEPROM, das ist im Code version 1p3 schon vorgesehen. Für mein Kloeckner-Moeller Basic habe ich die Routinen auf batteriegepuffertes RAM umgeschrieben, weil das in der SPS schon so vorgesehen war. Beitrag "Spaß mit Kloeckner-Moeller PS3 in BASIC(?)"
Der Sourcecode ist doch dabei. Musst du neu für die geänderten Adressen übersetzen. Da es kein Makefile oder ähnliches gibt, ist das nicht ganz trivial.
und das Basic braucht 256 Byte Ram... und der 31 er hat nur 128. Also: 80S52 nehmen.
Matthias S. schrieb: > Dieser > besitzt den wichtigen 2ten Timer nicht Ist natürlich Quatsch. Sollte heissen ' besitzt den wichtigen Timer2 nicht'.
Matthias S. schrieb: > Timer2 Notfalls gibt es auch eine Version für "ohne Timer2" http://dsaprojects.orgfree.com/electronics/8031-ah/8031-bas.html
Matthias S. schrieb: > Ein prinzipielles Problem ist die Benutzung eines 8031/8051. > Dieser > besitzt den wichtigen 2ten Timer nicht, so das alleine dafür erhebliche > Änderungen im Code vorgenommen werden müssten. Im Normalfall wird Timer > 2 fürs Terminal als Baudratengenerator benutzt. > Mein Rat wäre, den 80C31 zu ziehen und stattdessen einen z.B. AT89S52 > mit dem Basic zu flashen und einzusetzen. > Wenn du auf dem alten EPROM Sockel dann /WE mitverdrahtest und dort > einen 32k RAM einsetzt, sollte BASIC sofort anspringen. > Ein besonderes Schnäppchen wäre die Belegung des originalen RAM Sockel > mit einem EEPROM, das ist im Code version 1p3 schon vorgesehen. > Für mein Kloeckner-Moeller Basic habe ich die Routinen auf > batteriegepuffertes RAM umgeschrieben, weil das in der SPS schon so > vorgesehen war. > Beitrag "Spaß mit Kloeckner-Moeller PS3 in BASIC(?)" 1) Ginge es denn den Timer 2 einfach gegen Timer 1 zu tauschen 2) Nur einfach gegen den AT89S52 zu tauschen. Wie flashe ich den dann auch über RXD TXD serielle Leitungen? 3) Ja daran hab ich auch gedacht war mir aber bisher unsicher ob man da nur einfach das RAM gegen EEPROM tauscht ohne brachial an der Platine zu löten, deshalb bin ich da nicht tiefer eingestiegen. 4) Gute Idee, besonders batteriegepuffert find ich interessant. Ist das auch in Basic?
Georg G. schrieb: > Der Sourcecode ist doch dabei. Musst du neu für die geänderten > Adressen > übersetzen. Da es kein Makefile oder ähnliches gibt, ist das nicht ganz > trivial. 1) Ist mir nur nicht ganz klar wie ich die ändern soll. Beispiel alle 4000H in A000H und die 2000H in 8000H. Alles was im RAM läuft soll ab 8000H beginnen 2) Was ist mit Makefile gemeint. Ich nutze folgendes Entwicklungssystem http://www.ieap.uni-kiel.de/surface/ag-berndt/lehre/fpmc/ Sourcecode und .asm habe ich auch. Bin/Hex Code kann ich auch erzeugen.
Janus M. schrieb: > 2) Nur einfach gegen den AT89S52 zu tauschen. Wie flashe ich den dann > auch über RXD TXD serielle Leitungen? Leider nicht, das würde einen Bootloader erfordern und damit das Henne-Ei Problem darstellen. Ich flashe die Dinger mit meinem AVRISP MkII, der hier für die AVRs rumliegt, es gibt auch (mit Atmels 'Flip' und ein paar Drähten am LPT Port) eine Lösung. Janus M. schrieb: > 1) Ginge es denn den Timer 2 einfach gegen Timer 1 zu tauschen Georg G. schrieb: > Notfalls gibt es auch eine Version für "ohne Timer2" > http://dsaprojects.orgfree.com/electronics/8031-ah/8031-bas.html Ob und wie der Rest des Basic noch eingeschränkt wird, weiss ich nicht. Das originale Intel Basic benutzt Timer 1 für die Basic Uhr.
Ralph S. schrieb: > und das Basic braucht 256 Byte Ram... und der 31 er hat nur 128. > Also: > 80S52 nehmen. Das soll ja im RAM ab 8000H laufen
Janus M. schrieb: > 2) Was ist mit Makefile gemeint. Da du diese Frage stellst, vergiss bitte meinen Vorschlag. Das wird zu viel Frust. Nimm den Vorschlag von Matthias mit dem Atmel Prozessor.
Janus M. schrieb: > Ralph S. schrieb: >> und das Basic braucht 256 Byte Ram... und der 31 er hat nur 128. >> Also: >> 80S52 nehmen. > > Das soll ja im RAM ab 8000H laufen Es meint das interne RAM der Controller. Du brauchst einen Controller mit Timer2 und 256 Bytes internen RAM.
Georg G. schrieb: > Matthias S. schrieb: >> Timer2 > > Notfalls gibt es auch eine Version für "ohne Timer2" > http://dsaprojects.orgfree.com/electronics/8031-ah... Ja kenn ich, geht bloss nicht bei mir. Habs in allen vorhandenen Versionen gebrannt. Leider hat der gute Meister den Sourcecode für sich behalten, zumindest das was er da genau gemacht hat.
Blechschaden schrieb: > Janus M. schrieb: >> Ralph S. schrieb: >>> und das Basic braucht 256 Byte Ram... und der 31 er hat nur 128. >>> Also: >>> 80S52 nehmen. >> >> Das soll ja im RAM ab 8000H laufen > > Es meint das interne RAM der Controller. Du brauchst einen Controller > mit Timer2 und 256 Bytes internen RAM. Geht denn der Austausch so ohne weiteres oder muss ich da noch auf was anderes achten?
Hm, ein Austausch det Controller sollte mal Grundsätzlich kein Problem darstellen, der 80S52 kann wie der 8031 extern in einem Rom liegenden Code ausführen. Jetzt weiß ich natürlich nicht, wie groß der Code des Basicinterpreters ist, aber geschickt wäre es natürlich schon, wenn der Code ins interne Flash des S52 wandert und somit ein externes Rom nicht mehr notwendig ist ( benötigt dann aber halt einen Flasher) . Der S52 ist allerdings ISP programmierbar. Hm, benötigt dann allerdings auch eine andere Schaltung
Bei mir läuft der BASIC-Interpreter im AT89S8253 mit 32 KBytes externem SRAM ohne Probleme.
Ralph S. schrieb: > Hm, ein Austausch det Controller sollte mal Grundsätzlich kein > Problem > darstellen, der 80S52 kann wie der 8031 extern in einem Rom liegenden > Code ausführen. Jetzt weiß ich natürlich nicht, wie groß der Code des > Basicinterpreters ist, aber geschickt wäre es natürlich schon, wenn der > Code ins interne Flash des S52 wandert und somit ein externes Rom nicht > mehr notwendig ist ( benötigt dann aber halt einen Flasher) . > Der S52 ist allerdings ISP programmierbar. Hm, benötigt dann allerdings > auch eine andere Schaltung 1) Das Basic ist 8.10 KB gross. 2) ein Flasher und andere Schaltung heisst dann letztlich auch eine neue Platine. Letztlich ist mein Ziel möglichst keine Umbauten zu machen um nicht zusätzlichen Elektroschrott zu produzieren und auch, weil das bisherige System sehr stabil und robust läuft. Ausserdem eröffne ich dann wieder andere "Kriegsschauplätze" mit neuen Problemen. Trotzdem bin ich bisher sehr dankbar für die reichhaltige Hilfe gerade bei einem so alten Chip. Ich habe auch noch das Basic von DAN KARMANN. Da steht "These changes were made to allow the BASIC to run on an 8031/8051 uP system in external EPROM." Also muss das auch gehen. Das knifflige bei meiner Schaltung ist das das EPROM mit dem Programm Adressen: EPROM von $0000 bis $7FFF RAM von $8000 bis $FFFF und nur 128 Byte RAM auf dem Chip ist. ROM gibt es beim 80C32 nicht Das gilt es zu berücksichtigen. Falls jemand zufällig noch eine Quelle kennt, wo man den Sourcecode von DAN KARMANN herbekommt wäre das ein grosse Hilfe. Ich hänge mal das was ich habe hier noch dran.
> 1) Das Basic ist 8.10 KB gross.
Für den AT89S8253 kannst du von mir ein Hexfile bekommen.
2) ein Flasher und andere Schaltung heisst dann letztlich auch
eine neue Platine.
Der AT89S8253 sollte in deine Schaltung (das obige Bild ist zu klein)
passen.
Blechschaden schrieb: >> 1) Das Basic ist 8.10 KB gross. > > Für den AT89S8253 kannst du von mir ein Hexfile bekommen. > > 2) ein Flasher und andere Schaltung heisst dann letztlich auch > eine neue Platine. > > Der AT89S8253 sollte in deine Schaltung (das obige Bild ist zu klein) > passen. Hallo Blechschaden Danke für die Möglichkeit für das Hexfile. Der 80C31 ist DIP 40 polig.
Der 89S52 und der 89S8253 sind 40 pol. und passen, können beide externen Programmcode verarbeiten. Dein Problem dürfte dann wohl eher sein : Wie bekommst du Programmcode ins EProm? Wenn du einen Basic Interpreter darin laufen lassen magst, kannst du auch dss Intel Basic nehmen, die Programmquellen liegen im Netz. Dann kannst du auch deine Adressen anpassen.Das Tinybasic für einen 31er ist schon sehr "abgedpeckt" . Andere Mögluchkeit ist, sich deinen Code zu disassemblieren ( meines Wissens war der Interpreter in Maschinensprache geschrieben) den Code zu analysieren und in dann neu zu strukturieren, damit man eine lauffähige Source hat, mit der man arbeiten kann.
Janus M. schrieb: > Blechschaden schrieb: >> Janus M. schrieb: >>> Ralph S. schrieb: >>>> und das Basic braucht 256 Byte Ram... und der 31 er hat nur 128. >>>> Also: >>>> 80S52 nehmen. >>> >>> Das soll ja im RAM ab 8000H laufen >> >> Es meint das interne RAM der Controller. Du brauchst einen Controller >> mit Timer2 und 256 Bytes internen RAM. > > Geht denn der Austausch so ohne weiteres oder muss ich da noch auf was > anderes achten? Das Intel Basic benutzt alles RAM, das intern in einem 8052 residiert, plus natürlich die SFR in der Zeropage. Dazu muss man wissen, das Intel damals nur einen maskenprogrammierten 8052 mit dem Basic geliefert hat und den Sourcecode erst sehr viel später freigab. Janus M. schrieb: > 2) ein Flasher und andere Schaltung heisst dann letztlich auch > eine neue Platine. Wie ich schon schrieb, wären die Änderungen am Board minimal, wenn es dir gelingt, das Intel Basic in einen 8052 zu programmieren. Da du auch EPROMs herstellen kannst - nimmt dein Eprommer evtl. 8752, 87C52 oder so? Dann ist der Rest ein Picknick. Das Schöne am Intel Basic ist u.a. das gut funktionierende Floating Point Paket und der Timer. Das machte es ideal für mein SPS Projekt.
:
Bearbeitet durch User
Als Ergänzung zu meinem ersten Vorschlag "Makefile für neue Architektur anpassen": Der Sourcecode ist recht "unportabel" geschrieben, Konstanten, die sich auf das Speicherlayout beziehen sind im Text verteilt. Um das alles auf z.B. den Keil Assembler mit Linker/Locater um zu bauen, muss man einiges an Zeit investieren. Fazit: Lohnt nicht.
Georg G. schrieb: > Konstanten, die sich auf das Speicherlayout beziehen sind im Text > verteilt. Das habe ich für mein Projekt erstmal geändert, so das es jetzt Labels für die Speicherbereiche gibt, kann man sich im Kloeckner-Moeller PS3 Thread anschauen. Allerdings habe ich natürlich nie probiert, das MC Programm selber zu verschieben, da ich von vorneherein aufs interne Flash der modernen MC gesetzt habe. Georg G. schrieb: > Um das alles auf z.B. den Keil Assembler mit Linker/Locater um > zu bauen Keil konnte ich mir nie leisten. Aber jeder einigermassen moderne 2-Pass Assembler kommt damit klar, so auch der ASEM-51 von Herrn Heinz. Georg G. schrieb: > Fazit: Lohnt nicht. Zustimmung. Es ist wirklich einfacher, das Basic so zu lassen, wie es ist und die kleinen Änderungen an der Hardware des Boards zu machen. Das ging natürlich bei der PS3 nicht. Eine Besonderheit, die Intel im Basic immer wieder macht, ist die Vorgabe der Page über Port 2 und dann die Adressierung, als wäre es die Zeropage. Das muss man erstmal durchblicken.
:
Bearbeitet durch User
Matthias S. schrieb: > Das Schöne am Intel Basic ist u.a. das gut funktionierende Floating > Point Paket und der Timer. Das machte es ideal für mein SPS Projekt. Führt zwar etwas vom Thema weg, nur zur Info: für das Raspberry Pi gibt es BBC BASIC das direkt ohne Betriebssystem als Interpreter läuft. Das unterstützt sogar long double und hat einen Inline-Assembler mit dem man z.B. die Timer-Vektoren direkt auf eigene ISR (in BASIC!) ziehen kann. Es ist auch kein Image sondern ein Binary, das einfach auf eine SD-Karte gezogen wird und bei Power-on vom Bootloader gestartet wird. Und für das Raspberry Pi gibt es ja schöne SPS Gehäuse. https://www.riscosopen.org/content/sales/risc-os-pico
8752, 87C52 kann ich theoretisch brennen muss mir dazu einen Sockel anfertigen. Bauplan, Layout dafür ist alles vorhanden. ...ist und die kleinen Änderungen an der Hardware des Boards zu machen. Die sind mir im Augenblick noch nicht so ganz klar. Meine Annahmen: 1) 8752 Pin Anpassung 2) Vertauschen des Speicherbereichs Das hier Adressen: EPROM von $0000 bis $7FFF RAM von $8000 bis $FFFF in den umwandeln Beim Basic für den 8052 sieht der Adressbereich so aus Adressen: ROM von $0000 bis $1FFF RAM von $2000 bis $7FFF EPROM von $8000 bis $FFFF 3) Welches Basic da am geeignetsten ist. - MCS-BASIC-52 V1.31 Source Listing - Kloeckner - DAN Karmann siehe ZIP Datei
> Zustimmung. Es ist wirklich einfacher, das Basic so zu lassen, wie es > ist und die kleinen Änderungen an der Hardware des Boards zu machen. > Das ging natürlich bei der PS3 nicht. > Eine Besonderheit, die Intel im Basic immer wieder macht, ist die > Vorgabe der Page über Port 2 und dann die Adressierung, als wäre es die > Zeropage. Das muss man erstmal durchblicken. Das Rad 2mal erfinden will ich auch nicht und das mit der Page versteh ich nicht trotz Hinweis :-) Primär ist mein Ziel, wie schon gesagt möglichst wenig an der Hardware zu verändern. Im Netz hat es ja auch einer hin gebracht Basic einzusetzen @Lothar tja die Entwicklung schreitet immer weiter. Das Layout von meinem Schätzchen ist von 1991, quasi steinalt. Aber es macht immer noch viel Spass. Helfen würde mir im Augenblick ein paar wichtige Tipps zum Programmcode. Speziell da wo man was anpassen müsste für Basic V1.31.
:
Bearbeitet durch User
Janus M. schrieb: > Helfen würde mir im Augenblick ein paar wichtige Tipps zum Programmcode. > > Speziell da wo man was anpassen müsste für Basic V1.31. Bitte, nimm es nicht persönlich. DAS übersteigt deine momentanen Kenntnisse und erzeugt nur Frust (das sieht man an deinen Fragen). Bau dir eine passende Hardware oder überlege, wie du deine vorhandene Hardware auf das andere Speicherlayout umstricken kannst. Als Anfang stell doch bitte ein besser lesbares Schaltbild ein,damit man dir dazu Tipps geben kann.
:
Bearbeitet durch User
Janus M. schrieb: > Das Layout von meinem Schätzchen ist von 1991, quasi steinalt. Das BBC BASIC für den ARM im Raspberry Pi ist von 1985 :-) Kam ursprünglich vom 6502 https://en.wikipedia.org/wiki/BBC_BASIC
Der Vorschlag von Matthias mit dem AT89S52 scheint mir am schnellsten zum Ziel zu führen, wird die wenigsten Hardware Änderungen benötigen. Das Flashen der neuen CPU kann bestimmt jemand aus dem Forum übernehmen. Dabei wäre es gut zu wissen, wo du ungefähr wohnst. Probleme lassen sich dann am schnellsten gemeinsam vor Ort lösen.
Lothar schrieb: > Kam ursprünglich vom 6502 Genauer vom 'Acorn Atom' und hatte schon ein schönes 'float'-Format mit vier Byte Mantisse, die allerdings nicht BCD (wie beim 8052-Basic) sondern binär kodiert war, was ca. zehn gültige Stellen liefern konnte; alles lief sehr schnell. Braucht jemand einen 'Acorn Atom' oder den Quellcode davon? ;-)
Janus M. schrieb: > 1) 8752 Pin Anpassung Hier geht es nur um /EA. Wenn der 8752 sein Basic aus dem internen EPROM laufen lassen soll, muss /EA auf high. Janus M. schrieb: > 2) Vertauschen des Speicherbereichs Da sich EPROM und RAM nur durch das /WE Signal unterscheiden, solltest du /WE am EPROM Sockel auflegen. Bei der JEDEC Belegung sollte das Pin 27 sein, wimre. Also Pin 27 am EPROM Sockel freischalten und dann auf Pin 27 des RAM Sockel schalten. Janus M. schrieb: > 3) Welches Basic da am geeignetsten ist. > > - MCS-BASIC-52 V1.31 Source Listing > - Kloeckner > - DAN Karmann Sicher nicht Kloeckner-Moeller Basic. Das habe ich wirklich etwas an diese alte SPS angepasst und mit Befehlen speziell dafür erweitert. Was von Karmann zu halten ist, weiss ich nicht, denn es gibt keinen Sourcecode. Bleibt also nur V1.3, das auch am besten dokumentiert ist. Lothar schrieb: > Das BBC BASIC für den ARM im Raspberry Pi ist von 1985 :-) Kam > ursprünglich vom 6502 Im 'Intel Microcontroller Handbook' von 1981 wird der '8052AH Basic' vorgestellt.
:
Bearbeitet durch User
Georg G. schrieb: > Janus M. schrieb: >> Helfen würde mir im Augenblick ein paar wichtige Tipps zum Programmcode. >> >> Speziell da wo man was anpassen müsste für Basic V1.31. > > Bitte, nimm es nicht persönlich. DAS übersteigt deine momentanen > Kenntnisse und erzeugt nur Frust (das sieht man an deinen Fragen). Bau > dir eine passende Hardware oder überlege, wie du deine vorhandene > Hardware auf das andere Speicherlayout umstricken kannst. > > Als Anfang stell doch bitte ein besser lesbares Schaltbild ein,damit man > dir dazu Tipps geben kann. 1) Nein, ich nehme das nicht persönlich, wunder mich nur warum das gar so schwierig ist den Code anzupassen. Eigentlich ist die schwierigste Arbeit ja schon gemacht worden. Im Grund bilde ich mir ein kann es doch nur um die Adressen gehen aber egal. Assembler habe ich mal vor vielen Jahren für ein 6502 versucht. Ging auch, nur der Aufwand war allein schon für ein 50 Zeilen Programm enorm. Und wenn man nicht alles dokumentiert weiss man nach 2 Tagen schon nicht mehr warum weshalb wieso man das so und nicht anders gemacht hat. 2) Anbei ein grösseres Layout. Mehr geht leider nicht, da ich das auch nur als Scan vorliegen habe. Die Zahlen sind zugegeben etwas klein. Vom Prinzip her ist es jedoch eine Standardschaltung. 8031, ein Latch ein externes EPROM und ein RAM zum Austesten von Programmen. Mit dem Gatter IC6 wurde der Adressbereich entsprechend manipuliert. Also RAM ab $8000. Hoffe das hilft.
Matthias S. schrieb: > Janus M. schrieb: >> 1) 8752 Pin Anpassung > > Hier geht es nur um /EA. Wenn der 8752 sein Basic aus dem internen EPROM > laufen lassen soll, muss /EA auf high. > > Janus M. schrieb: >> 2) Vertauschen des Speicherbereichs > > Da sich EPROM und RAM nur durch das /WE Signal unterscheiden, solltest > du /WE am EPROM Sockel auflegen. Bei der JEDEC Belegung sollte das Pin > 27 sein, wimre. Also Pin 27 am EPROM Sockel freischalten und dann auf > Pin 27 des RAM Sockel schalten. > > Janus M. schrieb: >> 3) Welches Basic da am geeignetsten ist. >> >> - MCS-BASIC-52 V1.31 Source Listing >> - Kloeckner >> - DAN Karmann > > Sicher nicht Kloeckner-Moeller Basic. Das habe ich wirklich etwas an > diese alte SPS angepasst und mit Befehlen speziell dafür erweitert. Was > von Karmann zu halten ist, weiss ich nicht, denn es gibt keinen > Sourcecode. Bleibt also nur V1.3, das auch am besten dokumentiert ist. > > Lothar schrieb: >> Das BBC BASIC für den ARM im Raspberry Pi ist von 1985 :-) Kam >> ursprünglich vom 6502 > > Im 'Intel Microcontroller Handbook' von 1981 wird der '8052AH Basic' > vorgestellt. 1) Das ist doch schon mal sehr hilfreich wie man die Pinbelegung zu setzen hat. Danke 2) Habe den Sourcecode von DAN KARMANN mal dissaembliert mit dem D51.exe Programm (siehe Anhang) 3) Nehme an Du meinst das Handbuch hier (siehe Anhang)
Georg G. schrieb: > Der Vorschlag von Matthias mit dem AT89S52 scheint mir am schnellsten > zum Ziel zu führen, wird die wenigsten Hardware Änderungen benötigen. > Das Flashen der neuen CPU kann bestimmt jemand aus dem Forum übernehmen. > Dabei wäre es gut zu wissen, wo du ungefähr wohnst. Probleme lassen sich > dann am schnellsten gemeinsam vor Ort lösen. Ja, scheint so mit dem geringsten Aufwand zu gehen. Also ungefähr wohne ich Mitte Ruhrgebiet :-)
Hier noch das Basic für den 8031 http://dsaprojects.orgfree.com/electronics/8031-ah/8031-bas.html Schaltplan ist in Zip Datei vorhanden. Das hier ist im Grunde das was ich mir so gedacht habe. Code als HEX, BIN und A51 vorhanden.(siehe Anhang) Mit Basic bräuchte ich mich da vermutlich auch nicht beschäftigen ist dann nur die Hardware anzupassen. Dreht sich um den 7400 der bei mir drin ist und dem Channel Decoder. In der Readme Datei steht "...how to make a 8031 basic interpreter development board system, from the MCS51 family. I use 8031-AH chip, with BASIC31a version 1.2a interpreter firmware from Dan Karmann." Controller und Bauteile sind beinahe identisch einzig die Speicheraufteilung wäre dann bei mir umzustricken. Semiconductors : IC1 = 8031-AH (uC ) IC2 = 74LS373 (Octal latch) IC3 = 27C64 (8 kByte EPROM) IC4 = 62256 (32 kByte RAM) Diese Teile hab ich nicht: IC5 = 8255 (PPI) IC6 = 74LS138 (3 to 8 channel decoder) IC8 = 74LS08 (Quad And gate) IC3 = AT28C64 (optional 8 kByte EEROM)
:
Bearbeitet durch User
Janus M. schrieb: > Dreht sich um den 7400 der bei mir > drin ist Der 7400 hat in diesen Schaltungen immer die ehrenvolle Aufgabe, /RD und /PSEN zu verANDen, damit der MC auch aus dem RAM Programme ausführen kann. Der 8051/52 ist nämlich ein MC, bei dem für Daten und Programme normalerweise verschiedene Adressbereiche benutzt werden. Das führt der 7400 zusammen - und das ist auch die richtige Voraussetzung für Intel Basic. Janus M. schrieb: > BASIC31a version 1.2a interpreter firmware from Dan Karmann Die Frage ist eben, was bei Dan über die Klinge springen musste, damit er ohne Page 1 RAM und Timer 2 auskommt. Ich vermute, das es das Floating Point Paket ist und evtl. ein paar Clock Sachen. Da es aber die Mühe nicht wert ist (immerhin kostet ein AT89S52 nicht mal 1,50 Euro) würde ich an deiner Stelle auf das 'dicke' Basic zurückgreifen: http://www.nomad.ee/micros/ Wenn man sich dazu einmal den AVRISP MkII zulegt, ist das ein Spass von unter 40 Euro und kann jetzt und in Zukunft nahezu alle MC von Atmel flashen.
:
Bearbeitet durch User
Georg G. schrieb: > Was für ein Typ ist dein "IC6"? Der Belegung nach ist das der besagte 7400. Ich sehe aber gerade, das für den EPROM Sockel /RD nicht mit /PSEN verANDet für /OE ist, sollte man also am EPROM Sockel auch auftrennen und parallel vom RAM Sockel ziehen. Der 7400 verNANDet erst /PSEN und /RD und invertiert dann. Das dritte Gatter macht aus A15 das /CE für den RAM. Das vierte Gatter ist zur freien Verfügung :-)
Matthias S. schrieb: > Janus M. schrieb: >> Dreht sich um den 7400 der bei mir >> drin ist > > Der 7400 hat in diesen Schaltungen immer die ehrenvolle Aufgabe, /RD und > /PSEN zu verANDen, damit der MC auch aus dem RAM Programme ausführen > kann. Der 8051/52 ist nämlich ein MC, bei dem für Daten und Programme > normalerweise verschiedene Adressbereiche benutzt werden. Das führt der > 7400 zusammen - und das ist auch die richtige Voraussetzung für Intel > Basic. > > Janus M. schrieb: >> BASIC31a version 1.2a interpreter firmware from Dan Karmann > > Die Frage ist eben, was bei Dan über die Klinge springen musste, damit > er ohne Page 1 RAM und Timer 2 auskommt. Ich vermute, das es das > Floating Point Paket ist und evtl. ein paar Clock Sachen. > Da es aber die Mühe nicht wert ist (immerhin kostet ein AT89S52 nicht > mal 1,50 Euro) würde ich an deiner Stelle auf das 'dicke' Basic > zurückgreifen: > http://www.nomad.ee/micros/ > Wenn man sich dazu einmal den AVRISP MkII zulegt, ist das ein Spass von > unter 40 Euro und kann jetzt und in Zukunft nahezu alle MC von Atmel > flashen. 1) Schön, dann müsste ich den 7400 entsprechend bearbeiten. Da wäre Hilfe angebracht. Der Channel Decoder dürfte für mein Vorhaben überflüssig sein oder? 2) Die Urversion und die Version 1.31 sind schon unterschiedlich. Beide Codes sind passen allerdings in 8 KB EPROMs. Aber ich halte es für eine sehr gute Idee, wenn ich Deinen Vorschlag als weiteres Projekt anschliesse. So habe ich gleichzeitig zwei schöne "Maschinchen" und sehe deren Unterschiede. 3) Hab grade festgestellt, dass ich auch noch für 89C51,89C52 (FLASH-Typen von Atmel) sowie dazu kompatible Typen komplette Platinenlayouts habe. An sich ist alles da. :-) Eine Frage noch zu den HEX Codes kann man die irgendwo in einem Simulator laufen lassen. Leider funktionieren manche nicht in MC-51 siehe link: http://www.ieap.uni-kiel.de/surface/ag-berndt/lehre/fpmc/ ------------------------ Ich fasse mal zusammen: - Ich werde versuchen mit einer Modifikation nach dieser Anleitung http://dsaprojects.orgfree.com/electronics/8031-ah/8031-bas.html meine Platine anzupassen und hoffe, dass ausser Hardware nichts zu ändern ist. Hilfe in bezug 7400 gerne erwünscht. In der Kodierung liegt die Wahrheit. - Danach wird eine neue Platine nach folgendem link http://www.nomad.ee/micros/ gebastelt. Brennen kann ich 89C51,89C52 (FLASH-Typen von Atmel) sowie dazu kompatible Typen und 8752, 87C52 (Muss mir allerdings erst noch Platinen bauen).
:
Bearbeitet durch User
Matthias W. schrieb: > Warum nicht Tiny Basic 51 nehmen ? Auch da ist eine Anpassung erforderlich. Hab es anfangs mal so in ein EPROM gebrannt und nichts ging. Der Aufwand ist der gleiche und das Basic ist halt nur Tiny. Oder anders gesagt funktioniert es beim Grossen wird es auch beim Tiny gehen.
Janus M. schrieb: > Der Channel Decoder dürfte für mein Vorhaben überflüssig sein oder? Ich habe in deiner originalen Platine nichts entdeckt, was als 'Channel Decoder' durchgeht. Ich sehe da einen MC, einen EPROM, einen RAM und die einfache Auswahllogik mit dem 7400. Das die serielle Schnittstelle mit Optokoppler und Stromschleife ausgelegt ist, liegt an der MIDI Spezifikation. Die einfachste Modifikation dürfte es übrigens sein, einfach die /CE Leitungen der beiden JEDEC Sockel zu tauschen. Dann hast du ein Addressschema, das für alle Basics klappen sollte: Basic im MC von 0000h-1FFFh RAM von 2000h-7FFFh, wenn du einen 32k RAM einsetzt. Davon sind die ersten 4k verschenkt, aber es bleiben ja 28k übrig. ROM von 8000h-FFFFh, den du erstmal freilässt.
:
Bearbeitet durch User
Man könnte aber auch BASCOM nehmen und irgendeinen 8051 mit Bootloader, z.B. AT89C51RB2-3CSUM. Alle anderen Chips sind dann überflüssig außer einem MAX232. http://www.mcselec.com/index.php?option=com_docman&task=cat_view&gid=98&Itemid=54 http://www.csd-electronics.de/200/cgi-bin/shop.dll?AnbieterID=2&bnr=30232&referer=googlebase&gclid=CPiO_s_70sgCFUJAGwodtjoG8A&PKEY=027A&Hauptseite=detail.htm
Peter D. schrieb: > Man könnte aber auch BASCOM nehmen und irgendeinen 8051 mit Bootloader, > z.B. AT89C51RB2-3CSUM Allerdings sind 1kByte RAM, die der AT89C51RB2 intern hat, wirklich sehr wenig. Wie das mit der Hardware bei BASCOM läuft, weiss ich nicht, aber ein externes RAM dürfte da auch nicht schaden. Gut, der Sinclair ZX81 wurde mit 2k RAM ausgeliefert und damit konnte man schon was anfangen :-)
:
Bearbeitet durch User
Matthias S. schrieb: > Allerdings sind 1kByte RAM, die der AT89C51RB2 intern hat, wirklich sehr > wenig. Wofür? Für Steuerungen sind 1kB in der Regel mehr als ausreichend. Der 8051 ist nunmal kein MC, den man für MP3, Video, Webseiten, HDD, Ethernet usw. bevorzugen sollte.
Matthias S. schrieb: > Janus M. schrieb: >> Der Channel Decoder dürfte für mein Vorhaben überflüssig sein oder? > > Ich habe in deiner originalen Platine nichts entdeckt, was als 'Channel > Decoder' durchgeht. Ich sehe da einen MC, einen EPROM, einen RAM und die > einfache Auswahllogik mit dem 7400. > Das die serielle Schnittstelle mit Optokoppler und Stromschleife > ausgelegt ist, liegt an der MIDI Spezifikation. > Die einfachste Modifikation dürfte es übrigens sein, einfach die /CE > Leitungen der beiden JEDEC Sockel zu tauschen. Dann hast du ein > Addressschema, das für alle Basics klappen sollte: > > Basic im MC von 0000h-1FFFh > RAM von 2000h-7FFFh, wenn du einen 32k RAM einsetzt. Davon sind die > ersten 4k verschenkt, aber es bleiben ja 28k übrig. > ROM von 8000h-FFFFh, den du erstmal freilässt. Zuerst mal vielen Dank für Deine Antwort Matthias, das liest sich ja wirklich sehr einfach in der Umsetzung. 1) Das sehe ich auch so, viel ist wirklich nicht dran und das ist fast schon wieder genial :-). 2) Serielle Schnittstelle hier als MIDI da (..lang wars her) mit ATARI betrieben. Gestern habe ich mir per Hand auf Lochrasterplatine mittels MAX232N und 5 Kondensatoren mit 10 microF einen bequemeren Zugang gebastelt. Funktionierte super als es ich mit Ultramon getestet habe. 3) Wohl eine sehr wichtige Aussage für mich. Dachte zuerst, warum tausche ich nicht einfach nur ROM und RAM :-). 4) Das 4k vom RAM verschenkt sind wäre nicht so tragisch Basic von 0000h-1FFFh (8 KB) RAM von 2000h-3000h (4 KB) nicht nutzbar RAM von 3000h-7FFFh (20 KB) ROM von 8000h-FFFFh (32 KB) Weshalb sind 4 KB nicht nutzbar vom RAM ?? 5) Im Anhang ist die Speicheraufteilung alt und neu sowie die Modifikation zu ersehen. 6) Schön wäre es noch das Vertauschen der CE Leitungen über einen einfachen Schalter hinzubekommen, so dass man beliebig wählen kann ob Basic oder Urzustand. Aber das sind Feinheiten :-). Zunächst gilt es mal das überhaupt zum Laufen zu bringen
:
Bearbeitet durch User
Statt des Schalters, hier eine Lösung mit Jumpern Stellung der Jumper in grün gibt die unveränderte Schaltung wieder (Midi) in schwarz vertauschen von RAM und ROM (BASIC) Das ganze befindet sich auf einer 8 poligen Stiftleiste
1 | ROM RAM |
2 | in out |
3 | O === O |
4 | gekreuzt |
5 | O === O |
6 | out in |
7 | ROM RAM |
8 | |
9 | |
10 | ROM RAM |
11 | in out |
12 | O O |
13 | | | nicht gekreuzt |
14 | O O |
15 | out in |
16 | ROM RAM |
es geht auch mit nur vier Pins. So mache ich das bei RS-232 mit TxD und RxD.
soul e. schrieb: >
1 | ROM RAM |
2 | > in out |
3 | > O === O |
4 | > gekreuzt |
5 | > O === O |
6 | > out in |
7 | > ROM RAM |
8 | > |
9 | > |
10 | > ROM RAM |
11 | > in out |
12 | > O O |
13 | > | | nicht gekreuzt |
14 | > O O |
15 | > out in |
16 | > ROM RAM |
> > es geht auch mit nur vier Pins. So mache ich das bei RS-232 mit TxD und > RxD. Genial!! Spart mir noch vier Bohrungen. Besten Dank
Hallo, gleich vorne weg es hat geklappt. Vielen Dank an alle die mitgeholfen haben. Im Anhang ein Screenshot. Werde das mal weiter testen.
:
Bearbeitet durch User
Janus M. schrieb: > Werde das mal weiter testen. Feine Sache - tipp doch mal ein
1 | ? FREE |
ein. Da der andere Sockel noch kein Schreibsignal hat, ist die dauerhafte Speicherung noch nicht möglich - kannst du aber jederzeit nachholen.
:
Bearbeitet durch User
Matthias S. schrieb: > Janus M. schrieb: >> Werde das mal weiter testen. > > Feine Sache - tipp doch mal ein >
1 | ? FREE |
ein. > > Da der andere Sockel noch kein Schreibsignal hat, ist die dauerhafte > Speicherung noch nicht möglich - kannst du aber jederzeit nachholen. Uffz, und ich dachte das wäre mit dem Tausch getan. Wo bekomme ich denn das Signal her? Ausgegeben wird folgendes siehe Anhang.
Oh, ich weiss was Du meinst. Pin 27 müsste ich dann auch noch draufgeben- Am besten wieder durch einen Jumper. Rechnen kann er auch :-)
Janus M. schrieb: > Ausgegeben wird folgendes siehe Anhang. Das liegt daran, dass Du nicht "? FREE" eingegeben hast.
Dieter W. schrieb: > Janus M. schrieb: >> Ausgegeben wird folgendes siehe Anhang. > > Das liegt daran, dass Du nicht "? FREE" eingegeben hast. Oh, da hast Du recht. Gleich nochmal siehe Anhang.
Als nächstes mußt Du testen, wie schnell das BASIC die ersten 1000 oder 10000 Primzahlen findet. Dieser Test war seinerzeit Pflicht! ;-)
'?' ist in Intel Basic und vielen anderen ein Synonym für 'print', deswegen habe ich es mit in die Zeile geschrieben. Janus M. schrieb: > Uffz, und ich dachte das wäre mit dem Tausch getan. Wo bekomme ich denn > das Signal her? Na, vom Nachbarsockel. Allerdings gibt es im JEDEC Pinout einen Unterschied zwischen den 32k EPROM und den 32k RAM Bausteinen. Erstere benutzen Pin 27 als A14 Leitung und Pin 1 als Vpp Anschluss, letzter tragen auf Pin 27 das /WE (Schreib-) Signal und an Pin 1 die Adressleitung A14. Das RAM Pinout ist kompatibel zu parallelen EEPROMs wie dem Atmel AT28BV256, der sich nach aussen wie ein RAM verhält, nur das er nach dem Powerdown die Daten hält, darauf ist die Version 1p3 von den Intel Basic Verbesserern schon vorbereitet. Da die Zeit von den alten EPROMs abgelaufen ist, würde ich früher oder später den Sockel auf RAM umstricken. Dann kannst du entweder simpel mit Batterie puffern, oder so einen Flash EEPROM wie den von Atmel einsetzen: http://www.atmel.com/products/memories/parallel/parallel_eeprom.aspx?tab=overview Janus M. schrieb: > Gleich nochmal siehe Anhang. Hey, dann gehts ja doch - Intel Basic ist schlauer, als ich dachte. Es fehlen vom Ram also praktisch nur die ersten beiden 256Byte Pages. Sieht doch bestens aus.
:
Bearbeitet durch User
m.n. schrieb: > Als nächstes mußt Du testen, wie schnell das BASIC die ersten 1000 oder > 10000 Primzahlen findet. Dieser Test war seinerzeit Pflicht! ;-) Äh, ich will das Ding nicht überfordern. :-)) Irgendwie erinnert mich das alles schwer an einen Pet 2001 Rechner. Nur die Platine ist extrem geschrumpft. Muss jetzt erst noch dieses Signal für den Speicher irgendwie aufbasteln. Jedenfalls zeigt sich, dass man sogar den Midi 8031, damals für den Atari gedacht, zu allerlei Sachen missbrauchen kann. :-) Assembler ist um Ecken schwieriger zu programmieren das war halt der Hauptgrund mal was neues zu versuchen.
..."Hey, dann gehts ja doch - Intel Basic ist schlauer, als ich dachte. Es fehlen vom Ram also praktisch nur die ersten beiden 256Byte Pages. Sieht doch bestens aus." Hm, so richtig werde ich trotzdem nicht ganz schlau draus. Ich bin eigentlich auch der Meinung, dass da durch das Vertauschen der CE Leitungen noch die WE Leitung mit müsste. Im Schaltplan ist die ja nach wie vor nur beim RAM was ja jetzt der ROM ist und müsste auch mitgezogen werden. Wie merke ich denn überhaupt ob da das RAM richtig angesprochen wird? Vielleicht sollte ich mal den RAM rausnehmen. Irgendwie kann ich dem noch nicht ganz trauen. Das mit der Leitung muss ich mal morgen in aller Ruhe prüfen. Sicher kann man das EPROM durch viele neuen Bausteine ersetzen. Bin aber erstmal froh das das überhaupt so läuft. Grade während des Lötens hatte ich schon dunkle Vorahnungen hier schönen Elektroschrott zu produzieren. :-)
"Na, vom Nachbarsockel. Allerdings gibt es im JEDEC Pinout einen Unterschied zwischen den 32k EPROM und den 32k RAM Bausteinen. Erstere benutzen Pin 27 als A14 Leitung und Pin 1 als Vpp Anschluss, letzter tragen auf Pin 27 das /WE (Schreib-) Signal und an Pin 1 die Adressleitung A14." Wenn ich die Platinen Verdrahtung ansehe sieht es derzeit real so aus egal ob CE vertauscht ist oder nicht. RAM: Pin 27 (WE) geht an PIN 16 vom 8031 (Port 3.6) ROM: Pin 27 (A14) geht an PIN 1 vom RAM (A14) und an PIN 27 vom 8031 (A14) Aus der Speicherbelegung werd ich auch nicht ganz schlau. Er zeigt 32255 RAM 32768 ist die volle Speichergrösse (2 hoch 15) fehlen 513 Byte. Der 8031 hat 128 Byte RAM. Alles etwas merkwürdig. Ich glaube allerdings nicht das dieses Basic so schlau ist meine spezielle Verdrahtung zu erkennen. Ich gehe mal davon aus das Entwickler zwar alle möglichen Kombinationen berücksichtigen, die auch Sinn machen aber das wars dann auch. Warum sollten die sich mit Sonderfällen belasten?
:
Bearbeitet durch User
Janus M. schrieb: > Wie merke ich denn überhaupt ob da das RAM richtig angesprochen wird? > Vielleicht sollte ich mal den RAM rausnehmen. PRINT FREE hat Dir 32k angezeigt, also hat der Controller das RAM erkannt. PRINT MTOP liefert Dir die oberste RAM-Adresse, PRINT LEN die Länge Deines Programmes. Ohne Programm ist LEN=1. Das RAM funktioniert wenn Du ein Programm eingeben kannst und es drinbleibt. Der modernen Mikroelektronik sei Dank musst Du das nicht mehr auf einer Gummitastatur eintippen und wenn der Kühlschrank anspringt stürzt der Rechner ab, sondern Du kannst es komfortabel vom Terminal aus rüberschieben. "Textdatei senden". Aber Vorsicht -- ein paar Millisekunden am Zeilenende braucht die Büchse zum Wegsortieren. Beispiel zum copy & paste
1 | 1 FOR I=0 TO 8191 : XBY(I+8192)=CBY(I) : NEXT I |
2 | 10 PRINT "Universal PROM Programmer" : PRINT "What type of device ?" |
3 | 20 PRINT "1 = EEPROM" : PRINT "2 = intelligent EPROM" |
4 | 30 PRINT "3 = normal (50ms) EPROM" : PRINT : INPUT "Type (1,2,3) - ",T |
5 | 40 ON (T-1) GOSUB 340,350,360 |
6 | 50 REM this sets up intelligent programming if needed |
7 | 60 IF W=001 THEN DBY(26h)=DBY(26h).OR.8 ELSE DBY(26h)=DBY(26h).AND.0F7H |
8 | 70 REM calculate pulse with and save it |
9 | 80 PUSH (65536-(W*XTAL/12)) : GOSUB 380 |
10 | 90 POP G1 : DBY(40H)=G1 : POP G1 : DBY(41H)=G1 : PRINT |
11 | 100 INPUT "Starting Data Address - ",S : IF S<512.OR.S>0FFFFH THEN 100 |
12 | 110 PRINT : INPUT "Ending Data Address - ",E |
13 | 120 IF E<S.OR.E>0FFFFH THEN 110 |
14 | 130 PRINT : INPUT "PROM Address - ",P : IF P<8000H.OR.P>0FFFFH THEN 130 |
15 | 140 REM calculate the number of bytes to program |
16 | 150 PUSH (E-S)+1 : GOSUB 380 : POP G1 : DBY(31)=G1 : POP G1 : DBY(30)=G1 |
17 | 160 REM set up the EPROM address |
18 | 170 PUSH P-1 : GOSUB 380 : POP G1 : DBY(26)=G1 : POP G1 : DBY(24)=G1 |
19 | 180 REM set up the source address |
20 | 190 PUSH S : GOSUB 380 : POP G1 : DBY(27)=G1 : POP G1 : DBY(25)=G1 |
21 | 200 PRINT : PRINT "Type a CR on the keyboard when ready to program" |
22 | 220 X=GET : IF X<>0DH THEN 220 |
23 | 230 REM program the EPROM |
24 | 240 PGM |
25 | 250 REM see if any errors |
26 | 260 IF (DBY(30).OR.DBY(31))=0 THEN PRINT "Programming complete." : END |
27 | 270 PRINT : PRINT "*** Error ***" : PRINT |
28 | 280 REM these routines calculate the address of the source and |
29 | 290 REM EPROM location that failed to program |
30 | 300 S1=DBY(25)+256*DBY(27) : S1=S1-1 : D1=DBY(24)+256*DBY(26) |
31 | 310 PH0. "The value ",XBY(S1), : PH1. " was read at location ",S1 : PRINT |
32 | 320 PH0. "The EPROM read ",XBY(D1), : PH1. " at location ",D1 : END |
33 | 330 REM these subroutines set up pulse width |
34 | 340 W=.0005 : RETURN |
35 | 350 W=.001 : RETURN |
36 | 360 W=.05 : RETURN |
37 | 370 REM this routine takes the top of stack and returns high, low bytes |
38 | 380 POP G1 : PUSH (G1.AND.0FFH) : PUSH (INT(G1/256)) : RETURN |
Das waren noch Zeiten... Wieso hat hier eigentlich noch niemand dem mc-Basic EMUF erwähnt? 8052 AH-Basic, Eprom-Programmiermöglichkeit, ADC, 2xDAC, VG-Leiste, gibts ab&zu mal in der Bucht... irgendwo hab ich noch einen rumliegen... muß ich direkt mal suchen gehen...
Matthias S. schrieb: >> Das BBC BASIC für den ARM im Raspberry Pi ist von 1985 :-) Kam >> ursprünglich vom 6502 > > Im 'Intel Microcontroller Handbook' von 1981 wird der '8052AH Basic' > vorgestellt. Hier mal zum Vergleich BBC BASIC auf dem Raspberry Pi: Auslesen eines I2C Temperatursensors LM75 mit Adresse 0x48 DIM buffer% 3 REPEAT SYS "IIC_Control", (&48<<1)+1, buffer%, 2 PRINT ?buffer% + (?(buffer%+1))/256 time = TIME + 25 REPEAT UNTIL TIME > time UNTIL FALSE
Joerg L. schrieb: > Das waren noch Zeiten... > Wieso hat hier eigentlich noch niemand dem mc-Basic EMUF erwähnt? Oder das Compuboard vom Elektuur-Verlag, siehe Anhang.
Oh, es gibt viele Systeme, auf denen das Intel Basic läuft - ich habe es ja auch auf einer SPS zum laufen gebracht. Die Herausforderung war, es auch auf dem Midi 8031 Board zu zünden, denn das ist ja das vorhandene System des TE. Im BASIC Handbuch von Intel sind ja auch einige Systeme, bzw. deren Hardware beschrieben, von ganz klein bis mittelgross. soul e. schrieb: > Oder das Compuboard vom Elektuur-Verlag, siehe Anhang. Zwei Autoren von Elektor haben auch damals noch einige Bugs beseitigt, ebenso haben noch einige andere Leute neue MC unterstützt und z.B. den EEPROM Modus eingeführt. Die Quintessenz daraus ist Intel Basic Version 1.3, das es bei z.B. http://www.nomad.ee/ gibt. Intel selber hat die Versionen 1.0 und 1.1 ausgeliefert.
soul e. schrieb: > Das RAM funktioniert wenn Du ein Programm eingeben kannst und es > drinbleibt. > Also so richtig den Eindruck habe ich nicht das das Programm drinbleibt. Was rauskommt, siehe Anhang Habe das Programm mit Copy und Paste eingefügt nach RUN gibt es nur ein READY. Da tut sich nichts. Die WE Leitung fehlt demnach und was er mir sonst ausgibt wird vermutlich alles ohne RAM machbar sein.
Janus M. schrieb: > Die WE Leitung fehlt demnach und was er mir sonst > ausgibt wird vermutlich alles ohne RAM machbar sein. Nö. Das RAM wird beim Start getestet (auch beschrieben) und dann werden MTOP usw. gesetzt. Gib mal nur ein kleines Programm ein und lasse es dir mit LIST anzeigen. Mich irritiert, das du die Version 1.2a benutzt. Spezielle Gründe, nicht 1.31 zu nehmen?
Matthias S. schrieb: > Janus M. schrieb: >> Die WE Leitung fehlt demnach und was er mir sonst >> ausgibt wird vermutlich alles ohne RAM machbar sein. > > Nö. Das RAM wird beim Start getestet (auch beschrieben) und dann werden > MTOP usw. gesetzt. > Gib mal nur ein kleines Programm ein und lasse es dir mit LIST anzeigen. > Mich irritiert, das du die Version 1.2a benutzt. Spezielle Gründe, nicht > 1.31 zu nehmen? 1.2a ist 1.31 und 8 KB gross warum das nicht übertragen wurde im Sourcecode weiss ich nicht (im Anhang noch die von mir benutzte Version) Auch bei kleinem Programm tut sich nichts. Das Big Basic mit 16 KB nennt sich auch 1.31 hatte ich auch drin ohne irgendwelche Reaktionen. Hm, jetzt hab ich doch ein Programm zum Laufen gebracht anscheinend funktioniert es doch. Vielleicht hat er mir das Copy und Paste übelgenommen. Als ich die Programmzeilen von Hand eingegeben habe gings.
:
Bearbeitet durch User
Im Anhang eine Ansicht wie das Programm läuft. Auch das Clockprogramm geht Musste das Terminal etwas verlangsamen, da sonst manche Buchstaben und Zahlen verschluckt werden. Am Zeilenende 500 ms und zwischen den Zeichen 200 ms. Die Baudrate liegt bei 9600. Der Quarz ist 11,0592 MHZ. Welche Einstellungen sind denn so üblich?
:
Bearbeitet durch User
Hat jemand vielleicht ein Programm um die Konfiguration zu testen und wie die Speicherbereiche und Hardware vom System gesehen werden? Für PCs gibts ja z.B. AIDA, Everest etc und so was ähnliches für den 8031 suche ich.
Janus M. schrieb: > Er zeigt 32255 RAM 32768 ist die volle Speichergrösse (2 hoch 15) > fehlen 513 Byte. Der 8031 hat 128 Byte RAM. Nun, das wird vielleicht die Angabe des freien Speichers für Basic-Programme und -Daten sein? Der Basic-Interpreter wird für seinen internen Kram sicherlich auch noch RAM benötigen.
Eine ganz allgemeine Frage noch zu Basic bezüglich Geschwindigkeit und Stabilität. Wie brauchbar ist das tatsächlich um zum Beispiel eine Schrittmotorsteuerungen oder eine Balanciersteuerung (Sagway) damit zu realisieren und Wo liegen die Hauptprobleme und Grenzen bei der Anwendung von Basic
Rufus Τ. F. schrieb: > Janus M. schrieb: >> Er zeigt 32255 RAM 32768 ist die volle Speichergrösse (2 hoch 15) >> fehlen 513 Byte. Der 8031 hat 128 Byte RAM. > > Nun, das wird vielleicht die Angabe des freien Speichers für > Basic-Programme und -Daten sein? Der Basic-Interpreter wird für seinen > internen Kram sicherlich auch noch RAM benötigen. Tja scheint so, hoffe dass man das noch mit einem geeigneten Programm erschliessen kann.
Rufus Τ. F. schrieb: > Janus M. schrieb: >> Er zeigt 32255 RAM 32768 ist die volle Speichergrösse (2 hoch 15) >> fehlen 513 Byte. Der 8031 hat 128 Byte RAM. > > Nun, das wird vielleicht die Angabe des freien Speichers für > Basic-Programme und -Daten sein? Der Basic-Interpreter wird für seinen > internen Kram sicherlich auch noch RAM benötigen. Richtig. Die (physische) obere Speichergrenze MTOP = 32767 wurde ja korrekt angezeigt.
Janus M. schrieb: > Wo liegen die Hauptprobleme und Grenzen bei der Anwendung von Basic Laß doch mal einen Pin wackeln auf '1' und wieder auf '0', usw.. Dann siehst Du die Einschränkungen eines Interpreters. Primzahlen wolltest Du ja nicht wissen ;-)
Lothar schrieb: > Hier mal zum Vergleich BBC BASIC auf dem Raspberry Pi: Könntest Du gezeigte Routine mal auf einem RPi laufen lassen? Ein STM32F407 braucht für die dmul() rund 38 µs. Mich würde interessieren, wieviel schneller das BBC-BASIC auf dem RPi läuft.
m.n. schrieb: > Janus M. schrieb: >> Wo liegen die Hauptprobleme und Grenzen bei der Anwendung von Basic > > Laß doch mal einen Pin wackeln auf '1' und wieder auf '0', usw.. > Dann siehst Du die Einschränkungen eines Interpreters. > Primzahlen wolltest Du ja nicht wissen ;-) Wie mach ich das mit dem WackelDackel? Suche noch nach einem Testprogramm um auf die Pins zuzugreifen
Oh, da muß ich mich selber mal schlau machen. Probiere bitte 10 DO 20 PORT1 = PORT1.XOR.1 30 WHILE 1 Damit sollte das untere Bit von PORT1 wackeln.
m.n. schrieb: > Oh, da muß ich mich selber mal schlau machen. Probiere bitte > > 10 DO > 20 PORT1 = PORT1.XOR.1 > 30 WHILE 1 > > Damit sollte das untere Bit von PORT1 wackeln. Hier ein Lauflicht: 5 REM Uhr einschalten 10 CLOCK 1 20 FOR I = 0 TO 15 30 GOSUB 1000 40 REM Uhr zurücksetzen 50 TIME = 0 55 REM 1/10 Sekunde Licht an 60 IF TIME < 0.1 THEN GOTO 60 70 GOSUB 1050 80 NEXT I 90 GOTO 20 990 REM Einschalten des Ports I 1000 P = 2 ** I 1010 PORT = PORT .OR. P 1020 PORTX = PORT 1030 RETURN 1040 REM Ausschalten des Ports I 1050 P = 2 ** I 1060 PORT = PORT .AND. (65535-P) 1070 PORTX = PORT 1080 RETURN
> Ein besonderes Schnäppchen wäre die Belegung des originalen RAM Sockel > mit einem EEPROM, das ist im Code version 1p3 schon vorgesehen. Welches EEPROM ist da zu empfehlen finde keines das in den Sockel des alten EPROMS passt alle sind leider viel kleiner. http://www.reichelt.de/EEPROM-seriell-SPI-Microchip/25LC320A-I-P/3/index.html?ACTION=3&GROUPID=4512&ARTICLE=96660&OFFSET=16&SID=60VM1H0n8AAAIAAAc0LRM583a3d7e20293d5caa79f9dd01272735&LANGUAGE=EN oder das hier vielleicht http://www.jameco.com/Jameco/Products/ProdDS/74843AT.pdf Kann mir jemand noch ein LCD Display empfehlen zum einfachen Anschliessen?
:
Bearbeitet durch User
Janus M. schrieb: > Welches EEPROM ist da zu empfehlen finde keines das in den Sockel des > alten EPROMS passt alle sind leider viel kleiner. > > http://www.reichelt.de/EEPROM-seriell-SPI-Microchip/25LC320A-I-P/3/index.html?ACTION=3&GROUPID=4512&ARTICLE=96660&OFFSET=16&SID=60VM1H0n8AAAIAAAc0LRM583a3d7e20293d5caa79f9dd01272735&LANGUAGE=EN Das sind serielle EEPROMs mit SPI-Schnittstelle. Die haben nur acht Pins und passen relativ schlecht in den EPROM-Sockel. Du brauchst ein i2816, i28C64 oder vergleichbares. Als 256er gibt es die leider nicht.
Janus M. schrieb: > Eine ganz allgemeine Frage noch zu Basic bezüglich Geschwindigkeit und > Stabilität. Da ja Programme hauptsächlich auf dem PC erstellt werden, haben sich auch für BASIC Compiler durchgesetzt, z.B. BASCOM für den 8051. Janus M. schrieb: > Wie brauchbar ist das tatsächlich um zum Beispiel eine > Schrittmotorsteuerungen oder eine Balanciersteuerung (Sagway) damit zu > realisieren und Das Todesurteil für einen BASIC-Interpreter.
soul e. schrieb: > Janus M. schrieb: > >> Welches EEPROM ist da zu empfehlen finde keines das in den Sockel des >> alten EPROMS passt alle sind leider viel kleiner. >> >> > http://www.reichelt.de/EEPROM-seriell-SPI-Microchip/25LC320A-I-P/3/index.html?ACTION=3&GROUPID=4512&ARTICLE=96660&OFFSET=16&SID=60VM1H0n8AAAIAAAc0LRM583a3d7e20293d5caa79f9dd01272735&LANGUAGE=EN > > Das sind serielle EEPROMs mit SPI-Schnittstelle. Die haben nur acht Pins > und passen relativ schlecht in den EPROM-Sockel. Du brauchst ein i2816, > i28C64 oder vergleichbares. Als 256er gibt es die leider nicht. würde ja mit dem i28C64 grade für 8 KB reichen. Nur ein Datenblatt find ich über Google nicht.
m.n. schrieb: > Janus M. schrieb: >> Hier ein Lauflicht: > > Und wie schnell wackelt der Portpin in der Endlosschleife? Da wackelt nichts, die brennt als wäre sie an einer Konstantstromquelle
Peter D. schrieb: > Janus M. schrieb: >> Eine ganz allgemeine Frage noch zu Basic bezüglich Geschwindigkeit und >> Stabilität. > > Da ja Programme hauptsächlich auf dem PC erstellt werden, haben sich > auch für BASIC Compiler durchgesetzt, z.B. BASCOM für den 8051. > > Janus M. schrieb: >> Wie brauchbar ist das tatsächlich um zum Beispiel eine >> Schrittmotorsteuerungen oder eine Balanciersteuerung (Sagway) damit zu >> realisieren und > > Das Todesurteil für einen BASIC-Interpreter. Gibts dazu ein BIN File was man empfehlen kann? Demnach ist Basic nur was für gemächlichere Sachen.
Janus M. schrieb: > Hier ein Lauflicht: Vorsicht. Das ist ein Programm aus meinem Thread zum PS3 Basic - ein von mir modifiziertes Intel Basic für die Kloeckner-Moeller PS3. Die hat eine ganz andere Peripherie und dafür spezielle Kommandos wie 'PORTX'.
Janus M. schrieb: > Welches EEPROM ist da zu empfehlen finde keines das in den Sockel des > alten EPROMS passt alle sind leider viel kleiner. Ein paralleles EEPROM hatte ich oben schon genannt. Allerdings erfordern alle diese Bausteine die geänderte Pinbelegung von Pin 1 und Pin 27. Der alte Eprom Sockel sollte also das gleiche Pinning wie der RAM Sockel aufweisen.
:
Bearbeitet durch User
Matthias S. schrieb: > Janus M. schrieb: >> Welches EEPROM ist da zu empfehlen finde keines das in den Sockel des >> alten EPROMS passt alle sind leider viel kleiner. > > Ein paralleles EEPROM hatte ich oben schon genannt. Allerdings erfordern > alle diese Bausteine die geänderte Pinbelegung von Pin 1 und Pin 27. Der > alte Eprom Sockel sollte also das gleiche Pinning wie der RAM Sockel > aufweisen. 1) Das Programm PS3 Basic funktioniert tatsächlich nicht, dafür aber das andere. Nur sehe ich kein Blinken. Die LED brennt scheinbar. Eventuell muss ich das mal anders aufbauen, muss nämlich immer den RS232 abzihen und den LED Port anstöpseln da ich nur einen Connector habe. Vielleicht liegts daran. Ich wiederhole nochmal die Aussage von Dir von oben: "Das RAM Pinout ist kompatibel zu parallelen EEPROMs wie dem Atmel AT28BV256, der sich nach aussen wie ein RAM verhält, nur das er nach dem Powerdown die Daten hält, darauf ist die Version 1p3 von den Intel Basic Verbesserern schon vorbereitet. Da die Zeit von den alten EPROMs abgelaufen ist, würde ich früher oder später den Sockel auf RAM umstricken. Dann kannst du entweder simpel mit Batterie puffern, oder so einen Flash EEPROM wie den von Atmel einsetzen: http://www.atmel.com/products/memories/parallel/pa..." 2) Ich würde nur das EPROM gegen das EEPROM tauschen. Da ich den EPROM SOckel als Textool aufgelätet habe kann ich somit jede beliebige Pinbelegung mit einem Aufstecksockel erreichen. Pikant ist dabei, dass der WE Anschluss beim EPROM so bleibt und ich nehme mal an das wird sich beim EEPROM auch nicht anders verhalten das Du hier nennst http://www.atmel.com/Images/doc0273.pdf Entweder in der Ausführung PLCC oder SOIC. Da müsste ich einen Adapter basteln, der ins Textool geklemmt wird.
:
Bearbeitet durch User
Janus M. schrieb: > Da ich den EPROM > SOckel als Textool aufgelätet habe kann ich somit jede beliebige > Pinbelegung mit einem Aufstecksockel erreichen. Leider fehlt an deinem jetzigen EPROM Sockel aber der /WE Anschluss komplett, du musst ihn also irgendwie überhaupt auf den Sockel bringen. Das mit dem Textool ist gar nicht schlecht - du könntest nach der einmaligen Änderung des Boards direkt auf den Textool dann verschiedene EEPROMs setzen, die verschiedene Program-Arrangements einprogrammiert haben. Die Verwaltung dieser Programme hat Intel Basic ja schon eingebaut. Janus M. schrieb: > Das Programm PS3 Basic funktioniert tatsächlich nicht, dafür aber das > andere. Nur sehe ich kein Blinken. Die LED brennt scheinbar. Die wird so schnell blinken, das du davon nichts mehr mitkriegst. Entweder hängst du mal ein Oszi ran, oder führst ein Programm mit Messuhr aus, wie oben schon mal vorgeschlagen. In meinem Lauflicht Programm musste ich auch die Verzögerung mit CLOCK und TIME einarbeiten, weil es sonst zu schnell läuft. Neuerere MCS51 in z.B. 'WARP' Technik führen auch mit jedem Takt einen Befehl aus, sind also bis zu 12 mal schneller als die alten. Auch diese MC laufen mit Intel Basic, wenn man möchte.
Matthias S. schrieb: > Janus M. schrieb: > Leider fehlt an deinem jetzigen EPROM Sockel aber der /WE Anschluss > komplett, du musst ihn also irgendwie überhaupt auf den Sockel bringen. > Das mit dem Textool ist gar nicht schlecht - du könntest nach der > einmaligen Änderung des Boards direkt auf den Textool dann verschiedene > EEPROMs setzen, die verschiedene Program-Arrangements einprogrammiert > haben. > Die Verwaltung dieser Programme hat Intel Basic ja schon eingebaut. > > Die wird so schnell blinken, das du davon nichts mehr mitkriegst. > Entweder hängst du mal ein Oszi ran, oder führst ein Programm mit > Messuhr aus, wie oben schon mal vorgeschlagen. > > In meinem Lauflicht Programm musste ich auch die Verzögerung mit CLOCK > und TIME einarbeiten, weil es sonst zu schnell läuft. Neuerere MCS51 in > z.B. 'WARP' Technik führen auch mit jedem Takt einen Befehl aus, sind > also bis zu 12 mal schneller als die alten. Auch diese MC laufen mit > Intel Basic, wenn man möchte. 1) Den WE PIN hänge ich einfach auf PIN 27 eventuell unterbrochen durch einen Jumper. 2) Dann ist BASIC doch sehr schnell und könnte doch mit einer Balancesteuerung a la Sagway mithalten. Oszi hab ich leider nicht könnte hoechsten eine grosse Schleife im Programm einbauen dann blinkt es auch. WARP sagt mir nun gar nichts bin aus der "Vergangenheit" :-) 12 mal schneller, Wahnsinn. Ich bin mit der Geschwindigkeit bisher ganz zufrieden. Langsam wandelt sich mein Board immer mehr zu einem Universalteil. Basic, Assembler, Atari, PC, EPROMS, EEPROMS und Quarze kann ich auch bequem austauschen. Das wird langsam die eierlegende Wollmilchsau. Könnte noch ein Blauzahnmodul basteln oder direkt USB Anschluss an den PC
Janus M. schrieb: >> Und wie schnell wackelt der Portpin in der Endlosschleife? > > Da wackelt nichts, die brennt als wäre sie an einer Konstantstromquelle Wenn der Portpin brennt, ist der µC wohl schon kaputt :-( Janus M. schrieb: > Oszi hab ich leider nicht könnte > hoechsten eine grosse Schleife im Programm einbauen Dann mach vielleicht eine Schleife bis 100000 und messe die Zeit, bis nach RUN der Cursor wieder erscheint.
Wäre es möglich das 1p3 Basic als Assemblerdatei oder noch besser als BIN oder Hex Datei hier rein zustellen? Hab das nur als Textdatei und die ganzen Zeilennummerierung davor löschen wie z.B. "1555:" möchte ich mir gerne ersparen.
m.n. schrieb: > Wenn der Portpin brennt, ist der µC wohl schon kaputt :-( > Nein, der ist ganz neu und in Ordnung ausserdem betreib ich die LED immer mit Vorwiderstand.
Matthias W. schrieb: > Dafür gibts einen Befehl ;) nennt sich "cut" > Hat Windows sowas nicht ? Den kenne ich nicht. Ich versuche die Textdatei spaltenweise zu bearbeiten. Mehr als 7000 Zeilennummern von Hand zu löschen finde ich etwas mühselig.
Habe eine Batteriefassung für TYP 2032 eingebaut. Schaltung sieht so aus. Auf eine aufladbare Version habe ich aus Gründen der Gefahr mal einen AKKU gegen eine normale Batterie zu verwechseln verzichtet.
1 | |
2 | I- I |
3 | -----------------------I -I-------- VCC (RAM) |
4 | I I- I |
5 | -----Batterie Diode 1N4001 |
6 | --- CR2032 |
7 | I |
8 | ----------------------------------- GND (RAM) |
-- "ASCII-Art" bitte in [ pre ] [ /pre ]-Tags einschließen. -rufus
:
Bearbeitet durch User
Ich hänge dir mal die Version 1p3 im Original an. Sollte mit ASEM-51 direkt assembeln - oder wie das heisst :-)
Matthias S. schrieb: > Ich hänge dir mal die Version 1p3 im Original an. > Sollte mit ASEM-51 direkt assembeln - oder wie das heisst :-) Danke vielmals...so kann er das in meiner Entwicklungsumgebung auch ausführen und direkt in ein BIN File umwandeln
Janus M. schrieb: > m.n. schrieb: > >> Wenn der Portpin brennt, ist der µC wohl schon kaputt :-( >> > Nein, der ist ganz neu und in Ordnung ausserdem betreib ich die LED > immer mit Vorwiderstand. Du wolltest die Geschwindigkeit wissen, ich gab Dir eine kleine Testroutine und Du antwortest mit einer leuchtenden LED, die kein Schwein interessiert. Hast Du überhaupt verstanden, worum es geht?
Janus M. schrieb: > Habe eine Batteriefassung für TYP 2032 eingebaut. Denk dran, auch die Vcc des batteriegepufferten RAM vom Rest des Boards mit einer Diode zu entkoppeln, sonst wird das ganze Board von der Knopfzelle versorgt. Wichtig ist fürs batteriegepufferte RAM, das es im Standby deselektiert ist (/CE muss high werden) und das die Adress- und Datenleitungen entweder glatt auf low oder glatt auf high liegen, sonst zieht das Dings spürbaren Strom. Das mit /CE wird sich vermutlich dadurch erreichen lassen, das du statt des 7400 einen 7438 einsetzt, ein 4-fach NAND mit Open Collector Ausgang. Am /CE siehst du einen Pullup (2k2-4k7) gegen Vcc des RAM (das im stromlosen Zustand dann von der Knopfzelle geliefert wird) vor. Da auch die anderen Ausgänge des 7438 Open Collector sind, legst du hier an jeden Ausgang, der benutzt wird, auch Pullups von z.B. 1k gegen die normalen 5V des Boards. In der Kloeckner SPS wird das Puffern von 2 Ladyzellen erledigt (die ich durch eine LiIon Zelle ersetzt habe), die einen LP RAM (HM62256-LP) speisen. Der Strom liegt bei etwa 20µA im ausgeschalteten Zustand, d.h. die Selbstentladung der Zelle ist höher als die RAM Pufferung. Im eingeschalteten Zustand wird die LiIon Zelle (flacher Handyakku) über 1 Diode mit hoher Durchlassspannung (bei 0,8V) und einen R aus den 5V nachgeladen, so das etwa 4,2V an der Zelle ankommen.
:
Bearbeitet durch User
Hallo Leute, habe mir interessehalber das Basic heruntergeladen und versuche es auf einer moderneren Hardware zum laufen zu kriegen. Die Version ist vermutlich die gleiche, welche Matthias hier eingestellt hat. Ein grober Vergleich der Quelldatei beim lesen und die gleiche Anzahl Fehlermeldungen und Warnungen beim Assemblieren läßt mich darauf schließen. Übersetze ich die "ASM"-Datei mit Keil, gelingt die Übersetztung auf Anhieb fehlerfrei. Mit dem Assembler der Entwicklungsumgebung MCU-8051 erhalte ich 49 Fehler und 606 Warnungen. Soweit ich mich erinnere ist der Assembler bei Keil ohne Größenbeschränkung verwendbar, bin mir da aber nicht mehr sicher. Wie dem auch sei, habe ich die Quelldatei übersetzt, auf mein System übertragen und ausprobiert. Wie zu erwarten tat sich nichts, denn meine Hardware paßt nicht zum Programm. Ich verwende diese Hardware Beitrag "Re: 8051 - Programm und Daten in einem 128kB Chip ohne Overlap" Sie hat 128kByte RAM und einen UART-USB Adapter auf der Platine. Der Datentransfer zwischen dem 89S8253-Controller und dem CDC-Chip läuft mit 375000Baud, was dem Basicinterpreter eindeutig zu schnell ist. Nachdem ich Teile des Basic (Startmeldung) an die hohe Geschwindikkeit angepasst habe, kommt die Startmeldung nun tadellos vom µC zum PC. Irgendwelche Kommandos vom PC zum µC kommen nur verstümmelt durch und somit ist das Basic noch nicht wirklich lauffähig. Als Problem habe ich die hohe Übertragungsgeschwindigkeit erkannt. Mit 375kBaud ist die Übertragung deutlich schneller fertig, als mit den vorgesehenen max. 9,6kBaud, was im Programmablauf zu Schwierigkeiten führt. Möglicherweise bekomme ich die Probleme in den Griff und werde darüber berichten. Da mir Basic aber nicht wichtig ist und ich das nur aus Interesse mache, wird es dauern oder nie fertig. Dies sollte nur zeigen, daß es möglich ist das alte Basic mit aktuellen Werkzeugen auf gängige MCS51-Hardware zu übertragen. Gruß. Tom
Matthias S. schrieb: > Janus M. schrieb: >> Habe eine Batteriefassung für TYP 2032 eingebaut. > > Denk dran, auch die Vcc des batteriegepufferten RAM vom Rest des Boards > mit einer Diode zu entkoppeln, sonst wird das ganze Board von der > Knopfzelle versorgt. > Wichtig ist fürs batteriegepufferte RAM, das es im Standby deselektiert > ist (/CE muss high werden) und das die Adress- und Datenleitungen > entweder glatt auf low oder glatt auf high liegen, sonst zieht das Dings > spürbaren Strom. > > Das mit /CE wird sich vermutlich dadurch erreichen lassen, das du statt > des 7400 einen 7438 einsetzt, ein 4-fach NAND mit Open Collector > Ausgang. Am /CE siehst du einen Pullup (2k2-4k7) gegen Vcc des RAM (das > im stromlosen Zustand dann von der Knopfzelle geliefert wird) vor. > > Da auch die anderen Ausgänge des 7438 Open Collector sind, legst du hier > an jeden Ausgang, der benutzt wird, auch Pullups von z.B. 1k gegen die > normalen 5V des Boards. > In der Kloeckner SPS wird das Puffern von 2 Ladyzellen erledigt (die ich > durch eine LiIon Zelle ersetzt habe), die einen LP RAM (HM62256-LP) > speisen. Der Strom liegt bei etwa 20µA im ausgeschalteten Zustand, d.h. > die Selbstentladung der Zelle ist höher als die RAM Pufferung. > Im eingeschalteten Zustand wird die LiIon Zelle (flacher Handyakku) über > 1 Diode mit hoher Durchlassspannung (bei 0,8V) und einen R aus den 5V > nachgeladen, so das etwa 4,2V an der Zelle ankommen. http://circuits.datasheetdir.com/109/HD74LS38-pinout.jpg 1) Das wäre nicht so sinnreich, wenn das ganze Board versorgt wird. Dann kann ich auch die 9V Batterie dranlassen. Dank für den Hinweis. 2) Hm, das bedarf dann eines Austausches des NAND gegen den 7438. Hab so einen leider nicht in der Bastelkiste rumfliegen. Aber viel mehr macht mir der Tausch Kopschmerzen sieht nach einer grösseren Operation aus :-( 3) Ich habe hier im Forum eine Schaltung gefunden, die dem Problem ziemlich nahe kommt denke ich. Beitrag "CMOS-RAM Puffer-Batt" (siehe Bild). Ich würde da Nr.2 nehmen kombiniert mit A (Schottky). Das sieht relativ einfach aus.
TomA schrieb: > Übersetze ich die "ASM"-Datei mit Keil, gelingt die Übersetztung auf > Anhieb fehlerfrei. Auch mit ASEM-51 und der IDE von MIDE-51 assembliert alles auf Anhieb ohne Fehler. Etwas exotischere Assembler wie TASM oder der alte A51.COM benutzen eine etwas andere Syntax für z.B. Konstanten und der Quelltext muss dann darauf angepasst werden. A51.COM notiert eine Konstante bspw. als #H'A1, während die originale Intelsyntax hier #0A1H bzw. #0A1h sehen möchte. Da MIDE-51 und der darin enthaltene ASEM-51 kostenlos erhältlich ist und keinerlei Beschränkungen hat, kann ich dieses Paket zumindest für Win mit gutem Gewissen empfehlen. Die beiden enthaltenen Simulatoren sind allerdings grössenbeschränkt - aber die habe ich noch nie gebraucht. SDCC ist auch enthalten - habe ich noch nie benutzt, also ohne Kommentar. http://www.opcube.com/home.html
TomA schrieb: > ... und die gleiche Anzahl Fehlermeldungen und Warnungen beim >Assemblieren läßt mich darauf schließen. > > Übersetze ich die "ASM"-Datei mit Keil, gelingt die Übersetztung auf > Anhieb fehlerfrei. Mit dem Assembler der Entwicklungsumgebung MCU-8051 > erhalte ich 49 Fehler und 606 Warnungen. > > Wie dem auch sei, habe ich die Quelldatei übersetzt, auf mein System > übertragen und ausprobiert. Wie zu erwarten tat sich nichts, denn meine > Hardware paßt nicht zum Programm. Ich verwende diese Hardware > Beitrag "Re: 8051 - Programm und Daten in einem 128kB Chip ohne Overlap" > Sie hat 128kByte RAM und einen UART-USB Adapter auf der Platine. > > Der Datentransfer zwischen dem 89S8253-Controller und dem CDC-Chip läuft > mit 375000Baud, was dem Basicinterpreter eindeutig zu schnell ist. > Nachdem ich Teile des Basic (Startmeldung) an die hohe Geschwindikkeit > angepasst habe, kommt die Startmeldung nun tadellos vom µC zum PC. > Irgendwelche Kommandos vom PC zum µC kommen nur verstümmelt durch und > somit ist das Basic noch nicht wirklich lauffähig. > > Als Problem habe ich die hohe Übertragungsgeschwindigkeit erkannt. Mit > 375kBaud ist die Übertragung deutlich schneller fertig, als mit den > vorgesehenen max. 9,6kBaud, was im Programmablauf zu Schwierigkeiten > führt. > > Möglicherweise bekomme ich die Probleme in den Griff und werde darüber > berichten. Da mir Basic aber nicht wichtig ist und ich das nur aus > Interesse mache, wird es dauern oder nie fertig. > > Dies sollte nur zeigen, daß es möglich ist das alte Basic mit aktuellen > Werkzeugen auf gängige MCS51-Hardware zu übertragen. > > Gruß. Tom 1) Mit MC-51 http://www.ieap.uni-kiel.de/surface/ag-berndt/lehre/fpmc/ habe ich das Programm auf Anhieb ohne Fehler simuliert bekommen. 2) Ich hatte oben schon mal ein ähnliches Verhalten beim Einlesen von Programmen als Textdatei. Abhilfe schaffte dabei nicht das verändern der Baudzahl sondern die Dauer von einem zum nächsten Zeichen (200 ms) sowie die Dauer von Zeile zu Zeile (5000 ms) Vielleicht hilft das ja auch hier weiter.
m.n. schrieb: > Janus M. schrieb: >> m.n. schrieb: >> >>> Wenn der Portpin brennt, ist der µC wohl schon kaputt :-( >>> >> Nein, der ist ganz neu und in Ordnung ausserdem betreib ich die LED >> immer mit Vorwiderstand. > > Du wolltest die Geschwindigkeit wissen, ich gab Dir eine kleine > Testroutine und Du antwortest mit einer leuchtenden LED, die kein > Schwein interessiert. > Hast Du überhaupt verstanden, worum es geht? Ich weiss wirklich nicht was Du noch meinst. Bin kein Hellseher. Dann musst Du Dich eben etwas präziser ausdrücken.
Janus M. schrieb: > Baudzahl sondern die Dauer von einem zum nächsten Zeichen (200 ms) sowie > die Dauer von Zeile zu Zeile (5000 ms) soll 500 ms heissen
> Wichtig ist fürs batteriegepufferte RAM, das es im Standby deselektiert > ist (/CE muss high werden) und das die Adress- und Datenleitungen > entweder glatt auf low oder glatt auf high liegen, sonst zieht das Dings > spürbaren Strom. > Ich hab das Schaltbild hier mal abgewandelt. Wie man Adress und Datenleitungen elegant auf einen definierten Zustand setzt ist mir noch unklar.
Janus M. schrieb: > Wie man Adress und > Datenleitungen elegant auf einen definierten Zustand setzt ist mir noch > unklar. Dafür wird der Rest des Boards sorgen, das im stromlosen Zustand die Leitungen auf GND zieht - die Kloeckner Moeller machts genauso. Aber aus deiner Schaltung werde ich nicht ganz schlau - /CE muss im Betrieb ja angesteuert werden, das fehlt hier. Die Jungs bei Kloeckner Moeller habens deswegen, wie ich es auch vorschlug, mit Open Collector Ansteuerung realisiert. Ist der 7438 stromlos, ist der Kollektor Ausgang auf hochohmig (Tristate) und kann deswegen von einem Pullup hochgezogen werden. Wenn du übrigens nur einen 8k RAM einsetzt (a là 6264), gibts noch eine andere Möglichkeit. Diese Bausteine haben noch einen positiven CE Eingang (CE2 auf Pin 26), der z.B. einfach mit den normalen Vcc des Boards verbunden werden könnte. Da es für die Static RAMs reicht, wenn einer der beiden CE deselektiert ist, würde das also auch funktionieren. Bei 32k RAM Kieseln gibt es dieses Signal allerdings nicht. Übrigens denke ich, das bei nicht allzu ungeschickter Programmierung die Rechenleistung des BASIC für ein Segway dicke reichen sollte. Vermutlich würde ich für den Sensor ein paar extra Routinen in Assembler hinzufügen und evtl. ein passendes BASIC Kommando. Was hier noch fehlt, ist ein programmierbarer PWM Ausgang. Das ist der Haken - im Original gibts halt als I/O nur ein paar Pins des PORT 1. Da stehe ich mit der KM SPS etwas besser da, denn Ports gibts hier bis zum Abwinken und noch einen 4-Kanal ADC und 1-Kanal DAC.
:
Bearbeitet durch User
Matthias S. schrieb: > Janus M. schrieb: >> Wie man Adress und >> Datenleitungen elegant auf einen definierten Zustand setzt ist mir noch >> unklar. > > Dafür wird der Rest des Boards sorgen, das im stromlosen Zustand die > Leitungen auf GND zieht - die Kloeckner Moeller machts genauso. > Aber aus deiner Schaltung werde ich nicht ganz schlau - /CE muss im > Betrieb ja angesteuert werden, das fehlt hier. Die Jungs bei Kloeckner > Moeller habens deswegen, wie ich es auch vorschlug, mit Open Collector > Ansteuerung realisiert. Ist der 7438 stromlos, ist der Kollektor Ausgang > auf hochohmig (Tristate) und kann deswegen von einem Pullup hochgezogen > werden. > > Wenn du übrigens nur einen 8k RAM einsetzt (a là 6264), gibts noch eine > andere Möglichkeit. Diese Bausteine haben noch einen positiven CE > Eingang (CE2 auf Pin 26), der z.B. einfach mit den normalen Vcc des > Boards verbunden werden könnte. Da es für die Static RAMs reicht, wenn > einer der beiden CE deselektiert ist, würde das also auch funktionieren. > Bei 32k RAM Kieseln gibt es dieses Signal allerdings nicht. > > Übrigens denke ich, das bei nicht allzu ungeschickter Programmierung die > Rechenleistung des BASIC für ein Segway dicke reichen sollte. Vermutlich > würde ich für den Sensor ein paar extra Routinen in Assembler hinzufügen > und evtl. ein passendes BASIC Kommando. Was hier noch fehlt, ist ein > programmierbarer PWM Ausgang. Das ist der Haken - im Original gibts halt > als I/O nur ein paar Pins des PORT 1. > Da stehe ich mit der KM SPS etwas besser da, denn Ports gibts hier bis > zum Abwinken und noch einen 4-Kanal ADC und 1-Kanal DAC. 1) Na dann ist das mit den Adress-/Datenleitungen ja gelöst 2) Ja, da hast Du recht, deshalb wurde der Entwurf überarbeitet. 3) schön zu wissen mit dem 8K RAM, möchte es allerdings möglichst universal halten. 4) Das freut mich zu hören, dass es schon mit Basic reichen könnte. 5) Programierbarer PWM Ausgang. Hm ich dachte, dass man das von einem Portpin an einen IC mit offenem Kollektor anschliesst und der dann MOSfets ansteuert. 6) mit 8 Ports kann man zumindest 2 unipolare Schrittmotoren anschliessen 7) ...oder halt die KM SPS Schaltung an dieser Stelle kopieren und anpassen für den MIDI falls das nicht reicht :-)
:
Bearbeitet durch User
Janus M. schrieb: > 7) ...oder halt die KM SPS Schaltung an dieser Stelle kopieren und > anpassen für den MIDI falls das nicht reicht :-) Eher nicht. In der SPS sind 2 Stück 8255 als Peripherie und die alten Dinger möchtest du dir nicht antun. PWM bedeutet auch, das es da ein Rechtecksignal mit steuerbarer Pulsbreite gibt, das der MCS51 erstmal nicht von sich aus erzeugen kann. Du müsstest eine Soft-PWM implementieren (am besten per Interrupt), damit du die Segway Motoren auch in der Geschwindigkeit regeln kannst. Mit einfach nur An/Aus ist es da vermutlich nicht getan.
Hallo Leute, habe jetzt das Basic auch über VUSB zum laufen gekriegt. Das Problem war die lahme Verarbeitung der Zeichen vom UART durch das Basic. Ein empfangenes Zeichen wird vom Basic gleich wieder über UART zurückgesendet, dabei vergingen bei meinem Board (24MHz) ca. 1,25ms. In der Zeit hat der Empfänger schon etliche Zeichen übersehen. Habe jetzt die Empfangsroutine umgeschrieben, daß sie die Zeichen direkt nacheinander im vorhandenen Empfangspuffer ablegt, ohne sie anzuzeigen. Dadurch kann eine Zeichenfolge mit bis zu 6µs zwischen den Zeichen erfasst werden. Das einlesen endet, nachdem ca. 66ms kein Zeichen mehr empfangen wurde. Danach holt sich das Basic die Zeichen gemütlich aus dem Puffer. Habe die Änderung auch mit der RS232 Version ausprobiert, dort funktioniert sie leider nicht. ;*************************************************************** ; ; INPUTS A CHARACTER FROM THE SYSTEM CONSOLE. ; ;*************************************************************** ; INCHAR: JNB BI,INCHAR1 ;CHECK FOR MONITOR (BUBBLE) LCALL 2060H SJMP INCH1 INCHAR1:JNB CIUB,INCHAR2 ;CHECK FOR USER LCALL 4033H SJMP INCH1 ;hier werden die Zeichen vom UART schnell (bis zu 12Zyklen = 6µs) in den Empfangspuffer ;eingelesen, erst danach holt sie das Basic einzeln aus dem Puffer. ;Timeout = 132134-Zyklen = 66,067ms (24MHz Takt) INCHAR2: cjne R0,#8,$+3 ;Zeichen im Puffer? jc VomUart ;falls nein, vom UART einlesen movx A,@r0 ;falls ja, aus dem Puffer holen sjmp INCH1 VomUart: push DPL ;Zeichen vom UART mov DPL,R0 ;in den Puffer lesen push DPL push DPH mov DPL,#80h ;Timeoutwert Aeussere Zeitschleife jnb RI,$ ;Auf 1. Zeichen endlos warten sjmp ZchnSave ;Falls Zeichen empfangen RecLoop: mov DPH,#0h ;Timeoutwert innen EpfLop: jb RI,ZchnSave ;Falls Zeichen empfangen djnz DPH,EpfLop ;Innere Timeoutschleife djnz DPL,RecLoop ;Aeussere Timeoutschleife jnb RI,RcLoE ZchnSave: mov A,SBUF ;Zeichen laden und clr RI clr ACC.7 ;Nur ASCII (7Bit) movx @r0,A ;in Puffer legen inc R0 ;Zeiger auf Next sjmp RecLoop ;Empfangsschleife wird durch Timeout beendet RcLoE: pop DPH pop DPL mov R0,DPL ;Zeiger auf Pufferanfang movx A,@r0 ;1. Zeichen laden pop DPL ;hier endet der neue Code ; INCH1: CJNE A,#13H,INCH11 SETB CNT_S INCH11: CJNE A,#11H,INCH12 ------------------------------------------------------------- Vielleicht hilft der Code jemanden, der auch Probleme mit schneller Datenübertragung und dem Basic hat. Gruß. Tom
TomA schrieb: > Ein > empfangenes Zeichen wird vom Basic gleich wieder über UART > zurückgesendet, dabei vergingen bei meinem Board (24MHz) ca. 1,25ms. In > der Zeit hat der Empfänger schon etliche Zeichen übersehen. Für das SPS Projekt habe ich den Code auch umgeschrieben, weil das Ding ja RS485 statt RS232 benutzt - also Halbduplex. Das Echo habe ich mir dabei komplett gespart und benutzte stattdessen lokales Echo am Terminal. Der Tokenizer im Basic muss nach jeder Eingabezeile auch erstmal aktiv werden und deswegen ist es sinnvoll, am Zeilenende, wie schon oben beschrieben, einen Moment zu warten.
@Tom, das muss ich auch mal ausprobieren sobald ich mit meiner Pufferbatterie fertig bin. Da, mich das umständliche Konvertieren von Hex nach Bin und umgekehrt genervt hat (DOS-Programme) habe ich zu allen kleine Batch Dateien erstellt. Die Urprogramme dürften den meisten bekannt sein. Manche sind auch schwer zu finden. Vorteil: Die Anzahl der Eingaben reduziert sich und man weiss auch ohne lange nachzuschlagen welche Parameter man einsetzen muss. Die Ausgabe erfolgt immer im selben Verzeichnis und der Pfad wird auch angezeigt. Man könnte das alles noch in eine Batch packen oder vielleicht schreibt einer bei Langeweile eine schöne Windowsshell :-))
Habe die Pufferbatterie noch ein weing überarbeitet. Bei der Akku Version führt die parallel zum Widerstand geschaltete Diode zu weniger Spannungsabfall während des Standbys. Alle Dioden sind jetzt mittels Schottky Typ realisiert.
Janus M. schrieb: > Man könnte das alles noch in eine Batch packen oder vielleicht schreibt > einer bei Langeweile eine schöne Windowsshell :-)) Das ist nicht nötig. Da man in MIDE-51 beliebige Tätigkeiten hinter den 'Burn' und 'Build' Knöpfchen zusammenbauen kann, könnte man da auch irgendwelche Konvertierungen einbasteln. Bei mir zündet 'Burn' z.B. den AVRISP MkII per STK500.exe.
http://mide-51.software.informer.com/download/ Meinst Du den? Hab das MC-51 von der Uni Kiel am Laufen. Das Terminal ist schon eingebaut und funktioniert gut. Nur mit dem Integrieren von Zusatzsoftware ist keine Möglichkeit gegeben. Wobei da schon die wichtigsten Dinge dabei sind.
:
Bearbeitet durch User
Hallo Janus, in deiner Schaltung zur Batteriepufferung kannst du dir die Diode paralell zum 390 Ohm Widerstand sparen. Wenn die Stromaufnahme aus der Batterie in Ordnung ist, dann fließt dort nur ein ganz kleiner Strom (bei mir < 1µA), so daß der Spannungsabfall am Widerstand vernachläßigbar klein ist. Ich verwende an der Stelle einen 1k Widerstand, so kann ich mit einem Voltmeter indirekt den Strom, beim laden und entladen, messen (1mV = 1µA). Als Batterie sitzt bei mir ein GoldCap mit 0,22F/5,5V und der wird im Betrieb der Schaltung wieder aufgeladen. Die 0,22F reichen bei dem 128k RAM für über eine Woche, ein 1F Kondensator für über vier Wochen Datenerhalt. Bei einem 32k RAM ist die Stromaufnahme sogar noch etwas kleiner (~0,7µA). Von Akkus bin ich wieder abgekommen, weil die bei längeren Standzeiten oft ausgelaufen sind und dabei die Platine beschädigt haben. Die Diode von +5V zur Batterie solltest du prüfen, Schottkydioden haben oft höhere Leckströme als normale Siliziumdioden. Da kann dir evtl. ein relativ hoher Strom den Akku zu schnell entladen. Gruß. Tom
Hallo Janus, ein hab ich noch! Im Handbuch einer meiner Experimentierplatinen sind ab Seite 10 die Schaltpläne zu finden, dort findest du eine bewährte Art einer Schaltung zum versorgen des RAM für Datenerhalt. Beitrag "Re: 8051 - Programm und Daten in einem 128kB Chip ohne Overlap" Beachte, daß das NAND 74HC00 von der Batterie versorgt wird, so kann es den lowaktiven CS des RAM sicher sperren. Der 74HC00 selbst benötigt im statischen Zustand einen vernachlässigbar kleinen Strom. Gruß. Tom
Peter D. schrieb: > Man könnte aber auch BASCOM nehmen und irgendeinen 8051 mit Bootloader, z.B. DS89C450 - läuft als Zweitakter mit 33MHz Auch im DIL 40 Janus M. schrieb: > Wie brauchbar ist das tatsächlich um zum Beispiel eine > Schrittmotorsteuerungen oder eine Balanciersteuerung (Sagway) damit zu > realisieren und Eine reine SW-Lösung wird Dich nicht glücklich machen. Im Segway ist ein C2000 (µC mit DSP Funktionalität) verbaut. Der hat ordentlich wumms! > Wo liegen die Hauptprobleme und Grenzen bei der Anwendung von Basic Ist meist eine Interpretersprache. Das ist eigentlich alles. Matthias S. schrieb: > Das mit /CE wird sich vermutlich dadurch erreichen lassen Janus M. schrieb: > Habe die Pufferbatterie noch ein weing überarbeitet. Die Pufferbatterie gehört an + und die Diode in die negative Leitung. Damit sind automatisch bei fehlender Betriebsspannung die Signalleitungen auf High. Gruß Jobst
Janus M. schrieb: > http://mide-51.software.informer.com/download/ Meinst Du den? Hier ist die Site des Originals: http://www.opcube.com/home.html Scroll ein wenig runter bis du auf MIDE-51 triffst.
TomA schrieb: > Hallo Janus, > > in deiner Schaltung zur Batteriepufferung kannst du dir die Diode > paralell zum 390 Ohm Widerstand sparen. Wenn die Stromaufnahme aus der > Batterie in Ordnung ist, dann fließt dort nur ein ganz kleiner Strom > (bei mir < 1µA), so daß der Spannungsabfall am Widerstand > vernachläßigbar klein ist. > > Ich verwende an der Stelle einen 1k Widerstand, so kann ich mit einem > Voltmeter indirekt den Strom, beim laden und entladen, messen (1mV = > 1µA). > > Als Batterie sitzt bei mir ein GoldCap mit 0,22F/5,5V und der wird im > Betrieb der Schaltung wieder aufgeladen. Die 0,22F reichen bei dem 128k > RAM für über eine Woche, ein 1F Kondensator für über vier Wochen > Datenerhalt. Bei einem 32k RAM ist die Stromaufnahme sogar noch etwas > kleiner (~0,7µA). > > Von Akkus bin ich wieder abgekommen, weil die bei längeren Standzeiten > oft ausgelaufen sind und dabei die Platine beschädigt haben. > > Die Diode von +5V zur Batterie solltest du prüfen, Schottkydioden haben > oft höhere Leckströme als normale Siliziumdioden. Da kann dir evtl. ein > relativ hoher Strom den Akku zu schnell entladen. > > Gruß. Tom Hallo Tom, vielen Dank für den Hinweis auch auf das Handbuch. Habs gleich mal kopiert und überflogen. Super was ich da so gesehen habe. Dürfte Stoff für lange Winterabende sein :-) 1) Zur Diode geb ich Dir grundsätzlich recht sofern alles in Ordnung ist. Die dient eher zum Schutz der Batterie vor Überstrom. Hab das auch bei einigen anderen Schaltungen so gesehen. Batterien aufladen wäre weniger prickelnd. 2) 1K Widerstand um den Strom über Spannungsabfall zu messen ist auch eine gute Idee. Bei 390 Ohm müsste es der Faktor 2.6 sein. Also 2,6 mV pro 2,6 µA 3) Ein gutes Argument, wenn man die Akkus nicht rechtzeitig wechselt. Mit dem Jumper hab ich ja noch die Wahl auch ein Batterie zu nehmen, die sind auch nicht so anfällig, sehe ich mir meinen 10 Jahre alten PC so an. Vielleicht kann man die Schaltung auch mit Goldcap erweitern mittels Jumper 4) Das ist ein gewisser Unsicherheitsfaktor. Hab jetzt mal eine so eingebaut. Wie man die so testen kann um eine brauchbare Aussage zu erhalten ist mir praktisch nicht so ganz klar. Hab nur ein Wald und Wiesen Messgerät. Teste das einfach in der Schaltung selbst. Wenn nach einem Monat oder noch kürzerer Zeit die Batterie/Akku leer ist wars dann wohl die Falsche 5) Upps, das hiesse, dass ich den Vcc Anschluss an Plus vom NAND 74HC00 auch noch verbinden müsste. Danke für den Hinweis
Jobst M. schrieb: > Janus M. schrieb: >> Habe die Pufferbatterie noch ein wenig überarbeitet. > > Die Pufferbatterie gehört an + und die Diode in die negative Leitung. > Damit sind automatisch bei fehlender Betriebsspannung die > Signalleitungen auf High. > > > Gruß > > Jobst Hallo Jobst, meinst Du etwa so?: - IC Minus ----------- - Diode ___ GND I 74HC00 I I - I I I I--------I- I---------------- I I I - I ___ GND I I - I I I I I------------------------------I I I I----- ----------- I I + IC Plus
:
Bearbeitet durch User
Janus M. schrieb: > Hallo Jobst, meinst Du etwa so?: > > - IC Minus > ----------- - Diode _ GND > I 74HC00 I I - I I > I I--------I- I---------------- > I I I - I _ GND > I I - I I I > I I------------------------------I I I I----- > ----------- I I > + IC Plus Moin! Nein, die Batterie sollte schon parallel zum RAM sitzen. Wieso möchtest Du den 74HC00 buffern? Nur das SRAM sollte doch gebuffert werden!?
1 | ____________ |
2 | (+5V)----------------------+-----------| | |
3 | | | | |
4 | (DATA/ADRESS/CS/RD/WR)-----|-----------| SRAM | |
5 | | | | |
6 | + _ | | |
7 | _____ | | |
8 | _ | | |
9 | _____ | | |
10 | - | | | |
11 | | D1 | | |
12 | '--|<|--, | | |
13 | | | | |
14 | D2 | | | |
15 | (GND)-------------------------|<|--+---|__________| |
Damit sind automatisch alle Datenleitungen bei Ausfall der 5V auf High! Wenn es sich um einen Akku handelt, kann parallel zu D1 ein Widerstand zum laden gelegt werden. (Bzw. diese durch den Widerstand ersetzt werden) Gruß Jobst
Jobst M. schrieb: > Moin! > > Nein, die Batterie sollte schon parallel zum RAM sitzen. > Wieso möchtest Du den 74HC00 buffern? Nur das SRAM sollte doch gebuffert > werden!? Ups, da habe ich Dich völlig missverstanden. Danke so leuchtet das auch ein. Ich habe die Sache nach dem bekannten Schaltbild wie hier jetzt aufgebaut. Alle Leitungen sind auf high bei einer neuen 3 V Batterie Messe ich ca. 3,55 Volt. Habe ausprobiert ob sich was tut. PC an Terminal aufgerufen und Primitivprogramm eingegeben: 10 Print Free Dann zog ich den Stecker und wartete 2 Minuten. Danach wieder Stecker rein und am Terminal rumgetippt. Kam leider nur Buchstabensalat. Hab dann wieder Reset gedrückt. Programm war natürlich weg. Irgendwas ist noch faul. Vermute jetzt erstmal Lötfehler und prüfe das "Werk" eingehend optisch.
:
Bearbeitet durch User
Lötfehler kann ich keine finden. :-( Pin 20 (CE) vom RAM liegt bei Batteriebetrieb auf ca 1.63 V mit Netzbetrieb bei ca. 3V Ab welchem Pegel ist denn High zu verstehen?
:
Bearbeitet durch User
Wie hoch ist denn die Betriebsspannung? (in beiden Fällen) Welche Spannung hast Du an GND vom RAM? (Auch in beiden Fällen)
Janus M. schrieb: > Dann zog ich den Stecker und wartete 2 Minuten. Danach wieder Stecker > rein und am Terminal rumgetippt. Kam leider nur Buchstabensalat. Nein, so funktioniert das nicht. Schau dir im Basic Handbuch mal das PROG Kommando an mit seinen verschiedenen Funktionen, und auch XFER. Das Basic 1.31 erwartet den NVRAM ab Adresse 8000h, der RAM auf 0000h-7FFFh wird beim Starten immer getestet und dabei gelöscht. Normalerweise ist bei den Jungs ab Adresse 8000h ein EEPROM, aber mit einem batteriegepufferten RAM sollten die Kommandos auch gehen. Bei der KM SPS habe ich die Routinen stark gekürzt, um Platz zu schaffen, denn das Testen und nochmal Schreiben braucht man bei RAM ja nicht zu machen.
Matthias S. schrieb: > Janus M. schrieb: >> Dann zog ich den Stecker und wartete 2 Minuten. Danach wieder Stecker >> rein und am Terminal rumgetippt. Kam leider nur Buchstabensalat. > > Nein, so funktioniert das nicht. Schau dir im Basic Handbuch mal das > PROG Kommando an mit seinen verschiedenen Funktionen, und auch XFER. > > Das Basic 1.31 erwartet den NVRAM ab Adresse 8000h, der RAM auf > 0000h-7FFFh wird beim Starten immer getestet und dabei gelöscht. > Normalerweise ist bei den Jungs ab Adresse 8000h ein EEPROM, aber mit > einem batteriegepufferten RAM sollten die Kommandos auch gehen. > Bei der KM SPS habe ich die Routinen stark gekürzt, um Platz zu > schaffen, denn das Testen und nochmal Schreiben braucht man bei RAM ja > nicht zu machen. Hm, dann scheint es ja ein reines Softwareproblem zu sein. Gibt es nicht irgendwo ein allgemeines Testprogramm?
Jobst M. schrieb: > Wie hoch ist denn die Betriebsspannung? (in beiden Fällen) > Welche Spannung hast Du an GND vom RAM? (Auch in beiden Fällen) Die Betriebsspannung: Batterie ca. 3.4 V , mit Netzteil ca. 6.03 V Spannung RAM: Batterie ca. 3.35 V , Netzteil ca. 5.70 V
Janus M. schrieb: > Gibt es nicht irgendwo ein allgemeines Testprogramm? Mit ist nicht klar, was du damit meinst. Du schreibst ein kleines Basic Programm und schickst es zum NVRAM mit 'PROG'. Basic antwortet mit der Programmnummer, denn es kann mehrere Programme im NVRAM halten. Nun schaltest du die Kiste ab. Nach einen Neustart holst du dir das Programm zurück mit 'XFER <Programmnummer>' und kannst es wieder bearbeiten. Du kannst auch mit 'ROM<Programmnummer>' das Programm aktivieren und mit 'RUN' starten. 'RAM' führt dich wieder zum normalen Mode. Wenn du ein Programm mit 'PROG2' in den NVRAM schickst, wird es nach einem Powerdown und Powerup automatisch gestartet, das ist das, was ich für die SPS meistens benutze. Weiteres dazu im Basic Handbuch Kapitel 3 - Seite 20 ff.
:
Bearbeitet durch User
Matthias S. schrieb: > Janus M. schrieb: >> Gibt es nicht irgendwo ein allgemeines Testprogramm? > > Mit ist nicht klar, was du damit meinst. Du schreibst ein kleines Basic > Programm und schickst es zum NVRAM mit 'PROG'. Basic antwortet mit der > Programmnummer, denn es kann mehrere Programme im NVRAM halten. > > Nun schaltest du die Kiste ab. Nach einen Neustart holst du dir das > Programm zurück mit 'XFER <Programmnummer>' und kannst es wieder > bearbeiten. > Du kannst auch mit 'ROM<Programmnummer>' das Programm aktivieren und mit > 'RUN' starten. > 'RAM' führt dich wieder zum normalen Mode. > > Wenn du ein Programm mit 'PROG2' in den NVRAM schickst, wird es nach > einem Powerdown und Powerup automatisch gestartet, das ist das, was ich > für die SPS meistens benutze. Weiteres dazu im Basic Handbuch Kapitel 3 > - Seite 20 ff. Ich meinte damit nur wie man die Funktion der Pufferbatterie testen kann Wenn ich das Teil abschalte gibts nur diesen Buchstabensalat. Du meinst aber dann trotzem XFER <Programmnummer> oder ROM<Programmnummer> eingeben. Das habe ich noch nicht versucht. Fakt ist wohl nach Deiner Aussage das mit an aus und wieder an das allein nicht getan ist um an die Inhalte zu kommen.
Janus M. schrieb: > mit Netzteil ca. 6.03 V Janus M. schrieb: > Netzteil ca. 5.70 V Büschn hoch ... Irgendwo ist da 'n Wurm ... Mach doch mal Fotos ... Gruß Jobst
Janus M. schrieb: > Fakt ist wohl nach Deiner Aussage das mit an aus und wieder an das > allein nicht getan ist um an die Inhalte zu kommen. Genau. Der 'Arbeitsspeicher' (also der untere RAM und der interne des 8052) wird beim Intel Basic nach jeden Power Up initialisiert und gelöscht. Der NV Speicher (in deinem Fall der obere RAM) allerdings bleibt erhalten, wenn die Batteriepufferung funktioniert. Du kannst im NV Speicher also so viele Programme halten, wie da rein passen und mit ROM<Programmnummer> dir eines davon auswählen und dann mit 'RUN' starten. Beachte in den Kommentaren zum Basic 1.31, das die 'FPROG' Funktionen nicht mehr vorhanden sind, diese wurden gestrichen und es gibt nur noch die 'PROG' Funktionen. Da es EPROMs so gut wie nicht mehr gibt, ist das allerdings auch kein Verlust. Janus M. schrieb: > Wenn ich das Teil abschalte gibts nur diesen Buchstabensalat. Mein Eindruck war, das die Jungs in Version 1.31 mit der Autobaud Routine irgendwas durcheinander gebracht haben (was evtl. auch mit den Support für die hyperschnellen Dallas MC zu tun hat). Ich überspringe das Zeug im SPS Basic deswegen und wähle erstmal eine feste Baudrate.
:
Bearbeitet durch User
Hallo Leute, habe jetzt mal das Layout zur Platine (zum Handbuch) hier eingestellt. Ist einseitig und deshalb einfach selbst herzustellen. Beitrag "Layout für MCS51 Experimentierboard" Werde jetzt eine Platine für Basic51 umstricken und die Änderungen dort auch veröffentlichen. Gruß. Tom
"Mein Eindruck war, das die Jungs in Version 1.31 mit der Autobaud Routine irgendwas durcheinander gebracht haben (was evtl. auch mit den Support für die hyperschnellen Dallas MC zu tun hat). Ich überspringe das Zeug im SPS Basic deswegen und wähle erstmal eine feste Baudrate." Habe 1.2 Basic mehr geht derzeit nicht. Da wäre die Routine nützlich wie Du das umgangen hast.
:
Bearbeitet durch User
Janus M. schrieb: > Da wäre die Routine nützlich wie Du das umgangen hast. Der geänderte Source Code ist ja im Projekt Thread enthalten: Beitrag "Spaß mit Kloeckner-Moeller PS3 in BASIC(?)" Änderungen sind mit 'PS3' markiert. Der entsprechende Eintrag ist in Zeile 1306:
1 | ; PS3 do not tamper with the baud rate |
2 | ; LCALL RCL |
Die einzige Änderung besteht also aus der Kommentierung vor 'LCALL RCL' :-) Beachte auch, das ich in der Routine 'initps3' einmal RCAP2, T2CON und SCON setze, das passiert vor der o.a. Zeile. Den 8255 Kram dadrin brauchst du natürlich nicht, ebenso wenig das Gewurschtel auf P1. Das ist alles der Hardware der PS3 geschuldet und dem RS485 Gedöns.
:
Bearbeitet durch User
Jobst M. schrieb: > Janus M. schrieb: >> mit Netzteil ca. 6.03 V > > Janus M. schrieb: >> Netzteil ca. 5.70 V > > Büschn hoch ... > Irgendwo ist da 'n Wurm ... > Mach doch mal Fotos ... > > > Gruß > > Jobst Das funktioniert aber schon sehr lange so. Betrieben wird das über einen handelsüblichen Trafo der 9 Volt einspeist. Ich kann damit alles ausführen. Nur eben die Zusatzschaltung mit der Batterie ist hinzugekommen Der Schaltplan hat sich nicht geändert. Zugegeben, der 7805 müsste theoretisch auf 5 Volt stabilisieren. Gemessen habe ich direkt an Out gegen Masse und wie von Dir beschrieben direkt an den Beinchen des RAMs. Mal mit Netz und mal ohne Netz. Messgerät zeigte die genannten Werte an, ist so ein 20 Euroteil Digitalteil von Voltcraft. Da ich nichts verkehrtes im Schaltungsaufbau bisher finde, nehme ich zunächst an, dass es tatsächlich an der Software liegt wie von Matthias beschrieben. Wie ist stellst Du denn fest ob die Batterie in der Schaltung als Puffer tatsächlich arbeitet? Kann man bei Dir die Versorgungsspannung einfach so abschalten und dann sofort beim Anschalten den RAM Inhalt ansehen? Nach Matthias` Info müsste doch bei Dir ähnliches Verhalten vorhanden sein?
:
Bearbeitet durch User
Matthias S. schrieb: > Janus M. schrieb: >> Da wäre die Routine nützlich wie Du das umgangen hast. > > Der geänderte Source Code ist ja im Projekt Thread enthalten: > Beitrag "Spaß mit Kloeckner-Moeller PS3 in BASIC(?)" > > Änderungen sind mit 'PS3' markiert. Der entsprechende Eintrag ist in > Zeile 1306: >
1 | > ; PS3 do not tamper with the baud rate |
2 | > ; LCALL RCL |
3 | > |
> Die einzige Änderung besteht also aus der Kommentierung vor 'LCALL RCL' > :-) > > Beachte auch, das ich in der Routine 'initps3' einmal RCAP2, T2CON und > SCON setze, das passiert vor der o.a. Zeile. Den 8255 Kram dadrin > brauchst du natürlich nicht, ebenso wenig das Gewurschtel auf P1. Das > ist alles der Hardware der PS3 geschuldet und dem RS485 Gedöns. Heisst, ich müsste die Subroutine noch so abändern/kürzen? initps3: ; --------------------------- ; Serial setup MOV RCAPH2,#0FEH MOV RCAPL2,#0C7H MOV T2CON,#034H ; SETB T2CON.2 MOV SCON,#050H RET
Jetzt hab ich folgendes Problemchen. Basic 1.2a ,das bei mir im Eprom werkelt liegt als BIN Datei vor die ich mit D51 Dissassembler in A51 umgewandelt habe. Frage ist jetzt wo da die Anpassungen gemacht werden müssen? Zum Vergleich Klöckner Möller Modul https://www.mikrocontroller.net/attachment/257806/version_1p3_assembler.asm
Janus M. schrieb: > Frage ist jetzt wo da die > Anpassungen gemacht werden müssen? Gute Frage. Aber warum gehst du nicht vom Quellcode aus? Das mit dem Disassembler ist ja völlig unbrauchbar. Mein Rat wäre, dir das offizielle Assemblerfile von 1.31 vorzunehmen und lauffähig zu machen. Das sollte ohne Probleme zu machen sein. Dann kannst du, wie ich auch, dir daraus über kurz oder lang deine persönliche Version machen. Ohne Quellcode ist Intel Basic sehr unübersichtlich, weil die Jungs doch mit vielen Tricks arbeiten.
:
Bearbeitet durch User
Matthias S. schrieb: > Janus M. schrieb: >> Frage ist jetzt wo da die >> Anpassungen gemacht werden müssen? > > Gute Frage. Aber warum gehst du nicht vom Quellcode aus? Das mit dem > Disassembler ist ja völlig unbrauchbar. Mein Rat wäre, dir das > offizielle Assemblerfile von 1.31 vorzunehmen und lauffähig zu machen. > Das sollte ohne Probleme zu machen sein. > Dann kannst du, wie ich auch, dir daraus über kurz oder lang deine > persönliche Version machen. > Ohne Quellcode ist Intel Basic sehr unübersichtlich, weil die Jungs doch > mit vielen Tricks arbeiten. Das Thema hatten wir ziemlich am Anfang des Threats. Ich müsste hier Basic anpassen und meine Kenntnisse sind da eher beschränkt. Das kann zumindest dauern. Vor allem weiss ich nicht wo ich da überhaupt ansetzen kann.
:
Bearbeitet durch User
Janus M. schrieb: > Anfang des Threats Naja, so eine Bedrohung ist das ja nicht :-) (Threat != Thread) Janus M. schrieb: > Das kann > zumindest dauern. Du musst ja nicht gestern fertig werden. Das ganze ist eh eine Übung für den MCS51 und du kannst dir Zeit lassen. Die grundsätzliche Funktion des Boards hast du jetzt ja sichergestellt und nun wirds Zeit, dir was zu bauen, das du bis zur letzten Schraube warten und verstehen kannst. Dazu ist ein kommentiertes Assemblerlisting gut geeignet.
Hallo Janus, habe das Basic in Version 1.32 an meine Platine angepaßt. Es läuft jetzt mit einer festen Baudrate von 9600. Da ich sonst noch nicht viel geändert habe, könnte das auch mit deiner Platine funktionieren. Das Basic mit Quelltext, Hexfile und Handbuch findest du hier: Beitrag "Re: Layout für MCS51 Experimentierboard" Viel Spaß und Erfolg. Tom
TomA schrieb: > Hallo Janus, > > habe das Basic in Version 1.32 an meine Platine angepaßt. Es läuft jetzt > mit einer festen Baudrate von 9600. Da ich sonst noch nicht viel > geändert habe, könnte das auch mit deiner Platine funktionieren. > > Das Basic mit Quelltext, Hexfile und Handbuch findest du hier: > > Beitrag "Re: Layout für MCS51 Experimentierboard" > > Viel Spaß und Erfolg. Tom Danke für das Listing. Dein MCS Board ist ja wirklich schön optimiert. Mit so wenig Drahtbrücken, einseitig und noch eine RS232 Schnittstelle drauf ist schon ein kleines Kunstwerk. Ich musste bei meinem die Schnittstelle quasi fliegend verlöten und auf den Connector aufsetzen. Da ja beinahe kaum Unterschiede sind bis auf den Prozessor probierw ich mal ob es bei mir auch ohne Änderung geht. Vielleicht geht das dann auch mit dem Pufferakku/Batterie. @Matthias Assembler ist ja nun nicht grade meine Stärke. Gibt ja Leute und die so ein "Progrämmchen" runterschreiben wie andere Ihre Memoiren :-) Bin ja schon Froh das das Ding überhaupt nochmal ohne Atari zum Leben erweckt werden konnte.
Den Dissassembler hab ich mit ner Batch nochmals vereinfacht. Reicht jetzt nur den Dateinamen einzugeben und es werden eine *.A51 und *.LST Datei gleichzeitig erstellt. Die LST Datei ist mit ASCII
Die Batterie ist jetzt bei ca. 3.23 Volt vor 5 Tagen lag der Wert bei ca. 3.4 Volt. Ist das akzeptabel? @Tom Welchen Simulator nutzt man für das Programm? Meiner wirft 14 Fehlermeldungen aus. Eine Trockenübung zuvor wäre ganz nützlich sonst muss ich jedes mal das EPROM wieder löschen. Dann noch eine Frage zum Quarz. Ich nutze 2 einen 12 MHz und einen 11,0592 MHz je nach dem welche Anwendung gefragt ist. Gibt es da eine brauchbare Lösung wie man das auf einer Platine darstellen kann. Im Augenblick tausche ich die Quarze einfach aus. Die Beinchen werden in einen Connectoranschluss gesteckt.
:
Bearbeitet durch User
Janus M. schrieb: > 2015-11-03_232803.jpg Die Fehlermeldung rührt daher, das du in der Intel Notation der Hexzahl eine 0 (null) voranstellen musst, wenn die Hexzahl mit einem Buchstaben beginnt, also nicht
1 | T2CON EQU 0xC8; |
sondern
1 | T2CON EQU 0x0C8; |
dann klappts. Janus M. schrieb: > Gibt es da eine > brauchbare Lösung wie man das auf einer Platine darstellen kann. Du könntest einen 2-poligen Sockel ins Schaltbild einsetzen.
:
Bearbeitet durch User
Janus M. schrieb: > Das geht leider auch nicht :-( (siehe Bildanhang) Mein Fehler, die Notation muss so aussehen:
1 | T2CON EQU 0C8H ; This three lines are necessary for MS-DOS freeware |
2 | TL2 EQU 0CCH ; MCS-51 Family Cross Assembler ASEM-51 V1.2 |
3 | TH2 EQU 0CDH ; from W.W. Heinz (e-mail: ww@andiunx.m.isar.de) |
Das ist die echte Intel Syntax.
Danke, das sieht schon besser aus :-) Jetzt sind es nur noch 21 Fehler Zeile 1383: symbol already defined ...sagt mir wenig die Syntax ist richtig.
in Zeile 1337 steht: BG2: DJNZ R0,$ ;FOUR CLOCKS, IN LOOP CALL DEC3211 ;NINE CLOCKS MOV R0,#2 ;ONE CLOCK JNB RXD,BG2 ;TWO CLOCKS, LOOP UNTIL DONE JB RXD,$ ;WAIT FOR STOP CHARACTER TO END JNB RXD,$ In Zeile 1383: BG2: MOV T2CON,#34h ;configure Timer2 as baudrate generator Eigentlich müssten diesen Fehler noch andere haben. Hm, streichen von 1383 und da einfügen? BG2: MOV T2CON,#34h ;configure Timer2 as baudrate generator DJNZ R0,$ ;FOUR CLOCKS, IN LOOP CALL DEC3211 ;NINE CLOCKS MOV R0,#2 ;ONE CLOCK JNB RXD,BG2 ;TWO CLOCKS, LOOP UNTIL DONE JB RXD,$ ;WAIT FOR STOP CHARACTER TO END JNB RXD,$
...und dann noch 20 Fehler mit IS52Basic.a51(2827): address out of range wie z.B hier: SLET0: ACALL SLET1 AJMP POPAS ;COPY EXPRESSION TO VARIABLE
Hallo! im originalquelltext "version_1p3_assembler.asm" steht vor allen BG2 Labels ein Semikolon. Die sind also rausge-REMt. Du mußt schon wissen, welche Semikolons Du entfernst! Fehlermeldung "address out of range" kommt bei Überschreitung der 2K-Grenze. Nehme dort LCALL und LJMP!
Route 6. schrieb: > Hallo! > im originalquelltext "version_1p3_assembler.asm" steht vor allen BG2 > Labels ein Semikolon. Die sind also rausge-REMt. Du mußt schon wissen, > welche Semikolons Du entfernst! > > Fehlermeldung "address out of range" kommt bei Überschreitung der > 2K-Grenze. Nehme dort LCALL und LJMP! Die Semikolons hab ich nicht gelöscht. Hab einzig die Datei unverändert in den Simulator geworfen um zu sehen was passiert. Im Logikablauf werde ich ohne tiefere Kenntnis keine Änderung vornehmen. Danke für Deine sehr hilfreiche Antwort. Dann probiere ich es mal weiter :-) Grossartig, keine Fehlermeldung mehr und der Simulator funktioniert jetzt (siehe Bild).
:
Bearbeitet durch User
Janus M. schrieb: > Anbei noch die Datei, Basis ist die von TomA Welchen Prozessor setzt Du ein? Davon ist die Verwendung des Programmteils mit dem Label "BG2" abhängig - und ob du eine feste Baudrate oder eine automatische Erkennung willst.
Route 6. schrieb: > Janus M. schrieb: >> Anbei noch die Datei, Basis ist die von TomA > > Welchen Prozessor setzt Du ein? Davon ist die Verwendung des > Programmteils mit dem Label "BG2" abhängig - und ob du eine feste > Baudrate oder eine automatische Erkennung willst. 1) 8031 2) 9600 Baud 3) automatisch
Janus M. schrieb: > 2) 9600 Baud > > 3) automatisch Ja was denn nun? Schwanger und Jungfrau geht nicht gleichzeitig. (zumindest in neuerer Zeit nicht :-)
Route 6. schrieb: > 1) 8031 > > Geht mit dem Quellcode nicht! 9600 Baud eventuell auf Automatik umstellbar wenn es damit geht. Hm, da waren die Meinungen anders. Natürlich ist kein 2ter Timer im 8031 aber vielleicht hab ich TomA auch missverstanden. Er schrieb: "Hallo Janus, habe das Basic in Version 1.32 an meine Platine angepaßt. Es läuft jetzt mit einer festen Baudrate von 9600. Da ich sonst noch nicht viel geändert habe, könnte das auch mit deiner Platine funktionieren. Das Basic mit Quelltext, Hexfile und Handbuch findest du hier: Beitrag "Re: Layout für MCS51 Experimentierboard" Viel Spaß und Erfolg. Tom"
Janus M. schrieb: > 9600 Baud eventuell auf Automatik umstellbar wenn es damit geht. Dein Quellcode nutzt den Timer2, und der ist im 8031 nicht vorhanden. Auch die Autobaud-Funktion arbeitet mit dem Timer2. Weiterhin fehlen Dir 128 Bytes interner RAM, der 8031 hat nur 128, Basic braucht aber 256!
:
Bearbeitet durch User
Route 6. schrieb: > Janus M. schrieb: >> 9600 Baud eventuell auf Automatik umstellbar wenn es damit geht. > > Dein Quellcode nutzt den Timer2, und der ist im 8031 nicht vorhanden. > Auch die Autobaud-Funktion arbeitet mit dem Timer2. > > Weiterhin fehlen Dir 128 Bytes interner RAM, der 8031 hat nur 128, Basic > braucht aber 256! TomA hat den 89S52 eingesetzt http://www.atmel.com/images/doc1919.pdf Die Pinbelegung ist identisch. Sollte mal zu Conrad und mir einen kaufen. :-)
Janus M. schrieb: > TomA hat den 89S52 eingesetzt > Sollte mal zu Conrad und mir einen kaufen. :-) Dann solltest Du gleich einen 89S53 nehmen. Der hat 12K internen Flash und so passen noch einige BASIC-Erweiterungen rein.
:
Bearbeitet durch User
Route 6. schrieb: > Janus M. schrieb: >> TomA hat den 89S52 eingesetzt >> Sollte mal zu Conrad und mir einen > kaufen. :-) > > Dann solltest Du gleich einen 89S53 nehmen. Der hat 12K internen Flash > und so passen noch einige BASIC-Erweiterungen rein. Conrad hat mal wieder nix wie üblich. Muss wieder in der Bucht oder woanders schauen. Reicht eigentlich der blosse Austausch gegen den 89er oder bin ich gezwungen den noch zu programmieren. Schliesslich brauche ich ja nur die Timer und ein grösseres internes Ram und das wars dann schon. Alten Chip raus neuen Chip rein, Basic von TomA ins 27256 EPROM gebrannt und fertig. Finde leider den Schaltplan von TomA nicht oder gibts da nur den im Handbuch und der Rest ist "Freihand Kunst"?
Janus M. schrieb: > Basic von TomA ins 27256 EPROM gebrannt > und fertig. Dann nimm einfach irgend einen 803*2*. Davon habe ich ein Bündel im Keller für den Elektronikschrott gesammelt. Die 89C52 89C53 müssen zunächst per Software (z.B. PonyProg, AVR_Dude...) ge Flash'ed werden. Das ist viel besser für Deine BASIC-Verwendung, als einen externen EPROM einzubinden. (kann in der Schaltung umprogrammiert werden) Jedes Detail muß man aus Deiner Nase ziehen. Wenn ich endlich wüsste, wie Deine Hardware aussieht, und was Du vor hast, dann könnte ich Dir eine Hilfe anbieten: einen EPROM brennen, eine HEX/BIN-Datei schicken oder sogar oder einen passenden Controller flashen. Also: Butter bei die Fische oder mach es selbst!
Route 6. schrieb: > Janus M. schrieb: >> Basic von TomA ins 27256 EPROM gebrannt >> und fertig. > > Dann nimm einfach irgend einen 803*2*. Davon habe ich ein Bündel im > Keller für den Elektronikschrott gesammelt. > > > Jedes Detail muß man aus Deiner Nase ziehen. > Wenn ich endlich wüsste, wie Deine Hardware aussieht, und was Du vor > hast, dann könnte ich Dir eine Hilfe anbieten: einen EPROM brennen, eine > HEX/BIN-Datei schicken oder sogar oder einen passenden Controller > flashen. > > Also: Butter bei die Fische oder mach es selbst! Upps, reicht das denn nicht? Zur Vorgeschichte noch ein paar Worte. Vor kurzem habe ich mein altes Midi 8032 System wiedergefunden was damals sehr ausführlich in ST Computer Magazin beschrieben wurde und von J. Piscol entwickelt wurde. Damit konnte man sogar Den Controller über einen kleinen Lautsprecher Wilhelm Busch zitieren lassen. Unglaublich dass man gesprochene Worte in 32 KB einpflanzen kann. Auch Morsen und eine Motorsteuerung war dabei. Da der Atari von mir immer noch nicht abgeraucht war konnte ich das erst kürzlich nochmal eindrucksvoll testen. wegschmeissen wollte ich das Teil nicht da ich alles selbst hergestellt habe (Platine ätzen, auflöten) Nun dachte ich mir, warum das nicht mal etwas aufpeppen und versuchen dem Ding Basic einzupflanzen falls das überhaupt möglich ist und vielleicht noch versuchen von der Midi Schnittstelle wegzukommen um das Ding an einem PC zu betreiben? Durch die grosse Hilfe von Matthias und TomA hatte lies sich das mittlerweile mit ein paar Änderungen umsetzen. Das es derartig einfach war hätte ich selbst nicht geglaubt. Mit der Platine bin ich jetzt in der Lage sowohl am Atari wie auch am PC zu arbeiten. Ein paar Jumper umgesteckt und schon alles erledigt. Auch alte EPROMs kan ich von 8KB bis 32KB je nach belieben einsetzen. Mittels einfachen Austausch der Quarze (12 Mhz oder 11,0592 MHz) ist das dann kein Hexenwerk mehr. Sorry, wenn manchen das heute zu lahm ist mir reicht es völlig...zunächst mal :-) Dann kam mir die Idee, warum nicht mal eine Pufferbatterie wie bei anderen Systemen zu versuchen. Auch das ist jetzt soweit fertig nur testen kann ich das wohl nur mit einem anderen Baustein. Weiterhin hab ich mir einen MAX232 so zurechtgebogen, dass er einfach auf den Connector aufgesteckt werden kann und mit einem Terminal kommunizieren kann. Natürlich sind hier auch noch viele Möglichkeiten drin, wie z.B. Blauzahn oder direkt eine USB Schnittstelle statt eine RS232. Vielleicht mach ich das auch noch, wenn mir danach ist. All das kann man natürlich so auch kaufen. Schönes Platinchen in SMD recht billig. Aber darum geht es mir eben nicht. Selbst ist der Bastler :-) Hier noch mal die wichtigsten Beiträge aus meiner Sicht. Hardware: Beitrag "Re: Basic für 80C31" Basic: Beitrag "Re: Basic für 80C31" Ziele: Beitrag "Re: Basic für 80C31" Meine Nase wird aber dabei aber immer grösser :-) Der Threat ist halt schon lang geworden. Ich entwickle das so nach und nach stressfrei. Ist ja kein kommerzielles Projekt mit festem Zeitplan und Lastenheft oder ist das hier Pflicht? Manche Ideen kommen dann auch nach und nach durch weitere Beiträge und stöbern im WWW. Grundsätzlich will ich meine vorhandene Platine natürlich solange ausnutzen bis es nicht mehr geht und einfach auch ein wenig probieren. Basic funktioniert in der einfachen Form bereits und das Basic von TomA benötigt einen anderen Controller. Auch die Pufferbatterie kann in der Funktionsweise nur mit einem anderen Basic als das bisherige genau geprüft werden. > Die 89C52 89C53 müssen zunächst per Software (z.B. PonyProg, > AVR_Dude...) > ge Flash'ed werden. Aber wenn es erst auch ohne flashen geht nur durch blosses Ersetzen wäre das für mich ausreichend. Mir ist schon klar das man alles noch besser machen kann. Das ist viel besser für Deine BASIC-Verwendung, als > einen externen EPROM einzubinden. (kann in der Schaltung umprogrammiert > werden) Nur ich hab das EPROM halt und will es auch nutzen. Letztlich könnte ich mir auch ein modernes System im Handel kaufen wo fast alles integriert ist, nur der Lerneffekt ist so viel grösser. Mir sind eben die heutigen Bausteine einfach zu hoch integriert da sieht man leider nichts mehr, alles nur noch in einem Baustein mit zig Funktionen zusammengefasst. So, die Butter ist jetzt hoffentlich angerichtet :-)
:
Bearbeitet durch User
Der eigentliche Witz am 8052AH Basic war eigentlich genau das - ein MC mit (damals maskenprogrammierten) Basic, der mit minimaler externer Beschaltung, die im simplesten Fall aus einem einzigen 2k RAM mit 373/374 Latch besteht, ein vollwertiges System darstellt. Das schöne an dem eigentlich uralten Basic ist heute, das es MC gibt, die jeder mit einfachen Mitteln mit dem Basic flashen kann und dabei ein interaktives System mit vergleichsweise guter Rechenleistung, Gleitkommapaket und SPS vergleichbaren Fähigkeiten erhält - zu einem MC Preis von gerade mal 1,40 EUR, wenn man von Frau Reichelts Preisen ausgeht. Es ist praktisch sinnlos, gerade am MC zu sparen und auf Teufel komm raus das ganze in einen ungeeigneten 8051/8031 zu packen, denn der Witz ist ja gerade der 8052. Man verliert mit einem 8031 die beeindruckendsten Eigenschaften von Intel Basic. Mein Vorschlag wäre, du kaufst dir einen Atmel AVRISP MkII als zukunftssicheren Programmer und baust dir einmalig einen Programmieradapter für die 40-pol DIP, der dann auch für die Mega8515 und 8535 passt,sowie ein paar Stück AT89S52. Übrigens kann ich die AT89S8253 nicht empfehlen. Erstens lassen ausgerechnet die sich nicht mit dem AVRISP programmieren und zweitens haben sie ein paar Bugs, die einige der Features unnutzbar lassen, wie den internen EEPROM. Mir ist es z.B. in stundenlangen Versuchen damals nicht gelungen, diesen EEPROM zu nutzen - ich bin dann wieder zum problemlosen 89S52 mit externem 93C46 EEPROM gewechselt, als ich meinen Steuerechner für den Bassverstärker baute. Die AT89S8252 kenne ich nicht. Ich habe entweder meine Programme in den 89S52 reinbekommen oder gleich einen z.B. AVR benutzt. Als kleines Schmankerl habe ich mal meinen universellen Monitor für den 8052 angehängt. Damit kann man recht gut unbekannte Systeme durchklappern (so habe ich die SPS ausgespäht) und man kann sich anschauen, wie z.B. so ein Kommandointerpreter funktioniert und erweitert werden kann. Das Dings hat sogar einen kleinen Dissassembler drin, sowie eine 'Online' Hilfe.
:
Bearbeitet durch User
"Mein Vorschlag wäre, du kaufst dir einen Atmel AVRISP MkII als zukunftssicheren Programmer und baust dir einmalig einen Programmieradapter für die 40-pol DIP, der dann auch für die Mega8515 und 8535 passt,sowie ein paar Stück AT89S52." Kennst Du zufällig einen guten Shop? "Als kleines Schmankerl habe ich mal meinen universellen Monitor für den 8052 angehängt." Cool :-)
Janus M. schrieb: > Kennst Du zufällig einen guten Shop? Am günstigsten scheint er derzeit bei Pollin zu sein: http://www.pollin.de/shop/dt/Mzk3OTgxOTk-/Bausaetze_Module/Module/Programmer_ATMEL_AVR_ISP_MKII.html Leider haben die Bayern bis auf den uralten 89C4051 derzeit keine MCS-51 MC im Programm.
Gibt es ein Beispiel für so einen Programmieradapter für die 40-pol DIP?
:
Bearbeitet durch User
Janus M. schrieb: >> Leider haben die Bayern bis auf den uralten 89C4051 derzeit keine MCS-51 >> MC im Programm. > > Das ist mir jetzt nicht so ganz klar was damit gemeint ist. Ist das der > Adapter? Nö, das war nur so gedacht, das man gleich ein paar MC mitbestellen könnte. Janus M. schrieb: > Gibt es ein Beispiel für so einen Programmieradapter für die 40-pol DIP? Ja, liegt hier auf dem Tisch. Ist aber eigentlich nur 'ne 40-pol Textool Fassung mit Quarz und den Kondensatoren für diesen, ein Elko zum Abblocken unten dran und ein Molexkabel mit 7-pol Stecker, das auf meine universelle Adapterplatine geht. Ich habe dir mal ein Foto angehängt. Rechts der AVRISP, in der Mitte die Adapterplatine, die auch gleich einen 8-pol Sockel für Tiny13/25 etc. trägt, einen Quarzoszillator und einen Schalter für die Versorgung der MC und links die Textoolfassung mit Quarz und Elko. Die Adapterplatine speise ich aus USB. Sorry für die Sch**$$ Bildqualität, aber hier ist im Moment richtig trübes Wetter und wenig Tageslicht.
:
Bearbeitet durch User
Matthias S. schrieb: > Janus M. schrieb: >>> Leider haben die Bayern bis auf den uralten 89C4051 derzeit keine MCS-51 >>> MC im Programm. >> >> Das ist mir jetzt nicht so ganz klar was damit gemeint ist. Ist das der >> Adapter? > > Nö, das war nur so gedacht, das man gleich ein paar MC mitbestellen > könnte. > > Janus M. schrieb: >> Gibt es ein Beispiel für so einen Programmieradapter für die 40-pol DIP? > > Ja, liegt hier auf dem Tisch. Ist aber eigentlich nur 'ne 40-pol Textool > Fassung mit Quarz und den Kondensatoren für diesen, ein Elko zum > Abblocken unten dran und ein Molexkabel mit 7-pol Stecker, das auf meine > universelle Adapterplatine geht. > Ich habe dir mal ein Foto angehängt. Rechts der AVRISP, in der Mitte die > Adapterplatine, die auch gleich einen 8-pol Sockel für Tiny13/25 etc. > trägt, einen Quarzoszillator und einen Schalter für die Versorgung der > MC und links die Textoolfassung mit Quarz und Elko. > Die Adapterplatine speise ich aus USB. > Sorry für die Sch**$$ Bildqualität, aber hier ist im Moment richtig > trübes Wetter und wenig Tageslicht. Danke für die Antwort Die Bausteine hol ich mir da. http://www.ebay.de/itm/4-St-ATMEL-AT89S52-24PU-DIL40-Flash-E1005-/400624555612?hash=item5d4715965c:g:Y-kAAOxyVLNSqbS- Hast Du da vielleicht noch einen kleinen Schaltplan zu dem Adapter. Sieht ja recht einfach aus wenn man so die Bauteile betrachtet. In der Bucht wird so was angeboten, weiss aber nicht ob das die gleiche Funktion erfüllt. Der Preis ist jedenfalls ein Witz http://www.ebay.de/itm/DIY-Kit-C51-Minimum-System-Development-Board-for-AT89S52-NO-Chip-good-/371005796062?hash=item5661ab2ede:g:tgYAAOSwg3FUdpzF
Janus M. schrieb: > In der Bucht wird so was angeboten, weiss aber nicht ob das die gleiche > Funktion erfüllt. Der Preis ist jedenfalls ein Witz Tja, da steht ja so gut wie nix bei. Ausserdem ist der 10-pol Wannenstecker veraltet - die neuen Programmierer verwenden 6-pol. Janus M. schrieb: > Hast Du da vielleicht noch einen kleinen Schaltplan zu dem Adapter. Habe ich nie gemacht. Der Schalter schaltet die 5V vom USB auf den Sockel und den Molex, damit man den MC stromlos machen kann, bevor man ihn rausnimmt. Der Oszillator ist für den Fall, das ich aus Versehen mal den internen RC Oszillator verfused habe (gilt nicht für die AT89, weil die immer externen Quarz haben) und am Molex stehen eben die bekannten Signale wie Reset, MOSI, MISO und SCK, die man zum programmieren braucht. Natürlich noch Masse und die +5V vom Schalter. Das ganze ist so simpel, das ich nie drüber nachgedacht habe, 'ne Schaltung zu malen. Spannungsregler gibts nicht, weil die USB Spannung schon ok ist und mein Rechner auch massenweise USB Anschlüsse hat (8 oder 10?).
Matthias S. schrieb: > Janus M. schrieb: >> In der Bucht wird so was angeboten, weiss aber nicht ob das die gleiche >> Funktion erfüllt. Der Preis ist jedenfalls ein Witz > > Tja, da steht ja so gut wie nix bei. Ausserdem ist der 10-pol > Wannenstecker veraltet - die neuen Programmierer verwenden 6-pol. > > Janus M. schrieb: >> Hast Du da vielleicht noch einen kleinen Schaltplan zu dem Adapter. > > Habe ich nie gemacht. Der Schalter schaltet die 5V vom USB auf den > Sockel und den Molex, damit man den MC stromlos machen kann, bevor man > ihn rausnimmt. Der Oszillator ist für den Fall, das ich aus Versehen mal > den internen RC Oszillator verfused habe (gilt nicht für die AT89, weil > die immer externen Quarz haben) und am Molex stehen eben die bekannten > Signale wie Reset, MOSI, MISO und SCK, die man zum programmieren > braucht. Natürlich noch Masse und die +5V vom Schalter. > > Das ganze ist so simpel, das ich nie drüber nachgedacht habe, 'ne > Schaltung zu malen. Spannungsregler gibts nicht, weil die USB Spannung > schon ok ist und mein Rechner auch massenweise USB Anschlüsse hat (8 > oder 10?). Vielleicht gibt es im Netz so was. Ist mir trotz der Einfachheit etwas zu unsicher ohne Plan. Leider gibt das Foto dafür zu wenig her :-(. Ich würde mir selbst das Teil auf eine Lochrasterplatine aufbauen. Hier scheint was zu stehen: https://www.mikrocontroller.net/articles/AVR_In_System_Programmer
:
Bearbeitet durch User
Also ich versuchs mal den Adapter von Dir zu kopieren mittels Prinzipskizze wird das dann noch etwas deutlicher. :-) Vom AVRISP werden die Anschlüsse wie im Bild (SteckerAVR) bereitgestellt. Dieser Stecker geht dann auf eine Art Steckerplatine mit 6 poligem Sockel (Platine_Stecker) bei Dir die Lochrasterplatine. Von da aus werden die 6 Anschlüsse (Bei Dir ist das der Molexstecker): GND 5V MISO SCK RESET MOSI an die Textool Halterung für den MC gelötet. Diese bekommt dann einen Kondensator im 100 nF Bereich (Warum Elko??) zwischen GND und 5V und noch einen Quarz an die Xtal Anschlüsse des MC 89S52. Der Rest Deines Aufbaus mit 8 poligem Sockel für Tiny mit Quarz brauche ich erst mal nicht. Der Schalter zum stromlos machen käme noch auf die Steckerplatine. Könnte aber auch weggelassen werden wenn man den AVRISP aus dem Rechner zieht bevor man den MC entnimmt. Ich habe 8 Kabel am Molexstecker bei Dir gezählt brauche aber nur 6. Nehme an das die restlichen beiden Kabel für den Tiny sind. Das müsste es in etwa sein oder?
:
Bearbeitet durch User
Hallo Leute, bin wieder da. Hier hat sich ja einiges getan. Habe die letzten Tage damit verbracht ein Layout für eine 81er Basic Hardware zu machen. Ist mir gelungen eine einseitige Halb-Europaformat (100 x 80mm) Platine zu machen, die ein Bastler auch in der Hobbywerkstatt fertigen kann. Auf der Platine befindet sich ein Erweiterungsstecker, auf den die ISP-Signale geführt sind. Mit einem kleinen Adapter fürs ISP-Programmiergerät, läßt sich der µC direkt in der Schaltung programmieren. Näheres dazu findet ihr im Layoutthread. Gruß. Tom
TomA schrieb: > Hallo Leute, > > bin wieder da. Hier hat sich ja einiges getan. > > Habe die letzten Tage damit verbracht ein Layout für eine 81er Basic > Hardware zu machen. Ist mir gelungen eine einseitige Halb-Europaformat > (100 x 80mm) Platine zu machen, die ein Bastler auch in der > Hobbywerkstatt fertigen kann. > > Auf der Platine befindet sich ein Erweiterungsstecker, auf den die > ISP-Signale geführt sind. Mit einem kleinen Adapter fürs > ISP-Programmiergerät, läßt sich der µC direkt in der Schaltung > programmieren. > > Näheres dazu findet ihr im Layoutthread. > > Gruß. Tom Das hört sich ja gut an, Schön wäre es noch eine Möglichkeit zu haben zwischen verschiedenen Quarzfrequenzen umzuschalten. Ich hab das auf meinem Bord leider nur mit einem Steckanschluss gelöst. Wenn man damit unterwegs ist verliert man ab und zu einen Quarz. Auch Bluetooth wär mal was nettes statt USB oder RS232. Bin gerade dabei mit KiCad zu üben. Noch etwas zu dem Basic. Habe festgestellt, dass zwei mal die die Baudrate (BG2) nicht gemarkert wurde. Könnstet Du noch mal hier Deine aktuelle Basicversion reinstellen?
Hallo Janus, habe das Basic nicht vollständig geprüft, werde eventuell später wieder auf automatische Baudrateerkennung zurückschreiben. Es gibt noch keine neuere Version, als die bereits veröffentlichte. Im Zuge der Basic-Platine wird es dann eine neue Version geben, welche mit den vielen möglichen Ports umgehen kann. Ich arbeite vorwiegend mit C und Assembler, wenn überhaupt programmiere ich mit Basic kleine Progrämmchen nur zum Spaß oder aus Interesse. Für variable Taktraten gibt es PLL-Chips, die werden mit einer festen Eingangsfrequenz betrieben und erzeugen programmierbare Ausgangsfrequenzen. Auf meinem Basicboard ist leider kein Platz mehr dafür. Oder doch? soweit ich mich erinnere habe ich hier noch irgendwo solche Chips in SO8 herumliegen, hat aber im Moment keine Priorität. Vom Blauzahn und anderen Funkverbindungen lasse ich die Finger, Funk ist in meinen Augen nur etwas, wenn es wirklich keine andere Lösung gibt. Werde mich jetzt an die Arbeit machen, einen Prototypen des IS51Basic-Boards zu bauen. Gruß. Tom
Janus M. schrieb: > Ich habe 8 Kabel am Molexstecker bei Dir gezählt brauche aber nur 6. > Nehme an das die restlichen beiden Kabel für den Tiny sind. Ich habe das Oszillatorsignal des TTL Oszillators noch mit auf den Molex gelegt und ein Reserverkabel (man weiss ja nie). Da ich von diesen Molexverbindern bis Pflaumenpfingsten genug habe (prof. Videorecorder sind voll davon), musste ich da nicht sparen. Heute würde ich ein Entwicklungsboard vermutlich gar nicht mehr mit MAX232 ausrüsten, sondern gleich einen FTDI o.ä. aufs Board machen mit einer USB-B oder Mini USB Buchse: http://www.ebay.de/itm/USB-TTL-Modul-fur-Arduino-FT232RL-FTDI-3-3V-5V-USB-Mini-/181863534850 Dann hat man ein Entwicklungssystem mit Speisung und Kommunikation in einem.
Versuche mich derzeit mit KiCad. Das klappt ganz gut. Musste bisher noch nicht mal etwas lesen. :-). Sogar eigene Bauteile konnte ich schon für die Bibliothek anfertigen. Hier der Schaltplan mit den bisherigen Veränderungen um das Basic 1.2a zum Laufen zu bringen. Warte derzeit auf die Lieferung des 89C52 um dann die Geschichte von Tom's Basic zu testen und das gepufferte RAM. Siehe hier: Beitrag "Layout für MCS51 Experimentierboard" Es gibt mehrere Jumper, die schnell erklärt sind. 1. JP4/JP5 - Umschaltung zwischen 8KB und 32KB EPROM 2. Jp2/JP3 - Umschaltung zwischen Midi für Atari und Basic 1.2a für PC 3. JP6 - Zum entkoppeln von RXD mit Midi Schnitstelle (otional). 4. JP1 - Batterie oder Akkubetrieb Die Leds dienen zum Anzeigen von Lese und Schreibaktivitäten von RXD/TXD LED D4 ist nur für die Betriebsweise mit dem Atari drin. Diese flackert in regelmässigem Rhytmus. Erforderlich sind bei den beiden Betriebsweisen Midi/PC ein Tausch der Quarze. Midi benötigt 12 Mhz und PC 11,0592 MHz. Eventuell kommt noch ein Midi Thru-Anschluss dazu.
:
Bearbeitet durch User
Hallo Janus, mir ist auf die Schnelle die LED D8 aufgefallen, sie ist an T2Out des MAX232 angeschlossen. Man kann das schon so machen, aber dort liegen die +-10V der Ladungspumpe des MAX. Die hohe Spannung kann als Sperrspannung die LED töten und ist es sinnvoll zuerst mühsam eine höhere Spannung für die Datenübertragung zu erzeugen und sie dann in einer LED zu verheizen? Die RXD-LED kennt dieses Problem nicht, da dort nur TTL-Pegel mit 0V oder 5V liegt. Aber du solltest diese LED umpolen. In Ruhelage ist RXD auf High, damit leuchtet deine LED in Ruhelage, die kurzen Low Phasen sind dann kaum zu sehen. Habe herausgefunden, daß der 89S52 beim ein/ausschalten undefinierte Speicherzugriffe durchführt und dabei den RAM-Inhalt überschreibt. Für diesen µC währe die Überwchungsschaltung mit dem TL7705 (ursprünglicher IS51-Schaltplan im Handbuch) oder ähnliches zu empfehlen. Mehr habe ich mir noch nicht angesehen. Der Plan sieht gut aus. Gruß. Tom
TomA schrieb: > Hallo Janus, > > mir ist auf die Schnelle die LED D8 aufgefallen, sie ist an T2Out des > MAX232 angeschlossen. Man kann das schon so machen, aber dort liegen die > +-10V der Ladungspumpe des MAX. Die hohe Spannung kann als Sperrspannung > die LED töten und ist es sinnvoll zuerst mühsam eine höhere Spannung für > die Datenübertragung zu erzeugen und sie dann in einer LED zu verheizen? > > Die RXD-LED kennt dieses Problem nicht, da dort nur TTL-Pegel mit 0V > oder 5V liegt. Aber du solltest diese LED umpolen. In Ruhelage ist RXD > auf High, damit leuchtet deine LED in Ruhelage, die kurzen Low Phasen > sind dann kaum zu sehen. > > Habe herausgefunden, daß der 89S52 beim ein/ausschalten undefinierte > Speicherzugriffe durchführt und dabei den RAM-Inhalt überschreibt. Für > diesen µC währe die Überwchungsschaltung mit dem TL7705 (ursprünglicher > IS51-Schaltplan im Handbuch) oder ähnliches zu empfehlen. > > Mehr habe ich mir noch nicht angesehen. Der Plan sieht gut aus. > > Gruß. Tom Oh vielen Dank für den Hinweis. Nur wenn man da einen hochohmigen Widerstand einsetzt fliesst auch nicht soviel. Mir wars damals wichtig, um zu sehen ob was läuft. Trotz Schaltplan kommt ist es immer etwas verwirrend was nun RXD und TXD ist, vom PC zum Controller wird das Kabel noch gekreuzt. Hab das so mal aufgebaut und da gings mit den LEDs. Eine Variante wäre die LEDs direkt nach dem 9Poligen Stecker also an 2 und 3 mit Vorwiderstand einzusetzen. Undefinierte Speicherzugriffe?? Hm, das hört sich wie Lotto an. Mal schauen was passiert, wenn ich den 89er habe. Insofern ist der Hinweis schon sehr nützlich. Meist such man ja den Fehler in der Schaltung.
TomA schrieb: > Habe herausgefunden, daß der 89S52 beim ein/ausschalten undefinierte > Speicherzugriffe durchführt und dabei den RAM-Inhalt überschreibt. Das tut er nicht - warum auch. Ich nehme eher an, das da in deiner Schaltung beim Powerdown oder -up ein paar ms ungeeignete Signale am Chip liegen. Die SPS hier läuft jedenfalls mit dem Basic ohne einen einzigen Datenverlust. Man kann übrigens, sofern es sich um den AT89S52 handelt, den Bus beruhigen, wenn man das durchgehende ALE abschaltet. ALE wird dann nur noch erzeugt, wenn externe Speicherzugriffe stattfinden.
Hallo Matthias, ich kenne das Problem mit dem undefinierten aktivieren der WR-Leitung noch von den alten 8051ern. Wenn die Versorgungsspannung unter einen bestimmten Wert absinkt, beginnt der µC undefiniert zu arbeiten, dabei aktiviert er auch die WR-Leitung unkontrolliert. Bei den neueren Prozessoren ist dafür eine Spannungsüberwachung im Chip integriert, welche bei sinkender Versorgungsspannung den Chip in den Resetzustand versetzt, bevor er Schaden anrichten kann. Im Datenblatt des 89S52 konnte ich, wie bei den alten 8051/52ern, nichts darüber finden. Und in meiner Schaltung tritt das Problem auch nur mit dem 89S52 auf. Gruß. Tom
Beide Ausgänge der beiden seriellen Schnittstellen auf RxD vom Prozessor? Von der MIDI-Buchse kannst Du mit JP6 disablen - und vom MAX? LED wurde schon gesagt. Batterie hängt ja nun doch mit Masse an GND. Damit hat /WR ohne Spannung Low und schreibt ... Wieso wird eigentlich ausgerechnet das EPROM mit der Batterie versorgt? Das hält seine Daten auch so ... JP3 ist gepolt, deshalb die merkwürdige Leitungsführung? :-D Allgemein viel Chaos im Plan ... Es scheint auch in KiCad Symbole wie GND & Co. zu geben. Nutze sie! Gruß Jobst
TomA schrieb: > beginnt der µC undefiniert zu arbeiten, dabei > aktiviert er auch die WR-Leitung unkontrolliert. Dann muss aber auch an deiner Auswahllogik was falsch sein, denn selbst wenn /WR aktiv wird, muss /CE ja immer noch inaktiv sein. Wie bereits bemerkt, passiert das bei meinen AT89S52 nicht und der Programmerhalt funktioniert ohne Auffälligkeiten. Evtl. löst ein TL7705 oder ein ähnlicher Resetcontroller dein Problem.
Jobst M. schrieb: > Beide Ausgänge der beiden seriellen Schnittstellen auf RxD vom > Prozessor? > Von der MIDI-Buchse kannst Du mit JP6 disablen - und vom MAX? > > Batterie hängt ja nun doch mit Masse an GND. Damit hat /WR ohne Spannung > Low und schreibt ... > Wieso wird eigentlich ausgerechnet das EPROM mit der Batterie versorgt? > Das hält seine Daten auch so ... > > JP3 ist gepolt, deshalb die merkwürdige Leitungsführung? :-D > Allgemein viel Chaos im Plan ... > > Es scheint auch in KiCad Symbole wie GND & Co. zu geben. Nutze sie! > > > Gruß > > Jobst 1) So sehe ich das was passiert auf TXD/RXD 2) JP6 habe ich nur eingesetzt weil ich mir anfangs nicht sicher war ob Daten beeinflusst werden durch die Schnittstelle. 3) ...da muss ich noch mal drüber nachdenken 4) EPROM?? Stimmt, ist falsch und geändert. Danke 5) Das war der Trick mit den vertauschten Leitungen. Jumper stehen mal vertikal oder horizontal. 6) Als Freihand und erster Versuch mit KiCad war ich ganz zufrieden 7) Ja, man kann da vieles mit Symbolen hab da allerdings noch keinen Überblick deswegen überall Strippen gezogen :-)
> ____________ > (+5V)----------------------+-----------| | > | | | > (DATA/ADRESS/CS/RD/WR)-----|-----------| SRAM | > | | | > + _ | | > ___ | | > _ | | > ___ | | > - | | | > | D1 | | > '--|<|--, | | > | | | > D2 | | | > (GND)-------------------------|<|--+---|__________| > > Damit sind automatisch alle Datenleitungen bei Ausfall der 5V auf High! > Wenn es sich um einen Akku handelt, kann parallel zu D1 ein Widerstand > zum laden gelegt werden. (Bzw. diese durch den Widerstand ersetzt > werden) > > Gruß > > Jobst Die Funktion von D2 ist mir einfach nicht klar. D1 sperrt, heisst Batterie wird nicht geladen. OK...aber durch D2 fliesst immer was egal ob Batterie oder Netz. Oder sollte D2 nur dazu dienen um noch einen Spannungsabfall von 0,7 Volt zu haben damit die Batterie nicht ganz auf Masse liegt?
:
Bearbeitet durch User
Janus M. schrieb: > 1) So sehe ich das was passiert auf TXD/RXD Nö. Wenn von MIDI high und vom MAX low kommt, kann nicht beides auf einer Leitung liegen. Du siehst dann im Zweifel nur Nonsense. > 5) Das war der Trick mit den vertauschten Leitungen. Jumper stehen mal > vertikal oder horizontal. ??? 8-/ Janus M. schrieb: > Die Funktion von D2 ist mir einfach nicht klar. Na, das ganze Gerät soll nicht von der Batterie versorgt werden, nur das RAM. > OK...aber durch D2 fliesst immer was egal ob Batterie oder Netz. DANN ... ist die Diode defekt. In Deiner Vorstellung ist GND immernoch unterhalb von +5V, wenn das Gerät nicht versorgt wird. Zieh in Gedanken einfach mal eine Verbindung zwischen GND und +5V und dann schaust Du mal, wo die Diode liegt und ob sie gerade leitet. Edit: Wie soll der Strom durch zwei in Reihe, in entgegengesetzter Richtung geschalteten Dioden fließen? Gruß Jobst
:
Bearbeitet durch User
Jobst M. schrieb: > Janus M. schrieb: >> 1) So sehe ich das was passiert auf TXD/RXD > > Nö. Wenn von MIDI high und vom MAX low kommt, kann nicht beides auf > einer Leitung liegen. Du siehst dann im Zweifel nur Nonsense. Entweder Midi oder Max. Beides wird nicht gleichzeitig verwendet. Also entweder speise ich Daten über den Atari mittels Midi oder über den PC mittels Max. So hat es bisher praktisch funktioniert. Bei Midi Betrieb ist der Max nicht vorhanden. Das ganze ist als Aufsteckplatinchen ausgeführt, die dann nicht gesteckt ist. Nutze ich den PC so ist Midi nicht relevant. Hatte deswegen noch den Jumper gezogen um da überhaupt keine Ströme fliessen zu lassen. Ist aber wie ich gesehen habe nicht relevant. So gesehen müsste ich in den Schaltplan noch einen Schalter zur Trennung von Max einzeichnen. Jedenfalls habe ich es bisher immer so betrieben. >> 5) Das war der Trick mit den vertauschten Leitungen. Jumper stehen mal >> vertikal oder horizontal. > > ??? 8-/ Auch wenn es etwas kurios aussehen mag. Es funktioniert tatsächlich in der Praxis :-). Damit bekam ich Basic zum Laufen. > Janus M. schrieb: >> Die Funktion von D2 ist mir einfach nicht klar. > > Na, das ganze Gerät soll nicht von der Batterie versorgt werden, nur das > RAM. Klar das habe ich schon verstanden. >> OK...aber durch D2 fliesst immer was egal ob Batterie oder Netz. Meinte das eigentlich so. Bei 5V fliesst strom über das RAM und D2 nach GND Bei 3V fliesst der Strom über das Ram und D2 nach Ground. > DANN ... ist die Diode defekt. > In Deiner Vorstellung ist GND immernoch unterhalb von +5V, wenn das > Gerät nicht versorgt wird. Zieh in Gedanken einfach mal eine Verbindung > zwischen GND und +5V und dann schaust Du mal, wo die Diode liegt und ob > sie gerade leitet. Dann würde die Diode D2 parallel zur Batterrie und D1 liegen. Nur das leuchtet mir nicht ganz ein. So hab ich das bisher gesehen siehe Bild. > Edit: Wie soll der Strom durch zwei in Reihe, in entgegengesetzter > Richtung geschalteten Dioden fließen? > > > Gruß > > Jobst
:
Bearbeitet durch User
So, die D2 leuchtet mir jetzt auch ein. Ist eben nur eine Frage der Darstellung. Habe das Bild etwas erweitert. Die restliche Schaltung würde mit der Batterie weiter versorgt werden mittels Stromkreislauf I4. Dieser wird aber unterbrochen von D2. Somit wird nur das RAM versorgt. Insofern ist D2 ziemlich sinnvoll. -------------------- Noch etwas zu den Midi Ports. Man kann den Max232 bei meiner Schaltung auch drinlassen. Die Datenübertragung mittels Midi wird nicht beeinflusst. Anderst herum über den MAX232 die Daten per PC einspeisen war auch kein Problem. -------------------- Jetzt kann ich mich dann auf das grosse Basic stürzen. Habe es nur versuchsweise in das ROM gebrannt. Leider kein Erfolg. Muss denn wirklich das Basic in den 89S52 gebrannt werden? Muss mir dann wohl einen Textool aus China bestellen um das dann in den Microcontroller zu bekommen. Denke ich werde mir den Chip dann mit dem Burner den ich ja auch für die Eproms nutze, verwenden. --------------------
:
Bearbeitet durch User
Janus M. schrieb: > Habe es > nur versuchsweise in das ROM gebrannt. Leider kein Erfolg. > Muss denn wirklich das Basic in den 89S52 gebrannt werden? Ja, bei deinem Adressschema muss es das. Denn du spendierst 32K im unteren Adressbereich und 32k im oberen. Das geht nun mal nicht, ohne Basic komplett umzuschreiben. Entweder hast du also unten 32k EPROM und oben 32k RAM, oder umgekehrt. Schau dir im Basic Handbuch die Hardware mal an, dann wirds hoffentlich klarer.
Janus M. schrieb: > Noch etwas zu den Midi Ports. Man kann den Max232 bei meiner Schaltung > auch drinlassen. Die Datenübertragung mittels Midi wird nicht > beeinflusst. Anderst herum über den MAX232 die Daten per PC einspeisen > war auch kein Problem. Kann man machen, muss man aber nicht. Der MAX232 hat push-pull-Ausgänge. Ein Transistor nach Plus, einer nach Masse. Im Ruhezustand liegt High-Pegel an, der obere Transistor leitet. Der Midi-Optokoppler ist stärker und schließt den Ausgang des MAX232 nach Masse kurz. Da der bedingt kurzschlußfest ist, hält er das eine Weile aus. Du hast ja ein Original und kein Billigding vom Ali. Wenn Du die RxD ordentlich verodern willst, dann nimm ein AND-Gatter ("der Ausgang ist dann Low, wenn mindestens ein Eingang Low ist") oder zwei Dioden und einen Widerstand.
soul e. schrieb: > Der Midi-Optokoppler ist stärker und schließt den Ausgang des MAX232 nach > Masse kurz. Da der > bedingt kurzschlußfest ist, hält er das eine Weile aus. Du hast ja ein > Original und kein Billigding vom Ali. Bei gezogenem Jumper JP6 passiert nichts wenn die Daten vom PC kommen. Kommen die Daten über Midi ist der Jumper gesteckt und bisher hatte ich den MAX auch entfernt. Versuch heute zeigte zumindest keine Nachteile in dedr Übertragung wenn er drin bleibt. Danke für den Hinweis. > > Wenn Du die RxD ordentlich verodern willst, dann nimm ein AND-Gatter > ("der Ausgang ist dann Low, wenn mindestens ein Eingang Low ist") oder > zwei Dioden und einen Widerstand. Ist mir nicht ganz klar wie das gehen soll. Müsste ja eine automatische Unterscheidung sein ob nun per PC oder per Midi übertragen wird.
Matthias S. schrieb: > Janus M. schrieb: >> Habe es >> nur versuchsweise in das ROM gebrannt. Leider kein Erfolg. >> Muss denn wirklich das Basic in den 89S52 gebrannt werden? > > Ja, bei deinem Adressschema muss es das. Denn du spendierst 32K im > unteren Adressbereich und 32k im oberen. Das geht nun mal nicht, ohne > Basic komplett umzuschreiben. Entweder hast du also unten 32k EPROM und > oben 32k RAM, oder umgekehrt. > Schau dir im Basic Handbuch die Hardware mal an, dann wirds hoffentlich > klarer. Hm, durch die Vertauschung des Adressbereichs ist es mir so jedenfalls nicht gelungen zumindest mit externem ROM. Muss ich mal intensiver nachlesen.
Janus M. schrieb: > Hm, durch die Vertauschung des Adressbereichs ist es mir so jedenfalls > nicht gelungen zumindest mit externem ROM. Muss ich mal intensiver > nachlesen. Einfach mal nachdenken. Der MCS51 erwartet ab Adresse 0000h den Reset Vektor und den Start des Programmes. Basic benutzt RAM ab Adresse 2000h (also direkt oberhalb eines 8k ROM Bereiches). Wie wir mittlerweile wissen, funktioniert auch paralleles RAM ab Adresse 0000h bzw. 0200h. Aber kein Adressschema in Basic erlaubt ROM von 0000h bis 7FFFh und dann RAM von 8000h bis FFFFh. Das ist aber das einzige, was du mit einem ROMless MC hinbekommst, denn der Resetvektor muss ja zwingend auf 0000h liegen. Also geht nur das Basic im MC selbst von 0000H bis 1FFFh, dazu parallel und bis 7FFFh ein RAM. Optional dann ab 8000h ein EEPROM.
:
Bearbeitet durch User
So ich habe jetzt die Diode D2 auf der Platine eingesetzt. Habe dann wie erwartet an allen Bausteinen 0V gehabt ausser am RAM mit 3.13V Habe aus interesse die Diode D2 mit einem Draht überbrückt und hatte ca. 1V an allen übrigen Bausteinen, Insofern dank an Jobst für die Geduld das ganze Thema zu erklären. :-) Nächster Schritt ist jetzt das Basic rein zubekommen. Da ich derzeit auf Hardware warte um das Programmieren umzusetzen in den 89S52, bitte ich noch etwas um Geduld. Dann ist das angesprochene Problem mit dem automatischen Löschen beim Aus- und Einschalten noch offen. Mit einem Timerbaustein sollte das in den Griff zu bekommen sein. Weiterhin ist noch die Sache mit dem "Kurzschluss" zwischen Midi und MAX232 Betriebsweise zu lösen. Anbei der augenblickliche Stand im Schaltplan mit KiCad
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.