Forum: Mikrocontroller und Digitale Elektronik mehrere Schieberegister mit MUX


von Heinz (Gast)


Lesenswert?

Hallo zusammen,

Ich möchte gerne mit meinem ATmega48 10 7-Segment-Anzeigen schalten. 
Realisiert habe ich dies durch 10 Schieberegister (SN74LS164N) wobei ich 
das Clocksignal multiplexe (MC14067BCPG) und so auf die verschiedenen 
Schieberegister ausgebe. Mein Problem ist jetzt das ich den Status eines 
Schieberegisters nicht halten kann, sprich: wenn ich die Adresse im MUX 
ändere, dann ändern sich auch die anderen Anzeigen, obwohl ich 
eigentlich dachte wenn kein Signal am Clock liegt, dann wird auch nicht 
geschoben oder sehe ich das falsch??

Wäre echt nett, wenn jemand eine hilfreichen Rat für mich hätte...

mfg Heinz

von Falk B. (falk)


Lesenswert?

@ Heinz (Gast)

>Realisiert habe ich dies durch 10 Schieberegister (SN74LS164N) wobei ich
>das Clocksignal multiplexe (MC14067BCPG)

Und was soll das?

>Schieberegister ausgebe. Mein Problem ist jetzt das ich den Status eines
>Schieberegisters nicht halten kann, sprich: wenn ich die Adresse im MUX
>ändere, dann ändern sich auch die anderen Anzeigen, obwohl ich

Logisch, dein MUX erzeugt am Ausgang einen ungewollten Taktimpuls. Einer 
der Gründe, weshalb man Takte nicht multiplext.

MFG
Falk

von Alexander L. (lippi2000)


Lesenswert?

Ein anderer Vorschlag wäre toll gewesen außer nur nen Kommentar 
loslassen.

Hey Heinz, gib mal noch ein paar Infos an.

z.B. Clocksignal? Das vom AVR, einem seperaten Quarz oder wird der Takt 
von nem AVR-Bein durch Software bzw. PWM erzeugt?

Ein digitaler MUX (MC14067BCP = analog) wäre mir ehrlichgesagt ein 
bißchen sicherer. Aber schau mal, was der mit seinen Ausgängen macht, 
wenn diese nicht durchgesteuert sind (Pegel? oder Hochohmig?)

Im Grunde genommen darf das Schieberegister keinen Wert ohne steigende 
Flanke schieben. Also bekommt es offensichtlich irgendwoher noch eine.

Gruß Alexander

von Heinz (Gast)


Lesenswert?

hi,

also der Takt ist nicht das Problem, der wird ohne Probleme durchgemuxt. 
Aber sobald ich die Adresse ändere liegt an den nicht benutzen Ausgängen 
jeweils ein Pegel von 1,2V an (High: 5V). Allerdings nur an den 
Ausgängen die auch belegt sind. Könnte dies der Auslöser für das weitere 
Schieben sein?

Wenn ja, gibt es eine Möglichkeit dies zu umgehen oder besser gefragt: 
Ist dies ein Softwarefehler oder könnte es auch an der Hardware liegen??

Vielen Dank,

mfg Heinz

von Heinz (Gast)


Lesenswert?

oh,

hab ich vergessen zu erwähnen: Ich steure die Schieberegister über SPI, 
also wird der Takt intern erzeugt.

von Peter D. (peda)


Lesenswert?

Die übliche Methode ist nicht multiplexen, sondern die Register einfach 
kaskadieren und dann 10 Bytes reinschieben.

Blöd ist nur, daß man beim Schieben dunkel tasten muß, damit die Bits 
nicht schon beim Schieben an der falschen Stelle leuchten.

Daher nimmt man besser 74HC595, da kann man im Hintergrund schieben und 
dann gleichzeitig ausgeben (latchen).


Peter

von Falk B. (falk)


Lesenswert?

@ Heinz (Gast)

>also der Takt ist nicht das Problem, der wird ohne Probleme durchgemuxt.

Das denkst DU!

>Aber sobald ich die Adresse ändere liegt an den nicht benutzen Ausgängen
>jeweils ein Pegel von 1,2V an (High: 5V).

Jaja, aber das ist alles andere als ein sauberer LOW-Pegel und eben beim 
Umschalten wird ein Taktpuls erzeugt.

>Wenn ja, gibt es eine Möglichkeit dies zu umgehen oder besser gefragt:
>Ist dies ein Softwarefehler oder könnte es auch an der Hardware liegen??

Es ist zu 99% ein Hardwarefehler. Wozu der Ganze Aufwand? Machs so wie 
alle und es läuft gut. Kaskadier die Schieberegister.

AVR-Tutorial: Schieberegister

MFG
Falk

von Alexander L. (lippi2000)


Lesenswert?

Die nicht benutzten Ausgänge werden wohl hochohmig geschaltet. Da hängt 
der Eingang vom Schieberegister voll in der Luft. Einfach an jeden 
Ausgang noch einen 4k7 PullUp dran.

von Heinz (Gast)


Lesenswert?

Hallo,

und danke erstmal für eure Beiträge.

@Falk: meine schieberegister besitzen leider keinen QH* Pin der im 
Tutorial verwendet wird sondern nur die normalen 8 Ausgänge, dass heißt 
dann wohl das kaskadieren schon mal flach fällt.

@lippi: Entschuldige die blöde Frage aber meinst du mit 4k7 4,7kohm? 
würde das dann den 1,2V Pegel neutralisieren, oder zumindest so niedrig 
machen, dass das Signal nicht mehr als "high" gewertet wird?

mfg Heinz

von ??? (Gast)


Lesenswert?

Der Mux macht hochohmige Ausgänge.  Also hängen die entsprechenden 
Eingänge der folgenden Stufen in der Luft. Da stellt sich halt irgendwas 
ein (ev. Abhängig vom Programm des nächsten Mittelwellensenders).
Der Widerstand nach Masse (pull down) oder High (pull up) zieht die den 
Eingang auf ein definiertes Potential. Er darf nicht zu klein werden, 
sonst schaft es der Ausgang nicht in die  andere Richtung.

von Peter D. (peda)


Lesenswert?

Heinz wrote:

> @Falk: meine schieberegister besitzen leider keinen QH* Pin der im
> Tutorial verwendet wird sondern nur die normalen 8 Ausgänge, dass heißt
> dann wohl das kaskadieren schon mal flach fällt.

Warum sollte es?

Den QH* braucht man nur bei Registern mit Latch.


> @lippi: Entschuldige die blöde Frage aber meinst du mit 4k7 4,7kohm?
> würde das dann den 1,2V Pegel neutralisieren, oder zumindest so niedrig
> machen, dass das Signal nicht mehr als "high" gewertet wird?

Der 4k7 wird nicht das geringste helfen. Es darf beim Umschalten kein 
Pegelwechsel (Flanke) entstehen.


Peter

von Heinz (Gast)


Lesenswert?

Hi,

@Peda: Aber so wie ich das im Tutorial verstehe werden über den QH* Pin 
des ersten Schieberegisters die Daten zum nächsten Schieberegister 
geschoben oder seh ich da irgendwas falsch? Also wie soll ich ohne eine 
freie Datenleitung (da es bloß eine Eingangsleitung bei meinem 
Schieberegister gibt) die Schieberegister kaskadieren?

Gibt es noch eine andere Möglichkeit ausser den Clock zu enablen um die 
Anzeige anzuhalten, weil dann könnte ich einfach die Datenleitung muxen, 
was alles viel einfacher machen würde? Hab ich auch schon versucht aber 
klappt ja dann mit dem Anhalten nicht, da wenn ich den Clock enable 
natürlich alle Anzeigen stehen bleiben. Also wenn es noch eine andere 
Möglichkeit geben würde das Schieben zu unterbrechen, ich wäre sehr froh 
wenn sie mir jemand mitteilen könnte...

mfg Heinz

von Falk B. (falk)


Lesenswert?

@ Heinz (Gast)

>geschoben oder seh ich da irgendwas falsch? Also wie soll ich ohne eine
>freie Datenleitung (da es bloß eine Eingangsleitung bei meinem
>Schieberegister gibt) die Schieberegister kaskadieren?

Nimm die richtigen Schieberegister 74HC595.

>Gibt es noch eine andere Möglichkeit ausser den Clock zu enablen um die
>Anzeige anzuhalten, weil dann könnte ich einfach die Datenleitung muxen,
>was alles viel einfacher machen würde?

Nein, weil dann dein anderes Register auch einen Takt bekommt. Einzige 
schnelle Lösung wäre die beiden Register paralle zu takten und somit zu 
laden. Also ein Pin für Takt, zwei für Daten.

>Möglichkeit geben würde das Schieben zu unterbrechen, ich wäre sehr froh
>wenn sie mir jemand mitteilen könnte...

Welche Schieberegister hast du denn genau?

MFG
Falk

von klaus (Gast)


Lesenswert?

hi,

schon mal an einen 74'138 (oder so was) gedacht ?
das ist ein 3-zu-8-encoder (oder so ähnlich).
den könnte man zum takten von 7 oder 8 kanälen nehmen
(ok der hat noch ein paar enable-eingänge, damit kann er "kaskadiert" 
werden)

allerdings muss die ausgabe wahrscheinlich per software erzeugt werden, 
da man dann kein "taktsignal" sondern eine "adresse" anlegt.
(ich weiß jetzt nicht, vielleicht gehts auch über einen enable-eingang 
???)

(kleinschreibung: tastatur=ok, ich=faul, kommentare=bitte verkneifen)

von Peter D. (peda)


Lesenswert?

Heinz wrote:
> @Peda: Aber so wie ich das im Tutorial verstehe werden über den QH* Pin
> des ersten Schieberegisters die Daten zum nächsten Schieberegister
> geschoben oder seh ich da irgendwas falsch?

Der 164 hat kein Latch, also ist QH = QH*


Peter

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.