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?

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

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

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

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

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

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

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


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

  • Also, soweit bin ich schon:



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

  • 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


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


    Das sollte ich eh mal suchen und aufs NAS spielen.

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