Hallo Besucher, der Thread wurde 19k mal aufgerufen und enthält 75 Antworten

letzter Beitrag von NLQ am

Hardware 1.10

  • Zitat


    Hier müsste ein 74LVC06 oder 74LVC07 (z.B. von Texas) passen: 2 bis 5V VCC, der open-collector Ausgang darf an bis zu 5.5V und der max. Strom ist 24mA. Nicht ganz die 40mA vom 7406, aber besser als nichts... Erhältlich z.B. bei Farnell.


    Mal davon ab, dass die 24 mA zu wenig sind, Farnell liefert leider nicht an privat.
    Die haben ja noch mehr schöne Sachen im Programm, da kommt aber nicht jeder ran.


    mmc2iec_1.10.png


    Das ist der aktuelle Stand.
    Auf die Schutz-Widerstände gegen GND kann ich vielleicht sogar noch verzichten da mit steigendem Strom auch der Widerstand der FET's höher ist und die zusammen auf so um die 100 mA "begrenzen" sollten.
    Muss ich mal ausprobieren.
    Die Idee mit dem Widerstand ist, dass der FET sich quasi selbst sperrt sobald am Widerstand durch den Stromfluss genügend Spannung abfällt und somit die Gate-Threshold Spannung unterschritten wird.
    Blöd nur, wenn man keinen FET mit passender Schaltschwelle findet...

  • Mal davon ab, dass die 24 mA zu wenig sind, Farnell liefert leider nicht an privat.
    Die haben ja noch mehr schöne Sachen im Programm, da kommt aber nicht jeder ran.


    Im Vergleich zu den 5mA(?) des Controllers sind die 24mA doch üppig, reicht für 5 Geräte am Bus.
    Eine Kundennummer bei Farnell habe ich.


    mmc2iec_1.10.png


    Das ist der aktuelle Stand.


    Das sieht doch gut aus!

  • Zitat


    Im Vergleich zu den 5mA(?) des Controllers sind die 24mA doch üppig, reicht für 5 Geräte am Bus.
    Eine Kundennummer bei Farnell habe ich.


    Hmm, 24 mA finde ich jetzt ein wenig knapp?


    Und an die Teile würde ich auch rankommen, darum geht es ja nicht.
    Da muss nachher jeder rankommen können, das soll schliesslich nachbaubar bleiben und nicht kommerziell werden.


    mmc2iec_1.10.png


    Das ist der aktuelle Stand.


    Das sieht doch gut aus![/quote]


    Das geht auch noch einfacher:


    mmc2iec_1.10.png


    Einen Level-Shifter brauchen wir ja nicht mehr wirklich, wenn wir getrennte Ein- und Ausgänge haben.
    Für den Betrieb im DTV lässt man den 6k8 einfach weg.
    Bleibt bloss die Herausforderung die 8 zusätzlichen Widerstände ins Layout zu bringen...


  • Einen Level-Shifter brauchen wir ja nicht mehr wirklich, wenn wir getrennte Ein- und Ausgänge haben.
    Für den Betrieb im DTV lässt man den 6k8 einfach weg.
    Bleibt bloss die Herausforderung die 8 zusätzlichen Widerstände ins Layout zu bringen...


    Der Atmel hat doch sicher Klemmdioden gegen die Versorgung in den Eingängen? Dann reicht wahrscheinlich generell der Längswiderstand (vielleicht noch etwas hochohmiger). Das Begrenzen der Spannung kann man dann den eingebauten Dioden überlassen.


  • Der Atmel hat doch sicher Klemmdioden gegen die Versorgung in den Eingängen? Dann reicht wahrscheinlich generell der Längswiderstand (vielleicht noch etwas hochohmiger). Das Begrenzen der Spannung kann man dann den eingebauten Dioden überlassen.


    Die AVR's sind wohl alle mit Dioden an den Eingängen geschützt, richtig.
    Aber bei mehr als VCC+0,5V fliesst durch die Dinger Strom und es gibt keine Angabe darüber, wie hoch der zulässige Strom für die Dioden ist.
    Wenn irgendwo stehen würde, dass bis 100 µA zulässig sind und die Dinger 0,5V Durchlass-Spannung haben,
    dann könnte man 5-3,5 = 1,5 -> 1,5 / 100µ = 15k -> 20 kOhm davor hängen und gut.
    Im Datenblatt steht aber nur, dass Spannungen über VCC+0,5V den Controller beschädigen können.


    Der Widerstand gegen GND kostet 1 Cent, der Controller 4,70 Euro.


    Mit dem DTV auf 3,3V liegen wir noch dick im grünen Bereich.


    Ach ja, das Einspeisen über die Dioden führt auch zu einer Anhebung der Versorgung des Controllers.

  • Ich habe heute mal einen kleinen Test-Aufbau gemacht.
    Dabei hat sich herausgestellt, dass der BSN20 nicht so sehr geeignet ist, der ist nämlich ziemlich hochohmig.


    Der einzige andere N-FET den ich zur Hand hatte war ein SN7002.


    Und mit dem sieht das sehr gut aus:


    print_14.png


    Das gelbe ist das Eingangs-Signal aus einen Signal-Generator, das musste ich noch etwas filtern,
    daher ist das bei "nur" 200 kHz schon ein wenig sehr rund.


    Die simulierte IEC-Leitung geht schön bis auf 0,5 V runter.


    Das ist bei 8x1k parallel -> 124,8 Ohm gegen 5V und maximal 2,78V am Gate vom FET.
    Und mit 10 Ohm von Source gegen GND.


    Statisch mit einem Netzteil gemessen komme ich bei 2,42 V am Gate auf 34,1 mA durch die Widerstände und 0,68V an Drain.

    Mit 2,4 Ohm statt 10 Ohm lagen 9x1k parallel bei 0,36V an Drain.


    Also entsprechend ausgelegt gehen bestimmt auch 12 Teilnehmer.
    Das wäre natürlich Quatsch, ich gehe mal davon aus, dass die anderen 12 dann nicht mehr laufen, selbst die 8x halte ich schon für unwahrscheinlich.


    Da ist also noch ordentlich Luft für mehr Sicherheit.


    Mit wie vielen 1k Pullup Teilnehmer muss das denn jetzt mindestens funktionieren? Fünf?
    Also C64 plus 4 Laufwerke?
    Ich mache die Schutzwiderstände dann einfach entsprechend grösser und falls es dann mal wirklich für irgendjemanden zu knapp wird dann kann sich derjenige einfach noch ein paar Widerstände oben drauf parallel löten.


    Meine Platine hat dann auch gar keine eigenen Pullups mehr, könnte aber bei Bedarf die internen im Controller nutzen da die Portpins ja nicht mehr ständig umgeschaltet werden müssen.



    Wieder was über die AVR's gelernt, ich hätte echt nicht gedacht, dass die so "hochohmige" Ausgänge haben.

  • Und das wurde noch nicht erwähnt, das ist jetzt endgültig ein Bruch mit der Kompatibiltät zur 1.6'er Platine.


    Dann wäre jetzt wohl der Zeitpunkt, um die Versionsnummer von 1.10 auf 2.0 zu ändern. :)


  • Ich denke, dass die Dioden erstaunlich größe Ströme vertragen: Bei IEC2IEEE habe ich je zwei AVR-Pins mit einer IEC-Busleitung verbunden. Ich habe das zusammen mit einem C64 und einer 1541 angeschlossen, also 2 * 5kOhm Pullup je Leitung. Wenn man C64 und 1541 eingeschaltet lässt, den AVR aber ausschaltet, so ziehen die AVR-Dioden die IEC-Bus-Leitungen soweit nach low, dass der IEC-Bus gesperrt ist. Ich hab die Spannung nicht ausgemessen, aber nehme wir mal an, dass der ausgeschaltete AVR den IEC-Bus auf nur 2,5V runterziehen würde, dann würde durch jede Diode schon 2,5mA fließen. Evtl. könnte man auf die Widerstände r14 - r17 verzichten und die Begrenzung den Dioden überlassen???
    Die Spannungteiler r1-r4 und r14-r17 wirken momentan als 10kOhm Pulldown-Widerstände, also eigentlich genau umgekehrt wie die 1kOhm Pullup-Widerstände in C64 und 1541. Durch Weglassen von r14-r17 (und eventuelles Aktivieren der AVR-internen 40kOhm Pullup-Widerstände) könnte dies evtl. vermieden werden???
    In den SD-Card-Dokumenten steht, dass DAT1 und DAT2 über einen Pullup-Widerstand am Schwingen gehindert werden sollen. Wenn aus Versehen ein Kommando zur Karte geschickt wird, das auf 4-Bit-Datentransfer umschaltet, dann müsste momentan die Karte versuchen die mit Ground verbundenen Leitunge auf high zu ziehen. Allerdings könnte es sein, dass dies kein Problem ist, da sich das gleiche Problem am Data-In-Pin der SD-Card sowieso nicht vermeiden lässt: Falls das Umschalten vom SD-Modus in den SPI-Modus nicht klappt und somit die Data-In-Leitung bidirektional bleiben würde, dann könnte es sein, dass der AVR mit 5 oder 10mA nach low ziehen will, während die Karte auf high ziehen will???
    Warum sind zwei Widerstände r9 und r10 am Reset-Eingang und warum zeihen sie nach low?

  • Bezüglich Schutzdioden:
    Es gibt eine App.-Note von Atmel, bei der die internen Schutzdioden benutzt werden um den Nulldurchgang von 230V Netzspannung zu detektieren (mit entsprechend hohem Serienwiderstand). Darin wird - soweit ich mich erinnere - auch gesagt, dass der Strom nicht höher als 1mA sein soll.

  • Zitat


    Bezüglich Schutzdioden: Es gibt eine App.-Note von Atmel, bei der die internen Schutzdioden benutzt werden um den Nulldurchgang von 230V Netzspannung zu detektieren (mit entsprechend hohem Serienwiderstand). Darin wird - soweit ich mich erinnere - auch gesagt, dass der Strom nicht höher als 1mA sein soll.


    Ich persönlich denke, dass man mit 1mA schon etwas anfangen könnte??? So gesehen ist es Glück, dass bei IEC2IEEE nichts durchbrennt. Hast du vielleicht einen Link auf die App-Note?


    Zitat


    Mit wie vielen 1k Pullup Teilnehmer muss das denn jetzt mindestens funktionieren? Fünf?
    Also C64 plus 4 Laufwerke?


    In "Alles über den Commodore 64 Band 1" Seite 355 steht: Der Vorteil dieses seriellen Busses liegt darin, dass bis zu 5 Geräte angeschlossen werden können. Also 1 C64 plus 5 Laufwerke.


  • Ich persönlich denke, dass man mit 1mA schon etwas anfangen könnte??? So gesehen ist es Glück, dass bei IEC2IEEE nichts durchbrennt. Hast du vielleicht einen Link auf die App-Note?


    Das ist die Appnote AVR182. Wenn man 10k als Längswiderstand verwendet, bleibt der Strom bei max. 200µA pro Pin. Dann steigt auch die Versorgungsspannung nicht großartig an.


    Bei meinen Bausätzen werde ich das auf jeden Fall ausprobieren.


    Oliver

  • Zitat


    Evtl. könnte man auf die Widerstände r14 - r17 verzichten und die Begrenzung den Dioden überlassen???


    Wenn die jemand weglassen möchte, kann er das auf eigenen Gefahr machen.
    Ich werde die allerdings auf gar keinen Fall ausbauen.
    Nochmal, 3 Widerstände = 3 Cent, Controller = 4,70 Euro.


    Zitat


    Die Spannungteiler r1-r4 und r14-r17 wirken momentan als 10kOhm Pulldown-Widerstände, also eigentlich genau umgekehrt wie die 1kOhm Pullup-Widerstände in C64 und 1541. Durch Weglassen von r14-r17 (und eventuelles Aktivieren der AVR-internen 40kOhm Pullup-Widerstände) könnte dies evtl. vermieden werden???


    Stimmt irgendwie, das zieht den Pegel etwas runter.
    Wird aber besser, je mehr Geräte dran hängen. ;-)
    Das sehe ich nicht als ernstes Problem, die Werte mache ich dann aber noch eine Nummer grösser.


    Falls jemand was anderes Bestücken möchte kann ich denjenigen sowieso nicht davon abhalten.


    Zitat


    In den SD-Card-Dokumenten steht, dass DAT1 und DAT2 über einen Pullup-Widerstand am Schwingen gehindert werden sollen.


    Die internen Pullups sind schon länger am SPI aktiv, ohne würde der Level-Shifter der 1.6 auch nicht laufen.
    Und mit den 1.8'er/1.9'er haben wir bisher noch keine Probleme gehabt.


    Zitat


    Warum sind zwei Widerstände r9 und r10 am Reset-Eingang und warum zeihen sie nach low?


    Ist weiter oben erklärt, da sollen gar keine Widerstände rein.
    EAGLE-3D macht aber aus meinen "nB" - nicht Bestücken - Werten stets Null Ohm.
    Die sind im Layout, damit man da einen Reset-Taster anlöten kann, bei Bedarf noch mit einer zusätzlichen Diode.
    Also rein optional die Teile, Mehrwert.



    Und die App-Note habe ich gesehen, solche Dokumente gehören verboten.
    Ohne Angaben zu genau den im Controller verbauten Dioden ist das auch witzlos.

  • Zitat


    In den SD-Card-Dokumenten steht, dass DAT1 und DAT2 über einen Pullup-Widerstand am Schwingen gehindert werden sollen.


    Die internen Pullups sind schon länger am SPI aktiv, ohne würde der Level-Shifter der 1.6 auch nicht laufen.
    Und mit den 1.8'er/1.9'er haben wir bisher noch keine Probleme gehabt.


    Ich hatte eigentlich gemeint, dass DAT1 und DAT2 direkt mit Masse verbunden sind und evtl. beim versehentlichen Aktivieren als Ausgänge versuchen könnten auf high zu ziehen??


    Mir ist noch etwas eingefallen, das man evtl. diskutieren könnte oder aber auch einfach so lassen kann wie es ist: Bei IEC2IEEE und NLQ-HD benutze ich einen Interrupt, der softwaremäßig die 1541-AtnAck-Hardware emuliert: Wenn der C64 Atn auf aktiv (low, 0V) setzt, dann muss die Floppy innerhalb von 1000µs DataOut auf aktiv setzen. Zuerst habe ich den AtnIn-Pin so programmiert, dass er bei einer High-Low-Flanke einen IRQ auslöst. Das klappte bei der Schaltung, die einen 74LS244 Schmitt-Trigger Eingangschip hat. Bei der Sparversion ohne LS244 klappte es aber nicht: Ich denke, dass durch das lange serielle Kabel die Flanke auf der Atn-Leitung so verwaschen beim AVR ankam, dass sie nicht mehr steil genug war um einen IRQ auszulösen. Ich musste die IRQ-Auslösung von 'falling edge' auf 'low level' ändern; damit geht's problemlos. Leider können nur INT0 bis INT2 (PD2, PD3, PB2) einen Low-Level-IRQ auslösen, PCINT0 (PA0) kann nur einen 'pin-change / pin-toggle'-IRQauslösen

  • Mir ist noch etwas eingefallen, das man evtl. diskutieren könnte oder aber auch einfach so lassen kann wie es ist: Bei IEC2IEEE und NLQ-HD benutze ich einen Interrupt, der softwaremäßig die 1541-AtnAck-Hardware emuliert: Wenn der C64 Atn auf aktiv (low, 0V) setzt, dann muss die Floppy innerhalb von 1000µs DataOut auf aktiv setzen.


    Das wird in sd2iec vom Timerinterrupt erledigt, der alle 500µs aufgerufen wird. Der mega32 ist zu alt für PCINT und irgendwer hat beim Design der 1.6er-Platinen vergessen die ATN-Leitung an einen der Interrupt-Eingänge des Chips zu hängen. ;-)

  • Zitat


    Das wird in sd2iec vom Timerinterrupt erledigt, der alle 500µs aufgerufen wird. Der mega32 ist zu alt für PCINT und irgendwer hat beim Design der 1.6er-Platinen vergessen die ATN-Leitung an einen der Interrupt-Eingänge des Chips zu hängen. ;-)


    Man verliert einen Timer für andere Zwecke und minimal Zeit fürs Pollen des Pins, aber das Ergebnis ist das Gleiche - alles funktioniert.