Porterweiterung über 74HC595

#874484
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
Angehängte Dateien:
#874500
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
#876388
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
#876740
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
Persönliche Seite #876871
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?
#876926
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
Persönliche Seite #876953
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
#877018
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
#877241
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.
#877294
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
Gast #6476970
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
#6476984
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.
Gast #6477117
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
Gast #6477181
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"
Persönliche Seite #6912625
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren