So als reines Spaßprojekt (beim warten aufs Christkind ;-) ) habe ich
einen (noch nicht ganz fertigen) Kosmos CP1 Emulator geschrieben.
Ohne Sinn und Verstand !
Da der Kosmos CP1 30 Tasten hat (von denen die Tasten für die
Zifferneingabe parallel geschaltet sind), habe ich ein China I/O Board
aus der Schublade geholt und dieses verwendet.
Das I/O Board hat 16 Tasten, von denen der Emulator jedoch nur 11
Verwendet.
Mittels einer "Shift-Taste" wird gewählt zwischen Zifferneingabe (ohne
gedrückte Shift-Taste) und den sogenannten Funktionstasten (dann mit
gedrückte Shift-Taste).
Die Tastenbelegung ist folgende:
1
Tastenbelegung:
2
3
run stp step
4
-x- 1 2 3
5
6
acc clr pc
7
-x- 4 5 6
8
9
out inp cas
10
-x- 7 8 9
11
12
cal
13
SHIFT 0 -x- -x-
Bis auf die Port-Befehle und das Speichern und Laden auf Kassette (was
dann das interne EEProm des ATmega übernehmen wird) sind alle Funktionen
bereits implementiert.
Wenn jemand also das Board zu Hause hat, es ihm langweilig ist, kann man
damit gut "herumspielen" (eben bis das Christkind kommt).
Eine Manual zum originale CP1 (nach dem ich die Emulation programmiert
habe) findet sich hier:
https://www.retrozone.ch/cp1/
Wie das I/O Board anzuschließen ist kann dem Header tm1638_kosmos_cp1.h
entnommen werden.
Sollte ich noch verrückter sein, und davon eine Platine entwickeln, wäre
ein TM1637 auch angebracht, weil dieser genau max. 6 Digit
7-Segmentanzeige und 16 Tasten kontrollieren kann (für einen Preis von
ca. 20 ct).
Viel Spaß damit und schöne Weihnachten,
JJ / Ralph
Der müde Joe schrieb:> Tolle Sache!> Was braucht man noch neben dem von dir erwähnten sog. China I/O Board?
einen ATmega? Theoretisch (und praktisch wohl auch) 5V, einen
Kondensator und ein SPI Flasher, oder einen Arduino Nano / Uno.
Super Sache!
Ja das TM1638 ist ideal dafür. Soetwas ähnliches habe ich damals für die
erste Version des Microtronic Emulators auch verwendet.
https://youtu.be/HHfHw3GVIuI
So, jetzt habe ich es "ausprogrammiert" und den Emulator fertig gemacht.
Mit dem "fertigmachen" stellen sich dann so manche Fragen darüber,
damit, dafür.
Zum einen wie gehabt: Emulator funktioniert in Verbindung mit einem
TM1638 Chip, an den 7-Segment und Tasten angeschlossen sind. Ein
fertiges Board (aus China) hat Tasten derer 16 und somit sind 5 Tasten
hiervon ungenutzt.
Der TM1638 benötigt zur Kommunikation mit einem µC 3 I/O Anschlüsse.
Vom Mikrocontroller bleiben dann gerade so genügend I/O Anschlüsse
übrig, um die beiden 8-Bit Ports P1 und P2 noch zu emulieren.
Für den Emulator habe ich jetzt einen Arduino Nano verwendet (aber nicht
die Arduino IDE) und diesen "normal" als Makefile-Projekt programmiert.
Für den Emulator habe ich ein bestehendes .c / .h Softwaremodul
umgeschrieben, damit es für den Emulator passt und ein neues
Softwaremodul namens "vports". Dieses "vports" ermöglicht es (wenn auch
langsam), bunt über alle Anschlüsse des AVR gemischt, 8 Bits zu einem
Port zusammen zu fassen. Hier kann einem Port entweder mittels einer
Zuweisung eines uint8_t Wertes der ganze "Port" auf einmal gelesen
geschrieben werden, oder einzelne Bits können gesetzt, gelöscht, gelesen
werden.
Der Emulator wurde mit den Controllern ATmega8, 88, 168 und 328
getestet. Wer dieses Projekt umsetzen möchte, muß im Makefile lediglich
den Controllertyp und die Uploadmethode auswählen.
Die Funktionen des Emulators CAS und CAL wurden (als einzige) vom
Original abgeändert. Normalerweise sind diese beiden Funktionen
"Cassette store" und "Cassette load" und natürlich speichert dieses Teil
nicht auf einen Kassettenrekorder. Weil selbst ein ATmega8 insgesamt 512
Bytes EEProm besitzt und ich den "maximalen Speicherausbau" des Kosmmos
CP1 auf 256 Byte Ram gesetzt habe, können im EEProm somit 2 Programme
gespeichert werden. Hierfür wird für CAS und CAL dieselbe Methode
verwendet wie bspw. das Anwählen von Speicherzellen oder das Setzen des
Programmcounters:
Tastenkombination "001 + CAS" speichert den aktuellen Speicherinhalt auf
Speicherplatz 1, "000 + CAS" speichert den aktuellen Speicherinhalt auf
Speicherplatz 0.
Gleiches gilt für das Laden aus dem EEProm: "000 + CAL" und "001 + CAL".
-----------------------
Irgendwie hat das Spaß gemacht, einen "virtuellen" extrem
minimalistischen "Computer" nachzubauen (man beachte die
Anführungszeichen) und es stellt sich die Frage, warum bspw. invertieren
nur für ein einzelnes Bit vorgenommen wurde, kein CALL und RET und noch
"schlimmer" kein MUL und kein DIV. Die Antwort dürfte einfach sein: der
originale Controller im Kosmos CP1 ist ein 8049 und hierfür dürfte wohl
einfach kein Platz mehr im Controller gewesen sein.
Wer sich die Firmware des Emulators genauer anschaut, wird feststellen,
dass der Maschineninterpreter an sich der einfachste Part des Programmes
ist. Hier den Befehlssatz "auszubauen" dürfte ein extrem leichtes sein,
bspw. MUL, DIV, NOT (kompletter Akku), SHEX (für ShowHex wenn die
Anzeige hexadezimal sein soll).
Ich habe eine Befehlssatzänderung deshalb nicht vorgenommen, damit zum
einen das Ding eben wirklich retro ist und zum anderen darf daran jeder
so spielen wie er mag.
Der Quellcode dürfte hierfür genügend dokumentiert sein.
--------------------------------------------------------
Ich überlege mir wirklich, ob ich hierfür eine Platine routen soll (die
extrem minimalistisch bleiben soll): keine USB2UART Bridge, aber RxD und
TxD und DTR auf Stiftleisten herausgeführt um für Weiterentwicklung die
serielle Schnittstelle zur Verfügung zu haben (vllt. macht man ein
Programm-Upload von der seriellen Schnittstelle). SPI-Stiftleiste um den
ATmega zu flashen (vllt. auch nur einen Bootloader um die eigentliche
Firmware dann über die serielle Schnittstelle zu übertragen). Die beiden
Ports P1 und P2 auf Buchsenleiste nach aussen geführt.
So, und dann gleich das I/O geändert: Anstelle von TM1638 einen TM1637
verwenden, der genau die richtige "Größe" hat: 6 Digit 7-Segementanzeige
mit max. 16 Tasten ==> passt. Hierfür brauchts dann auch nur noch 2 I/O
Pins.
Bauteilemäßig wäre das (vor allem unter Verwendung eines ATmega8 oder
ATmega88) ultra preiswert.
Mir stellt sich dann allerdings nur die Frage: Was mache ich dann damit,
wenn ich eine solche Hardware aufgebaut habe?
Schöne Tage noch,
JJ
Wie gesagt, ich denke nicht dass Du viel über die Sinnfrage grübeln
musst. Ich empfehle den Atmega 2560 der kostet 5 Euro und benötigt keine
Hacks für vports o.ä. Eine Platine ist in jedem Fall zu empfehlen. Das
macht auch Spaß!
Schön dass es nun auch einen CP1 in dieser Form gibt; sicherlich wird
den auch der ein oder andere nachbauen. So geschehen mit meinem
Microtronic Emulator über die Jahre.
Schöne Tage noch Michael
Ralph S. schrieb:> Mir stellt sich dann allerdings nur die Frage: Was mache ich dann damit,> wenn ich eine solche Hardware aufgebaut habe?
Evtl. mal beim Franzis-Verlang nachfragen, ob die an einem Vertrieb /
einer Neuauflage interessiert sind?
Man darf nicht vergessen, dass diese Lerncomputer (CP1, Microtronic) den
Lerncomputern die heute auf den Markt geworfen werden (Kakken GMC-4
o.ä.) weit überlegen sind. Das Zauberwort heißt existierende Software,
Anleitungsbücher & Elektronik-Experimente! Diese sind durchaus auch
heute noch didaktisch empfehlenswert, für Einsteiger.
Dieser hier z.B.
https://www.tindie.com/products/subsystems/4-bit-microprocessor-trainer/
wird "erfolgreich" komerziell vertrieben. Ist zudem das gleiche wie der
GMC-4 und the Science Fair Microcomputer Trainer
https://www.old-computers.com/museum/computer.asp?st=1&c=1053
bzgl. Instruction Set.
Sowohl der CP1 als auch der Microtronic sind sowas von besser... der
Microtronic ist natürlich der beste ;-)
von Michael W. (michael_w738)
>Kakken GMC-4
Das war wohl ein Freud'scher-Versprecher .. das Ding heißt Gakken GMC-4
https://en.wikipedia.org/wiki/GMC-4
Ist doch klar, du bewunderst sie und freust dich, das du sie hast! :-)
Ich konstruiere derzeit eine solche Minimalversion eines CP1, aber
ausschließlich mit THT-Bauteilen.
chris_ schrieb:> von Michael W. (michael_w738)>>Kakken GMC-4>> Das war wohl ein Freud'scher-Versprecher .. das Ding heißt Gakken GMC-4> https://en.wikipedia.org/wiki/GMC-4
Oh ja hmm war wohl irgendwie eine Superposition in meinem Hirn zwischen
Gakken und Kaggen und da kam dann irgendwie Kakken bei raus. Hätte
natürlich auch Gaggen werden können :-)
Michael W. schrieb:> Wie gesagt, ich denke nicht dass Du viel über die Sinnfrage grübeln> musst. Ich empfehle den Atmega 2560 der kostet 5 Euro und benötigt keine> Hacks für vports o.ä. Eine Platine ist in jedem Fall zu empfehlen. Das> macht auch Spaß!
Das finde ich für einen CP1 Emulator satt zu arg und absolute
Verschwendung. Nur damit die Ports vorhanden sind (das sind sie bei
einem 28 pol. Gehäuse ebenfalls). Ansonsten reicht ein Controller mit 8
kB Flash und 512 Byte Ram (wenn man sich anstrengen würde - was ich
nicht getan habe - würde höchstwahrscheinlich auch ein 4 kB Flash
reichen).
Michael W. schrieb:> Evtl. mal beim Franzis-Verlang nachfragen, ob die an einem Vertrieb /> einer Neuauflage interessiert sind?
Das glaube ich wohl eher absolut nicht: Das Manual zu schreiben (das
Originale) ist mit Sicherheit deutlich aufwändiger gewesen, als die
Firmware des Controllers. Heute gilt das noch mehr als damals. Ich habe
so geschätzt insgesamt 6 bis 8 Stunden zum Programmieren gebraucht (und
es wäre schneller gewesen, ich hätte nicht ums verr*** die TM1638
Software angepasst sondern gleich neu geschrieben).
Vom Ansatz her war ich sehr überrascht, wie Kosmos damals heran gegangen
ist, jemanden einen Computer zu erklären. Es wurde wirklich gelernt wie
ein Computer funktioniert. Allerdings haben sie dann elementare Dinge
dann wirklich weg gelassen (was wohl dem extrem geringen Arbeitsspeicher
des 8049 geschuldet ist):
- Ich habe beim Testen des Emulators wirklich ab und innerlich den Kopf
geschüttelt, weil die Ein- und Ausgabe im Dezimalsystem vorgenommen
wird. Wahrscheinlich wollte man didaktisch den "lernenden" nicht noch
mit einem "fremden" Zahlensystem überlasten.
- kein Stacksystem und dadurch
- keine CALL und RET
Wobei man den letzten Punkt dann sogar per Software realisieren kann.
Bevor man ein Unterprogramm anspringt, legt man an einem Speicherplatz
die Rücksprungadresse ab und anstelle eines RET wird an diese im
Speicher abgelegte Adresse gesprungen.
Natürlich kann man das alles um den CP1 erweitern, nur dann ist es kein
CP1 mehr.
Schlimm beim CP1 ist, dass man bei der Eingabe die Adresse nicht sieht,
an der man etwas eingibt, bsp.:
1
100 - out // wählt Adresse 100 an (wohlbemerkt alles dezimal)
2
04010 - inp // Eingabe von Opcode (04) und Operand (010)
3
// nach "inp" wird automatisch nächste Stelle angewählt
4
02000 - inp //
5
.
6
----> // nach einigen Eingaben: an welcher Adresse befinde ich mich?
7
.
8
09101 - inp // letzter Befehl eines Programmes
Grundsätzlich wäre für diese Art von "Lerncomputer" es wohl besser
gewesen (wie ich das in Lehre an einem i8080 gehabt hatte) mit extra
Anzeige für Adresse und Eingabe. Dieses hatte auch nur 6
7-Segmentanzeigen (aber einige Tasten mehr) und es wurde nativ auf dem
8080 programmiert (was natürlich auf einem 8049 nicht geht, auf einem
MCS-51 wäre das gegangen).
All das ist wohl schon 1983 dem Kostendruckt unterworfen gewesen, damit
das Teil auch ja "billig" genug bleibt (wobei ich einen Preis von 218.-
DM bei Einführung schon als "stolzen Preis" bezeichnen würde).
Michael W. schrieb:> Man darf nicht vergessen, dass diese Lerncomputer (CP1, Microtronic) den> Lerncomputern die heute auf den Markt geworfen werden (Kakken GMC-4> o.ä.) weit überlegen sind.
"Heute" auf den Markt geworfen: Der Gakken GMC-4 wurde 2009 als Beilage
zu einem Elektronikmagazin mit vertrieben. Hier finde ich das
"Selbstbasteln" der Folientastatur am interessantesten und mich würds
interessieren, wo die ähnlich billig wie PCB's fertigen lassen kann
(wenn es so etwas gibt).
Vom Ansatz her sind CP1 und Microtronic tatsächlich überlegen.
--------------------------------------
Der müde Joe schrieb:> Ich konstruiere derzeit eine solche Minimalversion eines CP1, aber> ausschließlich mit THT-Bauteilen.
Öha ... ausschließlich mit THT wird.. sagen wir es so: etwas
"umständlich": Der Mikrocontroller ist da kein Problem, den gibts THT.
Mit dem I/O System wirds "doof". Mir ist hier kein einziger THT Baustein
bekannt.
Hier kannst du bspw. mit PCF8574 I/O Expander hantieren, allerdings: ob
das Sinnvoll ist? Du kannst hier einen Expander nehmen und mit diesem 16
Tasten abfragen, wenn du den Expander seinerseits selbst multiplext.
Oder du nimmst derer gleich 2 Expander und multiplext diese nicht, weil:
Du willst die Anzeige multiplexen, hier brauchst du dann garantiert 2
Expander, einen für die 8-Bit Informationen der 7-Segmentanzeige (7
Segmente plus Dezimalpunkt), 6-Bit Information für die MPX-Leitungen.
Hmm, insgesamt dann 4 Bausteine I/O Expander plus µC ? (nur damit es THT
bleibt) ?
Ich werde die Tage das ganze mit einem TM1637 versuchen (der halt aber
eben nicht THT ist), der einfach wie gemacht hierfür ist. Vllt. solltest
du überlegen, einen TM1637 auf einen TSOP-Adapter zu löten und das dann
als THT-Baustein ansehen ? ;-)
Habe ich vor einiger Zeit für einen ATtiny so realisiert gehabt.
Beitrag "Siebensegment und Tasten ansteuern mit TM1651 \ TM1637"
Eine solche "Konstruktion" würde sich dann auf "ATmega", TM1637, 2 x 3
Digit 7-Segmentanzeige, 16 Tasten beschränken. Ende !
------------------------------------
Werde ich die Tage mal ausprobieren, größte "Herausforderung" hier ist
es dann, 16 Tasten auf ein Steckbrett zu bringen. :-) ;-) vllt. sollte
ich mal ein ähnliches I/O Board wie das von mir verwendete routen, nur
mit TM1637 Baustein (wobei sich hier dann wieder die Frage stellt:
wofür):
Ralph S. schrieb:> Hmm, insgesamt dann 4 Bausteine I/O Expander plus µC ? (nur damit es THT> bleibt) ?>> Ich werde die Tage das ganze mit einem TM1637 versuchen (der halt aber> eben nicht THT ist), der einfach wie gemacht hierfür ist. Vllt. solltest> du überlegen, einen TM1637 auf einen TSOP-Adapter zu löten und das dann> als THT-Baustein ansehen ? ;-)
Den TM1637 gibt es als DIP20. Siehe Datenblatt.
Z.B.:
https://de.aliexpress.com/item/1005001721593177.html
Andreas B. schrieb:> Ralph S. schrieb:>> Was mache ich dann damit,>> wenn ich eine solche Hardware aufgebaut habe?> Programmieren lernen. ;-)
cooool, dann kann ich das jetzt endlich (in meinem fortgeschrittenen
Alter) doch noch lernen ! ;-)
Ralph S. schrieb:> Das glaube ich wohl eher absolut nicht: Das Manual zu schreiben (das> Originale) ist mit Sicherheit deutlich aufwändiger gewesen, als die> Firmware des Controllers. Heute gilt das noch mehr als damals. Ich habe> so geschätzt insgesamt 6 bis 8 Stunden zum Programmieren gebraucht (und> es wäre schneller gewesen, ich hätte nicht ums verr*** die TM1638> Software angepasst sondern gleich neu geschrieben).
Das meine ich doch genau. Der eigentliche Wert dieser historischen
Lerncomputer liegt in den existierenden Anleitungsbüchern. Wenn Dein CP1
kompatibel genug ist von der Benutzerführung und vom Handling, dass man
die originalen Handbücher verwenden kann, ist das von großem Wert und
macht eine Neuauflage sehr einfach. Die originalen Handbücher und
Experimente und Software können direkt wieder- und weiterverwendet
werden. Null Kosten.
Ralph S. schrieb:> Das finde ich für einen CP1 Emulator satt zu arg und absolute> Verschwendung. Nur damit die Ports vorhanden sind (das sind sie bei> einem 28 pol. Gehäuse ebenfalls). Ansonsten reicht ein Controller mit 8> kB Flash und 512 Byte Ram (wenn man sich anstrengen würde - was ich> nicht getan habe - würde höchstwahrscheinlich auch ein 4 kB Flash> reichen).
Na wie gesagt, ich war vor 4 Jahren mit einem 328p angefangen und mir
wurde es dort "zu eng". Einige Funktionen die ich hinzufügen wollte
benötigten halt mehr Platz. Z.B. mehr Platz für EEPROM oder "Fest-ROM"
Programme. In deinem Fall ist EEPROM ja auch schon eine Beschränkungen
(nur 2 Programme). Ich wollte halt SDCard, LCD und andere Sachen
hinzufügen. Alles in Allem denke ich, dass das auch mit diesen kleinen
Erweiterungen noch ein CP1 wäre bzw. eine Microtronic in meinem Falle
;-) Es ist schon nett, wenn man Platz für duzende "Fest-Programme" hat
z.B. Und bei 5 USD pro ATMega 2560 Pro Mini Board mache ich mir darüber
nicht so viele Gedanken... ESP32 oder STM32 or RISC-V wäre da schon eher
Verschwendung ;-)
Ralph S. schrieb:> Andreas B. schrieb:>> Ralph S. schrieb:>>> Was mache ich dann damit,>>> wenn ich eine solche Hardware aufgebaut habe?>> Programmieren lernen. ;-)>> cooool, dann kann ich das jetzt endlich (in meinem fortgeschrittenen> Alter) doch noch lernen ! ;-)
Du und was lernen? Du weißt und kannst doch schon alles!
Ralph S. schrieb:> Da der Kosmos CP1 30 Tasten hat (von denen die Tasten für die> Zifferneingabe parallel geschaltet sind), habe ich ein China I/O Board> aus der Schublade geholt und dieses verwendet.
Weißt du noch welches Board/Modul da genommen hast und ob die Chinesen
das noch liefern. ??
Ralph S. schrieb:> Werde ich die Tage mal ausprobieren, größte "Herausforderung" hier ist> es dann, 16 Tasten auf ein Steckbrett zu bringen. :-) ;-) vllt. sollte> ich mal ein ähnliches I/O Board wie das von mir verwendete routen, nur> mit TM1637 Baustein (wobei sich hier dann wieder die Frage stellt:> wofür):
Ach das kriegst Du schon hin, das haben andere auch schon geschafft
(sogar mit 32 Tasten ;-)
Michael W. schrieb:> Guckst Du Ebay>> Ebay-Artikel Nr. 262986437133
Vielen Dank werde ich gleich mal bestellen. ;) Kann ich nämlich gut für
ein anderes Projekt gebrauchen.
Ralph S. schrieb:> Vom Ansatz her war ich sehr überrascht, wie Kosmos damals heran gegangen> ist, jemanden einen Computer zu erklären. Es wurde wirklich gelernt wie> ein Computer funktioniert. Allerdings haben sie dann elementare Dinge> dann wirklich weg gelassen (was wohl dem extrem geringen Arbeitsspeicher> des 8049 geschuldet ist):>> - Ich habe beim Testen des Emulators wirklich ab und innerlich den Kopf> geschüttelt, weil die Ein- und Ausgabe im Dezimalsystem vorgenommen> wird. Wahrscheinlich wollte man didaktisch den "lernenden" nicht noch> mit einem "fremden" Zahlensystem überlasten.>> - kein Stacksystem und dadurch>> - keine CALL und RET>> Wobei man den letzten Punkt dann sogar per Software realisieren kann.> Bevor man ein Unterprogramm anspringt, legt man an einem Speicherplatz> die Rücksprungadresse ab und anstelle eines RET wird an diese im> Speicher abgelegte Adresse gesprungen.
Die Zeiten haben sich halt geändert. Das Microtronic hat eine ähnliche
Beschränkung - kein Stack, sondern nur ein Rücksprungregister. Daher
kann man zwar CALL/ RET machen, aber nur 1 Level (Subroutinen können
nicht aus einer Subroutine angesprungen werden). Diese Beschränkung habe
ich z.B. aufgehoben in meinem Microtronic-Emulator und ihm einen echten
Stack spendiert. Interessant - sogar der TMS 1600, die CPU im
Microtronic, hat keinen Stack!! Und da gab es noch andere...
Was HEX angeht - hmm, ja das ist in der Tat eigenartig beim CP1. Zumal
ja das Binärsystem ausführlich erklärt wird.
ABER - der CP1 hatte damals sogar ein Vorwort und EMPFEHLUNG von Prof.
Karl Steinbruch, der kein Unbekannter ist in der deutschen Informatik...
Der CP1 kam 3 Jahre zu spät. Wäre er wie der Microtronic 1981
rausgekommen, hätte er historisch eine größere Relevanz gehabt. Die
echten Heimcomputer waren 1983 schon zu sehr auf dem Vormarsch.
Also, @jjflash - bitte alles auf eine Platine bringen, sodass man es
schön kompakt nachbauen kann! Ich habe zwar ein CP1 (und alle
CP1-Erweiterungen... wie wäre es denn damit eigentlich?
Speichererweiterung, Kassetteninterface & IO-Erweiterung nachbauen!),
hätte aber sehr gerne Deinen Emulator in "all in one" Form vorliegen!
CP1-Erweiterungen:
http://www.8bit-homecomputermuseum.at/computer/kosmos_computer_praxis_cp1.html
Michael W. schrieb:>> cooool, dann kann ich das jetzt endlich (in meinem fortgeschrittenen>> Alter) doch noch lernen ! ;-)>> Du und was lernen? Du weißt und kannst doch schon alles!
Ach herjeh, bin ich dir irgendwann auf die Füße getreten? Wenn dem so
ist, war das sicherlich nicht meine Absicht. Sollte ich so "rüberkommen"
alles besser zu wissen, muß ich meine Art zu schreiben ändern, denn
Michael W. schrieb:> Du und was lernen? Du weißt und kannst doch schon alles!
dem ist ganz ganz sicher nicht so (auch wenn ich schon 40 Jahre lang mit
Elektronik im besonderen mit Prozessoren und Controllern zu tun habe).
Wenn ich hier manche lese (das meine ich nicht ironisch, sondern eher in
Richtung "ehrfurchtsvoll") was die alles so getrieben habe, dann weiß
ich, dass immer welche gibt, die da deutlich über mein "Können" eins
drauflegen. Ich spiele im allerbesten Falle obere zweite Bundesliga,
untere erste Bundesliga. Andere (eben hier vertretene Mitglieder des
Forums) spielen da wirklich Champions- und Euroleague.
Schau dir mal an (wenn du so querliest), was ein Jörg W. ein Yalu oder
ein Frank M. drauf hat. Oder auch insbesondere ein Philip Klaus Krause.
Das sind die wirklich richtig guten! (Auch wenn das manche vllt. anders
sehen, von solchen Leuten lerne ich auch nach 40 Jahren noch).
Schlaumaier schrieb:> Michael W. schrieb:>> Guckst Du Ebay>>>> Ebay-Artikel Nr. 262986437133>> Vielen Dank werde ich gleich mal bestellen. ;) Kann ich nämlich gut für> ein anderes Projekt gebrauchen.
Das kann man für einige Sachen gebrauchen ...
Michael W. schrieb:> z.B. Und bei 5 USD pro ATMega 2560 Pro Mini Board mache ich mir darüber> nicht so viele Gedanken... ESP32 oder STM32 or RISC-V wäre da schon eher> Verschwendung ;-)
Schmunzeln muß, man könnte das auch als Nucleo-Shield machen,
Möglichkeiten gäbe es viele. Befehlssatz aufbohren auch. Eingabeparser
hinzufügen geht auch, steuerbar über RS232 oder wenn man das mit einem
ES32 realisieren würde, sogar über WLAN.
Allerdings wäre es dann kein CP1 mehr.
Für mich ist das im Moment spielerei und ein Kasetteninterface werde ich
sicherlich nicht hinzufügen.
Im Moment bin ich absolut am "abspecken" der Hardware und versuche das
eben wie oben beschrieben zu realisieren. Im Moment mit einem ATmega8,
dem ich sogar den Quarz geklaut habe und zum ersten mal einen Optiboot
Bootloader OHNE Quarz dafür neu übersetzt habe und mit 38400 Baud
betreibe (das ist aus meiner Erfahrung die höchste Baudrate, die ohne
Quarz noch gut funktioniert).
Also, derzeit noch "Steckbrettarbeiten" um die Hardware aufzubauen,
danach die ganze Geschichte mit 7-Segmentanzeigen und Tastern noch
einmal. Weil ich derzeit 3 Pin's eingespart habe kann man sich
überlegen, ob man hier noch ein rudimentäres Terminalprogramm mit
integriert um die Eingabe zu erleichtern und vllt. (aber nur vllt.) ein
externes I2C EEProm damit mehr als nur 2 Programme gespeichert werden
können.
Bei dieser Steckbrettarbeit bin ich gerade mal so weit, dass ich die
7-Segmentanzeigen ansprechen kann ==> der Aufbau geht weiter (außerdem
habe ich immer öfters jetzt auch mein aktuelles Projekt im Kopf - Padauk
PFS Programmer, an den ich mich bald wieder machen werde).
;-) im Übrigen kann dann ja jeder damit spielen wie er will.
Für mich ist es jetzt ein Freizeitvertreib wie Fahrradfahren. Wenn
Corona nicht wäre, fährst du irgendwohin in einen Biergarten oder
Imbiss, ißt was, trinkst was und fährst wieder nach Hause. Zu Hause
hätte man auch essen und trinken können und sich das Fahren sparen
können.
Genausoviel Sinn macht ein CP1 Emulator. Macht Spaß das zu machen, aber
wirklich etwas damit anfangen kann man nicht.
Michael W. schrieb:> Also, @jjflash - bitte alles auf eine Platine bringen, sodass man es> schön kompakt nachbauen kann! Ich habe zwar ein CP1 (und alle> CP1-Erweiterungen... wie wäre es denn damit eigentlich?> Speichererweiterung, Kassetteninterface & IO-Erweiterung nachbauen!),> hätte aber sehr gerne Deinen Emulator in "all in one" Form vorliegen!
Speichererweiterung wäre schon eine sehr starke Veränderung des
Maschineninterpreters: Der Adressbereich beträgt 8-Bit, d.h. mehr als
256 Speicherplätze sind nicht. Wenn nun den Interpreter dahin ändert,
dass (weil wie bei einem RISC beinhaltet eine Speicherzelle OP-Code und
Datum) der 16-Bit Wert bspw. 6-Bit für den Opcode hat (was dann für 64
Opcodes reicht und für Speicheradresse somit 2^10 Adresse = 1kByte) hat,
dann hast du das Problem, dass du dezimal den Speicher (weil 3-stellig
dezimal) nur bis 999 Speicherstellen adressieren kannst).
Hierfür mußt du dann schier ein neues Buch der Anleitung schreiben und
es steht immer noch die Frage im Raum: Wer arbeitet damit? (Antwort:
Keiner natürlich). Im allerbesten Fall kann man damit tatsächlich noch
sehr einfach zeigen, wie ein Computer funktioniert. Bspw. ein
Demoprogramm, bei dem auf eine Speicherstelle, die für eine
Rücksprungadresse reserviert wird, vor einem Sprung diese Speicherstelle
beschrieben wird, in ein Unterprogramm gesprungen wird. Soll aus der
Subroutine zurückgekehrt werden, wird der Rücksprung mittels SIU (was
für eine Mnemonic) realisiert:
indirekt unbedingt springen (auf Adresse die unter xxx steht).
Nach dieser Methode könnte sogar ein Stack realisiert werden. Alles in
allem wäre das ein neues "Spielzeug" ;-) und müßtest das eigentlich dann
CP2 nennen.
Ralph S. schrieb:> Michael W. schrieb:>>> cooool, dann kann ich das jetzt endlich (in meinem fortgeschrittenen>>> Alter) doch noch lernen ! ;-)>>>> Du und was lernen? Du weißt und kannst doch schon alles!>> Ach herjeh, bin ich dir irgendwann auf die Füße getreten? Wenn dem so> ist, war das sicherlich nicht meine Absicht. Sollte ich so "rüberkommen"> alles besser zu wissen, muß ich meine Art zu schreiben ändern, denn
Sorry, haben den ;-) und :-) vergessen!
> drauflegen. Ich spiele im allerbesten Falle obere zweite Bundesliga,> untere erste Bundesliga. Andere (eben hier vertretene Mitglieder des> Forums) spielen da wirklich Champions- und Euroleague.>> Schau dir mal an (wenn du so querliest), was ein Jörg W. ein Yalu oder> ein Frank M. drauf hat. Oder auch insbesondere ein Philip Klaus Krause.> Das sind die wirklich richtig guten! (Auch wenn das manche vllt. anders> sehen, von solchen Leuten lerne ich auch nach 40 Jahren noch).
Ach, die Kackordnung im Forum ist mir eigentlich ganz egal... mich
interessieren nur Projekte, und dass man was lernen kann. Ich arbeite
und lebe im Silicon Valley - da glaubt auch immer jeder er ist der
Größte, und dann guckt man sich den Code an, und dann wird durch 0
geteilt und was weiß ich nicht alles. Also, mit Wasser kochen doch alle.
Ob hier nun einer erimittierter Elektrotechnik-Professor,
Diesel-Motor-Steuerungs-"Optimierer" in der Aufomafia oder Hobby-Bastler
ist - ist mir egal, solange das Projekt interessant ist, und gut
durchgeführt ist. Das ist bei deinem Projekt sicherlich der Fall (für
mich). Natürlich ist das hoch subjektiv. Andere Projekte hier sind mir
komplett egal.
> hinzufügen geht auch, steuerbar über RS232 oder wenn man das mit einem> ES32 realisieren würde, sogar über WLAN.
In der Tat habe ich daran auch gedacht.
> Allerdings wäre es dann kein CP1 mehr.
Eine gute Frage - ab wann ist es "nicht mehr das Original"? Für mich ist
soetwas wie "The C64" z.B. komplett uninteressant, weil reine Software.
Wo beim CP1 die Grenze ist, kann ich nicht sagen - müsste ich einmal
direkt arbeiten mit Deinem CP1.
> Für mich ist das im Moment spielerei und ein Kasetteninterface werde ich> sicherlich nicht hinzufügen.
Klar. Wie so vieles hier.
> externes I2C EEProm damit mehr als nur 2 Programme gespeichert werden> können.
Da fände ich ein SDcard-Interface interessanter. Dann kann man Programme
auch vom PC editieren / aufladen. Und würde dann lieber gleich einen
ATmega mit mehr EEPROM Speicher nehmen, um Chipcount zu minimieren.
> Genausoviel Sinn macht ein CP1 Emulator. Macht Spaß das zu machen, aber> wirklich etwas damit anfangen kann man nicht.
Wie mit 80% aller anderen Projekte hier.
> Speichererweiterung wäre schon eine sehr starke Veränderung des> Maschineninterpreters: Der Adressbereich beträgt 8-Bit,
Das ist mir natürlich auch klar - der Original CP1 hat 128 Addressen.
Mit Speichererweiterung waren es 256. Wie beim Microtronic. Meine Frage
war - du hast also schon bis 0-999 Addressen implementiert? Die OpCodes
für Addressen sind alle 3stellig, insofern wäre es einfach möglich.
Falls Du natürlich intern nur ein Array mit 8Bit-Index für das RAM
verwendest, geht's nicht. Ich vermute einmal, dass Deine ATmega da nicht
genügend SRAM für hat. Denke, da wäre sonst ein größerer MCU
empfehlenswert? Anderseits - wer braucht schon so viel Speicher für
einen Lerncomputer...
> es steht immer noch die Frage im Raum: Wer arbeitet damit? (Antwort:> Keiner natürlich).
Wer "arbeitet" mit den ganzen anderen Projekten hier? Auch keiner.
> Nach dieser Methode könnte sogar ein Stack realisiert werden. Alles in> allem wäre das ein neues "Spielzeug" ;-) und müßtest das eigentlich dann> CP2 nennen.
Nein, CP2 ist das Kassettenmodul, CP3 die Speicherweiterung, CP4 das
Relaismodul, CP5 die IO-Erweiterung.
Vielleicht CP1+ ? :-)
Gruß
Michael
Michael W. schrieb:>> es steht immer noch die Frage im Raum: Wer arbeitet damit? (Antwort:>> Keiner natürlich).>> Wer "arbeitet" mit den ganzen anderen Projekten hier? Auch keiner.
Das würde ich so nicht unbedingt sehen. In diesem Fall ist es halt ein
Henne Ei Problem.
Aktuell bin ich auch auf der Suche nach Problemen (sinnvollen
Projekten). Lösungen habe ich schon genug. ;-)
Andreas B. schrieb:> Michael W. schrieb:>>> es steht immer noch die Frage im Raum: Wer arbeitet damit? (Antwort:>>> Keiner natürlich).>>>> Wer "arbeitet" mit den ganzen anderen Projekten hier? Auch keiner.> Das würde ich so nicht unbedingt sehen. In diesem Fall ist es halt ein> Henne Ei Problem.> Aktuell bin ich auch auf der Suche nach Problemen (sinnvollen> Projekten). Lösungen habe ich schon genug. ;-)
OK. Was sind denn die Top 10 Projekte, die hier Probleme lösen, für die
es keine besseren, günstigeren, oder relevanteren kommerziellen Lösungen
gibt?
(Bitte jetzt nicht die Wordclock, den MP3-Player für Kinder, oder den
Taschenrechner bringen... wohl gemerkt: ich sage ja nicht, dass das
keine tollen Leistungen und Projekte sind, lediglich, dass sie komplett
irrelevant sind und "keiner sie wirklich braucht" - ich habe größte
Hochachtung vor all diesen Projekten, bitte nicht falsch verstehen!)
Michael W. schrieb:> OK. Was sind denn die Top 10 Projekte, die hier Probleme lösen, für die> es keine besseren, günstigeren, oder relevanteren kommerziellen Lösungen> gibt?
Das ist mir im wesentlichen schon klar.
Obwohl es schon einige Sachen so nicht zu kaufen gibt.
GPS Logger (gibt es so nicht zu kaufen), Wetterstation (mit DB
Anbindung, auch nicht zu kaufen), Bluetoothgerätchen, Internetradio
(ohne nach Hause telefonieren, auch selten als Kaufgerät) habe ich schon
durch.
Auch obiges Gerät des TO gibt es nicht für diesen Preis zu kaufen. Daß
er damit jetzt nichts anfangen kann, ist halt das Henne-Ei Problem, das
ich schon erwähnte.
Etwas was ich irgendwie gebrauchen könnte, würde mir schon reichen. ;-)
Man kann immer etwas besser machen (für einem selbst zumindest) als in
kommerziellen Geräten.
Andreas B. schrieb:> Auch obiges Gerät des TO gibt es nicht für diesen Preis zu kaufen. Daß> er damit jetzt nichts anfangen kann, ist halt das Henne-Ei Problem, das> ich schon erwähnte.
Genau so ist es. Daher finde ich es interessanter und relevanter, als
viele andere Projekte. Retro-Computing-Projekte halt. Der Wert eines
solchen liegt ganz klar subjektiv im Auge des Betrachters. Aber selbst
als Microtronic-Fan finde ich das CP1-Projekt interessant. Anderen wird
es egal sein.
Und dass er damit nichts anfangen kann, glaube ich ja nicht. Sonst würde
er seine Zeit wohl eher mit was anderem verbringen. Auch wenn der Weg
das Ziel ist.
Ich würde mal vermuten, dass es dem TO eher um das Lostreten einer
Diskussion geht... was hiermit gelungen ist.
Andreas B. schrieb:> Man kann immer etwas besser machen (für einem selbst zumindest) als in> kommerziellen Geräten.
... das würde ich (in dieser Generalität der Aussage!) STARK
bezweifeln... ich zumindest kann's nicht, sorry. Ärgere mich schon lange
über den hohen Bezinverbrauch meines Autos.
Michael W. schrieb:> Ich würde mal vermuten, dass es dem TO eher um das Lostreten einer> Dikussion geht...
Ich denke eher, es war der andere Thread, der vom müden Joe initiiert
wurde.
Wenn man dann zufällig die Zutaten gerade in der Bastelkiste hat und es
gerade weihnachtet, kann es ja schon losgehen. ;-)
Andreas B. schrieb:> Michael W. schrieb:>> Ich würde mal vermuten, dass es dem TO eher um das Lostreten einer>> Dikussion geht...>> Ich denke eher, es war der andere Thread, der vom müden Joe initiiert> wurde.> Wenn man dann zufällig die Zutaten gerade in der Bastelkiste hat und es> gerade weihnachtet, kann es ja schon losgehen. ;-)
... klar, das Ding war ja auch in 5 bis 6 Stunden fertig programmiert
(OT). Wer's glaubt :-)
Michael W. schrieb:> ... klar, das Ding war ja auch in 5 bis 6 Stunden fertig programmiert> (OT). Wer's glaubt :-)
Oh, wenn einem der Ehrgeiz erst einmal gepackt hat.... Ich kann das
nachvollziehen.
Andreas B. schrieb:> Michael W. schrieb:>> ... klar, das Ding war ja auch in 5 bis 6 Stunden fertig programmiert>> (OT). Wer's glaubt :-)> Oh, wenn einem der Ehrgeiz erst einmal gepackt hat.... Ich kann das> nachvollziehen.
Na ja, ich hatte damals ca. 40 Stunden gebraucht, bis ich den
Microtronic-Interpreter fertig hatte. Allerdings hat der Microtronic
auch wesentlich mehr (und komplexere) Instruktionen.
Michael W. schrieb:> Das ist mir natürlich auch klar - der Original CP1 hat 128 Addressen.> Mit Speichererweiterung waren es 256. Wie beim Microtronic. Meine Frage> war - du hast also schon bis 0-999 Addressen implementiert? Die OpCodes> für Addressen sind alle 3stellig, insofern wäre es einfach möglich.
Nein habe ich nicht gemacht, und ich glaube auch, dass ich das nicht
machen werde, auch wenn es nicht der große Aufwand wäre. Es ist alles
nicht so sehr der Aufwand (sieht man mal vom Steckbrett ab, da hat mich
das schon etwas Zeit gekostet). 999 Adressen zu dekodieren wäre
eigentlich überhaupt kein Problem. Alle uint8_t ändern in uint9_t.
Abfrage nicht nach größer als 255 sondern größer als 999.
Anstelle ATmega8 einen ATmega328 (der hat 2 kByte Ram) nehmen. Hier
wären dann auch 1 kByte EEProm verfügbar, was für 4 Programme zum
Speichern reichen würde. Irgendwo in meinen Sourcequellen hatte ich auch
mal eine dynamische Speicherverwaltung für EEProm geschrieben gehabt,
mit Dateilänge und Platzbedarf im EEProm als verkettete Liste. Dann
wären mehr Programme speicherbar, weil ja nicht jedes den vollen
Speicher auschöpft.
Im Moment läuft mein Aufbau auf dem Steckbrett, nur stimmt mein Timing
nicht mehr (die eine Millisekunde), weil der TM1637 ein anderes Timing
hat. Ich denke ich werde das über einen Timerinterrupt machen, dann
brauche ich nicht wirklich "fummeln" dass die eine Millisekunde in etwa
stimmt.
Machen könnte man vieles. Wenn ich mir meinen Aufbau so ansehe, ist das
an sich viel zu "schön" um das wieder abzureisen und ich bin noch n
bissi hin- und hergerissen, ob ich für so etwas tatsächlich eine Platine
routen und noch "schlimmer" herstellen lassen soll. Irgendwie wäre es
witzig das in der Schublade liegen zu haben.
Mal sehen...
Michael W. schrieb:> ... klar, das Ding war ja auch in 5 bis 6 Stunden fertig programmiert> (OT). Wer's glaubt :-)
Ich hatte 6 bis 8 Stunden geschrieben gehabt (in den Sourcen war ja
schon das I/O Interface fertig, das mußte nur angepasst werden).
;-) jetzt sind es aber schon wieder ca. 6 Stunden für den Aufbau und das
Ändern des I/O Interface auf TM1637, weil der, obwohl derselbe
Hersteller wie TM1638, doch sehr anderst funktioniert.
Geh mal davon aus, daß er einen Großteil der SW schon für andere
Projekte entwickelt hatte.
Das Nachdenken davor und die Recherche dürften in diesen 5-6h auch nicht
drin sein. Schönrechnen tu ich mir meine Arbeitszeit für solche Projekte
übrigens auch. ;-)
Edit:
Ralph S. schrieb:> jetzt sind es aber schon wieder ca. 6 Stunden für den Aufbau
Und Schwuppdiwupp sind es schon 16h. ;-)
Ralph S. schrieb:> tatsächlich eine Platine> routen und noch "schlimmer" herstellen lassen soll. Irgendwie wäre es> witzig das in der Schublade liegen zu haben.
Mach doch - ich würde in jedem Fall eine haben wollen von Dir. Aber
bitte zusammengebaut; bin immer recht faul was das Zusammenbauen von
Projekten anderer angeht. Meine Zeit benötigt ich für meine eigenen
Projekte ;-)
Wenn Du es behalten willst hätte ich einen Vorschlag: Den Arduino mit
Heißkleber hinten auf die Anzeigeplatine kleben und frei verdrahten. Das
macht nicht viel Arbeit und bleibt so jahrzehntelang in der Schublade
funktionsfähig.
Deine Nachkommen können dann raten was das mal für eine Bedeutung hatte.
Michael W. schrieb:> Wer "arbeitet" mit den ganzen anderen Projekten hier? Auch keiner.
Da ich kein Geld verschwenden kann, habe ich noch nie ein Projekt
gemacht das kein direkten Nutzen hat. OK. Lebenswichtig ist keins. Aber
alle Projekte haben einen Realen Nutzen.
Und ich denke das selbst meine Modellbauprojekte (mit Arduino für die
Steuerungen und Beleuchtung) min. 10 Jahre in der Vitrine stehen dürfen.
Das aktuelle Projekt (weit Fortgeschrittene Planung) wird sogar direkt
neben mein Bett liegen und im Schnitt 20 x am Tag benutzt werden.
Schlaumaier schrieb:> Michael W. schrieb:>> Wer "arbeitet" mit den ganzen anderen Projekten hier? Auch keiner.>> Da ich kein Geld verschwenden kann, habe ich noch nie ein Projekt> gemacht das kein direkten Nutzen hat. OK. Lebenswichtig ist keins. Aber> alle Projekte haben einen Realen Nutzen.>> Und ich denke das selbst meine Modellbauprojekte (mit Arduino für die> Steuerungen und Beleuchtung) min. 10 Jahre in der Vitrine stehen dürfen.>> Das aktuelle Projekt (weit Fortgeschrittene Planung) wird sogar direkt> neben mein Bett liegen und im Schnitt 20 x am Tag benutzt werden.
Du hast mein Kriterium für "Relevant" falsch verstanden. Es geht nicht
darum ob Du ein Projekt, dass DU für DICH SELBST aufbaust, benutzt. Das
wäre ja das mindeste bzw. reichlich bescheuert, wenn man Resourcen in
etwas steckt, dass man dann nie benutzt. ES SEI DENN man hat einfach
Spaß an dem Prozess und insbesondere dem Lernprozess, der beim Aufbau
eines Projektes als Seiteneffekt abfällt, und dessen Wert sich monitär
schlecht beziffern lässt.
Es geht daraum, ob das Projekt dass Du Dir aufbaust, in dieser Form
nicht komerziell "besser, relevanter oder kostengünstiger", sprich
rationaler, verfügbar ist auf dem Markt. Für den CP1 ist das nicht der
Fall, insofern ist es relevant. Man kann es nicht kaufen in dieser Form,
noch nicht einmal etwas Ähnliches.
Ich habe mir auch eine Alarmuhr aufgebaut, die ich jeden Tag 100x
benutze (gucke drauf). Ist das Ding nun relevant? Nein. Ist es nicht.
https://blog.arduino.cc/2019/06/19/intuitive-arduino-clock-has-seven-alarms-and-three-led-displays/
Michael W. schrieb:> Es geht daraum, ob das Projekt dass Du Dir aufbaust, in dieser Form> nicht komerziell "besser, relevanter oder kostengünstiger", sprich> rationaler, verfügbar ist auf dem Markt.
Mein aktuelles Projekt wird NIEMALS in irgendeiner ähnlichen Form auf
den Markt kommen.
Was deine Aussage angeht. Etwas weiter oben habe ich den TO gefragt wo
er das "China-Modul" her hat. Ich bin locker in der Lage dieses Modul
nachzubauen. Aber der Kosten-/Nutzenfaktor geht weit über das Ziel
hinaus.
Weshalb ich mir auch das Modul + 3 Modul ohne LED-Anzeige gekauft habe.
Nur ist wie beim TO das Modul nur ein kleiner Teil des ganzen Projekt.
Ich mache nur die Platinen selbst die mir entweder zu teuer sind (ich
kann's Preiswerter = nur Material) oder zu schwer zu beschaffen sind.
Und die Platinen die ich brauche um die Module und Co. zusammen
zuhalten. Meine wichtigster Footprint ist dabei der des Arudino-Nano.
Für eine fertige 2 Euro Platine löte ich kein Chip auf eine Platine. ;)
Wobei mir persönlich die ganze Elektronik nur 30 % Spass macht. Viel
mehr Spaß macht es, via Software das ganze so zu steuern das es für MICH
Perfekt ist.
Kommerziell würde ich allein schon wegen der ganzen Rechtlichen
Vorschriften NIEMALS eins meiner Teile verkaufen.
Schlaumaier schrieb:> Ich mache nur die Platinen selbst die mir entweder zu teuer sind (ich> kann's Preiswerter = nur Material) oder zu schwer zu beschaffen sind.> Und die Platinen die ich brauche um die Module und Co. zusammen> zuhalten. Meine wichtigster Footprint ist dabei der des Arudino-Nano.> Für eine fertige 2 Euro Platine löte ich kein Chip auf eine Platine. ;)
Wage ich zu bezweifeln. Ich bekommen bei Seeed Studio 30 Platinen inkl.
Shipping im 15x15cm Format, 2lagig, für 80 $... Das sind weniger als 2 $
per Platine wenn man Shipping abzieht.
> Kommerziell würde ich allein schon wegen der ganzen Rechtlichen> Vorschriften NIEMALS eins meiner Teile verkaufen.
Sorry, Du hast es immer noch nicht verstanden. Um's Verkaufen gehts
nicht. Sondern darum, ob Du etwas vergleichbares KAUFEN kannst.
Michael W. schrieb:> Wage ich zu bezweifeln. Ich bekommen bei Seeed Studio 30 Platinen inkl.> Shipping im 15x15cm Format, 2lagig, für 80 $... Das sind weniger als 2 $> per Platine wenn man Shipping abzieht.
Das sind ja nach Kurs 160 Euro. Ich mache meine Platine !! für locker
unter deine 2 Euro. Ich wage mal zu bezweifeln das dein SEEED dir 1
einzelne kleine Platine macht. Und genau darum geht es. Um eine kleine
Platine.
Das einzige mal wo ich 4 Platinen von gleichen Typ hergestellt habe, war
die Platine 10 x 10 mm groß und eine Adapterplatine für ein
Anschlusskabel eines Display. Die gab es mal fertig zu kaufen (Mouser
hat sie sogar noch) aber da war der Aufwand etc. mir zu hoch.
Ich fertige die Platine erst wenn alles fertig ist. Dann mal eben
beleuchten, 2 x baden und bohren. Das ganze dauert keine 1-2 Stunden je
nachdem wie schnell ich arbeite. Dafür muss ich meine Platine nicht um
den halben Planeten schicken und 2 -4 Wochen drauf warten.
Aber das Thema habe ich schon in mehreren Threads hier diskutiert. Und
das ganze ich für mich eh nur ein Hobby wie Fotografieren. Ich mache es
gern wenn ich Bock habe. Da kann es auch mal passieren das ich das ganze
einige Jahre nicht anrühre.
Schlaumaier schrieb:> Das sind ja nach Kurs 160 Euro. Ich mache meine Platine !! für locker> unter deine 2 Euro. Ich wage mal zu bezweifeln das dein SEEED dir 1> einzelne kleine Platine macht. Und genau darum geht es. Um eine kleine> Platine.
Hmm... jetzt wird's etwas irrational.
OK... habe ich schon verstanden. Und finde ich auch sehr eindrucksvoll
und super, wenn man das selber kann. Sinnvoll ist das heutzutage
allerdings nicht mehr. Kannst Du VIAs, doppelseitig, etc.? Und wenn Du
mal die Zeit berechnest, die Du alleine zum Löcherbohren per Hand
aufwendest, oder die Kosten fürs Equipment und Chemikalien einpreist,
kommst Du bestimmt auf mehr als 2 EUR... von der geringeren Komplexität
solcher (einlagigen?) Platinen einmal abgesehen.
EDIT: ja, für eine einzelne Platine geht's nicht. 10 mindestens. Und
davon wandern dann 8 oder so in die Tonne - manchmal mache ich ein paar
Versionen für Bekannte / Freunde. Es stimmt, das Services wie OshPark
WESENTLICH teuerer sind. Da müssen es mindestens 3 Platinen sein. Zum
Preis von 30 bei Seeed :-)
Mich würde ja interessieren, was die komplexeste selbstgemachte Platine
bei Dir ist. Wieviele Vias, wieviele Bohrungen, Abmessungen, Anzahl
Verbindungen? Doppelseitig?
Michael W. schrieb:> Und wenn Du> mal die Zeit berechnest, die Du alleine zum Löcherbohren per Hand> aufwendest, oder die Kosten fürs Equipment und Chemikalien einpreist,> kommst Du bestimmt auf mehr als 2 EUR
hm. Nö. Ich habe max. 100 Löcher in einer Platine bisher gehabt. Der
Rest ist SMD. Die Chemikalien werden ja nicht schlecht wenn man mal eine
Platine badet. Das Zeug wird zwar irgendwann gesättigt aber das sind
viele Platinen. Ich bringe alle 2-3 Jahre 2 Literflaschen mit Zeug zum
Sondermüllauto. Das ist alles. Und das sind dann schon einiges an
Platinen.
Kosten fürs Equipment : OK. Die Anschaffung für mein 20 Jahre alten
Dremel waren schon hoch. Aber was der alles leisten musste (nicht nur
Elektonik) ist enorm. Und wenn mir kein Bohrer abbricht sind die Kosten
auch überschaubar (3 Stück = 5 Euro im Baumarkt).
Die Kosten für die Chemie. Alle paar Jahre mal ein Starterset von
Reichelt für ca. 10-15 Euro.
Und ZEIT: *O.K.* bei den Faktor hast du völlig recht. Aber, das ist
HOBBY und Hobby ist halt die schönste Art seine Zeit zu verschwenden. ;)
Ansonsten läge ich in der Zeit vermutlich vor den Fernseher und würde
PAY-TV gucken. ;) oder mein Geld bei "Freizeitaktivitäten" verschwenden,
die z.T. nicht gut für meine Gesundheit sind, lt. Aussage der Regierung
;)
Falls es Euch interessiert - hier ist Matze sein Ding.
https://www.rigert.com/ee-forum/viewtopic.php?f=35&p=16040#p16040
Er hat damals (vorletztes Jahr?) den ersten CP1-Atmega Emulator auf die
Beine gestellt.
Könnte mir gut vorstellen, dass dieser Beitrag jetzt wieder ignoriert
wird, aber so ist es hier nun einmal :D
"... ich habe fertig, ist wie Flasche leer"
Immer dann wenn man es nicht gebrauchen kann, "spinnt" mein Hauptrechner
so dass ich meinen Schaltplan jetzt zig mal gezeichnet habe. Aber: was
lange währt und nervig ist wird endlich fertig.
Mein kleines Miniprojekt mit dem Kosmos CP1 (auf Steckbrett).
Als IC's (wie oben erwähnt) werden lediglich ein ATmega8 88 168 /
328 und ein Anzeigen- und Tastentreiberbaustein TM1637 (gibts für 30 ct.
beim Chinesen des Vertrauens).
Prinzipiell war es das schon (wie man auf dem Schaltplan sehen kann).
Damit es wirklich minimalistisch ist, wurde dem ATmega sogar ein Quarz
verweigert und er läuft mit 8 MHz internem Takt. Zum ersten mal habe ich
einen OPTI-Bootloader ohne Quarz am laufen, AVRDUDE kommt jedoch sehr
gut damit zurecht:
Die 10 Zifferntasten sind doppelt belegt, d.h. zum Anwählen einer
Funktionstaste muß die Shifttaste gedrückt werden.
Im Hauptprogramm kann die maximale Anzahl der Speicherplätze angegeben
werden, derzeit sind 128 eingestellt. Das hat den Grund (mehr wäre
möglich) damit im internen EEProm 2 Programme gespeichert werden können
(zum Original abweichende Funktion, da keiner mehr mit Kasetten als
Speichermedium mehr arbeitet).
Genau 2 Pins sind noch verfügbar, hier wäre denkbar, ein I2C EEProm
anzuschließen, damit mehr Programme speicherbar sind.
Ein Video vom Ganzen gibt es auch (sorry der schlechten Qualität wegen):
https://www.youtube.com/watch?v=RQkwm0jpxF0
Was man damit anstellen kann: das darf jeder selbst herausfinden. Das
originale Manual von Kosmos war - damals typisch - didaktisch gut
verfasst und hat wirklich halbwegs erläutert, wie ein Computer
funktioniert. Das hat erstaunlicherweise heute noch Gültigkeit.
Für Spielfreudige liefert dieses Miniprojekt eine gute Basis, die
Mnemonic des CP1 nach Herzenslust zu erweitern oder zu verändern. Au0er
einem rudimentären ADD und SUB und bedingte Sprungbefehle ist da nichts
vorhanden. Hier kann jeder nach gutdünken bspw. inc, dec, mul, div oder
ähnliches hinzufügen.
Einzig die Konstanten für die max. Anzahl Opcodes muß hier verändert
werden und kann dann beim Maschineninterpreter in "cpu_run" verändert
werden.
Ich habe jetzt ein Weile damit gespielt und war in Nostalgie verfallen
und ich werde tatsächlich mich dran setzen und eine Platine routen.
Viel Spaß denjenigen, die das nachbauen möchten,
JJ
Schlaumaier schrieb:> Da ich kein Geld verschwenden kann, habe ich noch nie ein Projekt> gemacht das kein direkten Nutzen hat. OK. Lebenswichtig ist keins. Aber> alle Projekte haben einen Realen Nutzen.
Nun, da wird es mit den meisten Hobbys eng. Wer den ganzen Vormittag auf
dem Rasen steht und kleine Bälle durch die Gegend schlägt schafft nichts
produktives, wer auf Berge klettert oder mit dem Fahrrad runterperzt
auch nicht. Und den halben Tag eine Schnur ins Wasser hängen um einen
Fisch rauszuholen? Bei meinem Stundenlohn kann ich besser die Metro
leerkaufen. Aber irgendwie ist der Sinn eines Hobbys ein anderer, oder?
Deshalb ist dieser Kosmos auch langweilig sobald er läuft. Der Weg ist
das Ziel, d.h. das Austüfteln und Aufbauen. Nicht das Haben.
O. R. schrieb:> Deshalb ist dieser Kosmos auch langweilig sobald er läuft. Der Weg ist> das Ziel, d.h. das Austüfteln und Aufbauen. Nicht das Haben.
Für den, der es gemacht hat, ja.
Für den, der damit lernen will, fängt es damit erst an.
ich hätte nicht gedacht, dass so ein kleines Spaßprojekt eine Diskussion
eröffnet(irgendwo oben hat irgendjemand geschrieben, dass ich wohl eine
Diskussion "lostreten" wollte, dem ist nicht so).
Über den Sinn Unsinn oder Relevanz Nichtrelevanz muß und sollte man
sich hier nicht streiten. Natürlich ist der Weg das Ziel und das
Schwelgen in Nostalgie mit den Gedanken, was man früher damit hätte
machen können. Auch die Gedankengänge die man hat, wie man das vllt.
umbauen könnte. Oder eben doch eine Schaltung mit 8-stelliger Anzeige,
damit man sehen kann, auf welche Adresse man gerade schreibt. Terminal
für verbesserte Eingabe. ;-) sogar an einen Minimalassembler (mit vllt.
veränderter und gängigerer Mnemonic um das dann auf den CP1 Emulator zu
schieben).
Viele viele Möglichkeiten, aber wie gesagt, darüber was
besser/schlechter ist und Sinn und Unsinn zu debatieren bei einem
Hobby...
Im Gegensatz zum Vorredner mache ich viele Projekte die keine Relevanz
haben oder unnötig sind. Bsp.: Ich habe einen sehr guten PADAUK
Programmer mit allem was man sich wünscht für einen Programmer. Dennoch
hab ich es mir in den Kopf gesetzt mit einem anderen Controller einen
weiteren Programmer zu erstellen. Warum nur, wenn man doch mit einem
Programmer wunschlos glücklich ist? Vllt. nur deshalb, weil andere
diesen "wunschlos glücklich" Programmer nicht aufbauen können oder
keinen Weg finden an einen Programmer erschwinglich zu kommen.
Nützlicher wäre es hier, weiter die Padauk Controller zu evaluieren und
was man damit anstellen kann.
Jedes Projekt auf µC.net sollte die Leute auf Ideen bringen etwas zu
bewerkstelligen, zu lernen .... oder auch nur mit offenem Mund zu
staunen.
Ralph S. schrieb:> ich hätte nicht gedacht, dass so ein kleines Spaßprojekt eine Diskussion> eröffnet(irgendwo oben hat irgendjemand geschrieben, dass ich wohl eine> Diskussion "lostreten" wollte, dem ist nicht so).>> Über den Sinn Unsinn oder Relevanz Nichtrelevanz muß und sollte man> sich hier nicht streiten. Natürlich ist der Weg das Ziel
Prima, dann sind wir uns ja einig :-) Schönes Projekt, habe ich von
Anfang an gesagt.
Sehe ich anders, da DU doch derjenige warst, der immer gesagt hat - ach
Mensch, was mach ich jetzt damit? Soll ich das wirklich machen? Soll ich
jetzt ein PCB machen oder nicht? Und dann kamen andere die sagten wie
viel Resourcenverschwendung soetwas ist und so weiter.
Das verstehe ich entweder als a) bitte um positives Reinforcement (bitte
bitte, mache es doch! OK - hast Du von mir bekommen, und ich möchte
immer noch eine PCB-Version bitte), oder als b) Aufforderung zur
Diskussion.
NOCH VIEL SCHLIMMER wäre natürlich, wenn hier inzwischen einige
Mitglieder im Forum der Meinung sind, sie müssten ihr Projekt vor den
Allmächtigen Almighty Oberste Europa-Liga-Spielern proaktiv verteidigen,
bevor sie verbale Prügel beziehen...
Sorry wenn ich das missverstanden habe.
Was mir an der "Diskussionskultur" hier überhaupt nicht gefällt, ist:
- Projekte die sowas ähnliches schon früher gemacht werden, werden
einfach ignoriert und nicht mit einer Zeile kommentiert
- alle haben immer was rumzumeckern - macht doch selbst sowas Tolles wie
der OT, anstatt immer Rumzumosern!
- Kackordnung - ist ja toll, wenn es hier so super Entwickler gibt -
dann verwendet Euer Talent doch bitte darauf, andere (noch) nicht so
tolle Entwickler konstruktiv und freundlich zu unterweisen!
> Jedes Projekt auf µC.net sollte die Leute auf Ideen bringen etwas zu> bewerkstelligen, zu lernen .... oder auch nur mit offenem Mund zu> staunen.
Ein schönes Schlusswort!
Schlaumaier schrieb:> Kommerziell würde ich allein schon wegen der ganzen Rechtlichen> Vorschriften NIEMALS eins meiner Teile verkaufen.
Mein Gott... wenn Steve Jobs damals auf die Bänker und Paragraphenfurzer
einen gelassen hätte, hätten wir jetzt wohl kein IPhone... bzw. Apple
wäre niemals aus der Garage rausgekommen. (Falls sie denn überhaupt
angefangen hätten in der Garage).
Das ist GENAU das Problem in Deutschland, und der Grund, warum
Deutschland technologisch den Anschluss verloren hat.
O. R. schrieb:> Bei meinem Stundenlohn kann ich besser die Metro> leerkaufen.
Na, super - wieviel verdienst Du denn pro Stunde. Nur für den Fall dass
Du noch mehr Diskussion und Bestätigung benötigst? Können wir gerne
drüber reden.
Michael W. schrieb:> Mein Gott... wenn Steve Jobs damals auf die Bänker und Paragraphenfurzer> einen gelassen hätte, hätten wir jetzt wohl kein IPhone... bzw. Apple> wäre niemals aus der Garage rausgekommen. (Falls sie denn überhaupt> angefangen hätten in der Garage).>> Das ist GENAU das Problem in Deutschland, und der Grund, warum> Deutschland technologisch den Anschluss verloren hat.
Was bei einen IPhone nicht schlecht gewesen wäre ;) Davon abgesehen, wer
die Geschichte von Apple kennt weiß das auch Apple an "Bänker und
Paragraphenfurzer" fast verreckt wäre.
Und diese "Bänker und Paragraphenfurzer" sind genau die Leute die nix
auf die Reihe bekommen aber anderen Leuten sagen wollen, wie sie was
machen müssen. Der Grund ist, die Neuheit verschwindet in den
Schubladen.
Ich will nicht wirklich wissen wie viele Geniale Projekte Typen wie ich
zu Hause nutzen, wie aber wegen den ganze Rechtlichen Mist niemals die
Wohnung verlassen werden.
Michael W. schrieb:> Und dann kamen andere die sagten wie> viel Resourcenverschwendung soetwas ist und so weiter.
Hmm, also ich sehe hier keinen einzigen Beitrag, der in diese Richtung
zielt.
Jetzt habe ich doch eine Platine geroutet (und die sogar schon
weggeschickt,bin ich mal gespannt, wie lange das dauert bist die da
ist).
Damit auf der Hardware etwas Spielraum zum Spielen (Achtung Wortwitz ;-)
habe ich die Schaltung etwas erweitert:
- Es kann ein CH340G als USB2UART Bridge bestückt werden und somit wird
kein externer Adapter benötigt.
- USB-Buchse dient zur Stromversorgung auch dann, wenn kein CH340G
bestückt ist.
- Ein Quarzsockel kann bestückt werden, wenn das gewollt ist. In diesem
Falle verhält sich die Platine dann wie ein China-Arduino Clone (je nach
bestücktem Controller)
- Auf Port 1 sind die ISP-Pins um den Controller das erste mal zu
flashen
- Es kann ein I2C EEProm bestückt werden, hierzu müssen dann 2
Lötbrücken gelötet werden. Bei Betrieb mit EEProm darf kein Quarz
verwendet werden (das EEProm verwendet die Leitungen an denen auch der
Quarz angeschlossen ist).
Somit kann die Hardware, wenn man des CP1 überdrüssig ist, als einfaches
AVR-Experimentierboard mit 7-Segmentanzeige, Tasten und
Leuchtdiodenreihe (oder auch als Arduino... was ich nicht machen werde)
verwendet werden.
Im Kopf habe ich ein paar Dinge, den CP1-Clone nach eigenem Gusto zu
erweitern, somit hab ich dann wenn Langeweile aufkommt, etwas zum
Werkeln. Aus diesem Grunde wird das dann auch mit einem ATmega328
bestückt werden.
Ralph S. schrieb:> Jetzt habe ich doch eine Platine geroutet (und die sogar schon> weggeschickt,bin ich mal gespannt, wie lange das dauert bist die da> ist).
Yippee!! Ich melde schon einmal Interesse an einem PCB an! Super Sache,
vielen Dank für die Arbeit!
Ich habe ein bisschen an dem Emulator gespielt (nachdem ich beim
Padauk-Programmer nur gaaaaanz langsam vorwärts komme). Der CP1-Clone
hat ein Terminalprogramm bekommen und ich habe mir erlaubt, die
originale Mnemonic zu ändern (die natürlich kompatibel zu originalen CP1
ist).
Aus Copyrightgründen hat das Zilog ja auch mal mit ihrem Z80 so gemacht
gehabt. Die waren Softwarekompatibel (die CPU nicht Pinkompatibel) mit
auch veränderter Mnemonic. Lustigerweise (obwohl schon lange kein
Intel-Fan mehr) bin ich von der Mnemonic Intel-Afine. Von 8086 bis
80386. MCS-48 und MCS-51.
Hm, von daher... kann jeder die Mnemonic ändern wie er mag.
Der Nachteil des Terminal ist: Es passt nicht mehr in einen ATmega8
hinein. Die Dateien sind etwas "aufgeräumt", in cp1_config.h kann
eingestellt werden, ob es das Terminal geben soll oder nicht.
Was das Terminal kann?
Es kann einen Maschinenbefehl mit ihrer Mnemonic eingegeben werden,
z.Bsp.:
mvi a,90
geht dann.
Es kann die aktuelle Speicheradresse gesetzt werden und es kann der
Speicherinhalt disassembliert werden.
Meine Mnemonic lautet (vllt. hat da ja jemand andere Vorschläge) ist im
Anhang zu sehen.
Mal sehen, wann ich auf den CP1 wieder Lust habe, ein paar Ideen habe
ich noch, um daraus (vllt. auch für heute) etwas brauchbares zu machen.
Im Moment läuft es mit einem ATmega168, schlicht deshalb weil ich mir
einen 328er verfused habe (nicht mal weiß warum) und ich im Moment keine
Möglichkeit habe, den zurück zu setzen. Momentan benötigt das Programm
10396 Bytes.
Michael W. schrieb:> O. R. schrieb:>> Bei meinem Stundenlohn kann ich besser die Metro>> leerkaufen.>> Na, super - wieviel verdienst Du denn pro Stunde. Nur für den Fall dass> Du noch mehr Diskussion und Bestätigung benötigst? Können wir gerne> drüber reden.
Herrlich, was man mit einem aus dem Zusammenhang gerissenen Zitat doch
für Verwirrung stiften kann! Der komplette Text, in dem es um die
Befürwortung des Hobbys als Freizeitbeschäftigung ohne Fokus auf
wirtschaftliche Optimierung ging, liest sich doch ganz anders:
"Und den halben Tag eine Schnur ins Wasser hängen um einen
Fisch rauszuholen? Bei meinem Stundenlohn kann ich besser die Metro
leerkaufen. Aber irgendwie ist der Sinn eines Hobbys ein anderer, oder?"
O. R. schrieb:> "Und den halben Tag eine Schnur ins Wasser hängen um einen> Fisch rauszuholen? Bei meinem Stundenlohn kann ich besser die Metro> leerkaufen. Aber irgendwie ist der Sinn eines Hobbys ein anderer, oder?"O. R. schrieb:> wirtschaftliche Optimierung ging, liest sich doch ganz anders:
Und die Aussage kann man nur mit Referenz auf Deinen astronomisch hohen
Stundenlohn machen? Klingt für mich nach Prozerei.
Ralph S. schrieb:> Es kann einen Maschinenbefehl mit ihrer Mnemonic eingegeben werden,
Sehr schön. Obwohl die Eingabe von Opcodes bzw. direktes Arbeiten mit
Maschinencode ja eigentlich auch Teil der Experience ist ;-) Aber sehr
schön dass es die Möglichkeit gibt.
Mein Graymark 809 CPU Trainer (ein 8085) hat auch so eine
Terminal-Schnittstelle.
Michael W. schrieb:> O. R. schrieb:>> wirtschaftliche Optimierung ging, liest sich doch ganz anders:>> Und die Aussage kann man nur mit Referenz auf Deinen astronomisch hohen> Stundenlohn machen? Klingt für mich nach Prozerei.
Naja, wieviele Stunden müsstest DU arbeiten gehen um Dir einen Fisch
leisten zu können, für den Du sonst einen Nachmittag angeln gehen
würdest? Ich glaube, so hoch braucht der Stundenlohn nicht zu sein um
dieses Hobby aus rein ökonomischer Sicht unwirtschaftlich zu machen. Von
dem, was so mancher dann noch in seine Ausrüstung investiert wollen wir
gar nicht sprechen.
Und das gilt schon irgendwie für die meisten Hobbys. Man macht es aus
Freude daran, nicht um Geld zu sparen.
Was für eine Diskussion hier ! Ehrlich, ich schüttel den Kopf !
Im Moment bin ich an meinem PFS154 Programmer, auch wenn der CP1-Clone
(heftig) gewachsen ist. Er hat jetzt 65 Opcodes und einen davon habe ich
"int" genannt. Deshalb, damit ähnlich dem Vorgehen wie damals auf
DOS-Maschinen, wo ein "int" auf Maschinenebene ein Bios-Call war (es
wurde damals "Softwareinterrupt" genannt auf dem CP1-Clone Funktionen
integriert sein können, die dann mittels diesem "int" aufrufbar sind.
Aber wie gesagt, im Moment bin ich an meinem PFS154 dran
Ralph S. schrieb:> Was für eine Diskussion hier ! Ehrlich, ich schüttel den Kopf !>> Im Moment bin ich an meinem PFS154 Programmer, auch wenn der CP1-Clone> (heftig) gewachsen ist. Er hat jetzt 65 Opcodes und einen davon habe ich> "int" genannt. Deshalb, damit ähnlich dem Vorgehen wie damals auf> DOS-Maschinen, wo ein "int" auf Maschinenebene ein Bios-Call war (es> wurde damals "Softwareinterrupt" genannt auf dem CP1-Clone Funktionen> integriert sein können, die dann mittels diesem "int" aufrufbar sind.>> Aber wie gesagt, im Moment bin ich an meinem PFS154 dran
Gute Idee. Leider ist das im Microtronic nicht möglich, da alle
möglichen Opcodes schon belegt sind.
Michael W. schrieb:> bzw. Apple> wäre niemals aus der Garage rausgekommen.
waren sie auch nie drin. Das hat der andere Steve selbst erzählt. Das
Zeug kam von HP und wurde da nur zwischengelagert.
Und die Entstehungsgeschichten von google, facebook, microsoft, ... -
sind genauso Blödsinn.
Soul E. schrieb:> Naja, wieviele Stunden müsstest DU arbeiten gehen um Dir einen Fisch> leisten zu können,
Ich ess' gar kein Fisch. Zu viel Quecksilber und Schwermetalle gehen ins
Gehirn, da habe ich schon vom Löten genug intus.
Ralph schrieb:
"Natürlich kann man das alles um den CP1 erweitern, nur dann ist es kein
CP1 mehr."
Hallo, Ralph.
Ich stimme dir zu. Aber ich denke auch, dass eine gewisse Evolution
erlaubt ist. Schönes Beispiel: Die Anzeige der Adresse. Oder die
Erweiterung um den OR-Befehl.
Darum denke ich, die Erweiterung sollte ein Superset des originären CP1
sein. Das heißt, das neue Gerät funktioniert genauso wie der alte CP1,
plus die Erweiterungen. So kann die alte Anleitung verwendet werden. Das
macht Spaß! :-)
Michael W. schrieb:> Das Zauberwort heißt existierende Software,> Anleitungsbücher & Elektronik-Experimente! Diese sind durchaus auch> heute noch didaktisch empfehlenswert, für Einsteiger.
Ralph, hast Du schon einmal versucht, Experimente aus dem Anleitungsbuch
anzuschließen? Ich hatte beim Microtronic-Emulator ein kleineres Problem
mit zusätzlichen erforderlichen Pulldowns:
https://youtu.be/JfIkLdMjFq4
Zum Glück haben meine Projekt-Partner im "Microtronic 2nd Generation"
Sister-Projekt (Frank und Manfred) das richtig gemacht, und die
Eingangs/ Ausgangsstufen der GPIOs wie im Original nachgebaut, damit die
Experimente maximal elektrisch kompatibel sind. Ich wollte mir
allerdings die Transistoren sparen. Der CP1 hat sowas allerdings nicht.
Da gehen die Ports direkt auf den Chip, richtig?
Wie man im Originalschaltplan sehen kann, geht CP1 - Port1 direkt zum
8049 Controller, Port2 zum I/O Baustein 8155 (hier dann PortB).
Scheinbar wurde der verfügbarer Speicher im 8049 derart knapp, dass
Port2 des CP1, jetzt nicht zu verwechseln mit Port2 / 8049, nur als
Ausgang konfiguriert wurde und somit nur zwischen 1 und schaltet.
Port1 des 8049 ist ähnlich dem eines MCS-51 und kennt nicht wie heutige
Controller so etwas wie ein "Datenrichtungsregister". Will man dort von
einem Port lesen, ist zuvor der Ausgang auf 1 zu legen um dann den Pin
abzufragen, ob dieser, obwohl man den zuvor auf 1 gesetzt hatte, nun 1
oder 0 ist. Ein 3-state Modus gibt es auf Port1 und 2 des CP1 nicht.
Die am Port1 angeschlossene Elektronik muß die Leitung auf 0 ziehen.
Das erreicht man mit den eingebauten Pullup-Widerständen gut. Als
Ausgang verschaltet müßte man jetzt einmal nachsehen, wieviel Strom bei
jeweils 0/1 ein ATmega aufnehmen, bzw. liefern kann und wieviel Strom
ein 8049 bzw. ein 8155 kann.
Allerdings glaube ich, dass ein AVR das alles so auch kann.
dummer Unwissender schrieb:> Ein 3-state Modus gibt es auf Port1 und 2 des CP1 nicht.> Die am Port1 angeschlossene Elektronik muß die Leitung auf 0 ziehen.> Das erreicht man mit den eingebauten Pullup-Widerständen gut. Als> Ausgang verschaltet müßte man jetzt einmal nachsehen, wieviel Strom bei> jeweils 0/1 ein ATmega aufnehmen, bzw. liefern kann und wieviel Strom> ein 8049 bzw. ein 8155 kann.
Du meinst, diese Pullup-Widerstände sind im 8049 "intern"? In der
CP1-Schaltung kann ich sie nicht entdecken. Dass scheint also genau wie
der interne Pullup im ATMega / AVR zu sein.
Und in der Tat - wenn man sich die Schaltungen im CP1-Anleitungsbuch
ansieht, z.B. S. 84, sieht man, dass ein Taster an Port1/1 einfach durch
Verbinden auf GND (-) den Kontakt herstellt. Also sind die Eingänge
elektrisch "low active". Das macht es natürlich einfach.
Beim Microtronic sind die Eingänge leider "high active", und daher sind
die internen AVR-Pullups nutzlos, und man braucht den normalen
"pinMode(INPUT)" statt "pinMode(INPUT_PULLUP)". Und das erfordert dann
Extra-Pulldown-Widerstände. Andernfalls gibt es "stuck bits", wie in
meinem Video gezeigt.
Gut, dass das Problem für einen CP1-ATmega / AVR-Emulator nicht
auftritt, und dass man einfach die internen Pullups nehmen kann! Das
macht es einfacher.
Ja, was Ausgangsleistung der Ports angeht - alle Schaltungen im
CP1-Anleitungsbuch, die was treiben, haben einen Transistor in der
Schaltung.
Michael W. schrieb:> Du meinst, diese Pullup-Widerstände sind im 8049 "intern"? In der> CP1-Schaltung kann ich sie nicht entdecken. Dass scheint also genau wie> der interne Pullup im ATMega / AVR zu sein.
Das ist wie beim 8051. Intern ein Pullup (Stromquelle) nach VDD, und ein
MOSFET der nach Masse schaltet. Zurückgelesen wird direkt am Pin. Um den
Pin als Eingang zu nutzen setzt man ihn auf Output High (MOSFET aus) und
übersteuert den Pullup.
> Gut, dass das Problem für einen CP1-ATmega / AVR-Emulator nicht> auftritt, und dass man einfach die internen Pullups nehmen kann! Das> macht es einfacher.
Da erreichst Du das gleiche Verhalten, wenn Du den internen Pullup
einschaltest und nur den Low-Pegel aktiv treibst. D.h. Pin auf Output
Low für Low und auf Input (mit Pullup) für High.
Soul E. schrieb:> Da erreichst Du das gleiche Verhalten, wenn Du den internen Pullup> einschaltest und nur den Low-Pegel aktiv treibst. D.h. Pin auf Output> Low für Low und auf Input (mit Pullup) für High.
Huch? Du sagst also, dass man einen positiven (high aktiven) Eingang am
AVR emulieren kann, der sich wie folgende Schaltung verhält (Anhang)?
Wie konfiguriere ich das?
Wohl gemerkt, nur mir Taster / Schalter und VCC-Verbindung dann. Der
Schalter /Taster stellt also direkt eine Verbindung vom Pin zu VCC her.
Und das OHNE extra Pulldown?? Dabei ist natürlich wichtig dass, wenn ich
den Taster loslasse, der Eingang sofort wieder auf 0 GND Low geht
(und nicht 5 Sekunden dafür braucht, und zwischen durch sogar
"undefiniert" hin- und herschwingt, wie in meinem Video gezeigt).
Ich muss sagen, es würde mich SEHR überraschen, wenn man mit dem AVR
einen internen Pulldown-Resistor konfigurieren könnte. Habe ich noch nie
gehört. Pullup, ja. Pulldown ist immer extern. Oder spinne ich jetzt,
oder habe was nicht richtig verstanden?
Wieso high-aktiv? Der Eingang eines 8039 ist low-aktiv, siehe Anhang
https://www.mikrocontroller.net/attachment/488147/P1.PNG . Widerstand
nach Plus, Transistor nach Masse. Dies sollte mit einem AVR emuliert
werden, was mit internem Pullup und simuliertem open-drain möglich wäre.
Ein high-aktiver Eingang bräuchte einen Pulldown, also einen Widerstand
gegen Masse und Transistor nach VDD. Den High-Pegel könnte man durch
Output High darstellen, der Lowpegel erfordert aber einen externen
Widerstand (und Pin auf Eingang).
Soul E. schrieb:> Wieso high-aktiv? Der Eingang eines 8039 ist low-aktiv, siehe Anhang> https://www.mikrocontroller.net/attachment/488147/P1.PNG . Widerstand> nach Plus, Transistor nach Masse. Dies sollte mit einem AVR emuliert> werden, was mit internem Pullup und simuliertem open-drain möglich wäre.>> Ein high-aktiver Eingang bräuchte einen Pulldown, also einen Widerstand> gegen Masse und Transistor nach VDD. Den High-Pegel könnte man durch> Output High darstellen, der Lowpegel erfordert aber einen externen> Widerstand (und Pin auf Eingang).
Genau das habe ich doch oben geschrieben. Und sogar aufgemalt. Ich
glaube, Du hast meine Beiträge nicht richtig gelesen... bzw. nich
verstanden, was ich hier gefragt bzw. diskutieren wollte.
Oder ich habe Deinen Beitrag nicht verstande. ALSO - AVR kann nur
Low-Aktiv mit internem Pullup. Dann sind die Logik-Level also
invertiert. Beim Microtronic brauchte ich High-Aktiv - das geht nur mir
externem Pulldown. Bis Du sagtest, dass kann man auch irgendwie mit
internem AVR-Pullup / Down machen, was wohl nicht stimmt. DARUM ging es.
Ich sagte - SCHÖN, dass es beim CP1 Emulator low-aktiv ist. Daa ist
EINFACHER in der Realisierung mit einem AVR dann als beim
Microtronic-Emulator, weil man die internen AVR Pullups verwenden kann.
Klar jetzt?
Michael W. schrieb:> (...) Bis Du sagtest, dass kann man auch irgendwie mit> internem AVR-Pullup / Down machen, was wohl nicht stimmt. DARUM ging es.
Mit dem AVR und dessen internem Pullup kann man das Verhalten des Port 1
eines i8039 emulieren. Darum ging es.
Mit dem AVR kann man ohne Zusatzbeschaltung keine Open Source /
Pulldown-Konfiguration bauen. So etwas habe ich nie behauptet und es ist
aus https://www.mikrocontroller.net/attachment/488147/P1.PNG auch nicht
herauszulesen.
> Ich sagte - SCHÖN, dass es beim CP1 Emulator low-aktiv ist. Daa ist> EINFACHER in der Realisierung mit einem AVR dann als beim> Microtronic-Emulator, weil man die internen AVR Pullups verwenden kann.> Klar jetzt?
Da sind wir uns einig.
Soul E. schrieb:> Mit dem AVR kann man ohne Zusatzbeschaltung keine Open Source /> Pulldown-Konfiguration bauen. So etwas habe ich nie behauptet und es ist> aus https://www.mikrocontroller.net/attachment/488147/P1.PNG auch nicht> herauszulesen.>>> Ich sagte - SCHÖN, dass es beim CP1 Emulator low-aktiv ist. Daa ist>> EINFACHER in der Realisierung mit einem AVR dann als beim>> Microtronic-Emulator, weil man die internen AVR Pullups verwenden kann.>> Klar jetzt?>> Da sind wir uns einig.
Prima, dann ist es jetzt klar.
Der müde Joe schrieb:> Darum denke ich, die Erweiterung sollte ein Superset des originären CP1> sein.
Na das eine Erweiterung keine Untermenge darstellt, ist irgendwie im
Namen schon drin, oder? :D
Soul E. schrieb:> Michael W. schrieb:>>> (...) Bis Du sagtest, dass kann man auch irgendwie mit>> internem AVR-Pullup / Down machen, was wohl nicht stimmt. DARUM ging es.>> Mit dem AVR und dessen internem Pullup kann man das Verhalten des Port 1> eines i8039 emulieren. Darum ging es.
Versuch' doch bitte mal beim Thema zu bleiben, und nicht so off-topic zu
gehen. 8039 interessiert in dieser Diskussion überhaupt nicht. Ist ja
schön dass Du Dich so gut auskennst in der Intel-Mikrocontroller
Historie, aber relevant ist das für diese Diskussion nicht. Bitte
genauer lesen bevor Du "off topic" antwortest, das ist sehr verwirrend
und hilft der Diskussion nicht.
Was Deine originale Antwort auf meine Frage:
>> Gut, dass das Problem für einen CP1-ATmega >/ AVR-Emulator nicht>> auftritt, und dass man einfach die internen Pullups nehmen kann! Das>> macht es einfacher.
angeht (Soul E.):
>Da erreichst Du das gleiche Verhalten, wenn Du den internen Pullup>einschaltest und nur den Low-Pegel aktiv treibst. D.h. Pin auf Output>Low für Low und auf Input (mit Pullup) für High.
mit meiner Frage / Bemerkung zu tun hast, ist mir immer noch nicht klar.
Zumal da überhaupt keine Erwähnung vom 8039 statt findet (wenn überhaupt
8049). (Bitte jetzt keine Belehrung über 8049-Genese, ich kann selbst im
Wikipedia über Intel-Mikrocontroller-Historie nachlesen...)
Michael W. schrieb:> Versuch' doch bitte mal beim Thema zu bleiben, (...)
Nun, hier
https://www.mikrocontroller.net/attachment/488120/original_circuit.png
hatte jemand den Schaltplan des originalen CP1 gepostet. Und was sehen
wir da? Einen i8039 in der Version mit internem ROM, d.h. einen i8049.
Und eben dieser sollte mit einem AVR emuliert werden. Also, so ganz am
Thema vorbei war das nun wirklich nicht.
Aber mach mal was Du willst.
Michael W. schrieb:> Was Deine originale Antwort auf meine Frage:
(...)
> mit meiner Frage / Bemerkung zu tun hast, ist mir immer noch nicht klar.
Was ist denn nun Dein Problem? Der CP1 basiert auf einem 8049, also
einem 8039 mit internem Programmspeicher. Dieser hat einen Port mit open
drain-Ausgängen. Es wurde gefragt ob man dessen Verhalten mit einem
Atmel nachbilden kann. Die Antwort lautete "ja".
Dann hattet Du gefragt, ob auch ein umgekehrtes Verhalten (open source,
high-aktiv) ebenfalls möglich wäre. Die Antwort darauf lautete "nein".
Du hattest jemandem unterstellt das Gegenteil behauptet zu haben -- dies
wurde richtiggestellt und stellte sich als Missverständnis heraus. Passt
also soweit alles.
Wobei, wurde nicht dieses Projekt ohnehin als unsinnig tituliert, da man
damit ja keinen Gewinn erzielen könne? Die Diskussion um den Sinn und
Unsinn von Hobbys war sicherlich off-topic. Meinen Einwurf weiter oben
konnte ich mir trotzdem nicht verkneifen -- meiner Ansicht nach sollen
Hobbys primär Spaß machen und für Entspannung sorgen. Also, alle
runterkommen und entspannen! Wir haben Wochenende ;-)
O. R. schrieb:> Michael W. schrieb:>>> Was Deine originale Antwort auf meine Frage:> (...)>> mit meiner Frage / Bemerkung zu tun hast, ist mir immer noch nicht klar.>> Was ist denn nun Dein Problem?
Überhaupt kein Problem. Danke für die Richtigstellung. SChönes
Wochenende.
... so, Platinen sind heute gekommen und natürlich hab ich gleiche eine
bestückt und zu meiner Überraschung hat sogar alles gleich funktioniert,
obwohl ein Kondensator noch gar nicht drin ist (weil die, die ich habe
zu hoch sind).
Im Anhang kann man sehen, wie die Mnemonic erweitert wurde und eine mir
besser geläufige Mnemonic ist als die Originale. Die ersten 22 Opcodes
machen natürlich dasselbe damit auch alles vom originalen CP1
übernehmbar ist. Auch die Tastensteuerung ist dieselbe, auch wenn ich
die Platine über das Terminal bediene (weil ich dort einen Step besser
verfolgen kann).
Die Funktionsmöglichkeiten können (fast) beliebig über den Befehl "INT"
erweitert werden. Hier ist es möglich, Funktionalitäten des ATmegas in
den CP1 einzublenden.
Der CP1 hat jetzt:
- grundsätzlich 256 Speicherplätze (WORD)
- zusätzliche interne Struktur:
-- Register B, C, D, E, Flagregister PSW
-- 8 Level-Stack
-- 24LC128 EEPROM (32 komplette Programme + 2 Programme im internen
ATmega)
Terminalprogramm mit:
- Zeilenassembler und Disassembler
- Registerstatusanzeige beim Beenden des Programms sowie nach
Single-Step
- Laden und Speichern vom / zum EEProm
- Memory Dump
Softwareinterrupts gibts zu den Themen:
INT 1
- erweiterte Möglichkeiten für Verzögerungsschleifen mit 4 einstellbaren
Zeitbasen
INT 2 und INT 3
- PWM Frequenzgeneratoren
INT 4
- PWM Frequenzgenerator für Servomotor
INT 8
- ADC Nutzung auf 8-Bit reduziert, Ausgabe in Akku wahlweise in Digits
(max. 255), in % (max. 99) oder in 50 * 100 Millivolt
INT 9
- Abfrage der Tastatur, Möglichkeit auf Taste zu warten, feststellen ob
eine Taste gedrückt ist oder eine Dezimalzahl über die Tasten einlesen
INT 10
- Digitmaske zum Dunkelschalten einzelner Digits
- Displaysteuerung in 8 und 16 Bit Anzeige jeweils in dezimaler und in
hexadezimaler Darstellung
- Dezimalpunktsteuerung
--------------------------------
NTC Widerstände und LDR möchte ich noch hinzufügen eventuell auch noch
IR-Empfänger.
--------------------------------
Irgendwie mutet das ganze nach: "Es werden 'Systemfunktionen' über
Maschinensprache gescriptet.
Aber irgendwie machts Spaß
Ralph S. schrieb:> ... so, Platinen sind heute gekommen und natürlich hab ich gleiche eine> bestückt und zu meiner Überraschung hat sogar alles gleich funktioniert,
Nicht schlecht! Und wann kommt die 32-Bit ARM Version? Man will ja
schließlich mal alle ähnlichen Computer da drin haben (KIM-1 u.ä.) ;-)
Andreas B. schrieb:> Nicht schlecht! Und wann kommt die 32-Bit ARM Version? Man will ja> schließlich mal alle ähnlichen Computer da drin haben (KIM-1 u.ä.) ;-)
KIM-1 kenne ich natürlich auch nicht, aber ich habe mir das angesehen.
Grundsätzlich sind solche Gerätchen / Platinen nicht so wirklich
schwierig, im Falle von KIM-1 glaube ich wäre das auch nicht so
besonders aufwändig, in vielen Dingen höchstwahrscheinlich besser als
CP-1. Für 6502 gibts schon unzählige CPU-Emulatoren, die auch auf einem
ATmega laufen.
Auf meiner Platine würde das allerdings nicht funktionieren (der KIM-1),
weil der insgesamt 24 Tasten hat, ich aber auf der Platine mit der
Lösung der Shift-Taste nur 20 Tasten erreiche.
Prinzipiell hatte ich schon vor Weihnachten darüber nachgedacht gehabt,
ob ich mir mal eine universelle Platine mache mit Tastenfeld und
7-Segmentanzeige, aber grundsätzlich habe ich das wieder verworfen
gehabt, weil Elektronik heute eben doch eher ein TFT-Display hat, eine
Platine mit STM32F303 (Cortex M4) mit 16-Tasten plus Shift-Taste habe
ich für Experimente schon.
Diese Platine war allerdings, wie eingie andere auch ein Fehlentwurf und
nur kurzfristig gedacht, weil der Controller ein STM32F303K8T6 ist in
einem eher seltenen LQFP32 Gehäuse ist, der derzeit (vllt. auch wegen
Corona) überall deutlich über 10 Euro kostet. Damals wollte ich noch
nicht die 48 pol. IC's verlöten und dachte mir 32 reichen auch.
Hätte ich das anderst gemacht, könnte man deutlich mehr IC's darauf
verlöten (u. a. den hochbilligen STM32F103):
Andreas B. schrieb:> Und wann kommt die 32-Bit ARM Version?
Mit ein paar wenigen Änderungen, da ja bis auf PWM,
Verzögerungsschleifen und UART alles Bitbanging ist, habe ich den CP-1
auch schon auf einer Bluepill laufen lassen, einen Unterschied macht das
aber zur ATmega Version keinen und wie gesagt: für einen 6502 wäre wohl
auch der ATmega schnell genug.
Für den Moment "reicht" mir diese Version und wenn ich die Doku dazu
geschrieben habe werde ich das wohl abschließen. Auch wenn es in dieser
Entwicklungsstufe als reines Lernsystem heute wieder genutzt werden
könnte habe ich für mich keinen Nutzen (wie oben schon gesagt: Der Spaß
ist das Ding zu machen, nicht es zu gebrauchen):
Für ein heutiges Lernsystem müßte man als Hostprogramm eine GUI
schreiben damit das angenommen werden würde, weil ich glaube, dass
heutzutage kein junger Mensch mehr mit einem Terminal- / Monitorprogramm
arbeiten möchte (auch wenn vieles damit schneller geht).
Außerdem stelle ich fest, dass dieses Teil in der Funktion sich auch
irgendwie nach Arduino anmutet: Ich entwickle CP1 "Softwareinterrupts"
und rufe die nur noch auf. Bei einem Arduino ist das ja ähnlich, nur
deutlich hochflexibler. Installieren einer Library und verwenden,
fertig. Bei dem CP1 kann halt nichts installiert werden, es muß immer in
die Firmware in die Switch-Case Folge eingehängt werden.
Von daher - ich sage es nicht gerne - sollte man heute dann wirklich
lieber mit Arduino hantieren. Der Lerncomputer diente damals eher dazu,
zu zeigen wie grundsätzlich Maschinensprache funktioniert (funktionieren
kann). Macht man heute noch Maschinensprache (eher selten) macht, dann
ist es sinnvoller, das auf einem realen System mit den entsprechenden
Tools zu machen die um Lichtjahre besser sind als meine, um das auch
wirklich einzusetzen.
Ralph S. schrieb:> Von daher - ich sage es nicht gerne - sollte man heute dann wirklich> lieber mit Arduino hantieren. Der Lerncomputer diente damals eher dazu,> zu zeigen wie grundsätzlich Maschinensprache funktioniert (funktionieren> kann). Macht man heute noch Maschinensprache (eher selten) macht, dann> ist es sinnvoller, das auf einem realen System mit den entsprechenden> Tools zu machen die um Lichtjahre besser sind als meine, um das auch> wirklich einzusetzen.
Man fragt sich natürlich, wer soetwas heutzutage noch kauft, und warum.
Ja, es wurde verkauft, bei Tindie... und sogar recht erfolgreich:
https://youtu.be/mo3y1B_zerA
Das Subsystem CPU-Modell / Instruktionsset ist der vom "Science Fair"
Microprocessor Trainer aus den 70ern, der auch als Gakken GMC-4 verkauft
wurde.
https://www.old-computers.com/museum/computer.asp?st=1&c=1053
M.E. ist die Einfachheit dieser Lerncomputer und die Verbindung mit
Elektronik-Experimenten und didaktisch gut gemachten Anleitungsbüchern
für Kinder / Jugendliche der eigentlich Reiz. Zumindest war er es
damals. Maschinensprache hat man auch damals schon mit "richtigen CPU
Trainern" mit "echten CPUs" und "echter Maschinensprache" besser
gelernt. Allerdings nicht für Kinder und Jugendliche.
Manchmal erreicht man mehr damit, wenn Dinge etwas vereinfacht werden.
Ich denke, soetwas wie der BBC micro:bit ist für die heutige Generation
ziemlich geeignet.
Hallo, Ralph.
Zuerst mal, tolles Projekt! :-)
Du schriebst: "Damals wollte ich noch nicht die 48 pol. IC's verlöten"
Damit beziehst du dich auf die QFP-48-Gehäuse mit 0,5mm Pitch, gell? Ich
denke auch, dass solche Pitches eher schwieriger zu verlöten sind.
Zumindest von Hand. Ich wollte nur sagen, dass es auch noch die QFP-44
und QFP-64 gibt, die haben 0,8mm Pitch. Die habe ich schon öfters von
Hand verlötet, ohne Kurzschlüsse.
Der müde Joe schrieb:> Damit beziehst du dich auf die QFP-48-Gehäuse mit 0,5mm Pitch, gell?
Mittlerweile weiß ich, wie ich die QFP-48 Gehäuse mit 0,4mm Pitch
verlöten muß und das klappt auch sehr gut. Lötsauglitze sei Dank.
Ralph, kann ich einen zusammengebaut von Dir erwerben? Versand müsste in
die USA... SMD kann ich nicht. Daher.
Wenn nicht - verstehe! Wollte trozdem gefragt haben, gefällt mir sehr
gut!
Ach herjeh, zusammengebaut eher nicht. Zum einen fehlen mir für eine
dritte bestückte Platine noch ein paar Bauteile (die zweite hat mein
Sohnemann), und zum Anderen habe ich mehr als 2 Stunden gebraucht, um
das Ding zusammen zu löten ( ;-) Sohnemann durfte selbst löten und der
kann das auch).
Vllt. solltest du SMD - Löten einmal lernen (denn das sieht schwieriger
aus, als es ist). Widerstände und Kondensatoren sind in der Größe 0805
und die bestückt man (nach gewisser Übung) sogar deutlich schneller als
bedrahtete Bauteile. Die IC's könnten etwas kniffliger werden (hier ist
es der ATmega), aber da sind Kurzschlüsse beim Löten nicht so ein großes
Problem, weil die mit Lötsauglitze, eventuell auch mit Flux getränkt
(flüssiges Flußmittel), sehr gut entfernbar ist.
Ich habe die Platine bspw. mit einer einfachen und uralten Weller
Magnastat TCP Lötstation gelötet, die ich seit meiner Lehrzeit (vor 40
Jahren) schon habe.
;-) also (nicht so ganz ernst nehmen und ist auch nicht so böse
gemeint): nicht so viel Programme coden, sondern mal üben, die
Bauteilegehäuse der heutigen Zeit zu verarbeiten.
Michael W. schrieb:> Wenn nicht - verstehe! Wollte trozdem gefragt haben, gefällt mir sehr> gut!
Deshalb: sorry, aber zusammenbauen werde ich das nicht !
Ralph S. schrieb:>> ;-) also (nicht so ganz ernst nehmen und ist auch nicht so böse> gemeint): nicht so viel Programme coden, sondern mal üben, die> Bauteilegehäuse der heutigen Zeit zu verarbeiten.
Bin ich nicht. Ja, kommt auf die Liste der guten Vorsätze für 2021:
SMD-Löten. Möglich sein sollte es schon irgendwie. Auch ohne Reflow
Oven. Wir werden sehen. Ich bin halt Hobbyist / Maker und handwerklich
nicht so fit wie Ihr Profis hier (ist jetzt ernst gemeint).
Gruß und bis demnächst mal wieder!
Michael W. schrieb:> Ja, kommt auf die Liste der guten Vorsätze für 2021:> SMD-Löten.
Fang am besten hier mal an:
https://www.mikrocontroller.net/articles/SMD_L%C3%B6ten
Alles halb so wild. Du wirst da auch nicht länger dran vorbeikommen. Die
interessanten Bauteile gibt es bald nur noch in SMD. Ich habe es vor
einigen Jahren auch immer vermieden. Mittlerweile würde ich nichts mehr
in THT machen, wenn es irgendwie möglich ist. (auch Hobbyist)
Eigentlich wollte ich ja nicht mehr wirklich weitermachen (aber
eigentlich gibt es das Wort "Eigentlich" nicht). Deswegen:
Der CP1 Clone wurde (sehr) stark erweitert. Insgesamt besitzt er nun 65
Maschinenbefehle.
Im Unterschied zum Orignal habe ich an 2 Originalbefehlen Änderungen
vorgenommen: ADD und SUB. Das Original gibt eine Fehlermeldung aus, wenn
wenn der 8-Bit Bereich (0-255) über- oder unterschritten wird. Da dem
CP1-Clone nun Flags zur Verfügung stehen, habe ich die Originalfunktion
dahingehend geändert, dass der CP1 wie fast jeder andere Prozessor hier
ein Carry-Flag setzt (das 9. Bit der Rechenoperation) und der Akku die
unteren 8 Bit der Operation beinhaltet.
Dem CP1 wurde ein 8-Level-Stack hinzugefügt, sodass sich in der
Befehlsliste nun auch ein CALL und ein RET befindet.
Desweiteren hat der CP1 einen erweiterten Registersatz erhalten, er
beinhaltet nun zusätzlich universell verwendbare zusätzliche Register B,
C, D und E. Für die Flags ein Program-Status-Wort mit den Flags Zero,
Carry, Less und Greater.
Um die sehr mageren Möglichkeiten die mit 256 Word-Speicherplätzen
möglich sind zu erweitern, habe ich dem CP1 etwas hinzugefügt, was den
sogenannten Softwareinterrupts eines alten MS-DOS Systems sehr ähnelt.
Die Funktionen eines Softwareinterrupts werden durch die Interruptnummer
und im Register B die Interruptunterfunktion aufgerufen.
Software-Interrupt 1 : verbesserte Warteschleifen
Software-Interrupt 2 : 16-Bit PWM Frequenzgenerator
Software-Interrupt 3 : 8-Bit PWM Frequenzgenerator
Software-Interrupt 4 : PWM-Generator für Servomotor
Software-Interrupt 8 : ADC-Abfrage (eine Unterfunktion mit Auswertung
NTC-Widerstand
Software-Interrupt 9 : Tastatur
Software-Interrupt 10 : Steuerung der 7-Segmentanzeige
-----------------------------------------
Zusätzlich zu den beiden originalen internen "Festprogrammen" eines
Selbsttests und des "Reaktionsspiel" hat der CP1 Clone zusätzliche
Festprogramme erhalten.
Ein Festprogramm wird beim Original mit
< 9 - RUN > für den Selbsttest und mit < 8 - RUN > für das
Reaktionsspiel gestartet. Dieses Schema wurde beibehalten:
9 - RUN : Selbsttest
8 - RUN : Reaktionsspiel
7 - RUN : Start des Terminalmodus
6 - RUN : Verschieben eines Speicherbereiches
5 - RUN : Empfangen eines vom Host-PC (Linux) gesendeten Programms
Um das 5te Festprogramm des CP1 Clones nutzen zu können, wurde hierfür
ein Assembler geschrieben, der es ermöglicht, auf dem Linux-PC ein
Maschinenprogramm zu schreiben, dieses zu übersetzen und anschließend in
den CP1-Clone zu übertragen.
Die Syntax dieses Assemblers ist:
cp1asm -a assemblerdatei.cp1 -l -u uploaddatei.bin -p serieller_port
Die Angabe von -l ist optional, sie erstellt eine Listdatei. Die Angabe
von -u ist ebenfalls optional (sie bezeichnet die Binärdatei, die in den
CP1 übertragen werden soll). Wird sie jedoch angegeben, so muß auch das
Argument -p mit angegeben sein.
Beispiel, erstellen einer Binär- und Listdatei:
cp1asm -a cdwn.cp1 -l (es werden Dateien cdwn.bin und cdwn.lst
erstellt)
cp1asm -u cdwn.bin -p /dev/ttyUSB0
Mittels dieses Assemblers ist ein solches Programm möglich:
1
; -------------------------------------
2
; countdown.cp1
3
;
4
; Countdown Zaehler fuer den CP1+
5
; -------------------------------------
6
7
.org 0
8
start:
9
mvi a,0
10
out p2 ; P2 alle Bits = 0
11
mvi b,0
12
int 9 ; Dezimalzahl einlesen
13
14
mov d,a ; Zaehlerinhalt retten
15
16
mvi a,3
17
mvi b,0
18
int 10 ; Displaymaske rechten beiden Digits aktiv
19
20
count_loop:
21
22
mov a,d ; Zaehler in Akku
23
mvi b,1
24
int 10 ; aktuellen Zaehler ausgeben
25
26
mvi a,10
27
mvi b,3 ; Timebase 0.1 s
28
int 1 ; Warteinterrupt: 0.1 s * 10
29
30
mov a,d ; Zaehler restaurieren
31
cpi a, 0 ; Zaehler 0 erreicht ?
32
jz count_zero ; Countdown Ende
33
dec a
34
mov d,a ; Zaehler retten
35
jmp count_loop
36
37
count_zero:
38
mvi a, 1
39
outb p2, 3 ; schaltet P2.3 auf 1 als Kennung
40
; fuer Countdown erreicht
41
42
; die Anzeige "00" blinken lassen
43
44
blink:
45
mvi a,3
46
mvi b,0
47
int 10 ; Displaymaske beide rechten Digits an
48
call blink_wait
49
mvi a,0
50
mvi b,0
51
int 10
52
call blink_wait
53
54
mvi b,2
55
int 9 ; ist Taste gedrueckt ?
56
jz start ; dann neuen Countdown initieren
57
jmp blink
58
59
blink_wait:
60
mvi b, 3
61
mvi a, 3
62
int 1
63
ret
Hieraus wird eine Binärdatei erstellt und mit der Option -l auch eine
Listdatei:
1
CP1ASM (c) 2021 R. Seelig
2
------------------------------------------
3
4
Zeile Adr. Opcode Source
5
6
000 000: ; -------------------------------------
7
001 000: ; countdown.cp1
8
002 000: ;
9
003 000: ; Countdown Zaehler fuer den CP1+
10
004 000: ; -------------------------------------
11
005 000:
12
006 000: .org 0
13
007 000: start:
14
008 000: 04.000 mvi a,0
15
009 001: 18.000 out p2 ; P2 alle Bits = 0
16
010 002: 28.000 mvi b,0
17
011 003: 63.009 int 9 ; Dezimalzahl einlesen
18
012 004:
19
013 004: 38.000 mov d,a ; Zaehlerinhalt retten
20
014 005:
21
015 005: 04.003 mvi a,3
22
016 006: 28.000 mvi b,0
23
017 007: 63.010 int 10 ; Displaymaske rechten beiden Digits aktiv
24
018 008:
25
019 008: count_loop:
26
020 008:
27
021 008: 34.000 mov a,d ; Zaehler in Akku
28
022 009: 28.001 mvi b,1
29
023 010: 63.010 int 10 ; aktuellen Zaehler ausgeben
30
024 011:
31
025 011: 04.010 mvi a,10
32
026 012: 28.003 mvi b,3 ; Timebase 0.1 s
33
027 013: 63.001 int 1 ; Warteinterrupt: 0.1 s * 10
34
028 014:
35
029 014: 34.000 mov a,d ; Zaehler restaurieren
36
030 015: 49.000 cpi a, 0 ; Zaehler 0 erreicht ?
37
031 016: 11.020 jz count_zero ; Countdown Ende
38
032 017: 27.000 dec a
39
033 018: 38.000 mov d,a ; Zaehler retten
40
034 019: 09.008 jmp count_loop
41
035 020:
42
036 020: count_zero:
43
037 020: 04.001 mvi a, 1
44
038 021: 18.003 outb p2, 3 ; schaltet P2.3 auf 1 als Kennung
45
039 022: ; fuer Countdown erreicht
46
040 022:
47
041 022: ; die Anzeige "00" blinken lassen
48
042 022:
49
043 022: blink:
50
044 022: 04.003 mvi a,3
51
045 023: 28.000 mvi b,0
52
046 024: 63.010 int 10 ; Displaymaske beide rechten Digits an
53
047 025: 64.034 call blink_wait
54
048 026: 04.000 mvi a,0
55
049 027: 28.000 mvi b,0
56
050 028: 63.010 int 10
57
051 029: 64.034 call blink_wait
58
052 030:
59
053 030: 28.002 mvi b,2
60
054 031: 63.009 int 9 ; ist Taste gedrueckt ?
61
055 032: 11.000 jz start ; dann neuen Countdown initieren
62
056 033: 09.022 jmp blink
63
057 034:
64
058 034: blink_wait:
65
059 034: 28.003 mvi b, 3
66
060 035: 04.003 mvi a, 3
67
061 036: 63.001 int 1
68
062 037: 65.000 ret
-------------------------------------------
Die Dokumentation für den Befehlssatz und für die Softwareinterrupts
habe ich bereits geschrieben, eine allgemeine Dokumentation sowie eine
Dokumentation des Terminalmodus ist in Arbeit.
Da ich gerade sehe, dass ich die Gerberfiles noch nicht hochgeladen
habe, werde ich das noch nachholen (sie liegen auf einem anderen Rechner
auf den ich gerade keinen Zugriff habe).
So, das ist es für den Moment und nun könnt ihr Euch mit Euren
Negativkommentaren, Beschimpfungen und Bewertungen austoben.
An die "Normalen" unter Euch einen schönen Gruß,
Ralph
Hach, und natürlich gleich ein Fehler: Kommentar im Schaltplan unter 2.
Der mit 2 ** gekennzeichnete Kondensator ist natürlich für einen Betrieb
als Arduino-Platine zu bestücken und nicht zu entfernen.
Ralph, wie kommt es eigentlich dass Dein EEPROM im Schaltplan am Quartz
hängt... sollte das nicht SDA / SCL IIC sein (also PC5, PC4)???
Zumindest ist das die Verdrahtung die ich kenne.
EDIT: auch so, ja Du hast ja keinen Quartz... also verwendest Du die als
Software IIC (?) Bit banging? Kann man machen. War mir nicht klar. Na
ich bleib lieber bei den Hardware IIC Ports.
Übrigens - kluge Wahl die Doppelsegment-Anzeigen zu verwenden! Das
reduziert den Verdrahtungsaufwand für einen Breadboard-Prototype enorm.
Ich hatte die leider nicht zur Hand, sondern nur eine Kiste von
Einzelanzeigen. Das Resultat ist dementsprechend gruselig, zumal der
Microtronic hier auch 8 Ziffern spendiert bekommen hat :-)
Und noch ne Frage - wo hast Du den Lensfilter her? Ist das einfach nur
ne rote Plexiglasscheibe? Ich habe zwar welche (s. Bild), aber die sind
schon zerschnitten. Hätte gerne einen langen Streifen wie in Deinem
Bild.
Michael W. schrieb:> Ralph, wie kommt es eigentlich dass Dein EEPROM im Schaltplan am Quartz> hängt... sollte das nicht SDA / SCL IIC sein (also PC5, PC4)???> Zumindest ist das die Verdrahtung die ich kenne.>> EDIT: auch so, ja Du hast ja keinen Quartz... also verwendest Du die als> Software IIC (?) Bit banging? Kann man machen. War mir nicht klar. Na> ich bleib lieber bei den Hardware IIC Ports.
Simme zu. XTAL für den EEPROM zu verwenden, ist vielleicht etwas
unglücklich . Würde ich nicht so machen. Umso mehr, wenn das Board auch
als Arduino Board verwendet werden soll wie vom Ralph beschrieben, und
die Leute dann die Wire.h Library verwenden möchten... ich hoffe ja
immer noch dass das ein Fehler im Schaltplan ist, aber nicht auf dem
Board so.
Michael W. schrieb:> Ralph, wie kommt es eigentlich dass Dein EEPROM im Schaltplan am Quartz> hängt... sollte das nicht SDA / SCL IIC sein (also PC5, PC4)???> Zumindest ist das die Verdrahtung die ich kenne.
das sollte im Normalfall tatsächlich PC5, PC4 sein!
Weil ich aber an den herausgeführten Ports 1 und Ports 2 keinerlei
Peripherie haben wollte damit die Ports auch so wie bei einem echten CP1
voll verwendbar sind, sind mir schlicht die I/O Anschlüsse ausgegangen.
Mich hatte es schon etwas geärgert, dass ich die PD0 (UART-RxD) als P2.7
verwenden mußte, um einen vollständigen Port2 realisieren zu können, was
aber der Funktionsfähigkeit dieses virtuellen Portpins ausserhalb des
Terminalmodes keinen Abbruch tut.
Im Terminalmode wird dann dieser Pin leider zu einer logischen 1 und
kann nicht als Portpin verwendet werden.
Ich hatte also schlicht keine weiteren Portpins zur Verfügung. Das
Volumen des Datentransfers zu dem EEProm ist mit 512 Byte für die
Speicherung eines Programms jedoch so gering, dass die reduzierte
Geschwindigkeit nicht ins Gewicht fällt.
Michael W. schrieb:> Übrigens - kluge Wahl die Doppelsegment-Anzeigen zu verwenden! Das> reduziert den Verdrahtungsaufwand für einen Breadboard-Prototype enorm.
So klug war die auch nicht, dass es nur Doppelsegment-Anzeigen sind ist
meiner "Ungeduld" geschuldet, weil ich schlicht keine
Dreifachsegmentanzeigen zur Hand hatte (die habe ich zwar bestellt, sind
aber immer noch nicht bei mir angekommen): Der Verdrahtungsaufwand hätte
sich weiter reduziert gehabt.
Michael W. schrieb:> Und noch ne Frage - wo hast Du den Lensfilter her? Ist das einfach nur
Die ist aus einem geschlachteten Gerät gewesen und ich hatte mir rotes
Plexiglas bestellt gehabt um mir eine passendere Abdeckung basteln zu
können. Trotz der bei EBAY ausgewiesenen Funktion des roten Plexiglases
für den Betrieb mit LED produziert mir dieses Plexiglas eine derart
große Unschärfe, das es unbrauchbar ist. Hier suche ich noch einen
Hersteller, der größere Platten Plexiglas liefert, die genau für diesen
Zweck geeignet sind.
Diese Woche werde ich einen Versuch aus dem Internet ausprobieren bei
dem jemand scharzen Acryllack aus der Spraydose auf ein klares Plexiglas
gesprüht hat und hiermit gute Ergebnisse erzielt hat. Schauen wir
einmal, wie das funktioniert.
Pat B. schrieb:> Simme zu. XTAL für den EEPROM zu verwenden, ist vielleicht etwas> unglücklich . Würde ich nicht so machen. Umso mehr, wenn das Board auch> als Arduino Board verwendet werden soll wie vom Ralph beschrieben, und> die Leute dann die Wire.h Library verwenden möchten... ich hoffe ja> immer noch dass das ein Fehler im Schaltplan ist, aber nicht auf dem> Board so.
Wie oben beschrieben ist das auch auf dem Board so, weil ich schlicht
keine I/O Pins zur Verfügung hatte.
Am Wochenende habe ich mich mit Arduino beschäftigt und eine
Boarddefinition geschrieben, die das CP1+ Board (wie ich das jetzt auf
eine Anregung von Andreas getauft habe) in das Arduino Framework
anbindet.
Hier dann vor allen Dingen mit dem Betrieb von tatsächlich nur 8 MHz
internem Takt und einem Bootloader mit 38400 Bd.
Funktioniert gut.
Hier gibt es dann im Arduino eine Library mit den fest verdrahteten
Funktionen es EEProms und einer kleinen Bibliothek für ein OLED-1306
Display, welches dann einfach auf einen der beiden Ports gesteckt werden
kann.
Hier muß ich allerdings noch die json-Datei an mein Github anpassen,
deshalb hier erst einmal nur im Anhang
@Pat: grundsätzlich hätte ich jedoch für den TM1637 Baustein nicht die
Anschlüsse PC4 und PC5 verwenden sollen, sondern 2 andere (weil auch der
TM1637 per Bitbanging betrieben wird) und PC4 und PC5 als Portpins für
Port 1 oder Port 2 verwenden.
Dann hätte man mit dem vorliegenden Board zumindest an die Portpins auf
Port1 oder Port2 ein I2C Device anschließen können!.
So gesehen wirklich ein Designfehler an den ich schlicht nicht gedacht
hatte und wohl daher kommt, als ich das erste mal mit einem TM1637
hantiert hatte, versucht habe, diesen als I2C Device anzusprechen, das
aber nicht funktionierte, weil es einfach kein echtes I2C Device ist.
Der Baustein hat schlicht keine Geräteadresse und deshalb können die
Anschlußpins des TM1637 nicht als Busleitungen verwendet werden.
So wie es ist, ist tatsächlich ein I2C Device für alle Zeiten nur über
Bitbanging erreichbar.
Würde ich das Board noch einmal routen, würde ich zum einen
7-Segmentanzeigen zu je 3 Digits routen und zusätzlich tatsächlich die
Anschlüsse für I2C auf die Portpins legen.
Das EEProm würde ich allerdings wieder so verdrahten wie es ist.
Allerdings war die Option, die Hardware auch als Arduino verwenden zu
können (leider) nicht das Hauptziel.
Ich hatte nicht über den Tellerrand geschaut und bemerkt gehabt, was man
mit der Hardware noch alles anstellen kann.
Insofern hätte der TM1638 einiges vereinfacht, da man den per SPI
anspricht.
Kein Bitbanging, zwei Pins mehr frei...
Ralph S. schrieb:> @Pat: grundsätzlich hätte ich jedoch für den TM1637 Baustein nicht> die> Anschlüsse PC4 und PC5 verwenden sollen, sondern 2 andere (weil auch der> TM1637 per Bitbanging betrieben wird) und PC4 und PC5 als Portpins für> Port 1 oder Port 2 verwenden.>> Dann hätte man mit dem vorliegenden Board zumindest an die Portpins auf> Port1 oder Port2 ein I2C Device anschließen können!.>> So gesehen wirklich ein Designfehler an den ich schlicht nicht gedacht> hatte und wohl daher kommt, als ich das erste mal mit einem TM1637> hantiert hatte, versucht habe, diesen als I2C Device anzusprechen, das> aber nicht funktionierte, weil es einfach kein echtes I2C Device ist.> Der Baustein hat schlicht keine Geräteadresse und deshalb können die> Anschlußpins des TM1637 nicht als Busleitungen verwendet werden.>> So wie es ist, ist tatsächlich ein I2C Device für alle Zeiten nur über> Bitbanging erreichbar.
So, das CP1+ Board kann nun in eine Arduino IDE-Übernommen werden:
Datei -> Voreinstellungen -> zusaetzliche Boardverwalter_URL's
https://github.com/jjflash65/cp1arduino/raw/master/package_cp1_index.json
Hier stehen auch Beispielprogramme für
- printf
- TM1637
- LED's auf Port2
- OLED Display auf Port1
zur Verfügung
Planloser schrieb:> Insofern hätte der TM1638 einiges vereinfacht, da man den per SPI> anspricht.> Kein Bitbanging, zwei Pins mehr frei...Planloser schrieb:> Insofern hätte der TM1638 einiges vereinfacht, da man den per SPI> anspricht.> Kein Bitbanging, zwei Pins mehr frei...
Nein, wäre es nicht. Ein allererster Entwurf hatte einen TM1638 (Arduino
Nano mit einem Board mit 8 Anzeigen und 16 Tasten).
Der TM1638 benötigt zur Kommunikation mit einem Controller derer 3 I/O
Anschlüsse, der TM1638 hingegeben nur 2.
Dieses war der Grund, weshalb ich den 1637 genommen hatte (um einen I/O
Pin zu sparen, den ich dann für ein fehlendes Bit an Port 2 verwenden
wollte). Zu meinem Erschrecken mußte ich dann jedoch feststellen, dass
der TM1637 im Vgl. zu einem TM1638 nicht in der Lage ist, die Tasten zu
scannen. D.h. es gibt keine Möglichkeit festzustellen, ob mehr als eine
Taste gedrückt ist oder nicht. Aus diesem Grund wurde dann wieder ein
zusätzlicher I/O Pin fällig, den ich für die Abfrage der Shift-Taste
benötigt habe.
Die Verwendung eines TM1638 hätte also überhaupt gar nichts gebracht
gehabt (weil ich die Anschlüsse des SPI's des Chips so oder so nicht
herausgeführt hätte).
Es sollten schlicht 2 autarke virtuelle I/O Ports erzeugt werden, die
einem CP1 ähnlich sind.
Die Programmierung mit abgesonderter Shifttaste, losgelöst vom TM1637,
war dann sogar einfacher als einen Keyscan auf einem 1638 vorzunehmen.
Einzig (und das ist wie ich oben geschrieben habe) wirklich ein
Designfehler von mir, weil beim Entwurf des CP1 Clones erst einmal nicht
an die Verwendung des Boards als Arduino gedacht wurde, hätte man die
Anschlüsse für I2C auf einen der CP1 Ports 1 oder 2 legen sollen um bei
einer Verwendung des Boards als Arduino eben an diesen Ports Hardware
I2C zu haben.
Fail by myself or: "Shit happens"
Nichts desto trotz habe ich mit dem Board jetzt unter Arduino ein
bisschen gespielt (und unter reinem avr-gcc noch ein bisschen mehr) und
es ist lustig zu sehen, dass mit dem Board vieles experimentiert werden
kann und ich geneigt bin zu sagen: Als Einstieg in die Programmierung
von Mikrocontrollern besser als ein originales Arduino-Uno Board
geeignet, weil schlichtweg auf dem Board eben 8 Leuchtdioden, die
7-Segmentanzeige und Tasten direkt verfügbar sind, ein Aufstecken eines
OLED Display direkt ohne irgendeinen Adapter erfolgen kann).
Wer tiefer in die Materie einsteigt, kauft sich dann ein anderes Board
oder baut seine Schaltungen zielgerichtet für den Anwendungsfall auf.
Außerdem nicht vergessen: Alles in allem kostet eine bestückte Platine
(inkl. der Platine) so in etwa 10 Euro.
Hierfür kann man dann in Ansätzen lernen, wie ein Prozessor funktioniert
(eben den CP1+ Modus wie ich das jetzt mal nennen mag) und danach dann
C, C++ (egal ob in abgespeckter Form in Arduino oder in Reinform mit
einer anderen IDE).
----------------------------
Mal abgesehen von dem einen I2C Designfehler würde ich das Board heute
auch nicht anderst routen (okay, heute sind die 7-Segmentanzeigen mit 3
Digits gekommen, die würde ich dann doch noch so routen) und deshalb
glaube ich nicht, dass dieses Board jedem Anwendungsfall gerecht wird
und dafür war das auch nicht gedacht.
Gedacht war es eigentlich für gar nichts, sondern war ein reines
Spaßprojekt und ich habe evaluiert, für was man das noch alles brauchen
kann.
Wie sich herausstellt benötigt die Dokumentation dieses Spaßprojektes
deutlich mehr Zeit, als das gesamte Projekt in Hard- und Software
zusammen. Leider!
Ralph S. schrieb:> Der TM1638 benötigt zur Kommunikation mit einem Controller derer 3 I/O> Anschlüsse, der TM1638 hingegeben nur 2.>> Dieses war der Grund, weshalb ich den 1637 genommen hatte (um einen I/O> Pin zu sparen, den ich dann für ein fehlendes Bit an Port 2 verwenden> wollte). Zu meinem Erschrecken mußte ich dann jedoch feststellen, dass> der TM1637 im Vgl. zu einem TM1638 nicht in der Lage ist, die Tasten zu> scannen. D.h. es gibt keine Möglichkeit festzustellen, ob mehr als eine> Taste gedrückt ist oder nicht. Aus diesem Grund wurde dann wieder ein> zusätzlicher I/O Pin fällig, den ich für die Abfrage der Shift-Taste> benötigt habe.
Die ISP-Pins werden doch laut Schaltplan gar nicht anders genutzt, oder
habe ich da etwas übersehen?
Durch Verwendung des TM1638 würdest Du also die beiden Pins PC4/5
gewinnen, wenn der TM1637 wegfiel.
Planloser schrieb:> Die ISP-Pins werden doch laut Schaltplan gar nicht anders genutzt, oder> habe ich da etwas übersehen?> Durch Verwendung des TM1638 würdest Du also die beiden Pins PC4/5> gewinnen, wenn der TM1637 wegfiel.
Zähle einfach mal die verwendeten Pins!
Ich habe:
1
2 * 8 I/0 für Port 1 und 2 = 16 I/O Pins
2
1 * 2 I/O für I2C = 2 I/0 Pins
3
1 * 2 I/0 für UART = 2 I/0 Pins
4
1 * 2 I/O für TM1637 = 2 I/0 Pins
5
1 * 1 I/0 für die Shifttaste = 1 I/0 Pin
6
----------------
7
23 I/0 Pins
So, der ATMega hat, wenn man die Anschlüsse des Quarzes als I/O Pin
verwendet und logsicherweise den Resetpin als Reset beläßt weil sonst
eine typische Bootloaderaktivierung über den Resetpin nicht machbar ist
genau 22 I/O Pins.
Hier ist also schon ein I/0 Pin zu wenig vorhanden, was der Grund ist
warum ein PD0 (UART - Funktion) an Port 2.7 hängt. Außerhalb des
Terminalbetriebs stört dies nicht, innerhalb des Terminal betriebs ist
Port2.7 auf Dauer-High, weil ein Stopbit eben einen High-Pegel hat.
So, unter der Prämisse, dass an den Pins des Ports 1 und Ports 2 nichts
angeschlossen sein soll, damit Experimente wie beim originalen CP1
durchgeführt werden können, habe ich für die Peripherie auf dem Board 22
- 16 = 6 I/O Pins zur Verfügung (eigentlich, wie bereits gesagt schon
einer zu wenig, deshalb der PD0 auf Port 2.7).
Der Testaufbau wurde mit einem 28 pol. ATmega aufgebaut, das Board hat
einen 32 pol. SMD Chip. Hier hätte ich das jetzt so routen können, dass
die Shift-Taste an einen der Pins für ADC6 / ADC7 angeschlossen wird und
diese Taste dann über den ADC eingelesen wird. Dann wäre der
freigewordene PD5 der Pin von 2.7 geworden.
-----------------------------------------------
Geht man nun davon aus, dass es bei einem TM1638 diese Shift-Taste
direkt am Controller nicht braucht, weil der TM1638 einen Key-Scan
durchführen und zumindest innerhalb einer Gruppe feststellen kann, ob
mehrere Tasten gleichzeitig gedrückt sind (was der TM1637 nicht kann),
würde der Anschluß wieder frei werden. Allerdings benötigt der TM1638
zur Kommunikation 3 I/O Pins (im Gegensatz zum TM1637) und dafür braucht
es wieder einen PIN. Somit benötigen TM1637 und TM1638 für Ansteuerung
von Display und Tasten 3 I/O Pins, egal wie auch immer die heißen oder
welche Funktion die haben.
Die Pins der SPI-Schnittstelle liegen auf dem PORT1 (Bit 5..7). Weil ich
aber am Port 1 wie gesagt keine Elektronik angeschlossen haben möchte
(der Experimente wegen) müßten diese vom Port1 entfernt werden um den
TM1638 zu bedienen. Hier füge ich dann die durch den TM1637 frei
gewordenen Pins wieder ein. Gewonnen habe ich genau: gar nichts.
Vom Design her also: SPI Pins da lassen wo sie sind, an Port 1 (darüber
schließe ich einen SPI - Programmer an, um den Bootloader für den ATmega
zu flashen). Die beiden Pins die den TM1637 steuern (weil diese auch
Hardware I2C beinhalten) mit 2 weniger wichtigen Pins aus Port1 / Port2
tauschen. Einen Versuch machen, wie es sich auswirkt, wenn die
Shift-Taste über den ADC erfasst wird um dann den hier frei gewordenen
PD5 als Port2.7 zu verwenden, so dass der UART komplett vom Port2 weg
ist.
Ein Austausch TM1638 gegen den TM1637 bringt in diesem Fall hier jedoch
rein gar nichts, außer dass dieser größer ist und mehr Platz benötigt.
Der 1638 wäre dann die Wahl, würde man eine Platine mit 20 Tasten
designen, damit die Funktionstasten von den Zifferntasten komplett
getrennt ist.
Würde ich also eine zweite Platine routen, würden tatsächlich Änderungen
vorgenommen werden.
Die Vorteile die man hier hätte sind aber für mich nicht derart
bedeutend, als dass ich mir die Mühe mache das noch einmal zu routen
(nicht ohne das vorher mit einem 32 pol. Chip getestet zu haben), die
Platinen neu zu bezahlen und dann neu aufzubauen.
Hier auf meinem Tisch funktioniert die Platine mittlerweil mit einigen
Experimenten mittels Arduino erstellt gut.
Die Verbesserungen die man bei einem Redesign erreichen kann lohnen aus
meiner Sicht der Dinge den Aufwand nicht (weil sie wirklich sehr gering
sind: I2C auf der Portleiste, evtl. UART-Pin weg von der Portleiste).
Es bleibt dir aber belassen, wenn du an dieser Platine Änderungen
vornehmen willst, diese gerne vorzunehmen, die Gerber-Files sind ja
gepostet. Allerdings glaube ich nicht dass du das tun wirst, weil ich
annehme, dass du so eine Platine weder haben willst noch mit einer
solchigen "arbeiten" möchtest.
Planloser schrieb:> Die ISP-Pins werden doch laut Schaltplan gar nicht anders genutzt, oder> habe ich da etwas übersehen?
Doch, werde sie: als Portpins des Port1 des CP1+ Clones
Ralph S. schrieb:> Michael W. schrieb:>> Und noch ne Frage - wo hast Du den Lensfilter her? Ist das einfach nur>> Die ist aus einem geschlachteten Gerät gewesen und ich hatte mir rotes> Plexiglas bestellt gehabt um mir eine passendere Abdeckung basteln zu> können. Trotz der bei EBAY ausgewiesenen Funktion des roten Plexiglases> für den Betrieb mit LED produziert mir dieses Plexiglas eine derart> große Unschärfe, das es unbrauchbar ist. Hier suche ich noch einen> Hersteller, der größere Platten Plexiglas liefert, die genau für diesen> Zweck geeignet sind.>> Diese Woche werde ich einen Versuch aus dem Internet ausprobieren bei> dem jemand scharzen Acryllack aus der Spraydose auf ein klares Plexiglas> gesprüht hat und hiermit gute Ergebnisse erzielt hat. Schauen wir> einmal, wie das funktioniert.
Danke für die Info. Meine sind von hier:
https://www.bgmicro.com/9Z1648.aspx
Die sind super, aber wie gesagt leider schon zerschnitten :-(
Ralph S. schrieb:> Hier gibt es dann im Arduino eine Library mit den fest verdrahteten> Funktionen es EEProms und einer kleinen Bibliothek für ein OLED-1306> Display, welches dann einfach auf einen der beiden Ports gesteckt werden> kann.
Schöne Idee - jetzt fehlen nur noch INTs für Graphik-Funktionen :-)
Unser "Microtronic Next Generation" hat das kleine OLED ja auch, aber
leider haben wir keine einfach Möglichkeit der Befehlserweiterung, da
alle Opcodes prinzipiell belegt sind. Wir haben allerdings einige
"sinnlose" Opcodes, also eigentlich "no-ops". Sowas with "addiere 0 zu
Register x", "subtrahiere 0 von Register x", und "kopiere Inhalt von
Register x nach Register x". Da diese nicht in "echten" Programmen
verwendet werden, können wir diese mit Extra-Semantik bzw. zusätzlichen
"Seiteneffekten" ausstatten.
Momentan verwenden wir diese "sinnlosen" Opcodes für Sound / Tonausgabe,
prinzipell könnten wir allerdings auch andere Funktionen dort
hineinverdrahten als Seiteneffekte (sowas wie "draw-line" mit Argumenten
in einigen der 32 Register etc.)
Michael W. schrieb:> Schöne Idee - jetzt fehlen nur noch INTs für Graphik-Funktionen :-)
Wäre absolut einfach zu machen. Die INTs zu erweitern ist im bestehenden
Code absolut easy, einzig stellt sich die Frage wieviel Sinn das macht.
Aus meiner Sicht der Dinge keinen. Hierfür ist die Struktur des CP1
einfach zu schwach und das ganze Konstrukt (um ehrlich zu sein) ist
wirklich nur zum reinen Lernen oder Verständlichmachen da.
Du hast halt nur 256 Programmzeilen, die zur Verfügung stehen und
letztendlich verknüpft man dann nur noch mittels Registerzuweisungen
einzelne in Softwareinterrupts versteckte Funktionen zu einem Programm.
Das Display aus der Maschinensprache heraus anzusprechen macht für mich
nicht wirklich den Sinn, weil bspw. der CP1 u.a. sehr ungeeignet dafür
ist auch nur Strings zu verarbeiten und darzustellen.
Damit dieses besser geht, müßte man bspw. den Cross-Assembler auch
wieder erweitern, dass er in der Lage ist, mehrere Bytes hintereinander
zu definieren. Ausgehend dann hiervon, dass eben nur 256 Programmzeilen
zur Verfügung stehen würde bspw. ein String mit nur 20 Zeichen eben
schon wieder 20 Zeilen vom Speicher wegnehmen. Willst du mehr als einen
Text ausgeben wird das immer schlimmer.
Es hat schon seinen Grund, warum die Ausgabe eben "nur" ein 7-Segment
Display ist..
Die Erweiterungen die ich mir für die Platine so überlege sind von daher
"zweigleisig". Zum einen eben für das, was man als CP1 anstellen kann,
zum anderen was man unter Arduino anstellen kann.
Es ist das erste mal, dass ich mich mit dem Arduino-Framework näher
beschäftige und darum, wie die Struktur von Arduino aussieht, wo welche
Dateien abgelegt sein muß, damit das über das Framework erreichbar ist.
Manche Dinge (muß ich leider zugeben) sind beim Arduino erstaunlich
praktisch, andere hingegen wieder hinderlich.
Da die Platine sich an Anfänger wendet wird sie eben auch als
Arduino-Platine programmiert.
Momentan werkel ich an einem IR-Empfänger mit HX1838, was schon gut
aussieht und dessen Funktionen dann wohl auch in den Softwareinterrupt
(höchstwahrscheinlich Nr.9) wandern wird. Hierfür mache ich dann sogar
solche Dinge, die ich normalerweise nicht mache: Die Portpins versorgen
den Receiver mit Spannung. D.h. es benötigt 3 Portpins zum Betrieb, 2
als Spannungsversorgung, einer als Datenpin.
Zumindest für Arduino wird die Wahl der Pins frei wählbar sein, im CP1
Mode wird es wohl von mir fix vorgegeben sein. Damit lassen ich dann
eben auch in der Maschinensprache leicht Steuerungen realisieren.
Nebenbei schreib ich auch immer noch n bisschen an der Doku (auch wenn
ich da keine so große Lust darauf habe) und mittlerweile ist das CP1
Projekt für mich ein "aus dem Loch bringer" in den ich immer wieder
komme, weil ich hoch verbissen Momentan an meinem Padauk PFS Programmer
hänge der mich einfach nicht losläßt (heute habe ich bspw. wieder 2
Controller beim Versuch den 173er zu programmieren gegrillt).
;-) so gesehen ist das CP1 Projekt hier für mich so etwas wie ein
"Erfolgsgarant" für mich bei dem ich mir sagen kann: "Es hat etwas
funktioniert".
Für den CP1 ist also als nächstes vorgesehen:
- Fernbedienung mit NEC Protokoll (hier ein Dank an Frank M. der mich
diesbezüglich zu ein paar Dingen aufgeklärt hat)
- setzen und auslesen einer I2C - RTC (DS3231)
- Melodieplayer (mittels bereits realisiertem Frequenzgenerator)
- RDA5807 Radio-Interface UKW
und eigentlich... sollten alle Erweiterungen bleiben gelassen werden,
weil das absolut überladen wird, zumindest im CP1 Mode. Es ist dann
komplett von dem entfernt, was ein CP1 mal war. Hier realisiert man ein
veraltetes Bedienkonzept (was den Möglichkeiten der damaligen Zeit
geschuldet war) mit den Möglichkeiten was heute machbar ist.
Besser wäre also nicht erweitern, sondern dokumentieren (aber das
Erweitern macht halt deutlich mehr Spaß).
Irgendwo ganz oben hat es einer mal geschrieben gehabt: Der Spaß ist
nicht, das Ding dann fertig zu haben, sondern der Weg dahin.
U.a. würde es mich reizen, den alten Synthesizer Chip SN76489 anzubinden
wie er in der SG-1000 Konsole und im SC-3000 verbaut wurde (eben der
typische Klang der 80er Jahre), der Chip wird immer noch geliefert.
Brauchen tut es natürlich keiner (wenn man sich anstrengt, kann auch ein
ATmega so etwas in Software).
All diese Dinge lenken dann vom eigentlichen Einsatzzweck, dem Lernen,
ab.
Ralph S. schrieb:> Du hast halt nur 256 Programmzeilen, die zur Verfügung stehen und> letztendlich verknüpft man dann nur noch mittels Registerzuweisungen> einzelne in Softwareinterrupts versteckte Funktionen zu einem Programm.
Ja, mehr Speicherzellen wären nett...
> Manche Dinge (muß ich leider zugeben) sind beim Arduino erstaunlich> praktisch, andere hingegen wieder hinderlich.
Der Editor ist natürlich nur für Masochisten, der Library-Verwalter, und
Funktionen wie Bootloader brennen und das Hochladen auch über
Standard-AVR-Programmer (USBTiny) etc. sind durchaus nett! So spare ich
mir z.B., einen USB-FTDI-Chip auf's Board zu nageln. USBTiny reicht für
ein Breadboard aus. So eine schlechte AVR-Plattform ist der Arduino also
gar nicht. Ich editiere im Emacs und verwende die IDE nur zum Hochladen.
Ich habe zwar auch win-avr und avrdude und das ganze Geklingel, aber
Arduino ist schön einfach diesbzgl.
> ;-) so gesehen ist das CP1 Projekt hier für mich so etwas wie ein> "Erfolgsgarant" für mich bei dem ich mir sagen kann: "Es hat etwas> funktioniert".
Schön, nicht? Man muss sich ja auch mal an was freuen können!
> Für den CP1 ist also als nächstes vorgesehen:> - Fernbedienung mit NEC Protokoll (hier ein Dank an Frank M. der mich> diesbezüglich zu ein paar Dingen aufgeklärt hat)> - setzen und auslesen einer I2C - RTC (DS3231)
Sehr sinnvoll, haben wir auch - speziell da der Microtronic schon
Uhrzeitfunktionen hat! Nur eben keine gepufferte Echtzeituhr. Daher der
DS3231.
> - Melodieplayer (mittels bereits realisiertem Frequenzgenerator)
Haben wir auch.
> U.a. würde es mich reizen, den alten Synthesizer Chip SN76489 anzubinden> wie er in der SG-1000 Konsole und im SC-3000 verbaut wurde (eben der> typische Klang der 80er Jahre), der Chip wird immer noch geliefert.
Ja, sicherlich ein anderes schönes Spaß-Projekt. Der SN76489 war ja
einer von 3 Verdächtigen: AY-3-8912, SID, und dann der SN76489. Das
war's ja so ziemlich damals. Der YM2151 kam später, und war nur in
Sony's MSX (CM5) Musikcomputern soweit ich weiß.
Busch hatte damals Experimente mit dem Microtronic und dem SN76477n, der
natürlich ein ganzes Stück primitiver ist, und nur monophon:
https://youtu.be/_e6eQX7ZDbY