Elektronischer Schreibschutz


  • DerSchatten
  • 7034 Aufrufe 190 Antworten

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Elektronischer Schreibschutz

    Ich möchte gerne mittels einem AVR (ATMEGA) die Schaltung des elektronischen Scheibschutzes nachbauen.
    Es gibt ja davon merhere Varianten. Ich habe unter anderem diese gefunden: VC 1541 Single Floppy Disk Hack

    Jetzt dachte ich es reicht wenn man die Verbindung der Lichtschranke (also des Senders) unterbricht und bei Bedarf dort ein HI anlegt. Aber anscheinend dürfte das nicht genügen.

    Kann mir jemand einen Tip geben wie das funktioniert?

    -= Neu in meiner Sammlung / Modding =-

    Nichts hält länger als ein Provisorium
  • Ja, das ist im Prinzip auch nichts anders als oben in dem Link.
    Aber ich möchte den AVR dafür nutzen weil ich diese Sache für meine Zwecke hier nachbaun möchte: Luxus-1541 mit Atmel Mega8

    Würde mich nun interessieren wie man das realisiert.
    Vielleicht ist der entwickler dieser Software ja hier im Forum unterwegs.

    -= Neu in meiner Sammlung / Modding =-

    Nichts hält länger als ein Provisorium
  • Du musst die Lichtschranke unterbrechen. Der Lichtsensor geht auf einen Eingang des AVR. Da wo die LS angeschlossen war, kommt ein Ausgang des AVR.

    o Modus 1 - normal: Der AVR passt auf, ob die LS unterbrochen wird, und gibt das Signal brav weiter

    o Modus 2 - immer schreibgeschützt: Der AVR meldet immer LS unterbrochen. Der AVR passt auf, ob die LS unterbrochen wird, und gibt immer kurzzeitig LS Signal (wegen Diskettenwchsel)

    o Modus 3 - nicht schreibgeschützt: Der AVR meldet immer LS frei. Der AVR passt auf, ob die LS unterbrochen wird, und gibt immer kurzzeitig LS Signal (wegen Diskettenwchsel)


    Wie man Modus 1 - 3 einstellt, bleibt deiner Fantasie überlassen. Im einfachsten Falle mit zwei weiteren IO (Taster oder Schalter). Ich habe das bei einem Freund per LCD Display und Menü geregelt. Zusammen mit anderen Features wie ROM Select und Laufwerksnummernwahl (8, 9, 10, 11).
    Letztlich ist alles nur Illusion
    Es gibt hier nichts von Bedeutung
  • Warum genügt es denn nicht wenn man die Lichtschranke einfach unterbricht und wieder verbindet?

    Das Signal das von der Platine daherkommt ist ja nur ein HI, oder nicht?
    Liegt das nicht permanent an?

    Wie genau ist der Zustand bei LS unterbrochen und LS frei? Welches Signal muß ich da schicken?

    Muß der AVR am Sender oder am Empfänger hängen? Oben am Laufwerk ist der Sender, oder?

    -= Neu in meiner Sammlung / Modding =-

    Nichts hält länger als ein Provisorium
  • Die Lichtschranke ist im Prinzip ein Optokoppler, bei dem ein Objekt (Diskette) in den Lichtweg eingebracht werden kann. Der Ausgang verhält sich im Prinzip wie die Kollektor-Emitter-Strecke eines Transistors. Nur gibt es hier keine Basis, die den Transistor steuert, sondern die Lichtstrecke. Licht an bedeutet dabei: Transistor durchgesteuert (niederohmig), während Licht aus Transistor gesperrt (=hochohmig) bedeutet. Wenn der Transitor jetzt mit seinem Emitter an Masse und seinem Kollektor über einen Pull-Up-Widerstand auf +Ub hängt, dann ergibt sich am Ausgang (Kollektor) folgendes Verhalten: Licht Aus = High (der Transistor leitet nicht und der Pull-Up-Widerstand zieht den Pegel nach oben) und Licht An = Low (der Transistor leitet und bildet zusammen mit dem relativ hochohmigen Pull-Up-Widerstand einen Spannungsteiler, bei dem der Transistor aufgrund seines im durchgesteuerten Zustand niedrigen Widerstands gewinnt).

    Wenn also ein Mikrocontroller zum Einsatz kommt, muß die Lichtschranke einen neuen Pull-Up-Widerstand bekommen (wenn man sie von der Platine abtrennt 'sieht' sie Ihren originalen ja nicht mehr) und er Verbindungspunkt Lichtschranke - neuer Pull-Up-Widerstand kommt auf den Prozessoreingang. Dort wo die Lichtschranke bisher angeschlossen war, kommt der Ausgangspin des Mikrocontrollers hin, der die Lichtschranke dem DOS gegenüber simuliert.

    Warum die Logik notwendig ist, wurde bereits erklärt: die Lichtschranke dient dem DOS auch dazu, einen Diskettenwechsel zu erkennen. Immer wenn das DOS einen Diskettenwechsel erkennt, wird die BAM neu ins RAM eingelesen. Bei einfachen Lösungen mit Schalter parallel zur Lichtschranke (um eine schreibgeschützte Diskette trotzdem beschreiben zu können) oder mit Schalter in Reihe (um einen permanenten Schreibschutz zu erzeugen), wo die Lichtschranke einfach außer Gefecht gesetzt wird funktioniert dieser Mechanismus nicht mehr, weil die Lichtschranke dann auch beim Diskettenwechsel keine Flanken mehr liefert. Folglich können folgende Schreiboperationen böse ins Auge gehen, weil die Floppy u.U. mit einer falschen BAM arbeitet und vermeintlich freie (auf der aktuellen Disk aber in Wirklichkeit belegte) Blöcke überschreibt.
  • DerSchatten schrieb:

    Wie sieht so ein Diskettenwechsel für den Microcontroller nun aus? Ein Impuls?

    Ein Impuls von 500ms langt. Du kannst ja zur Sicherheit zwei oder drei Impule mit 250ms senden (falls die Floppy grad arg beschäftigst ist), dann ist die Sache garantiert nach ein bis 1,5 Sekunden abgeschlossen. Am besten direkt im Timerinterupt abfackeln.
    Letztlich ist alles nur Illusion
    Es gibt hier nichts von Bedeutung
  • DerSchatten schrieb:

    Der Schreibschutz ist deaktiviert, woher weiß der Controller nun wenn ich die Diskette rausnehme und wieder reinstecke das ein Diskettenwechsel stattgefunden hat?

    Du trennst einfach das Signal auf, wo die Lichtschranke angeschlossen ist. Nach dem Auftrennen hast du zwei Punkte:

    o Punkt A geht zur Lichtschranke

    o Punkt B geht dahin, wo vorher (vor dem Auftrennen) die LS angeschlossen war


    Die Punkte A und B gehen auf IO vom Controller. Punkt A definierst du als Eingang. Punkt B definierst du als Ausgang.


    Nun bekommt der Controller über Punkt A mit, wenn Disketten gewechselt werden. Über Punkt B kann der Controller nun steuern, was die Floppy "sieht", also LS offen oder zu.

    Der Controller kann also ganz simpel über Punkt B vorgeben, die LS sei offen (kein Schreibschutz) oder zu (Schreibschutz). Wichtig ist nur, dass der Controller auch die LS regelmässig überwacht und das Signal weitergibt.
    Letztlich ist alles nur Illusion
    Es gibt hier nichts von Bedeutung
  • Kann mir da jemand weiterhelfen.
    Ich möchte auch die Option haben das bei jeder Disk der Schreibschtuz IMMER aus sein soll.

    Dabei folgenden Ansatz verwendet:

    Quellcode

    1. if(licht == 2) // Schreibschutz = IMMER AUS
    2. {
    3. licht_var = LICHT_EIN;
    4. if(LICHT_EIN) // wenn schreibgeschützt (HIGH)
    5. SCHALTER_PORT &= ~(WRITE); // LICHTAUSGANG = LOW
    6. }


    Damit das funtkioniert muß ja auch ein Diskwechsel erkannt werden.
    Man muß also den aktuellen Zustand beim Einschalten speichern und überwachen ob er sich ändert und dementsprechend LO an die Elektronik schicken. Das entspricht einem "Disk nicht eingelegt"
    Ich denke die Überlegung stimmt schon mal, nur wie setz ich das im Programm um?

    Welcher Pegel muß eigentlich anliegen damit ein Diskwechsel erkannt wird? Oder reagiert die Elektronik auf eine Pegeländerung?
    Wenn ich mit dem Logikchecker auf den Ausgang der Lichtschranke gehe, sieht man auch einen undefinierten Zustand, wenn die Disk halb im laufwerk steckt. Also werder HI noch LO.

    -= Neu in meiner Sammlung / Modding =-

    Nichts hält länger als ein Provisorium
  • Also, soweit bin ich schon:

    Quellcode

    1. #define SCHALTER_PORT PORTD
    2. #define WRITE 0x10
    3. #define LICHT_EIN (PINC & 1 << PC3)
    4. static int16_t lichtCount = 0;
    5. static int8_t lichtval;
    6. ISR(TIMER0_OVF_vect)
    7. {
    8. if(lichtCount > 0)
    9. {
    10. lichtCount--;
    11. if(lichtCount == 0)
    12. lichtval = LICHT_EIN;
    13. }
    14. if(LICHT_EIN != lichtval)
    15. {
    16. lichtCount = 25; // LICHTAUSGANG für 150ms auf HI
    17. }
    18. if(LICHT_EIN == lichtval)
    19. {
    20. SCHALTER_PORT &= ~(WRITE); // LICHTAUSGANG = LOW
    21. }
    22. }
    Alles anzeigen


    Nur funktioniert es nicht. Der Überlegung her sollte es aber passen. Was stimmt da nicht?
    Der Ausgang bleibt immer auf LO.

    -= Neu in meiner Sammlung / Modding =-

    Nichts hält länger als ein Provisorium
  • Hallo.

    Sorry fürs rauskramen.

    Der og. Code funktioniert ?

    Ich suche noch etwas um mit einem LCD Display mir an der Floppy Trackanzeige und Sektoren anzeigen zu lassen.

    Hat sowas schon jemand gebaut. Wäre für eine Anleitung dankbar.

    Fange gerade mit Atmel an.

    Gruß Springer Spider
    Das Meer mit einem Fingerhut auszuschöpfen ist weniger sinnlos als gar nichts zu tun.
  • Spider1982 schrieb:

    @Diddl

    Was du für deinen Freund gebaut hast (Display, Gerätenummer Umschaltung, u.s.w.), könnte ich die Schaltung und den Code bekommen ?

    Im voraus vielen Dank

    Gruß Spider

    Boah, müsste auf einer meiner externen festplatten drauf sein.

    Das sollte ich eh mal suchen und aufs NAS spielen.
    Letztlich ist alles nur Illusion
    Es gibt hier nichts von Bedeutung
  • Sehe ich das richtig, dass diese Schaltung es ermöglicht, auf physisch schreibgeschützte Disketten zu speichern? Wäre es andersrum nicht auch sinnvoll? Also Verhinderung des Speicherns auf nicht geschützte Disketten?
    Was bedeutet dieses dämliche Modewort "retro" eigentlich wirklich?
    Wer mir dummdreiste Unterstellungen macht, kriegt Ärger mit meinem Freund Supererdbeere!