Forum: Mikrocontroller und Digitale Elektronik Basic für 80C31


von Janus M. (markius)


Angehängte Dateien:

Lesenswert?

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
von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

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(?)"

von Georg G. (df2au)


Lesenswert?

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.

von Ralph S. (jjflash)


Lesenswert?

und das Basic braucht 256 Byte Ram... und der 31 er hat nur 128. Also: 
80S52 nehmen.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Matthias S. schrieb:
> Dieser
> besitzt den wichtigen 2ten Timer nicht

Ist natürlich Quatsch. Sollte heissen ' besitzt den wichtigen Timer2 
nicht'.

von Georg G. (df2au)


Lesenswert?

Matthias S. schrieb:
> Timer2

Notfalls gibt es auch eine Version für "ohne Timer2"
http://dsaprojects.orgfree.com/electronics/8031-ah/8031-bas.html

von Janus M. (markius)


Lesenswert?

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?

von Janus M. (markius)


Lesenswert?

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.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

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.

von Janus M. (markius)


Lesenswert?

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

von Georg G. (df2au)


Lesenswert?

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.

von Blechschaden (Gast)


Lesenswert?

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.

von Janus M. (markius)


Lesenswert?

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.

von Janus M. (markius)


Lesenswert?

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?

von Ralph S. (jjflash)


Lesenswert?

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

von Blechschaden (Gast)


Lesenswert?

Bei mir läuft der BASIC-Interpreter im AT89S8253 mit 32 KBytes externem 
SRAM ohne Probleme.

von Janus M. (markius)


Angehängte Dateien:

Lesenswert?

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.

von Blechschaden (Gast)


Lesenswert?

> 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.

von Janus M. (markius)


Lesenswert?

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.

von Ralph S. (jjflash)


Lesenswert?

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.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

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
von Georg G. (df2au)


Lesenswert?

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.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

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
von Lothar (Gast)


Lesenswert?

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

von Janus M. (markius)


Angehängte Dateien:

Lesenswert?

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

von Janus M. (markius)


Lesenswert?

> 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
von Georg G. (df2au)


Lesenswert?

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
von Lothar (Gast)


Lesenswert?

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

von Georg G. (df2au)


Lesenswert?

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.

von m.n. (Gast)


Lesenswert?

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? ;-)

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

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
von Janus M. (markius)


Angehängte Dateien:

Lesenswert?

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.

von Janus M. (markius)


Angehängte Dateien:

Lesenswert?

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)

von Janus M. (markius)


Lesenswert?

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 :-)

von Janus M. (markius)


Angehängte Dateien:

Lesenswert?

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
von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

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
von Georg G. (df2au)


Lesenswert?

Was für ein Typ ist dein "IC6"?

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

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 :-)

von Janus M. (markius)


Lesenswert?

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
von Franz R. (Gast)


Lesenswert?

Warum nicht Tiny Basic 51 nehmen ?

von Janus M. (markius)


Lesenswert?

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.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

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
von Peter D. (peda)


Lesenswert?


von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

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
von Peter D. (peda)


Lesenswert?

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.

von Janus M. (markius)


Angehängte Dateien:

Lesenswert?

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
von Janus M. (markius)


Angehängte Dateien:

Lesenswert?

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

von Soul E. (Gast)


Lesenswert?

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.

von Janus M. (markius)


Lesenswert?

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

von Janus M. (markius)


Angehängte Dateien:

Lesenswert?

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
von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

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
von Janus M. (markius)


Angehängte Dateien:

Lesenswert?

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.

von Janus M. (markius)


Angehängte Dateien:

Lesenswert?

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 :-)

von Dieter W. (dds5)


Lesenswert?

Janus M. schrieb:
> Ausgegeben wird folgendes siehe Anhang.

Das liegt daran, dass Du nicht "? FREE" eingegeben hast.

von Janus M. (markius)


Angehängte Dateien:

Lesenswert?

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.

von m.n. (Gast)


Lesenswert?

Als nächstes mußt Du testen, wie schnell das BASIC die ersten 1000 oder 
10000 Primzahlen findet. Dieser Test war seinerzeit Pflicht! ;-)

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

'?' 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
von Janus M. (markius)


Lesenswert?

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.

von Janus M. (markius)


Lesenswert?

..."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. 
:-)

von Janus M. (markius)


Lesenswert?

"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
von Soul E. (Gast)


Lesenswert?

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

von Joerg L. (Firma: 100nF 0603 X7R) (joergl)


Lesenswert?

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...

von Lothar (Gast)


Lesenswert?

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

von Soul E. (Gast)


Angehängte Dateien:

Lesenswert?

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.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

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.

von Janus M. (markius)


Angehängte Dateien:

Lesenswert?

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.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

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?

von Janus M. (markius)


Angehängte Dateien:

Lesenswert?

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
von Janus M. (markius)


Angehängte Dateien:

Lesenswert?

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
von Janus M. (markius)


Lesenswert?

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.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

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.

von Janus M. (markius)


Lesenswert?

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

von Janus M. (markius)


Lesenswert?

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.

von Soul E. (Gast)


Lesenswert?

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.

von m.n. (Gast)


Lesenswert?

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 ;-)

von m.n. (Gast)


Angehängte Dateien:

Lesenswert?

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.

von Janus M. (markius)


Lesenswert?

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

von m.n. (Gast)


Lesenswert?

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.

von Janus M. (markius)


Lesenswert?

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

von Janus M. (markius)


Lesenswert?

> 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
von Soul E. (Gast)


Lesenswert?

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.

von Peter D. (peda)


Lesenswert?

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.

von Janus M. (markius)


Lesenswert?

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.

von m.n. (Gast)


Lesenswert?

Janus M. schrieb:
> Hier ein Lauflicht:

Und wie schnell wackelt der Portpin in der Endlosschleife?

von Janus M. (markius)


Lesenswert?

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

von Janus M. (markius)


Lesenswert?

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.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

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'.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

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
von Janus M. (markius)


Angehängte Dateien:

Lesenswert?

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
von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

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.

von Janus M. (markius)


Lesenswert?

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

von m.n. (Gast)


Lesenswert?

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.

von Janus M. (markius)


Lesenswert?

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.

von Franz R. (Gast)


Lesenswert?

Dafür gibts einen Befehl ;) nennt sich "cut"
Hat Windows sowas nicht ?

von Janus M. (markius)


Lesenswert?

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.

von Janus M. (markius)


Lesenswert?

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.

von Janus M. (markius)


Lesenswert?

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
von Matthias S. (Firma: matzetronics) (mschoeldgen)


Angehängte Dateien:

Lesenswert?

Ich hänge dir mal die Version 1p3 im Original an.
Sollte mit ASEM-51 direkt assembeln - oder wie das heisst :-)

von Janus M. (markius)


Lesenswert?

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

von m.n. (Gast)


Lesenswert?

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?

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

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
von TomA (Gast)


Lesenswert?

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

von Janus M. (markius)


Angehängte Dateien:

Lesenswert?

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.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

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

von Janus M. (markius)


Lesenswert?

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.

von Janus M. (markius)


Lesenswert?

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.

von Janus M. (markius)


Lesenswert?

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

von Janus M. (markius)


Angehängte Dateien:

Lesenswert?

> 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.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

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
von Janus M. (markius)


Angehängte Dateien:

Lesenswert?

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
von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

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.

von TomA (Gast)


Lesenswert?

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

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

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.

von Janus M. (markius)


Angehängte Dateien:

Lesenswert?

@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 :-))

von Janus M. (markius)


Angehängte Dateien:

Lesenswert?

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.

von Janus M. (markius)


Angehängte Dateien:

Lesenswert?

Es geht noch einfacher und kompakter :-)

von Janus M. (markius)


Angehängte Dateien:

Lesenswert?

...weiter gehts

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

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.

von Janus M. (markius)


Lesenswert?

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
von TomA (Gast)


Lesenswert?

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

von TomA (Gast)


Lesenswert?

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

von Jobst M. (jobstens-de)


Lesenswert?

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

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

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.

von Janus M. (markius)


Lesenswert?

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

von Janus M. (markius)


Angehängte Dateien:

Lesenswert?

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
von Jobst M. (jobstens-de)


Lesenswert?

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

von Janus M. (markius)


Angehängte Dateien:

Lesenswert?

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
von Janus M. (markius)


Lesenswert?

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
von Jobst M. (jobstens-de)


Lesenswert?

Wie hoch ist denn die Betriebsspannung? (in beiden Fällen)
Welche Spannung hast Du an GND vom RAM? (Auch in beiden Fällen)

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

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.

von Janus M. (markius)


Lesenswert?

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?

von Janus M. (markius)


Lesenswert?

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

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

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
von Janus M. (markius)


Lesenswert?

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.

von Jobst M. (jobstens-de)


Lesenswert?

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

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

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
von TomA (Gast)


Lesenswert?

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

von Janus M. (markius)


Lesenswert?

"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
von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

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
von Janus M. (markius)


Angehängte Dateien:

Lesenswert?

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
von Janus M. (markius)


Lesenswert?

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

von Janus M. (markius)


Angehängte Dateien:

Lesenswert?

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

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

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
von Janus M. (markius)


Lesenswert?

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
von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

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.

von TomA (Gast)


Lesenswert?

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

von Janus M. (markius)


Lesenswert?

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.

von Janus M. (markius)


Angehängte Dateien:

Lesenswert?

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

von Janus M. (markius)


Angehängte Dateien:

Lesenswert?

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
von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

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
von Janus M. (markius)


Angehängte Dateien:

Lesenswert?

Das geht leider auch nicht :-(  (siehe Bildanhang)

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

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.

von Janus M. (markius)


Angehängte Dateien:

Lesenswert?

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.

von Janus M. (markius)


Lesenswert?

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,$

von Janus M. (markius)


Angehängte Dateien:

Lesenswert?

...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

von Route_66 H. (route_66)


Lesenswert?

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!

von Janus M. (markius)


Angehängte Dateien:

Lesenswert?

Anbei noch die Datei, Basis ist die von TomA

von Janus M. (markius)


Angehängte Dateien:

Lesenswert?

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
von Route_66 H. (route_66)


Lesenswert?

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.

von Janus M. (markius)


Lesenswert?

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

von Route_66 H. (route_66)


Lesenswert?

Janus M. schrieb:
> 2) 9600 Baud
>
> 3) automatisch

Ja was denn nun? Schwanger und Jungfrau geht nicht gleichzeitig. 
(zumindest in neuerer Zeit nicht :-)

von Route_66 H. (route_66)


Lesenswert?

1) 8031

Geht mit dem Quellcode nicht!

von Janus M. (markius)


Lesenswert?

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"

von Route_66 H. (route_66)


Lesenswert?

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
von Janus M. (markius)


Angehängte Dateien:

Lesenswert?

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. :-)

von Route_66 H. (route_66)


Lesenswert?

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
von Janus M. (markius)


Lesenswert?

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"?

von Route_66 H. (route_66)


Lesenswert?

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!

von Janus M. (markius)


Lesenswert?

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
von Matthias S. (Firma: matzetronics) (mschoeldgen)


Angehängte Dateien:

Lesenswert?

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
von Janus M. (markius)


Lesenswert?

"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 :-)

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

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.

von Janus M. (markius)


Lesenswert?

Gibt es ein Beispiel für so einen Programmieradapter für die 40-pol DIP?

: Bearbeitet durch User
von Matthias S. (Firma: matzetronics) (mschoeldgen)


Angehängte Dateien:

Lesenswert?

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
von Janus M. (markius)


Lesenswert?

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

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

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?).

von Janus M. (markius)


Lesenswert?

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
von Janus M. (markius)


Angehängte Dateien:

Lesenswert?

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
von TomA (Gast)


Lesenswert?

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

von Janus M. (markius)


Lesenswert?

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?

von TomA (Gast)


Lesenswert?

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

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

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.

von Janus M. (markius)


Angehängte Dateien:

Lesenswert?

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
von TomA (Gast)


Lesenswert?

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

von Janus M. (markius)


Lesenswert?

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.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

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.

von TomA (Gast)


Lesenswert?

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

von Jobst M. (jobstens-de)


Lesenswert?

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

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

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.

von Janus M. (markius)


Angehängte Dateien:

Lesenswert?

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 :-)

von Janus M. (markius)


Lesenswert?

>                                        ____________
> (+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
von Jobst M. (jobstens-de)


Lesenswert?

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
von Janus M. (markius)


Angehängte Dateien:

Lesenswert?

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
von Janus M. (markius)


Angehängte Dateien:

Lesenswert?

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
von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

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.

von Soul E. (Gast)


Lesenswert?

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.

von Janus M. (markius)


Lesenswert?

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.

von Janus M. (markius)


Lesenswert?

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.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

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
von Janus M. (markius)


Angehängte Dateien:

Lesenswert?

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
Noch kein Account? Hier anmelden.