Forum: Mikrocontroller und Digitale Elektronik Schieberegister SN74HC165 mit PIC16F88


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Jonas (Gast)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,
ich beschäftige mich seit kurzem mit PIC-Mikrocontrollern, hauptsächlich 
mit dem PIC16F88. Als Programmiersoftware nutze ich den CCS-C-Compiler 
und gebrannt wird mit dem ICD-U64 von CCS. Mein bisheriger Wissensstand 
beschränkt sich weitgehend auf das Ansteuern von LEDs und das Erfassen 
von Tastersignalen.
Nun möchte ich gerne den nächsten kleinen Schritt machen und eine 
7-Segment-Anzeige per Schieberegister (SN74HC165) ansteuern. Mein 
Schaltplan (im Anhang) sollte soweit richtig sein, allerdings habe ich 
Probleme mit der Programmierung.

Dem Datenblatt des Schieberegisters (Auszug im Anhang) entnehme ich, 
dass der auf SER anliegende Wert (high oder low bzw. 1 oder 0) auf den 
Platz A übernommen wird (und der Wert von A auf B weitergereicht wird 
etc.), wenn SH/LD high ist, CLK INH low ist und ein positiver Impuls auf 
CLK erfolgt.
Um die gespeicherten Werte dann auf die jeweiligen Ausgänge des 
Registers zu legen, muss scheinbar SH/LD auf low geschaltet werden. Sehe 
ich das soweit richtig?

Nun zu meinem Code:
Auf die Resultate meiner Programmierversuche möchte ich erstmal nur 
ungerne genauer eingehen, da dies hier vielleicht zu weit führen würde.
Grundsätzlich habe ich den Code so realisiert:

//Ausgangszustände festlegen
output_high(pin_a1);          //SH/LD high
output_low(pin_b5);           //CLK low
output_high(pin_b4);         //SER erstmal high, damit was angezeigt 
wird
output_low(pin_a3);          //CLK INH low
//Die ersten beiden Register mit 1 füllen
//B
output_high(pin_b5);
delay_ms(1);
output_low(pin_b5);
delay_ms(1);
//A
output_high(pin_b5);
delay_ms(1);
output_low(pin_b5);
delay_ms(1);
//Werte auf Ausgänge legen
output_low(pin_a1);            //SH/LD low

Resultat dieses Codes ist gar keine Anzeige. Da in dem Schaltbild im 
Datenblatt der Eingang SH/LD negiert ist (oder nicht?), habe ich SH/LD 
auch mal umgekehrt betrieben, also am Anfang auf low, später auf high. 
Dann leuchtet die Anzeige d.

Nach endlosen Selbstversuchen brauche ich jetzt dringend Hilfe, da ich 
einfach nicht weiterkommen. Ist meine Art, einen positiven Impuls auf 
CLK zu erzeugen überhaupt richtig(low auf high - eine Wartezeit - high 
auf low)?

Vielen Dank im Voraus!

von John (Gast)


Lesenswert?

Hallo Jonas,
Das 74HC165 ist parallel in serial out. A-H sind Eingänge.

von San L. (zwillingsfreunde)


Lesenswert?

Hallo Jonas

Das Problem ist simpel: Du verstehst das Schieberegister falsch.

Hier eine Stelle aus dem Datenblatt:
The’ HC165 devices are 8-bit parallel-load shift registers that, when 
clocked, shift the data toward a serial (QH) output.

Die PIN's A - H sind keine Ausgänge, sondern Eingänge. Diese können 
Parallel gleichzeitig eingelesen werden und danach werden die Daten 
Seriell über QH ausgegeben.

Seite 2 des Datasheets verdeutlicht dir das ganze mit einem Diagramm:
http://www.ti.com/lit/ds/symlink/sn74hc165.pdf

Ausserdem, wieso steuerst du die 7-Segment Anzeige mit einem 
Schieberegister an? Geht es dir darum, die Segmentanzeige anzusteuern 
oder die Schieberegister kennen zu lernen?
Falls es dir um das Segment geht: Dafür gibts passendere Bausteine als 
ein Schieberegister! Da ich aber vermute, dass es dir wohl um das 
Schieberegister an sich geht, ist das schon in Ordnung... vorausgesetzt 
es wäre ein Schieberegister.

Wünsche dir trotzdem noch viel Erfolg beim weiteren Basteln! Hoffe 
konnte dir ein bisschen helfen. Bei weitere Fragen einfach schreiben. =)

von Max H. (hartl192)


Lesenswert?

Nimm ein 74HC595, dein SR ist parallel In. Porterweiterung mit SPI

von John (Gast)


Lesenswert?

Du brauchst ein 74HC164.

von Jonas (Gast)


Lesenswert?

Ok alles klar vielen Dank! Dämlicher Fehler aber wieder was gelernt.

@San Lue: Mir geht es sowohl um das Schieberegister als auch um die 
7-Segmentanzeige. Welche Bausteine wären das denn, um die Anzeige 
anzusteuern? Habe eine mit vier Stellen, allerdings würde es mir auch 
erstmal reichen nur eine zum Leuchten zu bringen.

Dann werde ich mir mal den SN74HC595N bestellen:
http://www.conrad.de/ce/de/product/1016774/Logik-IC-SN74HC595N-PDIP-16-Texas-Instruments?ref=searchDetail
Ist ja jetzt der Richtige oder? Der Function Table sieht auch schon 
direkt weitaus passender aus ;-)
Wäre dann aber meine Art des Codes in Ordnung? Reicht eine ms als 
positiver Impuls oder ist das zu kurz?

von San L. (zwillingsfreunde)


Lesenswert?

Jonas schrieb:
> Ist ja jetzt der Richtige oder?

Jawohl. Serial In, Parallel Out. Genau das was du brauchst. :)

Jonas schrieb:
> Wäre dann aber meine Art des Codes in Ordnung? Reicht eine ms als
> positiver Impuls oder ist das zu kurz?

Solche Informationen kannst du dem Datenblatt entnehmen. Ca. auf der 
vierten oder fünften Seite sind Tabellen und Grafiken, welche dir 
Informationen zu der Dauer eines Signals liefern.

Das ganze dürfte allerdings kein Problem sein. Denke, du kannst da 1 ms 
oder 1 Sekunde nehmen, der Baustein ist vermutlich nicht auf eine 
bestimmte Geschwindigkeit angewiesen. (Keine Garantie bei den Angaben, 
war jetzt aus dem Bauch heraus.)

Jonas schrieb:
> Welche Bausteine wären das denn, um die Anzeige
> anzusteuern?

7-Segment Anzeigen werden meist mit einem BCD Code angesteuert. Dieser 
wird danach mit einem BCD-to-7-Segment Wandler umgesetzt. Ein mögliches 
Beispiel hierfür wäre der HCT4511
Datenblatt:
http://pdf1.alldatasheet.com/datasheet-pdf/view/15627/PHILIPS/HCT4511.html

Deine Art die Anzeige mit einem Shift Register anzusteuern ist aber 
nicht falsch! Nur wird sie halt weniger oft gebraucht.

von Karl H. (kbuchegg) (Moderator)


Lesenswert?

San Lue schrieb:

> Deine Art die Anzeige mit einem Shift Register anzusteuern ist aber
> nicht falsch! Nur wird sie halt weniger oft gebraucht.

Das (die Sache mit dem weniger oft gebraucht), würde ich jetzt nicht 
unterschreiben. Gerade im Zusammenspiel mit µC bieten derartige Decoder 
eigentlich kaum Vorteile, so dass man die eben meist NICHT mit so einem 
Decoder ansteuert. Ausser vielleicht in dem relativ seltenen Sonderfall, 
dass man wirklich nur eine einzige Anzeigenstelle braucht, man genau 4 
µC-Pins frei hat, die ansonsten sowieso nichts zu tun hätten und auch 
tatsächlich nichts anderes als nur die Ziffern von 0 bis 9 angezeigt 
werden sollen (bzw. gar nichts). In dem Moment, in dem man aber zb 
andeuten will, dass irgendein Prozess im Gange ist, und sich der Kunde 
da ein '-' auf der Anzeige wünscht, ist man mit solchen Decodern der 
Angeschmierte. D.h. mit Ansteuerung durch Schieberegister benötigt man 
genauso ein externes IC, braucht nur 3 Pins anstatt 4 und ist 
gleichzeitig auch noch flexibler in dem was man anzeigen möchte. Der 
Programmaufwand ist zwar etwas höher, aber so wild ist das auch wieder 
nicht.

: Bearbeitet durch Moderator
von Max H. (hartl192)


Lesenswert?

Jonas schrieb:
> Reicht eine ms als
> positiver Impuls oder ist das zu kurz?
1ms: Der 74HC595 langweilt sich. Mit deinem PIC kannst du gar keine 
Signale erzeugen die für den 74HC595 zu schnell sind. Außer du setzt SCK 
genau gleichzeitig (in gleichen ASM Befehl) mit einer Änderung an SER 
aus High.

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]
  • [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.