Forum: Mikrocontroller und Digitale Elektronik I2C Schaltkarte mit 48 Ausgängen


von Joachim S. (mithotyn)


Angehängte Dateien:

Lesenswert?

Hi zusammen!

Nach etlichen Tests, Versuchen und Überlegungen hab ich euch im Anhang
mal das Vorläufige Ergebnis angehängt.

Es handelt sich um ein Schaltmodul füreine Modellanlage, welches per I2C 
von einem Hauptcontroller angesprochen wird. Bis zu 32 Module können von 
einem Controller angesprochen werden. (Adresse per DIP-Schalter wählbar)

Zusätzlich überwacht der ATTINY noch die Spannung (Wenn F1 durchbrennt 
oder einer der Stecker abgezogen wird) und meldet das entsprechend an 
den Hauptcontroller.

Das Schaltmodul hat 48 Ausgänge, welche durch den ATTINY in 32 
Helligkeitsstufen per PWM gesteuert werden können. Die PWM Frequenz ist 
um die 400Hz.

Den ursprünglich geplanten BS170 hab ich gegen einen IRLU024 getauscht, 
um nach oben hin noch etwas Reserve zu haben, was den Schaltstrom 
betrifft (ohne gleich ein TO220 nehmen zu müssen), auch wenn ich im 
Durchschnitt nur mit 100mA pro Ausgang rechne.

Ich würde im nächsten Schritt aus dem Plan ein Board erstellen und das 
ätzen lassen. Deswegen würde ich mich freuen, wenn ihr da mal 
drüberschauen könnt, ob das alles so in Ordnung ist.

Eine Frage hab ich dazu:

Ich hab im Forum dutzende Beiträge gelesen, wo zwischen 595 und FET ein 
Widerstand zur Strombegrenzung eingebaut ist. Die Meinungen der 
Sinnhaftigkeit gehen aber weit auseinander. Der Grund erscheint logisch, 
aber wie siehts nun aus? Widerstand ja oder nein?

Gruß Joachim

von Klaus T. (gauchi)


Lesenswert?

Also eigentlich sind FETs spannungsgesteuert, da fließt überhaupt kein 
Strom, außer beim Ein- und Ausschalten. Das will man aber normalerweise 
möglichst schnell erledigen, also den Widerstand zwischen dem 
Portausgang und dem Gate möglichst klein halten.

von holger (Gast)


Lesenswert?

An den Sub-D Buchsen fehlt nen Masseanschluss.

von Joachim S. (mithotyn)


Lesenswert?

Die Ausgänge werden alle nach Masse geschaltet. Die Versorgungsspannung 
wird den Verbrauchern extern über eine Sammelleitung zugeführt.

@Klaus

Dass FET spannungsgesteuert schalten wusste ich, aber ich dachte dass da 
trotzdem ein Strom fließt, wenn die durchgeschaltet haben.

Den Ein-/Ausschaltstrom kann ich doch vernachlässigen, oder? Nicht, dass 
ich durch die Widerstände meine PWM verschlechtere.

Gruß Joachim

von Dirk H. (dirk-h)


Lesenswert?

1.) Gatewiderstände einbauen

2.) Vor den Gatewiderständen pulldown Widerstände einbauen.
So verhinderst Du, daß die MOSFETs bei undefinierten Zuständen an den
Gates kurz die Relais durchschalten.

3.) Symbol AGND steht normalerweise für Analog Ground. Etwas unglücklich 
gewählt.

4.) Auf keinen Fall die Freilaufdioden an den Relais vergessen, sonst...

5.) GND amD_SUB Stecker ?

6.) Terminierung von SCL/SDA  ???? Leitungslängen, Abstand, 
Leitungsbeschaffenheit ???

7.) PIN 10 an den HC595 dienen zum löschen der Ausgänge sonst passiert 
genau das unter 2.) beschriebene

von Dirk H. (dirk-h)


Lesenswert?

Dirk H. schrieb:
> 4.) Auf keinen Fall die Freilaufdioden an den Relais vergessen, sonst...

Meinte damit, falls Du vorhast so etwas anzuschliessen.

von ich (Gast)


Lesenswert?

Macht es denn Sinn, Relais per PWM anzusteuern? :-)

von Dirk H. (dirk-h)


Lesenswert?

ich schrieb:
> Macht es denn Sinn, Relais per PWM anzusteuern? :-)

Sinn ??? hmmmm

Es gab schon Fälle, da man Sie per PWM als akustische Signalgeber 
verwenden wollte ?

von Joachim S. (mithotyn)


Lesenswert?

@Dirk

Danke für deine ausführliche Antwort.

Zu 1.) Nach URI sollten dass so 200 Ohm sein. Passt das?

Zu 7.) Pin 10 an Masse "enabled" die Ausgänge, so dass hier entweder HI 
oder LO anliegt. Wenn ich Pin 10 nach + schalte, dann hab ich nen 
Tri-State Ausgang. Nur DANN kann doch das Phänomen von 2.) auftauchen.

Ergo: Wenn ich Pin 10 dauerhaft nach Masse lege, brauche ich keine 
Pull-Down an den Ausgängen der 595.

Zu 3.) Jein. Da es sich an den Ausgängen um viele kleine 12V Lämpchen 
handelt, ist "analog" gar nicht so falsch. :-) Egal welches Zeichen ich 
da nehme, es soll nur klar werden, dass das ein anders genutztes 
Masse-Potential ist, als GND.

Zu 5.) Für was?

Zu 6.) Schalt- und Controllerkarte werden mit Abstandsbolzen 
übereinander angeordnet. Alle Platinen werden mit Flachbandkabel 
miteinander verbunden. Ich rechne mit rund 10 Platinen, so dass das 
Kabel max. 30cm lang sein wird. Über der letzten Karte gibts dann einen 
Terminator für den Bus.

Gruß Joachim

von Dirk H. (dirk-h)


Lesenswert?

Joachim Schmidt schrieb:
> Zu 7.) Pin 10 an Masse "enabled" die Ausgänge, so dass hier entweder HI
> oder LO anliegt. Wenn ich Pin 10 nach + schalte, dann hab ich nen
> Tri-State Ausgang. Nur DANN kann doch das Phänomen von 2.) auftauchen.

PIN 10 löscht den Status der Ausgänge permanent.
Lösung: entweder RC Glied an diesen Eingang (der ja nicht umsonst 
implementiert wurde)
oder einen pulldown Widerstand und auf einen PortPin Deiner MCU legen 
(hast ja welche übrig).
So kannst Du den Zeitpunkt der Freigabe selbst bestimmen.

Joachim Schmidt schrieb:
> Zu 5.) Für was?

Du hast einen per Sicherung getrennten GND. Oder wohin soll der Strom 
sonst fliessen ?

Joachim Schmidt schrieb:
> Zu 3.) Jein. Da es sich an den Ausgängen um viele kleine 12V Lämpchen
> handelt, ist "analog" gar nicht so falsch. :-) Egal welches Zeichen ich
> da nehme, es soll nur klar werden, dass das ein anders genutztes
> Masse-Potential ist, als GND.

Nein. AGND verwirrt. Auch Digitaltechnik ist im Grunde Analog.
PGND für Power Ground wäre wohl treffender

von Dirk H. (dirk-h)


Lesenswert?

Joachim Schmidt schrieb:
> Zu 5.) Für was?

Sorry hatte Tomaten auf den Augen, falsch geschaut. Den brauchst Du 
nicht.

von Joachim S. (mithotyn)


Lesenswert?

Hi Dirk!

Ah sorry, wir haben aneinander vorbeigeredet. Also:

Pin 13 (OE / G) ist der Pin den ich meine. Ist der auf V+, dann sind die 
Ausgänge Hochohmig und der FET bekommt kein definiertes Steuerpotential. 
Ist der Pin auf GND, kann der Ausgang je nach Zustand nur HI oder LO 
annehmen. Beides Pegel, die für den FET definiert sind.

Also wenn ich Pin 13 dauerhaft auf GND lege, brauch ich keine PullDown 
Widerstände an den Ausgängen des 595.

Pin 10 (MR / SCL) ist "MasterReset". Damit löscht man aber nur das 
Schieberegister und nicht automatisch das Ausgangsregister. Um das zu 
tun, muss ich die Daten mit nem Impuls auf Pin 12 (ST_CP / RCK) 
übernehmen.

Das wiederum mache ich aber vom µC damit, dass ich per SPI 48Bit Null an 
die 595 schiebe und die übernehme. Hat den selben Effekt wie ein 
MasterReset, spart aber die Beschaltung von einem Pin mehr am µC.

So lese ich das zumindest aus dem Datenblatt ab und mein Testaufbau 
läuft auch so. Aber ich lass mich gerne eines Besseren belehren, sollte 
ich falsch liegen!!!


Gruß Joachim

von Dirk H. (dirk-h)


Lesenswert?

@Joachim

Wenn Du Eingang G fest auf GND legst, wird nach PowerUp sofort der 
Zustand der Ausgangs-Latches auf die MOSFETs geschaltet.
Bei Deiner Ansteuerung von Lampen/Lämpchen mag das nichts ausmachen, ob 
die kurz flackern.
Man sollte sich so einen Stil der Konstruktion generell nicht aneignen.
Wenn eine solche Schaltung einmal zum Schalten von Ausgängen mit 
wichtigen
Funktionen eingesetzt wird, kann das schon seine Wirkung zeigen.

Nochmal zu AGND.
Schau mal an Deiner MCU - Anschluß AGND für AD-Wandler.
Wenn ein anderer den Schaltplan liest .... irreführend.


Hast Du eigentlich schon mal das Programm geschrieben / getestet bzgl.
Geschwindigkeit.

400Hz x 32 Helligkeitsstufen = 12800
Das heisst 12800x/sec die komplett 48 berechneten Helligkeitsstufen 
rausschieben

Bei internem Osc 8Mhz macht das max. 8Mips / 12800 = 625 / 48PWM Kanäle
= max. 13 Befehle pro Kanal

Davon geht noch das komplette Handling von SPI/I2C/ Interrupts / PWM 
Step Berechnung / Umwandlung in Bitstream etc.

PWM sollte ja auch synchron laufen ohne Helligkeitschwankungen

von Joachim S. (mithotyn)


Lesenswert?

Also sollte ich das so machen:

Den Pin 13 (G) über einen PullUp an einen Port des µC. Und jede Menge 
PullDown vor die FET.

Heißt beim PowerUp, dass die Ausgänge der 595 hochohmig sind und die FET 
durch den PullDown alle gesperrt.

Dann resette ich die 595 alle auf 0 und ziehe Pin 13 nach Masse, so dass 
die Ausgänge nun durchgeschaltet werden.

Damit wäre meine PowerUp Sequence beendet. Richtig?

AGND werd ich ändern.

Das Programm ist komplett fertig und die 400Hz bleiben "übrig".

Gruß Joachim

von Lehrmann M. (ubimbo)


Lesenswert?

ich schrieb:
> Macht es denn Sinn, Relais per PWM anzusteuern? :-)

Was möchtest du denn damit bewirken ?

von Frank B. (foobar)


Lesenswert?

Du könntest noch QH von IC7 auf den Microcontroller zurückführen und 
somit einen einfachen Selbsttest programmieren, ob die Schieberegister 
noch funktionieren.

Aber warum nimmst du nicht einfach einen größeren Microcontroller, der 
genügend Ausgänge hat? Dann könntest du dir die Schieberegister und 
deren Ansteuerung sparen, und die PWM-Generierung wird auch einfacher 
und kann mit einer höheren Frequenz geschehen.

von Dirk H. (dirk-h)


Lesenswert?

Joachim Schmidt schrieb:
> Dann resette ich die 595 alle auf 0 und ziehe Pin 13 nach Masse, so dass
> die Ausgänge nun durchgeschaltet werden.

Das brauchst Du dann nicht mehr unbedingt. Wenn Du die Ausgänge mit G 
hochohmig schaltest, kannst Du auch erst das Schieberegister mit Deinen 
Werten oder 0en füllen, latchen und dann G gegen 0 ziehen.

Frank Buss schrieb:
> Aber warum nimmst du nicht einfach einen größeren Microcontroller, der
> genügend Ausgänge hat? Dann könntest du dir die Schieberegister und
> deren Ansteuerung sparen, und die PWM-Generierung wird auch einfacher
> und kann mit einer höheren Frequenz geschehen.

Wenn er das ganz auf einer Lochrasterplatte aufbaut (ist das so???), 
wird es mit den Typen jenseits der 40 Pin in DIP Gehäusen dünn.

von Frank B. (foobar)


Lesenswert?

Dirk H. schrieb:
> Wenn er das ganz auf einer Lochrasterplatte aufbaut (ist das so???),
> wird es mit den Typen jenseits der 40 Pin in DIP Gehäusen dünn.

Das stimmt. Zum Glück gibt es ja für alle möglichen Bauformen preiswerte 
Adapter für 1-2 Euro:

http://shop.ebay.de/i.html?LH_PrefLoc=2&_nkw=pcb+%28adapter%2Cconvert%29+smd&_trkparms=65%253A15%257C66%253A1%257C39%253A6&rt=nc&_ipg=200&_sop=15&_trksid=p3286.c0.m14.l1514

und TQFP kann man noch gut per Hand auf so einen Adpater auflöten.

von Dirk H. (dirk-h)


Lesenswert?

Frank Buss schrieb:
> Das stimmt. Zum Glück gibt es ja für alle möglichen Bauformen preiswerte
> Adapter für 1-2 Euro:
>
> http://shop.ebay.de/i.html?LH_PrefLoc=2&_nkw=pcb+%...
>
> und TQFP kann man noch gut per Hand auf so einen Adpater auflöten.

Hallo Frank.

Das stimmt ebenfalls.

Nur sollte man nicht immer von sich selbst ausgehen, ohne hier jemandem 
etwas nicht zu zumuten.

z.B.: TQFP100 mit 0,5mm Pitch

Du kannst es ! Ich kann es auch !

Aber ob manche Lust haben, 5 Platinen incl. IC zu verbraten?

von Joachim S. (mithotyn)


Lesenswert?

Frank Buss schrieb:
> Du könntest noch QH von IC7 auf den Microcontroller zurückführen und
> somit einen einfachen Selbsttest programmieren, ob die Schieberegister
> noch funktionieren.

Hi Frank.

Die Idee hatte ich auch schon. Dann müsste ich ein komplettes Byte (z.B. 
0xff) mehr durch den SPI schieben, damit ich an QH nen Ausgang (HI) habe 
oder?

Wegen der Platine:

Ich will mir welche ätzen. Die Idee, alle Ausgänge per µC zu steuern 
hatte ich tatsächlich noch nicht. Allerdings war meine Grundidee, alles 
möglichst in DIP-Größe aufzubauen, dass auch in 10 Jahren mein Vater, 
dann nämlich Rentner, ggf. mit zittrigen Fingern und Lupe :-) daran noch 
was machen kann. Alles in SMD ist sicher auch machbar, aber dann eben 
schlechter "wartbar". So eine Modellanlage ist halt eher "grob" 
aufgebaut, damit man schnell selber was umbasteln kann.

Aber die Idee mit dem Adapter lass ich mir nochmal durch den Kopf 
gehen...

Gruß Joachim

von Frank B. (foobar)


Lesenswert?

Da gibt es tatsächlich nicht mehr viel in DIP-Bauform. Vielleicht 
könntest du auch einfach zwei Microcontroller verwenden? Da gibt es dann 
wieder mehr, z.B.

http://search.digikey.com/scripts/DkSearch/dksus.dll?Detail&name=ATMEGA8535-16PU-ND

http://search.digikey.com/scripts/DkSearch/dksus.dll?Detail&name=PIC16F884-I/P-ND

Wenn es lange leben soll, würde ich übrigens Microchip emfehlen, die 
Chips bekommt man auch ewig als Ersatz gekauft. Atmel kündigt manchmal 
eher Chips ab. Und falls du Kontrolle über die Master-Seite hast, besser 
SPI verwenden, ist meiner Erfahrung nach unkomplizierter und weniger 
fehleranfällig, falls du keinen Rückkanal brauchst. Das erste Byte kann 
dann die Adresse sein. Oder bei längeren Leitungen und Rückkanal RS485.

von Jan S. (jan_s)


Lesenswert?

Oder einfach 1,95€ pro 8 Ports spendieren und, statt einen 
Schieberegister, einen ATtiny2313 verwenden. Ich habe bei meiner 
Hausautomation lange hin und her überlegt, Latches, Schieberegister, 
Portexpander usw. Und habe dann einfach ATtiny2313 genommen, bissel 
Assembler drauf und fertig.

von Detlev T. (detlevt)


Lesenswert?

Jan S. schrieb:
> Oder einfach 1,95€ pro 8 Ports spendieren und, statt einen
> Schieberegister, einen ATtiny2313 verwenden.

Oder einfach 1.40€ pro 16 Ports spendieren und MCP23016 verwenden. Das 
sind Portexpander mit I²C-Schnittstelle.

von hubert (Gast)


Lesenswert?

Vielleicht auch mal PCA9622 oder ähnliche ICs bei NXP anschauen. I2C 
eingang, treibt 16 Ausgänge a 40V 25mA/Kanal mit PWM inclusive 
Freilaufdiode.

Kommt halt drauf an, ob Du eine schnelle Lösung haben willst oder ob Du 
das um des Lernens willen machst.

von hubert (Gast)


Lesenswert?

... sorry, meinte PCA6935

von Joachim S. (mithotyn)


Lesenswert?

Hi Hubert!

Ist mein erstes µC Projekt, deswegen spielt der Lernfaktor durchaus eine 
große Rolle. Den genannten IC hab ich mir auch schon angeschaut. Neben 
der Tatsache, dass es die nur in SMD gibt, kann ich den µC nach meinen 
Bedürfnissen anpassen. (=> Es gibt Ausgänge, die wie eine Kerze/Gaslicht 
flackern). Deswegen, wegen dem Preis und der Verfügbarkeit, hab ich mich 
gegen den Kandidaten entschieden.

Gruß Joachim

von Joachim S. (mithotyn)


Angehängte Dateien:

Lesenswert?

Hi zusammen!

Nach Änderungen am Schaltplan nach Euren Beiträgen und 6 Stunden 
Layoutarbeit am Board (ohne Autorouter) hab ich nun eine "fertige" 
Version der Schaltkarte.

Könnt ihr bitte mal drüberschauen, ob ich da noch irgendwelche Fehler 
gemacht habe? Ist wie gesagt mein erstes Projekt und mein erstes Board.

Wenn das alles ok ist, will ich morgen gleich das Ätzen in Auftrag 
geben.

Danke und Gruß
Joachim

von Frank B. (foobar)


Angehängte Dateien:

Lesenswert?

Ich habe es nicht im Detail geprüft, aber sieht gut aus. Anbei wie die 
wohl aussehen wird, wenn sie fertig ist, per Eagle 3D gerendert. Ggf. 
die Widerstandsarrays genauso jedes zweite versetzen, wie die 
Widerstände davor, damit die nicht so zusammenstoßen an den Kanten.

Ich drucke mir das Layout bei Platinen auch immer vorher aus und 
probiere, ob alle Bauteile draufpassen und die Footprints stimmen, wenn 
ich die Bauteile da habe, und ob es ins Gehäuse passt, falls es irgendwo 
eingebaut werden soll.

Hat keine Auswirkung auf die Funktion, aber in der Schaltung würde ich 
noch den Knäuel am unteren Multiplexer beheben. Du kannst ja die 
Ausgänge rechts umsortieren, sodaß du wieder gerade Leitungen ziehen 
kannst.

von Joachim S. (mithotyn)


Lesenswert?

Waaaahhhh wie geil ist das denn??? :-) Danke Frank!

Das ganze Geraffel mit Eagle 3D und Povray wollte ich mir irgenwann auch 
mal installieren, aber dank dir ist das so schnell nicht nötig. Cool :-)

Ja das mit den Widerstandsnetzwerken ist noch ne gute Idee, das werd ich 
noch machen.

Und das Knäuel werd ich der Optik wegen auch noch auflösen.

Bauteile sind bei Reichelt schon bestellt, dann kann ich in der Tat 
erstmal auf dem Papier testen, wie das später auf der Platine sitzen 
wird. Guter Tip!

Also danke nochmal!
Gruß Joachim

von Joachim S. (mithotyn)


Angehängte Dateien:

Lesenswert?

Hi zusammen!

Das Projekt musste eine Weile ruhen, nun soll es aber endlich konkret 
werden. Die ursprüngliche Schaltung hab ich kaum verändert, außer einen 
anderen Typ MOSFET eingesetzt, der sich besser auf der Platine 
platzieren lässt. Auch hab ich die Anschlussklemme weggelassen und die 
Kabel der Lichter werden nun direkt auf die Platine gelötet. Diese 
werden eh fest verbaut, so dass hier eine Steckverbindung nur mehr 
Aufwand bedeutet.

Gibt es noch irgendwas, was ich falsch gemacht habe, oder was ihr besser 
machen würdet? Wäre super wenn noch einer mal Feedback geben könnte, 
dann kann ich bald die Platinen machen lassen.

Danke und Gruß
Joachim

von Praktiker (Gast)


Lesenswert?

Klaus T. schrieb:
> Also eigentlich sind FETs spannungsgesteuert ...

Die Welt besteht aber nicht nur aus statischer Ansteuerung. Manchmal 
ändert sich der Pegel am Gate auch. Und dann ist das eine Frage der 
Gatekapazität. Ein bisschen Widerstand tut eventuell auch der Umwelt 
gut, weil die Schaltflanken dann etwas besänftigt werden.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.