Hallo Besucher, der Thread wurde 7,1k mal aufgerufen und enthält 28 Antworten

letzter Beitrag von OlsenG am

Tester für Amiga CD32 / Honeybee Joypads

  • Schick mal, was Du bis jetzt hast und ich helf Dir, das zum Laufen zu kriegen

    Vielen Dank für das Angebot - ich habe mich nochmal intensiv damit beschäftigt und das Problem ist die
    miese Ausgangsimpedanz des ATMega selbst.
    Ich habe jetzt einen 74HC14 benutzt, um meinen Pegel zu bekommen und habe eine wahre
    Pull-up Pull-down Parade benutzt, um das Signal "rein" zu halten.


    Ich poste morgen Schematic und Quellcode, den ich benutzt habe.


    Endlich bekomme ich auswertbare Ergebnisse :P


    Ich mache von dem Ganzen noch eine Platine und poste die hier ebenfalls.


    Danke nochmals für die Hilfe und die ganzen Tipps ...
    Ich melde mich wieder ...


    LG

  • Ich hatte gerade noch einen Gedanken zu dem Thema. Wenn man feststellen will, ob ein CD32 Pad angeschlossen ist, dann macht man die ganze Prozedur einmal und bekommt das Bitmuster 11111100 aus dem Schieberegister. Ist kein Pad angeschlossen, oder ein einfacher Joystick, hat man 11111111 (weil man 8mal den Status von Button 2 ausliest). Bei dieser Erkennung dürfte kein Button gedrückt sein. Prüft man nur die letzten zwei Bits, dürfte der blaue Button zum Zeitpunkt der Abfrage nicht gedrückt sein. Für eine zuverlässige Abfrage müsste man das also regelmäßig wiederholen, und da man den Joystick ja jederzeit umstecken kann.


    Somit dienen die beiden Extrabits zur ersten Erkennung, ob das Ergebnis der Abfrage wirklich von einem CD32-Pad stammt. Mit dem richtigen Timing könnte sich ein geschickter Joystickakrobat zwar als CD32-Pad ausgeben, aber das ist wohl extremst unwahrscheinlich.


    Ein C64 könnte das nicht, oder? Sind POTX und POTY ausschließlich Analogeingänge für ihn? Ich nehme es an.

  • Hallo!


    soooo - ich habe jetzt mal eine Schematic für eine Ansteuerung der LEDs über NPN-Transistoren und eine andere
    für eine Ansteuerung über ein ULN2803 Darlington-Lümmel.
    Das Signal K_xxx steht für den Anschluss der Kathode einer LED.
    Das Signal A_xxx steht für den Anschluss der Anode einer LED.
    Das jeweils entgegengesetzte Signal für die LED kann man sich an einem Stützpunkt auf der Platine abgreifen ...
    Die Platine poste ich auch noch, ich muss nur noch den Bestückungsplan
    fertig machen. Weitere Erklärungen für die Schematics folgen auch bald ...


    Aber vorweg: Die Vorwiderstände der LEDs R1, R8, R10-14, R18, R22, R23 sind natürlich nur Platzhalter - das muss für
    jede LED neu angepasst werden.


    Außerdem habe ich das C-Programm (bzw. Quellcode) für den ATMega8 rangehängt.
    Mich würde die Meinung von @OlsenG dazu interessieren.


    Jeder, der mag kann das gepostete frei verwenden ...


    LG

  • Somit dienen die beiden Extrabits zur ersten Erkennung, ob das Ergebnis der Abfrage wirklich von einem CD32-Pad stammt. Mit dem richtigen Timing könnte sich ein geschickter Joystickakrobat zwar als CD32-Pad ausgeben, aber das ist wohl extremst unwahrscheinlich.

    Gute Idee, aber ich mache das momentan über einen Schalter - und versetze den Prozessor so in einen CD32-Mode (siehe c-Programm).



    Ein C64 könnte das nicht, oder? Sind POTX und POTY ausschließlich Analogeingänge für ihn? Ich nehme es an.

    Davon gehe ich auch aus

  • Hallo,


    ich poste jetzt nochmal die verbesserte Schematic und den Bestückungsplan einer Platine, die ich mir
    davon layoutet habe. Davon poste ich auf Anfrage gerne die Eagle-Dateien oder Gerber-Daten.


    LG


    Andre

  • So, ich hab grad den Sourcecode vor mir.


    Code
    1. for(int i=0;i<8;i++)
    2. {
    3. PORTB &= ~(1<<STEUER6); //Puls auf Pin6
    4. if (!(INPUTPIN & (1<<SERIAL))) wert=i+1;
    5. _delay_us(100);
    6. PORTB |= (1<<STEUER6); //Puls beenden
    7. _delay_us(100);
    8. }


    Würde ich folgendermaßen ändern:

    Code
    1. for(int i=0;i<8;i++)
    2. {
    3. PORTB &= ~(1<<STEUER6); //Puls auf Pin6
    4. _delay_us(10);
    5. if (!(INPUTPIN & (1<<SERIAL))) wert=i+1;
    6. PORTB |= (1<<STEUER6); //Puls beenden
    7. _delay_us(10);
    8. }


    Das Delay soll ja dazu dienen, dass dem Schieberegister Zeit gegeben wird, den Puls zu "hören" und bis das angeforderte Bit stabil anliegt. DANN erst lesen wir es.


    100 µS sind wahrscheinlich unnötig lang, 10µS plus die "Gatter"-Laufzeit (also bis der ATmega wirklich die Pins setzt) sollten reichen. Beim Arduino kann man die Delays fast weglassen, weil die digitalWrite()-Funktion abartig langsam ist.


    Mit offenem Schalter passiert momentan noch nichts?


    Eine automatische Erkennung wäre möglich, würdest Du das gerne weiterverfolgen? Wenn Du schon das Testequipment aufgefahren hast... Du hast nicht zufällig ein Sega MegaDrive Joypad oder irgendwelche anderen Joypads mit DB9-Stecker? Wenn wir die auch einwandfrei identifizieren können, hätten wir einen universellen Tester. Und gleichzeitig den Sourcecode für die Eingangsseite eines universellen Adapters.

  • Eine automatische Erkennung wäre möglich, würdest Du das gerne weiterverfolgen? Wenn Du schon das Testequipment aufgefahren hast... Du hast nicht zufällig ein Sega MegaDrive Joypad oder irgendwelche anderen Joypads mit DB9-Stecker? Wenn wir die auch einwandfrei identifizieren können, hätten wir einen universellen Tester. Und gleichzeitig den Sourcecode für die Eingangsseite eines universellen Adapters.

    Generell eine coole Idee - ich habe momentan nur einen Sega-Controller, der aber ganz regulär an einem A600 läuft
    mit Dioden-Schutz dazwischen. Mich persönlich interessieren eher CD32 Joypads - aber ich helfe Dir gerne, wenn Du das
    Projekt weiter ausweiten willst.


    Übrigens konnte ich nicht wirklich ruhen und habe einen Prototypen gebaut (siehe Fotos) ...
    Ungeduld kann eine Tugend sein. Auf dem ersten Bild sieht man den Testaufbau mit Atmel Evaluation Board.
    Auf dem zweiten der fertige Joystick-Tester. Innen ist eine 9V Block-Batterie und eine selbstgemachte Platine.
    Auf der abgewandten Seite befinden sich 2 Schiebeschalter mit Power ON/OFF und CD32 MODE ON/OFF.
    An der Schaltung herumfeilen müsste man im Prinzip noch, da "Fire1" bei normalen Joysticks etwas bockig
    reagiert ...


    LG

  • Mich persönlich interessieren eher CD32 Joypads - aber ich helfe Dir gerne, wenn Du das
    Projekt weiter ausweiten willst.

    Ich sollte erstmal mein Prelude-Projekt abschließen, bevor ich irgendwas anderes ausweite :whistling:
    Dachte nur, dass der Tester für mehr Leute interessant wäre, wenn er bisschen mehr könnte. Aber wenn Du ihn nur für Dich persönlich brauchst, dann ist das ja nicht nötig.


    Sieht cool aus, das Teil :thumbup: