Forum: Projekte & Code Porterweiterung über 74HC595


von Frank L. (franklink)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,
hier eine kleine Platine als Porterweiterung über den Baustein 74HC595.

Die Platine ist als einseitiges Layout ausgelegt, damit sie einfach und 
durch jeden selbst erstellt werden kann. Das führt dazu, dass eine 
erhebliche Anzahl von Drahtbrücken notwendig sind.

In der Zip-Datei befindet sich eine PDF-Datei mit dem Layout sowie der 
Sourcecode zur Ansteuerung der Bausteine über Software SPI.
Es können mehrere dieser Platinen hintereinander geschaltet (kaskadiert) 
werden.

Um das im PDF hinterlegte Layout zu drucken, ist darauf zu achten, dass
alle Skalierung im PDF-Reader ausgeschaltet sind (Seitenanpassung:
keine). Wird diese Einstellung nicht gewählt, wird das Layout um die
entsprechende angegebene Skalierung verkleinert!

Download:
http://www.derplatinenshop.de/documents/porterweiterung/Porterweiterung_74HC595.zip

Gruß
Frank

von Pete K. (pete77)


Lesenswert?

Warum versuchst Du nicht, die Brücken durch geschicktes Routing zu 
minimieren ?

von Frank L. (franklink)


Lesenswert?

Hi Pete,
habe ich versucht, dass Problem, wenn ich z.B. die Leiterbahnen zwischen 
den Pins verlaufen lasse, können die meisten das Layout nicht mehr 
selber belichten. Ich wollte aber, dass möglichst viele das Layout 
selber reproduzieren können.

Hinzu kommt, es ist eine Experimentierplatine mit den Maßen 70 x 35 mm. 
Ich erhebe für diese Platine nicht den selben Anspruch einer 
professionellen Fertigung wie z.B. bei meinen Verstärkerplatinen.

Jeder kann natürlich ein besseres Layout zur Verfügung stellen und hier 
anhängen. Wäre mal interessant die verschiedenen Lösungsansätze zu 
sehen. Immer mit dem Anspruch, jeder sollte mit den einfachsten Mitteln 
diese Platinen herstellen können.

Gruß
Frank

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Hm.. stell doch mal die SPrintLayut datei mit ein.. da kann man auf 
jedenfall noch einiges einsparen.

von Frank L. (franklink)


Angehängte Dateien:

Lesenswert?

Hier das Spritlayout.

Gruß
Frank

von Läubi .. (laeubi) Benutzerseite


Angehängte Dateien:

Lesenswert?

Habs mal auf 2 Drahtbrücken reduziert bei immer noch recht lockerem 
Layout :)

von Läubi .. (laeubi) Benutzerseite


Angehängte Dateien:

Lesenswert?

bild

von Frank L. (franklink)


Angehängte Dateien:

Lesenswert?

Hallo laeubi,
ich habe das Layout noch ein klein wenig verändert. Danke für die 
Überarbeitung.

Die Änderungen sind in der Download-Datei als PDF enthalten.

Download:
http://www.derplatinenshop.de/documents/porterweiterung/Porterweiterung_74HC595.zip

Gruß
Frank

von Peter D. (peda)


Lesenswert?

Den Output Enable sollte man aber mit zum MC führen.

Der Zustand nach dem Power-On ist ja rein zufällig und dann ist es blöd, 
wenn gleich irgendwelche Motoren eingeschaltet werden und unkontrolliert 
loslaufen.

Ich mach daher immer nen Pullup an den /OE, der hält alle Ausgänge 
tristate.

Und nach dem Reset schiebt der MC ein gültiges Datenbyte ein und erst 
danach werden die Ausgänge aktiviert (/OE = low).


Peter

von Frank L. (franklink)


Angehängte Dateien:

Lesenswert?

Hallo Peter,
danke für den Hinweis.

Ich habe das Layout so geändert, dass beide Alternativen verwendet 
werden können. Über Jumper umschaltbar.

Sobald ich die Software getestet habe, stelle ich alles ein.

Gruß
Frank

von Frank L. (franklink)


Lesenswert?

Hallo zusammen,
ich habe das ganze als Artikel unter Projekte eingestellt, da ich noch 
weitere Platinen und Routinen für diesen Bereich bauen möchte.

Ich würde mich über eine rege Diskussion und Anregungen freuen. Fehler 
in den Texten bitte ich sofort zu korrigieren.

Hier die URL: http://www.mikrocontroller.net/articles/Porterweiterungen

Gruß
Frank

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Ich verwende solche Portexpander in mehreren Projekten und hab bisher 
gute Erfahrungen damit gemacht. Die Expander sind billiger und 
wesentlich einfacher uns schneller anzusteuern als zB I²C-Expander.

Zu Deinem Layout

1) Bei mehreren Expandern und Lasten an den Ausgängen zupft das an der 
Versorge, zumal alle ICs gleichzeitig schalten. Abblockkondensatoren 
(KerKo, 100nF) zwischen VCC und GND wären kein Luxus.

2) Bei mehreren Expandern und dadurch längeren Leitungen hab ich 
beobachtet, daß sich die Expander manchmal wegen Störungen verschlucken 
(waren bei mir 6 Expander). In dem Fall helfen Blocker an den 
Datenleitungen, zB 100pF nach GND.

3) Wenn man die Platinen kaskadiert, ist es praktisch, sie nach dem 
Muster
1
µC>--<Platine>--<Platine>...
2
-- Leitung
3
<  Steckverbinder Eingang
4
>  Steckverbinder Ausgang

verbinden zu können. Mit nur einem Verbinder wie in Deinem Layout geht 
das so nicht.

4) Für die Ansteuerung per AVR empfehle ich das SPI-Modul, damit geht 
das alles sehr fix und mit wenigen Bytes Programmcode: 50 Byte Code, 
Datendurchsatz von 37 kByte pro Sekunde und MHz µC-Takt. Bei 16 MHz 
µC-Takt also theoretisch bis knapp 600 kByte/s. Da hab ich sogar ne 
mehrkanalige Soft-PWM drüber laufen.

5) Gscheite Bohrungen zur Fixierung?

von Frank L. (franklink)


Lesenswert?

Hallo,
vielen Dank für Deine Anregungen:

> 1) Bei mehreren Expandern und Lasten an den Ausgängen zupft das an der
> Versorge, zumal alle ICs gleichzeitig schalten. Abblockkondensatoren
> (KerKo, 100nF) zwischen VCC und GND wären kein Luxus.

Werde ich bei der nächsten Layout-Version vorsehen.

> 2) Bei mehreren Expandern und dadurch längeren Leitungen hab ich
> beobachtet, daß sich die Expander manchmal wegen Störungen verschlucken
> (waren bei mir 6 Expander). In dem Fall helfen Blocker an den
> Datenleitungen, zB 100pF nach GND.

Ich nehme an, Du meinst die Kommunikationsleitungen und nicht die 
Datenleitungen der 74HC595.

> 3) Wenn man die Platinen kaskadiert, ist es praktisch, sie nach dem
> Muster
>
1
> µC>--<Platine>--<Platine>...
2
> -- Leitung
3
> <  Steckverbinder Eingang
4
>>  Steckverbinder Ausgang
5
>
>
> verbinden zu können. Mit nur einem Verbinder wie in Deinem Layout geht
> das so nicht.

Da hast Du glaube ich übersehen, dass der Pfostenstecker zweireihig ist.

> 4) Für die Ansteuerung per AVR empfehle ich das SPI-Modul, damit geht
> das alles sehr fix und mit wenigen Bytes Programmcode: 50 Byte Code,
> Datendurchsatz von 37 kByte pro Sekunde und MHz µC-Takt. Bei 16 MHz
> µC-Takt also theoretisch bis knapp 600 kByte/s. Da hab ich sogar ne
> mehrkanalige Soft-PWM drüber laufen.

SPI wollte und kann ich nicht benutzen, ich verwende die Platinen auch 
für meine Motorpoti-Platine, da kann ich nur SPI über Software machen.
Aber Du kannst gerne die Bibliothek zusätzlich für Hardware-SPI 
implementieren.

> 5) Gscheite Bohrungen zur Fixierung?

Diese Frage habe ich nicht verstanden, jede Platine verfügt über 
Befestigungsbohrungen. Sie sind lediglich nicht in der korrekten Größe 
ausgeführt, da ich die Erfahrung gemacht habe, dass kleine Markierungen 
beim selber Bohren besser sind.

Gruß
Frank

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Frank Link wrote:
>> 2) Bei mehreren Expandern und dadurch längeren Leitungen hab ich
>> beobachtet, daß sich die Expander manchmal wegen Störungen verschlucken
>> (waren bei mir 6 Expander). In dem Fall helfen Blocker an den
>> Datenleitungen, zB 100pF nach GND.
>
> Ich nehme an, Du meinst die Kommunikationsleitungen und nicht die
> Datenleitungen der 74HC595.

Jepp, da wo die Daten reingehen ;-) also am SPI-Bus

>> 3) Wenn man die Platinen kaskadiert, ist es praktisch, sie nach dem
>> Muster
>>
1
>> µC>--<Platine>--<Platine>...
2
>> -- Leitung
3
>> <  Steckverbinder Eingang
4
>> >  Steckverbinder Ausgang
5
>>
>>
>> verbinden zu können. Mit nur einem Verbinder wie in Deinem Layout geht
>> das so nicht.
>
> Da hast Du glaube ich übersehen, dass der Pfostenstecker zweireihig ist.

Hab ich wohl gesehen, mir ist aber nicht klar, wie ich die Platinen 
anschliessen könnte, ohne selber Verbinder zu basteln, um SER_OUT.1 auf 
SER_IN.2 zu bekommen:
1
SCK >--------< SCK
2
RCK >--------< RCK
3
OE  >--------< OE
4
SER_IN  >  /-< SER_IN
5
SER_OUT >-/  < SER_OUT

Einfacher wäre was in der Richtung:
1
SCK >------< SCK
2
RCK >------< RCK
3
OE  >------< OE
4
SER_OUT >--< SER_IN

>> 4) Für die Ansteuerung per AVR empfehle ich das SPI-Modul...
> SPI wollte und kann ich nicht benutzen

Axo, dache das sollte nicht nur für Dich sein...

> Aber Du kannst gerne die Bibliothek zusätzlich für Hardware-SPI
> implementieren.

schon passiert

von Frank L. (franklink)


Lesenswert?

>>> 3) Wenn man die Platinen kaskadiert, ist es praktisch, sie nach dem
>>> Muster
>>>
1
>>> µC>--<Platine>--<Platine>...
2
>>> -- Leitung
3
>>> <  Steckverbinder Eingang
4
>>> >  Steckverbinder Ausgang
5
>>>
>>>
>>> verbinden zu können. Mit nur einem Verbinder wie in Deinem Layout geht
>>> das so nicht.
>>
>> Da hast Du glaube ich übersehen, dass der Pfostenstecker zweireihig ist.
>
> Hab ich wohl gesehen, mir ist aber nicht klar, wie ich die Platinen
> anschliessen könnte, ohne selber Verbinder zu basteln, um SER_OUT.1 auf
> SER_IN.2 zu bekommen:
>
1
> SCK >--------< SCK
2
> RCK >--------< RCK
3
> OE  >--------< OE
4
> SER_IN  >  /-< SER_IN
5
> SER_OUT >-/  < SER_OUT
6
>
>
> Einfacher wäre was in der Richtung:
>
1
> SCK >------< SCK
2
> RCK >------< RCK
3
> OE  >------< OE
4
> SER_OUT >--< SER_IN
5
>

Jau, jetzt hat es bei mir klick gemacht, ja, im Augenblick musst Du Dir 
die Kabel leider selber zimmern, mir ist noch keine gute Idee gekommen, 
wie ich ohne weitere zusätzliche Brücken das hinbekommen soll. Mit einem 
doppelseitigen Layout wäre das kein Problem.

>
>>> 4) Für die Ansteuerung per AVR empfehle ich das SPI-Modul...
>> SPI wollte und kann ich nicht benutzen
>
> Axo, dache das sollte nicht nur für Dich sein...

Da habe ich mich missverständlich ausgedrückt, ich würde das ganze nicht 
als Projekt inkl. Beschreibung aufziehen wenn es nicht für die 
Allgemeinheit wäre. Ich habe lediglich Software-SPI zuerst 
implementiert, da ich das für mich auch benötige. Hardware-SPI ist 
später vorgesehen. Außerdem habe ich mich Hardware-SPI noch nicht 
beschäftigt, von daher wird es noch etwas dauern.

Gruß
Frank

von Thomas (kosmos)


Lesenswert?

ich wollte kurz einwerfen das ein 74HC573N besser geeignet wäre da man 
hier die Daten parallel übergibt. Was wesentlich schneller abläuft. Man 
gibt die Daten also auf einen Port aus und gibt ein kurzes Steuersignal 
an den Latch aus, der das ganze übernehmen soll und falls erwünscht 
gleich ausgibt. So kann man an einen Port beliebig viele parallel 
hängen.

http://www.mikrocontroller.net/attachment/18129/THEMENBLATT_PORTERWEITERUNG.PDF

Ich habe damit mal einen EEPROM-Programmierer auf einem Steckbrett und 
einen kleinen AVR aufgebaut um alle Adressdaten gleichzeitig ans EEPROM 
zu legen und dann mit dem gleichen Port die Daten ans EEPROM zu schicken 
bzw. von dort zu lesen.

von Frank L. (franklink)


Lesenswert?

Hallo Thomas,
in Prinzip ja, in diesem konkreten Fall nein. Das Ziel war / ist es, mit 
möglichst wenig Ports aus zu kommen.

Das Projekt heißt allerdings Porterweiterung also spricht ja nichts 
dagegen, auch hierfür eine Platine und eine entsprechende Bibliothek zu 
entwickeln.

http://www.mikrocontroller.net/articles/Porterweiterungen

Gruß
Frank

von Chris M. (shortie)


Lesenswert?

Hat noch jemand die Zip-Dateien und könnte die evtl hier oder im Artikel 
einstellen?
Die ganzen Link zu derplatinenshop.de laufen ins Leere :-(

von Frank L. (franklink)


Lesenswert?

Hallo Chris,
ich stelle die Sachen heute Abend neu ein. Die Domaine gibt es nicht 
mehr, und ich habe es versäumt das zu ändern.

Sorry und Gruß
Frank

von Frank L. (franklink)


Angehängte Dateien:

Lesenswert?

Hallo,
hier die Zip-Datei mit dem Quellcode der Porterweiterung.

Gruß
Frank

von Frank L. (franklink)


Angehängte Dateien:

Lesenswert?

und hier die Erweiterung für die Ansteuerung eines LCDs über die 
Porterweiterung.

Gruß
Frank

von Robert Ibener (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

anbei meine eine Eindraht-Version eines I/O-Expanders.

Ist allerdings nur für träge externe Geräte verwendbar (z.B. Relais),
vielleicht aber für einige doch interessant.

Grüße
Robert

von Chris M. (shortie)


Lesenswert?

Hallo Frank,

vielen herzlichen Dank.

Gruss Chris

von Frank L. (franklink)


Angehängte Dateien:

Lesenswert?

Hallo Zusammen,
auf bitten einiger Mitglieder des Forums, habe ich den Artikel 
entsprechend korrigiert und die Downloads alle wieder aktiviert.

Gruß
Frank

von Frank L. (franklink)


Angehängte Dateien:

Lesenswert?

und hier noch das Layout der zweiten Platine.

von Newbie (Gast)


Lesenswert?

Hallo,

bin ziemlich ein Neuling in Sachen Mikrocontroller.

Wollte Frage ob mir jemand helfen könnte, den Code an ein 74HC4094E 
anzupassen. Glaube das müsste ziemlich leicht gehen...

Jedoch kriege ich es nicht hin. Wenn ich die Porterweiterung "normal" 
ansteuere funktioniert sie. Mit dem hier veröffentlichten Code jedoch 
nicht.

Danke schon einmal.

Gruß Newbie

von Thomas (kosmos)


Lesenswert?

nehmt doch einfach 8bit parallel Latch z.B: 74HC/HCT 573, geht doch 
wesentlich schneller als seriell die Daten reinuschieben und ist viel 
einfacher zu programmieren.

Man muss nur die Daten an einem Port ausgeben und über einige Pins kann 
man dem Latch sagen was es machen soll, z.B. Daten übernehmen, Eingänge 
hochohmig schalten, Daten ausgeben(kann man per Brücke immer aktiviert 
lassen) und dadurch einen PIN sparen.

Wenn  man die Latcheingänge hochohmig schalten kann man die Ausgänge des 
µC wieder für anderen Sachen verwenden.

Mein erstes Projekt damit war ein ATTiny26 der einige Analogsensoren 
eingelesen hat und gleichzeitig ein 44780 LCD im 8 Bit Modus ansteuerte.

von Newbie (Gast)


Lesenswert?

Ja das wäre eine Möglichkeit, jedoch wollte ich das speziell mit einem 
4095 machen, weil ich von einem Freund davon glaub 40 Stück rumliegen 
hab.

Bin mir sicher das es auch so geht. Also mit dem Code von diesem 
Projekt... Nur eben mit ein paar Änderungen, da sich ja die beiden 
Porterweiterung doch sehr ähnlich sind. Um Geschwindigkeit geht es bei 
mir nicht.
Gruß newbie

von m.n. (Gast)


Lesenswert?

Thomas O. schrieb:
> nehmt doch einfach 8bit parallel Latch z.B: 74HC/HCT 573, geht doch
> wesentlich schneller als seriell die Daten reinuschieben und ist viel
> einfacher zu programmieren.
> ...
> Mein erstes Projekt damit war ein ATTiny26 der einige Analogsensoren
> eingelesen hat und gleichzeitig ein 44780 LCD im 8 Bit Modus ansteuerte.

Das finde ich einen ganz schlechten Vorschlag. Schieberegister lassen 
sich mit wenigen Leitungen ansteuern und einfach kaskadieren. Gerade, 
wenn es darum geht, ein LCD anzusteuern, wird hohe Geschwindigkeit 
garnicht benötigt: das Display ist viel zu langsam dafür!
Zudem ist die ser. Ausgabe eine ganz einfache Programmieraufgabe.

Wenn es hilft, hier ein Beispiel für 6 x 4094 für eine 
7-Segment-Ansteuerung: 
Beitrag "7-Segm.-LED-Anzeige, 6-stellig, statische Ansteuerung mit (74HC)4094"

von J. S. (engineer) Benutzerseite


Lesenswert?

Die Signale werden ja gelatched und damit lassen sich gleich mehrere 
Displays parallel ansteuern. Eine sinnvolle update-Rate sind optisch bis 
zu 5/s bei einer Anzeige von mehreren Stellen müssen diese, damit sie 
als "gleichzeitig" wahrgenommen werden, in einem Bruchteil der Zeit 
aktualisiert und dann stehengelassen werden. Das sind also z.B. 200ms 
Standzeit und davon 20ms update-Zeit. Mit 4 Stellen also update in 5ms 
-> rund 500us je Bit. Das packt ein Controller locker. Wenn man aber 
eine ganze Audioanzeige mit 16 Level-Metern ansteuern möchte, sind da 
16x24 LEDs bei möglichst 30Hz+. Also Faktor 50-100 schneller.

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.