PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Schieberegister



danielson
14.09.2006, 20:12
Hi zusammen.
Ich habe im Informatikunterricht die Aufgabe bekommen, die Funktion als seriell/parallel -Wandler eines Schieberegisters zu demonstrieren und zu bauen. Den Schieberegister darf ich als IC nehmen. (74164)
1. Nun frage ich mich wie ich die Funktion am besten demonstriere. Ich könnte doch das Schieberegister, einen seriellen und einen parallelen Port nehmen und dann einfach die Bitfolge seriell ausgeben und parallel wieder einlesen und andersrum, oder?
2. Nur welche Pins an den Ports benutze ich?
3. Mir wurde auch gesagt, daß ich einen Spannungswandler (MAX232) benötige, da, wenn ich das richtig verstanden habe, die serielle Schnittstelle mit -15V bis -3 V für High und 3V bis 15V für Low arbeitet, ein TTL-Schieberegister aber mit 5V (High/low?) und 0V (High/low?). Und der MAX232 begrenzt dann einfach auf diese Werte?
4.Brauche ich dann wieder eine Verstärkung für die Ausgabe?
5.Was hat es mit dem Strobe auf sich?
Bin neu in der Digitaltechnik.

Wenn ihr mir ein wenig Starthilfe geben könntet wär ich sehr dankbar und würd mich danach mit einem ersten Schaltplan wieder an euch wenden.

Micro5
14.09.2006, 20:57
Servus

also ich kann die nicht bei allen Fragen helfen. Da ich aber schon einmal selbst so etwas gebaut habe, kann ich dir vielleicht sagen, was man so braucht. Wenn ich das richtig verstanden habe, möchtest du das Schieberegister über den Parallelport steuern, bzw. über Seriellport ausgeben und Parallelport einlesen. Ob das so funzt, kann ich dir nicht 100%ig sagen. Ich habe das Schieberegister über den Parallelport angesteuert. Soweit ich es noch weis, braucht man dazu folgende Leitungen: 1 Takt, der angibt wann ein bestimmter Zustand übernommen werden soll und eine Leitung, die den Zustand hat, der übernommen werden soll. Bei meinem IC (7495) musste man noch eine Spannung anlegen, mit der man bestimmt, ob man parallel oder seriell einlesen möchte. Mehr kann ich jetzt nicht sagen, da müsste ich genauer nachschauen.
Bei der seriellen Schnittstelle brauchtst du ein IC, das dir die Spannung wandelt, wie du schon sagt, da die Spannungspegel nicht für TTL "geeignet" sind. TTL arbeitet mit einer Spannung von High +5V und Low 0V.
Die Strobe Leitung wird bei der parallelen Schnittstelle normalerweise benutzt um Signale zu übernehmen. Beispielsweise hab ich auch schon mal einen Drucker angesteuert. Dieser muss ja wissen, wann er denn jetzt des Signal das anliegt übernehmen soll (er kann ja nicht einfach mal irgendwann einlesen).

Ich hoffe, ich konnte dir ein wenig helfen.

Gruß micro5

danielson
14.09.2006, 21:24
Ich hoffe, ich konnte dir ein wenig helfen.

Ja, danke schonmal!
Ich glaubi ich werd das so machen, daß ich nur über serial steuere und dann an den Ausgängen 4 LEDs anschließe. Damit könnte man dann, wenn ich mich nicht irre, eine kleine Laufschrift realiseren. Das demonstriert dann ja auch das der Schieberegler seriell einliest und parallel ausgibt.
Ich hab noch nicht ganz verstanden wofür man diesen Pegelwandler braucht. Kann ich die Spannung nicht ganz einfach mit einem Vorwiderstand drosseln? Oder kann der MAX232 auch gleichzeitig invertieren?

BlackDevil
14.09.2006, 21:25
gibts irgendwo einen artikel wie schieberegister funktionieren?

Würde mich interessieren zur Porteinsparung bei einer Matrixtastatur in Spalten/Zeilen

pongi
14.09.2006, 22:39
Kann ich die Spannung nicht ganz einfach mit einem Vorwiderstand drosseln? Oder kann der MAX232 auch gleichzeitig invertieren?

Also mit Widerstand geht das schwer.... Wie willst denn mit einem Widerstand aus -12V 0V machen? Die Lösung ist wirklich ein MAX232, der kann alles hin- und zurück (also senden-empfangen). Und wenn du es dir leichter machen willst, nimmst du ne MAX233, da sind schon die Kondensatoren integriert, die du ansonsten für MAX232 brauchen würdest (ist aber dementsprechend teurer). Für die Schaltung mit dem MAX kann ich dir diese (http://www.mikrocontroller.net/tutorial/uart) Seite (bzw Schaltplan) empfehlen.

Gruß

pongi

kalledom
14.09.2006, 22:56
Hallo danielson,
Du kennst Dich mit seriellen Schnittstellen und serieller Datenübertragung sicherlich nicht aus.
Das die Daten mit Pegeln +12V und -12V übertragen und z.B. mit einem MAX232 in TTL-Pegel (und umgekehrt) umgewandelt werden, wurde bereits beschrieben.
Auf der 'Empfängerseite' reicht ein MAX232 und 74xx164 noch lange nicht.
Dort wird u.A. ein Baudrate-Generator benötigt, der den Takt erzeugt und eine Logik, die das ankommende Start-Bit erkennt, die folgenden 8 Bits in das Schieberegister übernimmt und die Stop-Bits ignoriert. Alles in Allem recht aufwendig; dazu gab und gibt es komplette Bausteine: USART.
Du kannst stattdessen einen Mikro-Controller nehmen, was wahrscheinlich nicht zugelassen wird.
Begnüge Dich mit der Parallelschnittstelle, wie Micro5 es schon angedeutet hat, mit Takt-Bit, Daten-Bit und Übernahme-Bit (Strobe).
Von Laufschrift wirst Du erst mal nur träumen; freue Dich, wenn Du 8 LED's zum Leuchten bringst. Bis dahin bekommst Du noch genug Probleme.

danielson
15.09.2006, 15:11
Also ich hab mir das folgendermaßen gedacht: (die Kondensatoren der MAX232 ha ich nicht eingezeichnet).

http://img220.imageshack.us/img220/7206/bild4pw1.png

BlackDevil
15.09.2006, 15:36
kann mir jemand helfen? :)

danielson
15.09.2006, 16:03
@BlackDevil: Vielleicht hilft dir das:
http://www.elektronik-kompendium.de/sites/dig/0210211.htm

BlackDevil
15.09.2006, 21:04
das habe ich bereits gelesen

was mir helfen würde wären beispiele am AVR
Das ich seh wo ich meinen takt herbekomme (PWM?) und wie sich das dann verschiebt und so
über Schieberegister kann ich doch auch 7Segment anzeigen ansteuern oder?

Rofo88
15.09.2006, 21:41
@BlackDevil

Ja, mit nem Schieberegister kann mann sehr schön 7-Segment-Anzeigen aufbauen. PWM brauste nicht, Du legts das Bit, was Du senden willst, an die Datenleitung und ziehst den Takt kurz auf high(da recht schon ein Zyklus).


;
;zu Sendendes Zeichen liegt in R20


Ausgabe:ldi R16,7 ;Zahler für Auszugebene Bits laden
aus: clc ;Carry-Register löschen
ror R20 ;1 Bit ins Carry-Register schieben
brcc aus1 ;wenn 1 dann
cbi Portb,Daten ;Datenleitung auf LOH ziehen (ist invertiert)
aus1: sbi PortD,Takt ;Takt auf 1
cbi PortD,takt ;Takt auf 0
sbi PortB,Daten ;Datenleitung auf HIGH ziehen (ist invertiert)
dec r16 ;Zähler -1
breq aus2 ;wenn alle Bits abgearbeitet dann Sprung zu Ausgabe verlassen
rjmp aus ;wenn nicht alles Abgearbeitet dann Sprung zur nächsten Bit-Ausgabe
aus2: rcall pause ;Pause zwichen den Zeichen
ret ;Unterprogramm verlassen

BlackDevil
15.09.2006, 22:02
programmierung ist weniger das problem glaube ich

Beispiel: Ich habe eine Tastatur, wie der Nummernblock
drücke ich die 7 dann startet mein µC die subroutine 7
In der subroutine befindet sich eine for schleife die mit druck auf eine andere taste abgebrochen wird
JETZ müsste ich überlegen wie ich das schieberegister so ansteuer das genau eine sieben erscheint und er nich durch zählt :D

Bin das grade im digitalsimulator am überlegen ...

Rofo88
15.09.2006, 22:09
Sory, ich verstehe dich nicht ganz. Du willst das er nur ne 7 Anzeigt??

BlackDevil
15.09.2006, 22:45
0123456789
das soller anzeigen
Aus ner Matrix Tastatur (Spalten und Zeilen)

Drück ich die z.B. die sieben, nun siehe oben

Denke das die ansteuerung über sieben segment anzeige sinniger ist als mit transistoren und treiber ic?

kalledom
15.09.2006, 23:24
@BlackDevil
geh mal zu diesem Link (http://www.strippenstrolch.de/forum/board_entry.php?id=3114), da geht es erst um Parallel-Ein-/Ausgabe und dann um pin-sparende Seriell-Ein-/Ausgabe.

RedBaron
16.09.2006, 01:15
Hallo,

mach's doch zunächst einfach einmal mit einem Schalter am Serial-Input und einem Taster an Clock. Wenn du den Status des Serial-Input am mit einer 9.LED anzeigst, wirst du sehen, dass deren Wert in das erste Register übernommen wird und alle anderen eins weiter hüpfen.

Wenn du unbedingt einen PC anschließen willst, nimm zwei Leitungen von der prallelen Schnittstelle (eine für Clock und eine für Data). Die haben schon die richtigen Pegel (5V). Und man kann die so langsam programieren, dass man auch etwas sieht. (Clear könnte man auch noch belegen).

Gruß Red Baron

danielson
16.09.2006, 16:24
Hallo,

mach's doch zunächst einfach einmal mit einem Schalter am Serial-Input und einem Taster an Clock. Wenn du den Status des Serial-Input am mit einer 9.LED anzeigst, wirst du sehen, dass deren Wert in das erste Register übernommen wird und alle anderen eins weiter hüpfen.

Wenn du unbedingt einen PC anschließen willst, nimm zwei Leitungen von der prallelen Schnittstelle (eine für Clock und eine für Data). Die haben schon die richtigen Pegel (5V). Und man kann die so langsam programieren, dass man auch etwas sieht. (Clear könnte man auch noch belegen).

Gruß Red Baron

Ja nur, beschäftigen wir uns in der ganzen Unterrichtsreihe mit der seriellen Schnittstelle. Würd das so nicht klasppen wie in meiner Zeichnung oben?

PICture
16.09.2006, 17:25
Hallo!

Leider nicht, weil, so wie der kalledom beschrieben hat, es nicht so einfach ist.

Die Komunikation mit der seriellen Schnitstelle des PCs benötigt sehr genauen und stabilen (Quartz) Taktgenerator und ohne ziemlich kompliezierter Schaltung mit mehreren ICs oder einem Mikrokontroller mit USART geht es nicht.

MfG

danielson
16.09.2006, 17:37
Würds denn funktionieren wenn ich einfach die serielle durch die parallele Schnittstelle ersetze?

PICture
16.09.2006, 17:51
Wenn Du eine paralelle Schnitstelle verwendest und die MAXs weglässt, dann wird es mit ensprechendem Programm funktionieren.

Wenn der 74164 CMOS IC ist, müssen die Pins 1 und 2 zusammen verbunden sein.

danielson
16.09.2006, 17:56
Nein ist TTL. Welche Pins nehm ich denn von der parallelen Schnittstelle? Und brauch ich da auch female?
Versteh ich das richtig, daß ich die parallele Schnittstelle verwende, die Daten jedoch seriell gesendet werden?

Und sorry falls ich nerve, hab aber noch ein Verständnisproblem:
Ich hab mir das so gedacht, das ich die Software so programmiere, daß sie ich über seriell die Daten ausgebe, 8 Taktimpulse gebe, und dann ein mal den Strobe. Eigentlich so wie ihrs mit parallel beschriben habt. Wo ist da der Unterschied? 8-[

PICture
16.09.2006, 18:08
Ich würde die Pins nehmen die am einfachsten zu programmieren sind. Ich habe früher die paralelle Schnitschtelle unter DOS in ASM programmiert und habe k.A. wie es unter Windows geht.

Nein. Die paralelle Schnitstelle ist selber female (Buchse) und zum Anschluss an sie wird male (Stecker) benötigt.

Ja, Du verstehst das richtig.

PICture
16.09.2006, 18:18
Der Unterschied ist (wie der Name der Schnittstelle es beschreibt), dass bei der paralellen werden 8 Datenbits mit einem Strobe und bei serieller 8 Databits synchron mit bestimmter Baudrate ohne Strobe gesendet.

danielson
16.09.2006, 18:20
Ah ich glaub ich verstehe. Bin davon ausgegangen, daß seriell nur die Daten seriell ausgiebt, aber parallel zu Strobe, Takt etc.

PICture
16.09.2006, 18:24
Es kann nichts paralell gesendet werden, da nur eine Leitung in einer Richtung benutzt wird.

Durch synchronishes Senden ist der Takt (clock) in der Mitte des Datenbits "versteckt".

danielson
16.09.2006, 18:31
Und parallel, gibt den Takt einzeln und parallel zu den Datenströmen aus richtig? Kann ich über die parallele Schnittstelle auch den Schieberegister mit Vcc=5V versorgen?

PICture
16.09.2006, 18:48
Bei paraleller Übertragung wird zuerst das Byte (8 Bit) an die Datenleitungen gelegt und danach Strobe erzeugt, das benötigt mindestens 9 Leitungen.

Den Schiberegister selber kannst Du wahrscheinlich mit 5V versorgen, aber die dranhängenden LEDs leider nicht, da die LPT nur kleinen Strom liefern kann. Früher waren es sogar OC Ausgänge.

Da Du die COM nur für Demozwecke brauchst und da sind sogar (hoffentlich) Übertragungsferler zulässig, werde ich bis morgen versuchen eine eifachste Schaltung für Dich zu skizzieren. Was für eine Logic Familie und Baudrate möchtest Du benutzen ?

danielson
16.09.2006, 19:49
Wow, das ist nett.


Was für eine Logic Familie und Baudrate möchtest Du benutzen ?
Das ist egal. Es sollte mit Delphi und port.dll programmierbar sein.

PICture
16.09.2006, 21:28
So stelle ich mir die einfachste Schaltung für Dich vor:

1 1 1 1
3 4 5 6 0 1 2 3
| | | | | | | |
1.---------------.
TX >-----+----------------------------| |
| C1 ___ R1 +-| 164 |
| +--|___|--+ |8'---------------'
| ||1| __ | __ |
| +-||-+-|& | 9+-|& | |
| | ||2/-| |6 10+-| |8 |
| === 4+-|13|o---+-|13|o-+
| GND 5+-|__| 12+-|__|
| | 13
| | FGEN
| +---------------+ Wenn F = Baudrate
| VCC VCC |
| + + | dann T = 1 / F
| | . | |
| .-. .-. |
| | |R2 | |R3 |
| | | | | |
| '-' '-' |
| | ||C2 | ||C3 |
| +-||-+ +-||-+ |
| | || | | || | |
| 15| |14 7| |6 |
| .------. .------. |
| | |--+ | |-+
| 1| 123 |13| 9| 123 |5
+--o | +--o |
'------' '------'
T1=1,5T T2=8T

Als 164 würde ich standart TTL 74164 nehmen, da der direkt die LEDs steuern kann. Die zwei übrigen ICs können LS sein.

Der FGEN sollte die Baudrate generieren und die Monoflops entsprechende Verzögerungen (T1 und T2) erzeugen.

MfG :)

danielson
16.09.2006, 21:31
Danke!So ganz steig ich da noch nicht durch, werds jetz erstmal studiieren :)

PICture
16.09.2006, 21:34
Um das übersichtlicher zu gestalten, habe ich die Vcc und Gnd für die ICs nicht skizziert. Wenn Du Fragen hast, bitte ! :)