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
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
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
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
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
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?
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
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
>>> 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
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.
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
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
Hallo Zusammen,
auf bitten einiger Mitglieder des Forums, habe ich den Artikel
entsprechend korrigiert und die Downloads alle wieder aktiviert.
Gruß
Frank
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
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.
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
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"
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.