Junior Computer ][

  • ... ich hatte den Thread schon gelesen, als es ihn noch gar nicht gab.
    Allerdings hab ich auch nicht alles gelesen.
    Es sind immerhin schon stolze #1712 Einträge, ohne diesen hier.

    @2ee, Jörg, weiter so.


    mfG. Klaus Loy

  • ... ich hatte den Thread schon gelesen, als es ihn noch gar nicht gab.

    Stimmt, ohne klaly gäbe es diesen Thread nämlich garnicht. Er war der jenige, der an der Zündschnur der Stange Dynamid rumgezündelt hat :D


    Ich möchte die ASCII-Tastatur mit dem ursprünglichen (originalen) Elekterminal verwenden. Ist das möglich oder muss da etwas angepasst werden?

    Hallo audiokit_nl , die ASCII Tastatur kannst du als 7 Bit (D0...D6) Tastatur überall anschließen, wo eine Standard 7 Bit ASCII Tastatur funktioniert. D7 am Anschluss nutzt der Junior ][ speziell, sollte am Elekterminal also nicht angeschlossen werden, stattdessen müsste am Terminal ein evtl. achtes Bit D7 auf LOW gelegt werden. Die Pinbelegung ist die selbe, wie für den Apple 1. Hier musst du also einen Adapter basteln.


    Die Tastenkombination SHIFT-CTRL-DEL löst die /RESET Leitung aus. Die HOME Taste wiederum CLEAR_SCREEN.


    ----------------------


    Nochmals zu ThoralfAsmussen Idee:

    Man nehme ein EPROM. Jede Adresse wird mit dem zu ihrem Bitwert gehörigen BCD Muster beschrieben und fertig ist der Wandler.

    Genau das ist der 74LS185 auch, ein speziell gebranntes 74LS88 PROM. Problem: Beide Bausteine sind leider schon ewig nicht mehr erhältlich.


    Zu BCD: Bit einem Binär zu BCD Decoder kann ich natürlich die Daten nicht komprimieren. Im Gegenteil, du bläst die Anzahl der Bits ja auf. Wie der Name ja schon sagt ist BCD = Binary Coded Decimal. D.h. bis dez. 9 - also B00001001 - sind Binary und BCD Zahlen identisch, brauchen also max. vier Bit. Ab dez. 10 - B00001010 - braucht BCD aber bereits 5 Bit, da dann als B0001 0000 codiert (ich hab extra mal die Leerstelle eingefügt, um die BCD Stellen nochmals zu verdeutlichen. Bei den am Joystickport benutzten 7 Leitungen (Up, Down, Left, Right, Button 0, Button 1, Button 2) würden BCD Codiert schon 3 Dezimalstellen, also 12 Bit anfallen, statt der 7 jetzt genutzten Bits (also B0001 0010 0111 statt B01111111).


    Die 7 Leitungen sind auch nicht redundant. Man könnte ja auf die Idee kommen, Up/Down und Left/Right jeweils zu einer Leitung zusammenzufassen und dann Left = 0 und Right = 1 als Signal zu übermitteln. Dann gibt es aber keine Nullstellung mehr. Ich brauche also genau diese 7 Signalleitungen, sonst nimmt die Entropie der Datenübermittlung zu, sprich es gibt unbestimmte Werte.


    Natürlich gibt es Kombinationen, die nicht vorkommen können. Wie du ja richtig gesagt hast schließen sich gleichzeitig Left und Right, sowie Up und Down aus. Aber: Das sind dann für die Jostick Positionen drei ungültige Werte (Up = Down, Left <> Right), (Up <> Down, Left = Right) und (Up = Down, Left = Right). Mit den möglichen 8 Button Kombinationen (drei Buttons = 2^3 = 8 ) ergibt das also 3*8 = 24 ungültige Signalkombinationen. Bei 7 Bit wären das also immer noch 2^7 - 24 = 104 GÜLTIGE kombinatorische Stellungen. Dazu brauchst du ZWINGEND also immernoch 7 Bit, da 2^6 ja nur noch 64 Möglichkeiten zulassen würde. Eine neue Codierung mit den nur gültigen Werten ist zwar möglich, aber nicht Sinnvoll, weil der Rechner das dann ja erst wieder decodieren muss. So wie es jetzt ist kann ich einfach ein gesetztes Bit 0 (PB0 = 1) als "Joystick Position Hoch" interpretieren, da jedes gesetzte Bit eine Signalleitung repräsentiert. Bei einer Kodierung müsste ich aber eventuell zwei oder mehr Bits dafür untersuchen.


    Die einzige Möglichkeit, das Signal PARALLEL einzudampfen und nicht die kombinatorische Logik zu verletzen ist die von mir weiter oben beschriebene Abfrage der Signale über einen 8 zu 3 Encoder (oder auch 1 aus 8 Selektor). Hier werden die einzelnen Signale NACHEINANDER abgefragt, also jedes Signal über die drei Adressleitungen (2^3 = 8 ) selektiert und an Q, bzw. /Q der aktuelle Wert (0 oder 1, also 2^1 = 2 mögliche Werte ) abgefragt. Damit habe ich wieder 2^(2^3) = 2^8 = 256 Kombinationen.

    Die zweite Alternative wäre, die 7 Signalleitungen parallel in ein Schieberegister zu laden und dann SERIELL einzutakten. Dann brauche ich nur noch zwei Leitungen, nämlich LOAD und CLK. Letztlich sogar die bessere Lösung, da das Einlesen genauso schnell wie mit dem 8 zu 3 Encoder funktioniert und auch nicht mehr Programmieraufwand beschert.


    Ich hoffe, ich konnte das einigermaßen verständlich erklären, warum das mit deiner BCD Idee nicht funktioniert. Hat mich aber dennoch zum Nachdenken über Alternativen zur bisherigen Schaltung animiert. :):thumbup:

    Einmal editiert, zuletzt von 2ee ()

  • Ich werde die Ascii-Tastatur bauen, damit ich den Elekterminal complett machen kann.


    Übrigens bei der Tastatur fällt mir gerade ein, dass ich vor ein paar Tagen einen Fehler im Code gefunden habe. Bei eingeschaltetem CAPS LOCK wird mit SHIFT - 1 kein @ ausgegeben sondern ein ' .

    Der Fehler befindet sich in der Routine


    uint8_t GetASCII(uint8_t code)


    Hier muss in der Zeile


    if (capsLock == 1 && asciiCode >= 64 && asciiCode <= 90) asciiCode += 32;


    der Wert 64 gegen 65 getauscht werden.


    Ich hab gerade mal eine neue Firmware für die Keyboard Layouts DE und US compiliert. In der ZIP liegt auch das Bild "JC2 Keyboard Fuse Settings.PNG". Stellt einfach auf der Config Seite eurer Brenner Software die Fuses so ein wie auf dem Bild.

    Auch die älteren Rev. 1 Platinen laufen damit. Der externe 12MHz Quarz wird damit obsolet, es wird der interne 8MHz Oszillator verwendet.


    Wenn ich mal viiiiiiiiel Zeit haben sollte, baue ich die Firmware noch so um, dass über die beiden Jumper P0/P1 das Tastaturlayout umgestellt werden kann, dann braucht man nicht für jedes Layout eine eigene Firmware.

  • Ich hoffe, ich konnte das einigermaßen verständlich erklären, warum das mit deiner BCD Idee nicht funktioniert. Hat mich aber dennoch zum Nachdenken über Alternativen zur bisherigen Schaltung animiert. :):thumbup:


    Schön ! Und Danke!

    Muß das nochmal bißchen überdenken, glaub ich. Habe gestern Abend/Nacht mal bei diesem Mouser angeschaut, was man da alles an Encoder,Decodern, Multiplexern usf auswählen kann. Das erschlägt einen ja geradezu. Und das mit dem BCD vs. "normales binär" war mir dann doch nicht so klar, wie es hätte sein sollen. Deine Erklärung hat aber mal schön klar gemacht, warum das "Decimal" da drin vorkommt (ja, ja theoretisch war mir das auch klar, aber beim "Überlegen" waren es dann oft doch eher 2^4 mögliche Varianten/Zahlen mit 4 Bits). Trotzdem sollten ja eigentlich m.E. 4+3 Zustände komplett reichen, um einen Joystick abzubilden.

    Vielleicht habe ich ja auch eher nach einer Variante gesucht "digitale" Daten zu erzeugen. Und dafür scheint es nicht einfach einen "IC" zu geben.

    Bin da gerade noch am "Rummalen" auf Papier und bei aktuell bei so Stichworten wie Diodenmatrix gelandet. Mal sehen. Wenns spruchreifer wird, kommt es hier noch dazu (darf wie immer aber auch gern ignoriert werden, oder als Anregung gesehen werden - was mich natürlich freut).



    Ein paar Fragen habe ich aber trotzdem noch zu dem Port B und dem Joy-Anschluß, mit der Bitte um eine kleine erklärende Antwort.


    a.) Der 8255 Port B als Input wird von außen auf 5V gelegt und wenn der von 5V auf 0V runtergeht am IC, weil am Joystick was gedrückt wird, wird das interne Bit "1" und signalisiert dann, daß was passiert ist. Korrekt ?


    b.) Damit dann kein Kurzschluß zwischen 5V und GND entsteht (bei PressOnJoy), werden diese Widerstandsketten dazwischengeschaltet. Diese haben 4,7 kOhm (vermutlich für jeden Widerstand bzw. jede Leitung). Warum genau dieser Wert ? Würden es 330Ohm auch tun oder 10kOhm ?


    c.) Der Joystick wird bestimmt immer mal an-/abgestöpselt. Wäre es evtl sinnvoll da noch Dioden in jede Leitung direkt vor dem IC einzubauen (oder braucht man das gar nicht, weil der 8255 sowas schon "intern" hat ? (man will den Chip ja evtl auch nicht gleich zerstören, wenn man mal den Joysitck einsteckt)


    d.) Wäre es (eher Vorschlag als Frage) nicht evtl sogar sinnvoll, den Pin PB7 zumindest bis zum Joysickport zu ziehen und genauso wie die anderen (PB0 bis PB6) zu beschalten. Dann könnte man z.B. mit einem Jumper festlegen, ob an Pin 7 (5V für Joystick) ein weiteres Bit für Input da ist oder eben die 5V (wenn eine Joystick dran hängt) rausgehen. Das wäre dann quasi ein weiterer halbwegs vollwertiger 8Bit Eingangskanal, der "generischer" und auch für ganz andere Sachen (Blumentopfwasserstand, 8bit ASCII Keyboard o.ä.) benutzt werden könnte.

    -- 1982 gab es keinen Raspberry Pi , aber Pi und Raspberries

  • Das eigentlich Schlimme an dem Thread ist v.a., daß man anfängt sich Einsteiger-Elektronik Bücher zu kaufen ...

    immerhin erschließen sich manchmal irgendwelche früher komplett unverständlichen Sachen völlig neu.


    Gerade bei so C64 Althardware u.ä. sollte diese Art Wissen ja vielleicht sogar mal hilfreich sein. Und wenn es nur dafür dient, daß man weiß, was die Chips grob machen. Diese Logkischaltbilder z.B. in Multiplexerdata-Sheets haben schon was ...


    ... sehr schräg das alles. :)



    (man versteht auch, warum die heute Chips eher in Blöcken bauen, weil das eh keiner mehr nachvollziehen kann, was da dann wirklich passiert. Bin da gestern paarmal ausgestiegen, obwohl ich ehrlich bemüht war.) Bild folgt


    -- 1982 gab es keinen Raspberry Pi , aber Pi und Raspberries

  • Hallo Sebastian,


    zu deinen Fragen:


    a.) Der 8255 Port B als Input wird von außen auf 5V gelegt und wenn der von 5V auf 0V runtergeht am IC, weil am Joystick was gedrückt wird, wird das interne Bit "1" und signalisiert dann, daß was passiert ist. Korrekt ?

    Ich hab in meiner Beschreibung von oben - absichtlich - unterschlagen, dass ich von invertierter Logik ausgegangen bin. Das macht sonst alles nur noch komplizierter. Also, wenn z.B. ein Joystick Button gedrückt wird, liegt ein Low Signal am Eingangspin des 8255 und es wird an dieser Stelle des Ports intern eine "0" gelesen. Nicht gedrückt heißt also, eine "1" wird gelesen. Ansonsten ist ist alles so, wie von dir angenommen.


    b.) Damit dann kein Kurzschluß zwischen 5V und GND entsteht (bei PressOnJoy), werden diese Widerstandsketten dazwischengeschaltet. Diese haben 4,7 kOhm (vermutlich für jeden Widerstand bzw. jede Leitung). Warum genau dieser Wert ? Würden es 330Ohm auch tun oder 10kOhm ?

    Die Widerstände liegen nicht in der Leitung, sondern sind Pullup Widerstände. Da bei nicht gedrückten schaltern die Eingänge ja offen in der Luft hängen, hat man keinen festgelegten Signalpegel LOW oder HIGH. Die Pullups legen die offenen Eingänge also auf High. Das ist eine Vorsichtsmaßnahme, da ich tatsächlich nicht weiß, ob der 8255 Eingänge intern nicht bereits auf High legt. Bei TTLs ist es im Normalfall so, das ein offener Eingang einen High-Pegel liefert. Beim ATMega328 kann man einen IO-Pin, der als Eingang geschaltet wurde, den Wert HIGH geben, womit ein interner Pullup Widerstand geschaltet wird. Wird der Eingang auf LOW gelegt, ist er ein offener Ausgang ohne Widerstand. Evtl. kann man die Widerstandsarrays am 8255 auch weglassen. Das muss ich noch prüfen.

    4K7 Ohm Widerstände sind ein guter Mittelwert. Ob er der Beste ist, kommt auf den Baustein an, an dem er hängt. Manchmal gibt es in den Datenblättern bereits optimierte Vorgaben, wie z.B. am Floppy Controller. Da hängen an den Open-Collector Ausgängen 150 Ohm Widerstände, die im Datenblatt so angegeben sind. Da fließt aber natürlich ein konstant hoher Strom drüber, was für diesen speziellen Fall auch so sein muss. Für einen normalen Pullup sind 1K bis 10K eine übliche Wahl. Bei 330Ohm fließt einfach zu viel Ruhestrom. Bitte nagle mich aber nicht darauf fest, was der Beste Wert wäre. Eventuell haben da die Vollprofientwickler ganz andere Erfahrungen. Mein Tätigkeitsgebiet liegt hautpstächlich in der Software Entwicklung, Hardwaredesign ist nur mein ziemlich bescheidenes Hobby.


    c.) Der Joystick wird bestimmt immer mal an-/abgestöpselt. Wäre es evtl sinnvoll da noch Dioden in jede Leitung direkt vor dem IC einzubauen (oder braucht man das gar nicht, weil der 8255 sowas schon "intern" hat ? (man will den Chip ja evtl auch nicht gleich zerstören, wenn man mal den Joysitck einsteckt)

    Wenn der Joystick in Null-Stellung ist und auch keine Schalter gedrückt sind, fließt ja nirgendwo Strom und man muss sich da keine Gedanken machen. Der Joystick ist ansich ja ein vollständig passives Gerät (aktiv wird es erst durch den Bediener 8o ). Ansonsten sollte selbst bei einem gedrückten Schalter beim Ein-Ausstecken nicht viel passieren, da dann ja einfach Masse angelegt wird und keine Kondensatoren oder Spulen ins Spiel kommen.


    d.) Wäre es (eher Vorschlag als Frage) nicht evtl sogar sinnvoll, den Pin PB7 zumindest bis zum Joysickport zu ziehen und genauso wie die anderen (PB0 bis PB6) zu beschalten. Dann könnte man z.B. mit einem Jumper festlegen, ob an Pin 7 (5V für Joystick) ein weiteres Bit für Input da ist oder eben die 5V (wenn eine Joystick dran hängt) rausgehen. Das wäre dann quasi ein weiterer halbwegs vollwertiger 8Bit Eingangskanal, der "generischer" und auch für ganz andere Sachen (Blumentopfwasserstand, 8bit ASCII Keyboard o.ä.) benutzt werden könnte.

    PB7 kann in dem von mir genutzten Modus 1 nicht als IO Pin eingesetzt werden. Er ist in diesem Modus für Port A als Interrupt Ausgang für ein Handshake vorgesehen und kann auch nicht anders genutzt werden. Ich brauche aber von den drei Handshake Leitungen STROBE (Eingang), IBF = Input Buffer Full (Ausgang) und INT (Ausgang) nur die beiden ersten. Damit wird die Komunikation zwischen 8255 und ATMega gesteuert. Sonst weiß der ATMega ja nicht, wann er aufhören soll Tastaturdaten zu senden. INT liegt also einfach ungenutzt und unbrauchbar rum.

    Die Aufteilung des Port C bei den verschiedenen Modis des 8255 sind zum Teil etwas verwirrend, wenn man das zum ersten mal sieht, aber doch recht flexibel. Tatsache ist, es steht kein freier Pin für irgendwelche weiteren Funktionen am 8255 mehr zur Verfügung. Ich hätte da auch noch den einen oder anderen gerne gehabt.


    Hier mal das Datenblatt des PIO Bausteins, für die genaue Erörterung. Auf Seite 3-110 (Seite 10 im PDF) ist die Beschaltung des Port C im Modus 1 beschrieben. Da Kombinationen möglich sind, ist ein vollständiges Lesen des Datenblattes aber sinnvoll.

  • Danke für die Erläuterungen.

    Das PDF hatte ich auch schonmal angeschaut - und bin dann bei den Modi ein bißchen draußen gewesen. Mit der Info "Mode 1" werd ich aber noch mal genauer schauen, wie das alles so gemeint ist.


    Interne Logikumkehr - kein Problem.

    Nur BIT geht dann ehr nicht mehr gut zu benutzen, es sei man dreht alles auf dem Weg ins RAM logisch nochmal komplett um.


    Das mit den Widerständen ist also anscheinend (in gewissen Grenzen) relativ egal, nur nicht zu klein. Bei mir kamen da dann solche Fragen auf, wie: ist es nicht was komplett anderes, wenn man da da ein Richtung am Joystick drückt oder das Ganze bei gedrücktem Feuerknopf macht, oder gar Fire+eine Ecke. (1 vs 2 vs 3 angesprochene Leitungen und damit jeweils anderes Spannungen/Ströme/whatever)

    Das mit den PullUp Pulldowns muß man wahrscheinlich einfach mal selbst probieren, dann merkt man sich das wahrscheinlich besser.


    in der Software Entwicklung, Hardwaredesign ist nur mein ziemlich bescheidenes Hobby.


    Ja, ja. Alles klar. :)


    Aber einen Thread pflegen mit einem selbstentwickelten Computer und aller paar Monate und in schöner Regelmäßigkeit kommt eine neue Erweiterungskarte dazu. OK, SCSI fehlt noch ... . Von der Software ganz zu schweigen. Und die Nachfolgemaschine war ja durch die Blume auch schon angekündigt worden.


    Man kann es mit dem Understatement auch ein bißchen übertreiben :) ... bescheidenes Hobby und nur ein ganz klein bißchen Ahnung oder so.

    Ts, ts. ...


    ::klasse::

    -- 1982 gab es keinen Raspberry Pi , aber Pi und Raspberries

  • So, jetzt muss ich mich dann doch mal wieder melden, wenn sich sogar schon Norbert sorgen macht, weil man von mir nichts mehr zu hören bekommt.

    Bei mir gibt es gerade ziemlich viel auf diversen anderen Baustellen zu tun, deshalb ist jetzt der Junior von mir kurzfristig etwas stiefmütterlich behandelt worden.


    Trotzdem mal eine kleine Zwischenbilanz:


    Für die PS/2 Tastatur nutze ich jetzt die Arduino Code Library "PS2Keyboard" von Christian Weichel. Alle anderen Bibliotheken waren viel zu Umständlich und haben bei mir zum Teil auch nicht richtig funktioniert. Allerdings kann besagte Library von Haus aus keine Control Codes und CAPSLOCK wird auch nicht unterstützt. Ich habe deshalb den Code entsprechend geändert, um wenigstens auf dem Stand meiner normalen ASCII Tastatur zu sein. Ein zweites Manko ist, dass nur eine unidirektionale Verbindung zur Tastatur aufgebaut wird. Deshalb können die LEDs nicht angesprochen werden. Das habe ich jetzt noch nicht gefixed, da man dazu die Interrupt Routine des gegebenen Codes auch überarbeiten müsste. Ich werde das wohl zu einem späteren Zeitpunkt mal anpassen, aber zunächst reicht mir der jetztige Status Quo.

    Wann ich nun dazu komme, die PS/2 Tastatur im Junior vollständig zu unterstützen, kann ich noch nicht sagen, aber ich werde versuchen die nächsten Tage immer mal wieder ein wenig daran zu arbeiten.


    Mittlerweile sind die 64 pol. High Density DIL Sockel eingetroffen. Wie von mir schon befürchtet, passen die unter dem Sockel angeordneten Widerstände leider nicht ohne eine der beiden Streben im Sockel weg zu knippsen.



    Für die nächste Platine werden die Widerstände in die Mitte wandern, wo sie schon zu Beginn hingehört hätten. Andere Lösungen für die bestehende Platine wären, hier 0,4W Widerstände mit einer Länge von 3,4mm und einem Durchmesser von 1,9mm zu nehmen, oder die Widerstände einfach auf die Lötseite zu packen.

    Die 21,x MHz Quarze sind auch endlich aus China bei mir angekommen. die muss ich bloss noch vorher auf Funktion testen, bevor ich da einen einlöte. Better save than sorry...


    Parallel hatte ich jetzt immer mal wieder ein paar Bauteile auf die neue IO Platine gelötet. Eventuell bekomme ich die über das Wochenende fertig bestückt und kann dann mal schauen, ob sie funktioniert. Wenn ja, könnte ich wenigstens schon mal diese Platine an alle versenden, die da schon länger drauf warten. Tut mir leid.


    Beim DOS hatte ich schon vor ein paar Wochen den Befehlsinterpreter eingebaut und ein paar kleine Befehle wie ECHO und CLS implementiert.



    DIR muss noch ein wenig warten, siehe oben...


    So weit erst mal die letzten Updates. Ich melde mich bald möglichst wieder.

  • Ich hab jetzt gestern mal den alten IO Controller gegen den neuen getauscht.

    Die gute Nachricht: Es läuft alles.

    Die schlechte: Leider nicht immer.


    Beim Einschalten bootet der Rechner problemlos von einer eingelegten SD-Karte. Nach einem Reset oder einem kurzen Aus- und wieder Einschalten gelingt dem Junior das aber nicht mehr. Der Pegelwandler funktioniert also eigentlich. Ich habe das Gefühl, dass meine Initialisierungsroutine die CS Select Leitung zu kurz (oder garnicht?) deaktiviert. Wird der Rechner nämlich für mindestens 30 Sekunden ausgeschaltet, bootet er wieder normal. Da scheint dann der Stützkondensator des 3,3V Reglers leer zu sein und beim Wiedereinschalten wird CS dann evtl. für einen längeren Moment auf Low gezogen. Ich muss das aber erst noch prüfen. Alles sehr verwirrend.

  • Hallo alle zusammen,


    da ich es jetzt doch noch geschaft habe, den traditionellen Vorweihnachts-Grippe-Infekt zu gekommen, bleibt bei mir für den Rest des Jahres erst mal alles an Bastelarbeiten liegen. Danach habe ich dann hoffentlich wieder einen klaren Kopf und genügend Zeit, um die Problemchen mit dem neuen IO Board, der Firmware für den Floppy-/Grafik-Controller und das DOS weiter vorrantreiben zu können.


    Bis dahin wünsche ich hier allen im Forum ein paar erholsame, gesunde und friedliche Feiertage und einen guten Rutsch in das neue Jahr, in dem wir uns dann hoffentlich alle hier wieder (virtuell) treffen werden.


    Macht es gut und bastel schön fleißig an euren alten Kisten


    :xmas:


    Jörg

  • Hallo Jörg,


    ich wünsche dir eine schnelle gute Besserung! Ebenso ein Frohes Weihnachten und einen Guten Rutsch. Falls wir uns nicht noch vorher 'sehen'.


    LG Norbert

    ___________________________________________________________________________________________________

    "Traue niemals einem Computer, den du nicht aus dem Fenster werfen kannst" (Steve Wozniak)

  • Hallo zusammen,

    Ich habe gerade die ASCII-Tastatur (Rev2) gebaut.

    Gilt das Testverfahren im Handbuch weiterhin für Rev2.? Mit anderen Worten, es ist kein Kristall montiert und es gibt auch andere Änderungen gegenüber Rev1.

    Wenn ich die Capslock drücke, leuchtet die LED nicht auf. Ich sehe auch keine Aktivität auf den einzelnen PC- und P0-Pins des ATMEA-Chips.

    Muss ich die Tastatur zuerst an den elekterminal Anschluss anschließen? Ich vermute, dass es ohne Quarz kein /strobe-Signal gibt?


  • Nachdem ich die Antwort von 2ee noch einmal gelesen habe, fällt mir auf, dass im Atmega ein interner 8-MHz-Takt eingebaut ist.


    Quote: "In der ZIP liegt auch das Bild "JC2 Keyboard Fuse Settings.PNG". Stellt einfach auf der Config Seite eurer Brenner Software die Fuses so ein wie auf dem Bild.

    Auch die älteren Rev. 1 Platinen laufen damit. Der externe 12MHz Quarz wird damit obsolet, es wird der interne 8MHz Oszillator verwendet."


    Ich habe die config genau eingestellt wie im PNG aber der ATMega-Chip scheint nicht zu funktionieren. Mit den XGPro habe ich version 12.63 eingestellt.

  • Hallo audiokit_nl , ich bin mir fast sicher, dass da irgendein Fuse Bit nicht richtig gesetzt ist. Ich schaue mir das morgen mal an, heute habe ich leider keiner Zeit mehr dafür. Eventuell ist auch der Hex File nicht der passende Code für den internen Takt. Wie gesagt morgen stelle ich dir mal was zusammen und hoffe, dass du damit dann Erfolg hast.

  • Hallo 2EE, Ich denke, Sie haben Recht, vielleicht ist beim ersten Programmieren etwas schief gelaufen.

    Ich habe gelesen, dass die Fuses nicht so einfach zu reparieren sind.

    Zum Glück habe ich auch den elnec Beeprog+. Dies erleichtert das Zurücksetzen der Fuses und ich konnte auch die 8Mhz-Einstellung kalibrieren (siehe Fotos). 3 der 4 Atmeas konnte ich retten, der 4. blieb „defekt“. Das erste Tastatur functioniert nun.

  • Musste gerade in Heise Online lesen, dass wieder einmal einer meiner Superhelden die Erde verlassen hat...



    Nicklaus Wirth.jpg


    Nicklaus Wirth * 15. Februar 1934 + 1. Januar 2024


    RIP ! :sad:


    Good-bye and thanx for all the fantastic programing languages...

  • Gerade ist mir mit der neuen IO Platine ein neues Phänomen mit dem SD-Card Reader aufgefallen.


    Ich hatte gerade die mir von Dietrich bereitgestellten Images für CPM-65 ausprobiert und nach dem ersten erfolgreichen Laden gedankenverloren RESET gedrückt. Wer den Thread hier aufmerksam gelesen hat, weiss, ich hatte dabei massive Probleme, denn eine SD-Karte ließ sich mit der neuen Platine immer erst wieder einlesen, wenn der Rechner mindestens 30 Sekunden ausgeschaltet war. Diesmal funktionierte es aber auf Anhieb. Und nochmal...und nochmal..und....


    Ein Test mit meinen anderen SD-Karten brachte dann wieder das gleiche - negative - Ergebnis: Booten nach RESET nicht möglich. Der Unterschied 64GB Karte und 8/4/1 GB Karten. Offensichtlich scheinen 64GB Karten (und größer??) gegen das Problem immun zu sein. Was jetzt genau allerdings das Problem ist, ist mir immer noch schleierhaft. Auf alle Fälle scheint es an der Initialisierung zu liegen. Warum die Karten mit kleinerer Kapazität allerdings das Initialisieren verweigern, wenn der Rechner nicht min. 30 Sekunden aus war ist wirklich spooky. Und was macht der SD-Karten Adapter von AZ-Delivery da Schaltungs technisch gesehen anders?


    Vielleicht fällt euch ja was dazu ein. Hier nochmal der neue SD-Card Reader Teil der IO-Platine.



    Die beiden Pullup-Widerstände R18 und R19 habe ich wieder gekappt. Mit eingebauten R19 wurde zwar der MBR eingelesen, der System Boot Sektor dann aber schon nicht mehr. Mit R18 ging dann garnichts mehr. Eigentlich sollten laut Spec. ja zu mindest DAT1 und DAT2 via Pullup an 3,3V liegen.


    Wie gesagt, alles sehr mysteriös. :nixwiss:


    Hilfe wie gesagt sehr gerne und dringend erwünscht.

  • 1. die SD-Karten haben keinen Reset-Anschluss

    2. Du versetzt diese ja mit einem speziellen Kommando in einen anderen Modus

    3. wenn sie im anderen Modus sind, verstehen sie dann ja das spezielle Kommando nicht mehr


    Da Du ja die Software selbst schreibst, solltest Du davon ausgehen, dass die Karte möglicherweise bereits im SPI Modus ist und das mal ausprobieren.

    Ggf. wenn Reset mitten in einer Transaktion war, könnte selbst dies schwierig werden.


    Kurzum: wir (EMK) haben das Problem damals nicht gelöst bekommen und dann einen p-Kanel MOSFET in die Versorung der SD-Karte eingeschleift und diesen per Port angesteuert (Layoutänderung für die Serie).

    Wenn Du es per Software hinbekommst, würde mich die Lösung interessieren.

  • Hallo Reinhard,

    danke für deine Antwort.


    Mit RESET meinte ich, einen Rechner Reset. Dieser führt dann natürlich die SD-Karten Initialisierung Routine mit entsprechenden Reset Command an die Karte aus. Das hatte mit dem zugekaufen SD-Karten-SPI Adapter von AZ-Delivery ja auch schon alles problemlos funktioniert. Ich wollte aber den SD-Karten Adapter loswerden, weshalb ich dann den Level Shifter mit 4050 samt 3,3V Regler eingesetzt habe. Das funktioniert ebenfalls. Aber eben nur direkt nach dem Einschalten. Mache ich dann einen Rechner Reset - sprich die Karte wird wie oben neu initialisiert - wird sie offensichtlich nicht mehr erkannt. Wird der Rechner dann für 30+ Sekunden aus- und danach wieder eingeschaltet, findet die Initialisierungsroutine die Karte wieder. Mit einer SD-XC Karte (SanDisk Ultra 64GB) habe ich das Problem nicht, sondern nur mit kleineren Karten (1,2,4 und 8GB) , die aber vorher mit dem Adapter von AZ-Delivery auch liefen. Irgendwie scheinen die kleinen Karten erst wieder zu laufen, wenn wohl der 10uF Stützkondensator leer ist und die ein vollständiger Power-Up Zyklus mit sofort folgender Initialisierung stattfindet.

    Auch wenn ich die Karte bei laufenden Rechner neu einstecke und den Rechner mit Reset neu starte wird sie nicht erkannt. Eine laufende Transaktion kann man hier also auch ausschließen. Wie gesagt, hatte alles vorher problemlos funktioniert.


    Für die nicht benötigten DAT1 und DAT2 Anschlüsse habe ich im Netz folgende Beschaltungen gefunden:

    1. Beide nicht angeschlossen - offen.

    2. Beide verbunden und mit 10K bis 100K an 3,3V.

    3. DAT1 über 100K an 3,3V und DAT2 mit 100K an 3,3V.


    scheint also eher unerheblich zu sein. Aber bitte korrigiert mich, falls ich da falsch liege.


    Ich hatte dann gestern noch folgendes Phänomen: Ich habe den Pullup R18 an MISO wieder angeschlossen. Dann funktionierten plötzlich eine alte Karte wieder wie bisher. Mehrmals Reset des Rechners und die Karte wurde weiterhin erkannt. Karte bei eingeschalteten Rechner raus und wieder rein, Rechner Reset: Karte erkannt. Rechner nochmal ausgeschaltet und gleich wieder ein: Karte wird NICHT mehr erkannt. Und seitdem auch eben nur wenn der Rechner zuvor min. 30 Sekunden aus war. Bin gerade völlig überfragt. Werde morgen eventuell mal den Logic Analyzer auspacken.

  • Mit RESET meinte ich, einen Rechner Reset

    Eben. Damit meinte ich die Karte ist in einem unbekannten Zustand und Du hast keine Möglichkeit ausser Spannungsausfall diese in den Grundzustand zu forcieren. Wie gesagt, bei uns war das Problem auch selten, wenn es aber mal war, dann half auch nur "Stromausfall". Die verbesserte Version war dann "Stromausfall" NUR direkt an der Karte. Aber 30 Sekunden waren nie nötig.

    Insofern kann ich hier auch nur raten. Belaste mal den 3.3V Ausgang des Reglers mit einem Widerstand. Vielleicht bleibt da lange genug Spannung für die Kartenfunktion in C25 und deshalb brauchste die 30 Sekunden.

  • Jörg: Ich kann ja als Nicht-Erleuchteter nur mal die von dir gepostete Schaltungen des SD-Card-Interfaces des Junior und die meines Z80-Zeta2 vergleichen und stelle als Unterschied fest, dass beim Junior PIN 8+9 des SD-Kartenslots miteinander verbunden sind und über R19 =10K an die 3,3V gehen. Im Zeta sind PIN 8+9 nicht miteinander verbunden, sondern gehen ohne weitere Verbindungen über jeweils 10k an +3,3V. Macht das vielleicht was aus?

    ___________________________________________________________________________________________________

    "Traue niemals einem Computer, den du nicht aus dem Fenster werfen kannst" (Steve Wozniak)

  • Eine SD-Karte kann ein einmal gewähltes Protokoll nicht ändern, außer sie wird von der Stromversorgung getrennt:

    Zitat

    There are two bus protocols defined for SD Cards. The default mode is native SD mode but the cardcan be configured to use a slower SPI mode. Protocol selection is done during the first reset commandafter power up. The SD Card powers up in SD mode. To switch the card to SPI mode, the CS signal

    must be asserted while the host issues a reset command to the card. Once a particular protocol is

    configured, it cannot be changed while power is applied. The only way to switch between protocol

    modes is to do a power cycle.

    Quelle: https://www.cactus-tech.com/wp…-To-SD-Card-Interface.pdf

    In meinem Setup kann ich meine SD-Karten problemlos mehrfach initialisieren auch ohne die Stromversorgung zu trennen.

    2ee: sehr mysteriös. Sieht ein bißchen aus wie ein brownout. Checke doch mal die Versorgungsspannung auf Einbrüche...


    PS. Bei mir sind DAT1 und DAT2 offen


    Dietrich

    Meine Computer: Elektor Junior, EPSON HX-20, Robotron PC1715, Poly-Computer 880, Schneider CPC464, APPLE II+, VIKTOR V386PX

    Mein Betriebssystem: CPM-65

  • Damit meinte ich die Karte ist in einem unbekannten Zustand und Du hast keine Möglichkeit ausser Spannungsausfall diese in den Grundzustand zu forcieren. Wie gesagt, bei uns war das Problem auch selten, wenn es aber mal war, dann half auch nur "Stromausfall".

    Das Problem besteht aber ja auch, wenn die Karte bei laufenden Rechner eingesteckt wird und dann ein Reset erfolgt (bei einem per Hand ausgelösten Reset hatte die Karte dann auch mehr als genug Zeit bis sich die Spannung stabilisiert hat). Beim Power Up der Karte ist sie dann immer in einem definierten - nämlich dem nativen - Modus. Meine Init Routine sendet dann mit CS = High 10 FF Bytes (also 80 High Bits) womit dann in den SPI Modus geschaltet wird. Dann erfolgt der Reset der Karte durch CMD1, bzw. ACMD41. Also alles, wie in den SPECs gefordert. Wenn sich eine Karte schon im SPI Modus befindet - also man davon booten konnte - hat die Init Sequenz CS = H, 80x H ja auch keinen Einfluss auf den Modus der Karte mehr, sie bleibt im SPI Mode. Das folgende Reset Kommando sollte dann auch immer funktionieren. Ich hatte die Init Routine X-mal dahingehend geändert, so dass die Karte eben nicht irgendwann mal in einem Zustand hängen bleibt und einfriert. Warum die mit CMD1 zurückgesetzten Karten beim zweiten mal jetzt nicht mehr durchlaufen ist für mich also mehr als seltsam. Wie auch immer, ich werde wohl nochmal die Init Routine neu für den Adressbereich $2000 assemblieren und dann mit dem Logic Analyzer durch debuggen.

    Ist halt sehr ärgerlich, weil ich ja eigentlich am Floppy-/Grafik-Controller weiter machen wollte.

  • Heute Nacht hab ich mal wieder ein paar Fortschritte mit dem Floppy-/Graphik-Board gemacht. Da ich jetzt ja zu mindest mit den SDXC Karten normal booten kann, hab ich das oben beschriebene Problem mit dem neuen SD Karten Leser erst mal zurückgestellt. Stattdessen konnte ich dann mal anfangen, am neuen Board den Microcontroller fertig zu programmieren und die PS2 Tastatur zu testen



    Da der Junior ja mit 7 Bit ASCII arbeitet, hab ich die deutschen Umlaute ä, ö, ü und ß gleich vom Controller übersetzen lassen. Ich musste mich dann nur entscheiden, ob ich bei Großbuchstaben z.B. aus einem Ü ein UE oder Ue mache. Ich hab mich für letzteres entschieden, da es dann doch besser aussieht als z.B. aus Ueberlingen ein UEberlingen zu machen. Nachteil: Bei vollständiger Großschrift wird dann halt aus KÖNNEN KOeNNEN. Ein ß wird auch nur in Kleinbuchstaben übersetzt also : GRUEssE. Da muss man dann halt die beiden S selber schreiben.


    Weitere Sonderzeichen wie €, µ, ², ³, § und ° spuckt der Controller dann auch gleich als ausgeschriebene Worte aus. Also Euro statt € und Paragraph für §.


    Des weiteren konnte ich dann mal endlich die 21,4772 MHz China Quarze als gesund und munter testen. Somit sprach dann auch nichts mehr dagegen, den V9938 Video Controller und die DRAMs einzubauen. Auf dem SW Composite Ausgang kommt auch bereits ein Sync Signal. Der Farbausgang des CXA2075 bringt allerdings noch nichts. Ich werde mir da mal das PAL Taktsignal vornehmen. Ich denke, dass es wohl daran liegt.


    Der Joystick Port und die DIP Switches lassen sich auch lesen. Somit ist eigentlich alles, was am 8255 PIA hängt wohl soweit abgehakt.

    Floppy lesen geht ja auch bereits. Die Schreib Routine muss ich noch fertig machen. Ich werde aber wohl zuerst mal den Video Controller testen.


    Ansonsten sieht mein Schreibtisch gerade extrem chaotisch aus. Da muss man doch öfters zwei mal überlegen, auf welche Tastatur man gerade tippen muss. :fp:



    Viel Spass euch allen


    Jörg :kafeee:

  • Klasse Jörg! :thumbup: . Da kommt Vorfreude auf. :)

    ___________________________________________________________________________________________________

    "Traue niemals einem Computer, den du nicht aus dem Fenster werfen kannst" (Steve Wozniak)

  • Erste Versuche, was von der V9938 VPU auf ne angeschlossene Röhre zu bringen




    Der Zeichensatz ist noch "geliehen". Ich werde mich mal heute Nacht dran setzen, einen eigenen Zeichensatz zu basteln. Morgen gibt es dann mal einen Test am Farbmonitor.