Also Ihr habt einen Datenbus mit 8 Bit und zwei Karten mit je 64 Relais.
Jede Karte besteht also aus 8x8 Relais. Platztechnisch könnte es
effektiver sein, ein 8-Bit Latch zu nehmen, aber jedem Relais ein
eigenes MOSFET zur Seite zu stellen als einen der ULN200x zu nehmen und
sich zu tode zu routen.
3->8 Decoder(1) für die 8-Bit Latches pro Karte zu adressieren.
Einen weiteren 3->8 Decoder (2) als Cardselect davor. Per Jumper kann
einer der 8 Chipselects auf den Chipselect des 3->8 Decoders (1) gelegt
werden.
Steckt das ganze in einem Rahmen, kann man den 2. Decoder auch entfallen
lassen und einfach ein paar Outputs des AVR auf die Backplane legen.
Diese werden nicht parallel über alle Stecker geführt, sondern jeder
führt genau an einen Pin einer Steckposition, also ein Card-Select.
Damit werden die Karten über ihre Position im Rahmen angesprochen und
müssen nicht ( z.B. im Fall eines Austauschs durch den Kunden)
konfigueriert werden.
Natürlich kann man auch GPIOs am AVR einsparen und das Cardselect für 8
Karten über drei Outputs machen, die wiederum einen 3->8 Decoder haben.
Aber einige meiner Vorredner habe auch recht. Man kann ein
Serial->Parallel-Shift Register nehmen. Man kann eliebig viele dieser
Register hintereinander schalten. Dieser Register gibt es als
Double-Latched.
D.h. der serielle Bus schiebt die Zukünftigen Werte in das Latch. Ein
Latch-Befehl übernimmt die aktuellen Werte in einen Puffer aus weiteren
8 Latches. Ein Puls auf einer weiteren Leitung schaltet dies auf die
Output-Latches durch. Diese Latches, sind, wie auch ihre einfacheren
Verwandten, kaskadierbar. Und sie sind, mit Einschränkung, mit dem
SPI-Bus kompatibel. D.h. ich die 16 S->P Chips einfach hintereinander
schalten und brauche nur MOSI, SCLK, einen Chipselect / Load und einen
Latch-Out. Wenn ich meinem Bus prüfen will, brauche ich noch einen
Open-Collector Buffer mit ChipSelect ( weil die S->P Converter einen
Push-Pull Ausgang haben und daher das Programmieren über SPI-Programmer
verhindern) und am VAR noch MISO.
Bei 1MHz Clockrate sind die Relais in 128µs programmiert, Load ist das
Signal, was allen S->P Bausteinen sagt, dass sie den aktuell anstehenden
Wert in die Zwischenspeicher laden sollen, Latch-Out ist das Signal,
dass dann bei allen Relais parallel die neue Einstellung anlegt.
Bei 64 Relais pro Platine also Schrauben mit Federring vorsehen, die
demontiert sich sonst selbst.
Eine Platine mit Ansteuerung über RS485 und USB mit 12 Relais und eben
dieser seriellen Ansteuerung auf Basis AVR habe ich fertig. Bei
Interesse bitte PM. Da das eine Auftragsentwicklung war, kann ich das
Design nicht posten, aber vielleicht einen Kontakt herstellen.
Gruß, Ulrich