Forum: Mikrocontroller und Digitale Elektronik Schieberegister Funktionalität


von Basti (Gast)


Lesenswert?

Hallo Leute,

ich habe vor mir an meinen Atmega32 zur LED Steuerung ein 
Schieberegister dazuzubauen. Damit möchte ich dann LEDs schalten.
Nun bin ich mir aber noch unsicher wie genau das mit den Registern 
funktioniert.

Stimmt es so wie ich es mir vorstelle:
1
PORTA |= (1<<PA0);
2
PORTA &= ~(1<<PA0);
3
PORTA |= (1<<PA0);
4
PORTA &= ~(1<<PA0);
5
PORTA |= (1<<PA0);
6
PORTA &= ~(1<<PA0);
7
PORTA |= (1<<PA0);
8
PORTA &= ~(1<<PA0);
Ich gebe auf dem MC folgende Befehle aus, welche den PA0 am PORTA woran 
der SER des Register hängt acht mal abwechselnd 1 und 0 schalten. Reicht 
das schon für das Schieberegister, dass dann im Schieberegister die 
Ausgänge folgendermaßen aussehen:
QA: 0
QB: 1
QC: 0
QD: 1
QE: 0
QF: 1
QG: 0
QH: 1

Stimmt das so wie ich meine?

Hoffe ihr könnt mir helfen.

Lg Basti

von Oliver J. (skriptkiddy)


Lesenswert?

Du hast den Takt vergessen.

von Basti (Gast)


Lesenswert?

Welchen Takt meinst du?

von Oliver J. (skriptkiddy)


Lesenswert?

RCK

von Oliver J. (skriptkiddy)


Lesenswert?

und natürlich SCK

von Oliver J. (skriptkiddy)


Lesenswert?


von Basti (Gast)


Lesenswert?

Daran habe ich mich schon gerichtet.
Bloß dort weiß ich noch nicht wo genau ich die 0-1-0 Pulse senden muss.
Nach jedem Bit einmal ein 0-1-0 Puls an SCK und nach allem Bits ein RCK 
0-1-0 Puls oder nach allem Bits beide 0-1-0 Pulse?

von Ralli (Gast)


Lesenswert?

Ein Schieberegister hat einen Eingang Serial-In für die Daten,
die man durch-schieben will, und einen Takt-Eingang (oder CLK),
mit dessen Aktivierung man dem Schieberegister mitteilt, dass es
das Eingangssignal in seine erste Stufe übernimmt und alle Bits,
die schon drin sind, um ein Bit weiterschiebt.

Es gibt auch welche, die noch mehr können...

Wenn du das nicht weißt, kann sich keiner erklären, wie du selbst
auf die Idee gekommen bist, für deine Aufgabenstellung ein
Schieberegister zu benutzen.

Wenn du es nur irgendwo aufgeschnappt hast, lass dir einfach sagen:
Ein Schieberegister braucht einen Anschluss für Daten und einen für
den Takt - und wenn du die nicht sinnvoll bedienst, funktioniert es
einfach nicht, wie gewünscht.

Für Hilfestellungen solltest du schon mal den Typ deines
Schieberegisters mitteilen.

von Karl H. (kbuchegg)


Lesenswert?

Basti schrieb:
> Daran habe ich mich schon gerichtet.

Welchen Teil der Diagramme verstehst du nicht?

> Bloß dort weiß ich noch nicht wo genau ich die 0-1-0 Pulse senden muss.
> Nach jedem Bit einmal ein 0-1-0 Puls an SCK und nach allem Bits ein RCK
> 0-1-0 Puls

Genau so.
Ich dachte eigentlich, das wäre im Tutorial ziemlich eindeutig.

von Basti (Gast)


Lesenswert?

@Ralli: Ich werde eines aus der 74er Serie nehmen. Kommt ganz drauf an 
welches bei Pollin verfügbar ist, da ich alles bei einem Shop bestellen 
will.

Ah Ok danke! Ich habe mir das Tutorial nochmals durchgelesen und nun ist 
es mir klar geworden:

Ein Datenbit
Darauf ein 0-1-0 Puls (SCK)
Wieder Datenbit
0-1-0 Puls (SCK)
...
...
Letztes Datenbit
0-1-0 Puls (SCK)
0-1-0 Puls (RCK)

Stimmt soweit oder?

Danke!

von Karl H. (kbuchegg)


Lesenswert?

Basti schrieb:
> @Ralli: Ich werde eines aus der 74er Serie nehmen.

> Stimmt soweit oder?

Kommt aufs Schieberegister an. Solange du dich nicht auf einen Typ 
geeinigt hast, kann man dazu nur wenig sagen. Im Prinzip ja, aber die 
PUlse könnten auch umgekehrt (1 - 0 - 1) sein, bzw. kein Mensch sagt, 
dass jedes Schieberegister einen RCK hat.

Aber für ein 595 stimmt das schon so.

von Basti (Gast)


Lesenswert?

AH ok Danke!

Habe nun bei Conrad ein Schieberegister mit der Bezeichnung "LOGIK-IC 
M74HC595B1R STM" und der Bestellnummer "155762 - 62" gefunden. Dies 
dürfte doch ein normales 74HC595 sein oder?

von Karl H. (kbuchegg)


Lesenswert?

Basti schrieb:
> AH ok Danke!
>
> Habe nun bei Conrad ein Schieberegister mit der Bezeichnung "LOGIK-IC
> M74HC595B1R STM" und der Bestellnummer "155762 - 62" gefunden. Dies
> dürfte doch ein normales 74HC595 sein oder?

Ja

von Ich (Gast)


Lesenswert?

Bedienung des HC595:

1. Daten (0 oder 1) an SER
2. SCK auf 1
3. SCK auf 0
4. Schon Acht Bits gesendet? Nein => Schritt 1.
5. RCK auf 1
6. RCK auf 0

Du musst zuerst das SIgnal für QH senden, dann QG, QF, ..., bis QA.

Nach Schritt 6. stehen die Daten an den Ausgängen zur Verfügung.

von Basti (Gast)


Lesenswert?

Ja genau so dachte ich mir das.
Was ist wenn ich RCK 1-0 sende aber noch nicht acht Bits an SER gesendet 
habe?
Würde das auch gehen?

von Karl H. (kbuchegg)


Lesenswert?

Basti schrieb:
> Ja genau so dachte ich mir das.
> Was ist wenn ich RCK 1-0 sende aber noch nicht acht Bits an SER gesendet
> habe?

Wurst.
Die Schieberegisterkette hat ja auf jeden Fall einen Inhalt. Der wird 
durchgeschaltet.

Bei einem Puls an RCK wird der momentane Inhalt der Schiebekette in die 
Ausgängstreiber übernommen. Ob du die Schiebekette jetzt 1 mal geschoben 
hast oder 5 mal oder 12 mal, interessiert das IC nicht.

> Würde das auch gehen?

Sicher. Wer will dich daran hindern?

von Basti (Gast)


Lesenswert?

Ah ok das wollte ich wissen.
Ich dachte, dass er vielleicht mitzählt oder ich weiß ja nicht ;)
Jetzt schon :)

Ich bedanke mich bei euch allem die mir geholfen haben.

von Karl H. (kbuchegg)


Lesenswert?

Basti schrieb:
> Ah ok das wollte ich wissen.
> Ich dachte, dass er vielleicht mitzählt oder ich weiß ja nicht ;)

:-)
Auf dieser primitiven Ebene sind die IC noch kooperativ.
Du legst an einen Pin einen Pegel an und das IC schaltet intern 
entsprechend der Pin-Beschreibung (sind ja nur ein paar Gatter intern).

Das rumärgern mit irgendwelchen Mechanismen kommt dann erst ein paar 
logische Ebenen darüber, sobald µC ins Spiel kommen :-)

von Basti (Gast)


Lesenswert?

Ich werde die Impulse über einen µC senden ;)

Jetzt habe ich noch eine Frage:
Ich möchte an den Register dann LEDs mit 20mA anschließen.
Da aber das Register max. 70mA insgesamt aushält würden nur die 
folgenden
Möglichkeiten bestehen:
-Low Current LEDs verwenden (fällt wegen, da ich helle LEDs brauche)
-20mA LED nur mit max. 10mA "füttern" (geht das?)
- oder irgendeinen Verstärker dazwischenschalten (Gibt es sowas?)

von Karl H. (kbuchegg)


Lesenswert?

Basti schrieb:


> -Low Current LEDs verwenden (fällt wegen, da ich helle LEDs brauche)

Auch Low-Current Leds sind hell. Sie brauchen nur weniger Strom

> -20mA LED nur mit max. 10mA "füttern" (geht das?)

Klar geht das.

> - oder irgendeinen Verstärker dazwischenschalten (Gibt es sowas?)

Auch das geht. Es gibt sogar eine Variante vom 595, die bereits mehr 
Strom treiben kann (aber ich kann mir die Bezeichnung nicht merken :-)

oder aber Variante 4
http://www.mikrocontroller.net/articles/AVR-Tutorial:_Schieberegister#Acht_LEDs_mit_je_20mA_pro_Schieberegister

von Basti (Gast)


Lesenswert?

Okay das mit den LEDs schau ich nochmal.
Wenn ich nur 10mA "fütter" sind sie dann nur halb so hell oder wie wirkt 
sich das aus?
Wenn ich eine Betriebsspannung von 5V habe und die LED 2,1V benötigt und 
ich auf 10mA runterkommen will dann brauch ich einen Widerstand von 320 
Ohm oder?

von Karl H. (kbuchegg)


Lesenswert?

Basti schrieb:
> Okay das mit den LEDs schau ich nochmal.
> Wenn ich nur 10mA "fütter" sind sie dann nur halb so hell oder wie wirkt
> sich das aus?

Kommt auf die LED an.
Der Abfall ist aber weniger als halb so hell. Eher: verminderte 
Helligkeit aber immer noch hell.
Wir haben eine logarithmische Kennlinie im Auge, ähnlich wie bei 
Geräuschen. Am Anfang nimmt die visuelle Helligkeit bei nur geringfügig 
gesteiegerten mA an der LED enorm zu, aber dann wirds immer weniger.

> Wenn ich eine Betriebsspannung von 5V habe und die LED 2,1V benötigt und
> ich auf 10mA runterkommen will dann brauch ich einen Widerstand von 320
> Ohm oder?

  ( 5 - 2.1 ) / 0.010 = 2.9 / 0.01 = 290

330 Ohm ist ok. Die meisten LED leuchten damit noch anständig

von Ich (Gast)


Lesenswert?

Zwischen 20mA und 10mA ist in der Helligkeit wenig Unterschied, auch 5mA 
sind ausreichend. Für 1-2mA brauchst du Low-Current-LEDs, die normalen 
sind sonst zu dunkel.
Also 10mA bei 8 LEDs, da bleibst du noch weit unter der 70mA-Grenze des 
ICs :)

von Simon K. (simon) Benutzerseite


Lesenswert?

Karl heinz Buchegger schrieb:
> Auch das geht. Es gibt sogar eine Variante vom 595, die bereits mehr
> Strom treiben kann (aber ich kann mir die Bezeichnung nicht merken :-)
TPIC6B595.
Leider schlecht zu bekommen.
Es gibt auch noch TL5922. Dazu gibt es auch Artikel in der 
Artikelsammlung. Leider auch relativ teuer.

> oder aber Variante 4
> 
http://www.mikrocontroller.net/articles/AVR-Tutorial:_Schieberegister#Acht_LEDs_mit_je_20mA_pro_Schieberegister

Diese Variante habe ich selber aufgebaut gerade. Die funktioniert sehr 
gut. Die Schieberegister werden etwas mehr als Handwarm, wenn alle LEDs 
angeschaltet sind.
Ich habe zwar keine 8 einzelnen LEDs dranangeschaltet, sondern 4 2-Pin 
DUO LEDs, die ich damit umpolen kann.
Habe mal gemessen, Es sind ca. 2V an der LED. 4,3V direkt zwischen den 
Ausgängen, wo LED und Vorwiderstand zwischen hängt. Also  noch 2,3V an 
180R Abfall. Macht 12mA.

Also 0,7V Drop an zwei internen Transistoren bei 12mA. Und das für ein 
billiges 595-Schieberegister, was im schmalen SMD-Gehäuse nicht mal viel 
Platz verbraucht

von Basti (Gast)


Lesenswert?

Ja schon. Ich werd mir jetz solche 20mA LEDs holen und die dann einfach 
mit einem Widerstand betreiben, dass sie nur noch 10mA oder weniger 
haben. Da ich die LEDs an 2 verschiedenen Stellen mit verschiedener 
Leuchthelle haben will werde ich 2 verschiedene Widerstände kaufen. (100 
Stück für 1,20 € sind ja nicht gerade viel. Die kann man ja immer mal 
gebrauchen)

Habe mir nun für das Schieberegister Funktionen gebastelt:
1
void Schiebe_kmh(void)
2
{
3
  PORTA |= (1<<PA2);
4
  PORTA &= ~(1<<PA2);
5
}
6
void Schiebe_ll(void)
7
{
8
  PORTA |= (1<<PA6);
9
  PORTA &= ~(1<<PA6);
10
}
11
void Schiebe_kmh_aus(void)
12
{
13
  PORTA |= (1<<PA0);
14
  PORTA &= ~(1<<PA0);
15
}
16
void Schiebe_ll_aus(void)
17
{
18
  PORTA |= (1<<PA4);
19
  PORTA &= ~(1<<PA4);
20
}

An PA2 ist SCK von der ersten Schieberegisterreihe.
An PA6 -----"--------- zweiten ---------"---------.
An PA0 -"- RCK ---"--- ersten ----------"---------.
An PA4 -----"--------- zweiten ---------"---------.
Und SCL muss dauerhaft auf 1 liegen.
Könnte man das Schieberegister einfach ausschalten indem man SCL einfach 
auf 0 liegt oder?

von Karl H. (kbuchegg)


Lesenswert?

Basti schrieb:

> Habe mir nun für das Schieberegister Funktionen gebastelt:

Tu dir selbst einen Gefallen und mach dir ein paar #define für die Port 
und Pindefinitonen.
In 2 Wochen drehst du nämlich durch, wenns nicht funktioniert und du 
ständig nachgrübeln musst: war PA2 jetzt Daten oder doch Clock, welcher 
Clock wars denn etc ...

> Und SCL muss dauerhaft auf 1 liegen.
> Könnte man das Schieberegister einfach ausschalten indem man SCL einfach
> auf 0 liegt oder?

Mit SCL auf 0 löscht du die Schiebekette. D.h. sie wird auf lauter 0 
Bits gesetzt. Das ist was anders als 'ausschalten'. Dazu wäre der G-Pin 
gut.

(Manchmal frag ich mich, wozu das im Tutorial eigentlich ziemlich 
ausführlich abgehandelt wird)

von Basti (Gast)


Lesenswert?

Ok Danke.
Ja stimmt sorry hab ich im Tut überlesen..
Habe mir nun die 74hc595 über reichelt bestellt.

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.