www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Schieberegister Funktionalität


Autor: Basti (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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:
PORTA |= (1<<PA0);
PORTA &= ~(1<<PA0);
PORTA |= (1<<PA0);
PORTA &= ~(1<<PA0);
PORTA |= (1<<PA0);
PORTA &= ~(1<<PA0);
PORTA |= (1<<PA0);
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

Autor: Oliver Ju. (skriptkiddy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du hast den Takt vergessen.

Autor: Basti (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Welchen Takt meinst du?

Autor: Oliver Ju. (skriptkiddy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
RCK

Autor: Oliver Ju. (skriptkiddy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
und natürlich SCK

Autor: Oliver Ju. (skriptkiddy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Basti (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Ralli (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Basti (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Basti (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Ich (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Basti (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Basti (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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 :-)

Autor: Basti (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?)

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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-Tutori...

Autor: Basti (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Ich (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 :)

Autor: Simon K. (simon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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-Tutori...

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

Autor: Basti (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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:
void Schiebe_kmh(void)
{
  PORTA |= (1<<PA2);
  PORTA &= ~(1<<PA2);
}
void Schiebe_ll(void)
{
  PORTA |= (1<<PA6);
  PORTA &= ~(1<<PA6);
}
void Schiebe_kmh_aus(void)
{
  PORTA |= (1<<PA0);
  PORTA &= ~(1<<PA0);
}
void Schiebe_ll_aus(void)
{
  PORTA |= (1<<PA4);
  PORTA &= ~(1<<PA4);
}

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?

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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)

Autor: Basti (Gast)
Datum:

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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.