Forum: Mikrocontroller und Digitale Elektronik 74xx165 mit 74xx595 per SPI gleichzeitig lesen/schreiben; clk-Inverter?


von Chris (Gast)


Angehängte Dateien:

Lesenswert?

Hi zusammen,

ich möchte meinen ATMega88 um 8 Inputs und 8 Outputs erweitern. Dazu 
habe ich an einen 74xx165 und ein 74xx595 gedacht. (beschaltung siehe 
Anhang)

Da ich an den 595 in 10ms abständen daten sende, dachte ich mir, das ist 
ein perfektes Intervall um meine Taster gleich mit abzufragen. Ich würde 
also meine Ausgänge und Eingänge in einem Aufwasch schreiben und lesen.

Wenn ich jetzt aber keinen ganz groben Fehler beim lesen der 
Datenblätter gemacht habe, dann shiften beide Register an der 
low->high-Flanke.
Stell ich jetz den SPI-Modus so ein, dass es für den 595 passt, dann 
habe ich beim lesen des 165 die Datenflanken genau dann wenn sie nicht 
sein sollten. ich müsste also das clk-signal für den 165 genau 
invertieren.

ich dachte da an einen Transistor mit Pullup, allerdings hab ich absolut 
keine ahnung welchen Transitor ich für über 1MHz (so schnell soll das 
SPI takten) hernehmen kann. Die standard BC817 sind zwar mit 100MHz 
ausgeschildert, allerdings hab ich irgendwie ein komisches Gefühl. Das 
wär zu einfach.
Als Pullup dachte ich so an 1k. Schätze das sollte reichen.

Ich will also euren (meist) fachmännischen Rat dann doch lieber nochmal 
einholen, bevor der Frust wächst.
Gibt doch Sinn den Transitor einzubauen (SPI-Modus dann 00)?
Der Transistor BC817, ist der OK mit den widerständen?

Danke schonmal
lg Chris

von Hannes (Gast)


Lesenswert?

hat denn keiner eine Antwort?

von Chris (Gast)


Lesenswert?

Ja schade.
Vorallem da mich das Tutorial total verwirrt.
http://www.mikrocontroller.net/articles/AVR-Tutorial:_Schieberegister
Da werden Pins genannt die mein 595 gar nicht hat. Z.B. der Eingang G. 
Ich vermute mal es ist der in meinen Datenblättern als /OE.

Genauso beim 165:
> Mittels des Eingangs PL (Parallel Load) werden die Daten vom parallelen
> Eingang in das Schieberegister übernommen, wenn dieses Signal LOW ist.
> Hier muss man aber ein klein wenig aufpassen. Auf grund der
> Schaltungsstruktur ist der Eingang PL mit dem Takt CLK verknüpft (obwohl
> es dafür keinen logischen Grund gibt :-0). Damit es nicht zu unerwünschten
> Fehlschaltungen kommt, muss der Takt CLK während des Ladens auf HIGH
> liegen. ...
In meinem Datenblatt steht das nicht. Und da iat auch keine Verknüfung 
zu erkennen.
http://docs-europe.electrocomponents.com/webdocs/0cb5/0900766b80cb529f.pdf

Irgendwie finde ich das ganze überhaupt nicht stimmig. Auch wird 
irgendwo geschrieben die beiden seien kompatibel und könnten 
gleichzeitig gelesen bzw. geschrieben werden, aber dass kann ja nicht 
sein wenn sie beide zur gleichen Zeit shiften.
ein shift beim 165 entspricht dem anlegen des nächsten Bits an die 
Datenleitung, während ein shift beim 595 dem lesen der Daten 
entpricht...

von Matthias R. (baldo_der_baer)


Lesenswert?

Wie ist denn das Signal zur Übername der Daten an das Schiebereigister 
während des shiftens
Der 595 ist Flankengesteuert und der 165 ist Zustandsgesteuert
Das Signal muss während des shiftens 1 sein damit der 165 nicht falsche 
Daten zwischendurch übernimmt
Wenn das Übernahme Signal erst nach dem Shiften auf null gesetzt werden 
sind die Daten erst nach dem zweiten Einlesen korrekt
Wenn das Übernahme Signal vor dem Shiften passiert sind die Ausgabedaten 
bis zum nächsten Übergabesignal unbestimmt (Bei LEDs egal)
Je nach dem wie man es macht muß man hier aufpassen .

von Chris (Gast)


Lesenswert?

du meinst PC2? das ist auf high-pegel und erhält kurz nach dem 
durchshiften einen kurzen low impuls.
Dass dann das 1. lesenvom 165 müll ist ist mir klar, deswegen werde ich 
in der initialisierung ein 0x00 an den 595 senden und die gelesenen 
Daten verwerfen. Damit hab ich beide ICs quasi initialisiert.

von Detlev T. (detlevt)


Lesenswert?

Wäre ein Portexpander ala MCP23S17 hier nicht sinnvoller?

Ansonsten gibt es übrigens mit dem 74HC166 auch noch eine 
flankengesteuerte Variante des 165.

von bko (Gast)


Lesenswert?

Wenn du "Soft-SPI" machst brauchst du den Inverter-Transistor nicht.
Verbinde den CLK-Pin (2) des 165 einfach mit der SCK Leitung.
Ändere dann einfach nur die AVR-SPI-Routine etwa so in dieser
Richtung ab:

1: SCK auf 0
2: Datenbit auf MOSI rausschieben
3: SCK auf 1    ;   der 595 schiebt 1x rein, der 165 ein Bit raus
4: Datenbit auf MISO einlesen
5:  und wieder zur 1

zu 3:
laut TI schieben beide ICs (74hx165 und 74hx5895) mit steigender
Flanke:
http://focus.ti.com/docs/prod/folders/print/cd74hc165.html
http://focus.ti.com/docs/prod/folders/print/sn74hc595.html

von Frank K. (fchk)


Lesenswert?

Chris schrieb:
> Hi zusammen,
>
> ich möchte meinen ATMega88 um 8 Inputs und 8 Outputs erweitern. Dazu
> habe ich an einen 74xx165 und ein 74xx595 gedacht. (beschaltung siehe

Warum nicht ein 595 und ein 597? Das passt denke ich besser zusammen.

fchk

von Chris (Gast)


Lesenswert?

Oh verdammt bin ich blind!
Nein ich wollte kein Soft-SPI, sondern den USART im SPi-Modus nutzen.
Hab schon alle leitungen umverlegt von PortC nach PortD. Wer lesen kann 
ist klar im Vorteil!

Zum Thema: ich hab mich jetzt dazu entschlossen die Platine einfach mit 
dem transistor-inverter zu bauen und zu hofen dass es klappt. Aber das 
sollte es schon denke ich. Jetzt muss ich nur das Routen nochmal angehen 
grr...

Vielen Dank
lg chris

von Hannes (Gast)


Lesenswert?

Berichtest du bitte, ob es so klappt?
Würde mich sehr interessieren!
günstige Portexpander kann man doch immer gebrauchen.

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.