Hallo Stummis,
als Teil eines größeren Projekts ist ein kleines "Abfallprojekt" entstanden, dass nichtsdestotrotz für den einen oder anderen praktisch sein könnteDa Bilder ja bei uns Stummis sehr beliebt sind, hier erstmal ein ebensolches:
Letzte Weihnachten habe ich an meiner neuen Steuerung gefeilt und hatte dabei den Bedarf, einen Mikorcontroller mit jeder Menge Input-Pins auszustatten. Dafür eignen sich prinzipiell S88-Decoder - davon hatte ich aber nur noch einen und vor den Feiertagen war auch garantiert nichts mehr Online zu bekommen. Also habe ich mein Elektroniklager durchsucht und dabei noch jede Menge Atmegas (8, 168, 32 gefunden, die von einem anderen Projekt übrig geblieben sind. Bei richtiger Konfiguration (interner Takt, keine serielle Schnittstelle) lassen sich aus einem Atmega 18 IO-Pins rauskitzeln.
Damit war die Lösung für mein IO-Problem schnell klar: ich programmiere die Atmegas als simple Schieberegister. Sidenote: Ein Atmega 8 ist sogar billiger als die vier Chips, die man für einen "regulären" S88-Decoder braucht. Meinen funktionalen Prototypen könnt ihr in diesem Bild sehen:
Weil das Zusammenlöten und selberbauen von Steckern aber ziemlich lange dauert (ich glaube, ich habe 3 Tage für den Prototypen gebraucht) habe ich Platinen entworfen und bei Dirty PCB ätzen lassen.
In diesem Jahr habe ich für die nächste Version meiner Steuerung die geätzten Platinen verwendet (erstes Bild). Bauzeit für die Platinen im Bild waren gerade mal 2h - inklusive eines Fädeldrahtes, um eine fehlende Leiterbahn der ersten Version zu überbrücken. Die fehlende Leiterbahn ist in v2 des PCB-Design schon ergänzt.
Die Platinen sind so entworfen, dass man einen Masseanschluss und 16 Eingänge zur Verfügung hat. Alle Eingänge sind mit PullUps versehen. Außerdem sind auf den Platinen zwei Jumper vorgesehen, die der Atmega auslesen kann. Meine aktuelle Firmware verwendet die nicht, aber man könnte damit z.B. die IO-Bänke zwischen "Eingang" und "Ausgang" umschalten lassen. Ebenso ist ein Programmer-Anschluss auf der Platine vorgesehen - den habe ich aber noch nicht ausprobieren können. Die S88-Anschlüsse sind so angeordnet, dass man die Platinen entweder anreihen kann (siehe Bild) oder dass man vorne und hinten Stecker- oder Pfostenleisten auflöten und alles mit Steckern verbinden kann. Die Steckerbelegung ist (hoffentlich ) kompatibel zu "herkömmlichen" S88-Steckern. Die Platine funktioniert mit 3.3V und 5V. Mehr als 5V sollte man aber lieber nicht draufgeben, außer man braucht sehr dringend durchgebratene Atmegas.
Die Firmware arbeitet rein Interrupt-Getrieben: Wenn die Zentrale die PS-Leitung zieht, werden alle 16 IOs eingelesen. Wenn die Zentrale an der Clock wackelt, wird das nächste Bit am Data Out ausgegeben und das nächte Bit vom Data In gelesen. Ich habe die Software mit den aggressivsten mir bekannten Timings ausprobiert (Intellibox 1) und habe keine Timing-Probleme finden können. Meine Atmegas laufen mit 8MHz internem Takt. Wenn man Strom sparen möchte, könne man auch versuchen, mal nur 1MHz Takt zu konfigurieren.
Ihr könnt Software und PCB (KiCad) hier finden: ShiftRegisterEmulator
Als Gegenstück eignet sich (außer einer IB oder CS2) auch ein beliebiger uC, der den Bus z.B. mit der AsyncShiftIn-Bibliothek auslesen kann.
Falls jemand nachbauen möchte: Viel Spaß! Ich habe übrigens auch noch ein paar Platinen übrig, die ich bei Interesse abgeben könnte.
Gruß,
fantux