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!
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. =)
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?
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.
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 User
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.