Forum: Mikrocontroller und Digitale Elektronik Schieberegister HC595_Verständnislückchen


von fridulin007 (Gast)


Lesenswert?

Hallo liebe Elektroniker,

ich nehme gleich vorweg das ich Neuling mit Grundlagenverständnis bin.

Ich habe ein Steckboard mit einem Atmega 88-20PU und daran ein 
Schieberegister HC595 + Bargraf-LED. Das soll mal eine Temperaturanzeige 
werden, naja. Ich schiebe die Bits auch wunderbar durch, das 
funktioniert auch Alles.

1. Es gibt allerding eine Sache die ich zum HC595 nicht verstehe. Wenn 
ich alle 8 Bits + Shiftregistertakt reinschiebe und direkt anschließend 
die 8 Takte des Speicherregisters vollziehe, dann zeigen mir die LEDs 
die richtige Reihenfolge an. Wenn ich allerdings Shiftregistertakt und 
Speicherregistertakt durchs kompilieren und brennen voneinander trenne, 
dann klappt es nicht.

2. Kann man das Schieberegister komplett auf 0 setzen? Oder muss ich 
jedesmal 8 0-bits durchschieben? Mit Reset klappt es nicht.

Ich hoffe das war verständlich :)

Vielen Dank

von chieb (Gast)


Lesenswert?

>2. Kann man das Schieberegister komplett auf 0 setzen? Oder muss ich
>jedesmal 8 0-bits durchschieben? Mit Reset klappt es nicht.

Pin 10 (beim DIL-16)

von chieb (Gast)


Lesenswert?

Deine 1. Frage solltest Du verständlicher formulieren...

von Falk B. (falk)


Lesenswert?

@  fridulin007 (Gast)

>1. Es gibt allerding eine Sache die ich zum HC595 nicht verstehe. Wenn
>ich alle 8 Bits + Shiftregistertakt reinschiebe und direkt anschließend
>die 8 Takte des Speicherregisters vollziehe,

Warum 8? Zum Speichern braucht man nur EINEN Takt.

>die richtige Reihenfolge an. Wenn ich allerdings Shiftregistertakt und
>Speicherregistertakt durchs kompilieren und brennen voneinander trenne,

Durch Kompilieren und brennen trennst du es nicht, du musst schon dein 
Programm ändern.

>dann klappt es nicht.

Was klappt denn nicht?

>2. Kann man das Schieberegister komplett auf 0 setzen?

Mit dem Reset Eingang. Nutzt nur kaum einer, achtmal 0 reichschieben ist 
einfacher und braucht keine extra Pins.

> Oder muss ich
>jedesmal 8 0-bits durchschieben? Mit Reset klappt es nicht.

Doch. Lade mal alles 1 in dein Schieberegister, dann EIN Takt auf RCK 
(Pin 12), dann Reset und dann nochmal EIN Takt auf RCK.

von Falk B. (falk)


Lesenswert?

Reset mus LOW gehen, um aktiv zu werden.

von Bastler (Gast)


Lesenswert?

>Wenn ich allerdings Shiftregistertakt und Speicherregistertakt durchs 
>kompilieren und brennen voneinander trenne,

Was meinst du???

Du musst nur die 8 Bits reintakten und 1x Speichern (nicht 8x)

von Tom M. (tomm) Benutzerseite


Lesenswert?

Vielleicht hilft dir AVR-Tutorial: Schieberegister zum Verständnis?

von chieb (Gast)


Lesenswert?

>>2. Kann man das Schieberegister komplett auf 0 setzen? Oder muss ich
>>jedesmal 8 0-bits durchschieben? Mit Reset klappt es nicht.
>
>Pin 10 (beim DIL-16)

Vermutlich wird man auch noch einen RCK gebe müssen, wenn man auch
das Storage Register löscehn will.

>direkt anschließend
>die 8 Takte des Speicherregisters vollziehe

Das Speicherregister wird parallel aus dem Shiftreg geladen,
also nur ein Takt notwendig.

von fridulin007 (Gast)


Lesenswert?

Ersteinmal danke für eure Antworten,

Sorry, dass ich noch Definitionen nicht ordentlich präsentiere. 
Natürlich 1 Takt! :)

Ich habe laut Datasheet Pinvariationen/-funktionen gearbeitet.

Ich trenne beide Takte bewusst, weil im Sheet steht, dass dann das 
Shiftregister einen Puls vorraus läuft. Deshalb schiebe ich alle 8 Bits 
rein und setze dann gleich anschließend 8 H/L Pulse für den Speichertakt 
zur parallelen Ausgabe hinzu - was auch super funktioniert. Wenn ich die 
Biteingabe ins Shftregister compiliere/brenne und dann noch mal extra 
nur die 8 H/L Pulse für das Speicherregister starte (zusätzliches 
brennen), dann kommt gar nichts an.

zu 2. Im Sheet steht, wenn ich MR (Reset)auf Low + OE (Enable) auf High 
setze, dann sollte das Shiftregister gelöscht werden. Wird es aber nicht 
wenn ich OE wieder auf Low setze und erneut brenne, dann kommt die 
gewohnte LED-Konstellation.

Vielleicht ist das was ich verstehen will nur verbal zu klären. Ach was 
solls, es funktioniert.

Vielen Dank euch

von Karl H. (kbuchegg)


Lesenswert?

fridulin007 schrieb:

> Ich trenne beide Takte bewusst, weil im Sheet steht, dass dann das
> Shiftregister einen Puls vorraus läuft. Deshalb schiebe ich alle 8 Bits
> rein und setze dann gleich anschließend 8 H/L Pulse für den Speichertakt
> zur parallelen Ausgabe hinzu

Wieso 8?
Du brauchst nur 1

Schau dir doch mal das Funktionsprinzip hier
http://www.mikrocontroller.net/articles/AVR-Tutorial:_Schieberegister#Funktionsweise
an.

 - was auch super funktioniert. Wenn ich die
> Biteingabe ins Shftregister compiliere/brenne und dann noch mal extra
> nur die 8 H/L Pulse für das Speicherregister starte (zusätzliches
> brennen), dann kommt gar nichts an.

Deine Nomenklatur ist schauderhaft. Irgendwie schaffst du es, das 
absolut nicht klar ist, wovon du sprichst.

Wie - zusätzlich brennen?

Du hast 1 Programm. In diesem Programm werden die Takte ins SR getaktet 
und mit einem Puls an RCK auf die Ausgabestufe durchgeschaltet. Fertig. 
Was willst du da mit 2 Programmen?



> zu 2. Im Sheet steht, wenn ich MR (Reset)auf Low + OE (Enable) auf High
> setze, dann sollte das Shiftregister gelöscht werden. Wird es aber nicht
> wenn ich OE wieder auf Low setze und erneut brenne, dann kommt die
> gewohnte LED-Konstellation.

Eines nach dem anderen. Erst mal takten wir die Daten ins 
Schieberegister und bringen sie zur Anzeige.

von Neuling (Gast)


Lesenswert?

Hallo

das Funktionsprinzip hab ich mir schon vorher angeschaut und es ist mir 
klar. :-)

Ich habe den Shiftregistertakt und den Speicherregistertakt voneinander 
via Subroutine getrennt. Wenn ich beide in einem Programm ablaufen lasse 
klappt alles, aber wenn ich beide Abläufe voneinander trenne via 
kompilieren - sprich zwei Programme - dann klappt es nicht.

von Falk B. (falk)


Lesenswert?

Immer noc wirr du sprichst

von Eumel (Gast)


Lesenswert?

Neuling schrieb:
> das Funktionsprinzip hab ich mir schon vorher angeschaut und es ist mir
> klar. :-)

Dann erklär mal wie so ein Schieberegister funktioniert.

von Ein Gast (Gast)


Lesenswert?

Neuling schrieb:
> Wenn ich beide in einem Programm ablaufen lasse
> klappt alles, aber wenn ich beide Abläufe voneinander trenne via
> kompilieren - sprich zwei Programme - dann klappt es nicht.

Im µC gibt es nur ein Programm. Wenn du ein anderes Programm 
reinbrennst, ist das erste weg.

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.