Forum: Mikrocontroller und Digitale Elektronik 4bits schnell hintereinander ausgeben


von Toni B. (Gast)


Lesenswert?

Hallo,
wenn ichs im Betreff nicht schreiben darf, dann hier ;-) ich bin
absoluter Anfänger. Habe jetzt das erste Jahr TG hinter mir und dort
wohl so halbwegs (hoffe ich zumindest) die Grundkenntnisse der
Digitaltechnik gelernt. Theorie habe ich jetzt satt g und will das
auch mal praktisch probieren. Das ganze soll eine Lichtsterung werden.


Ich gebe am LPT Port ein 4bit Signal aus, mit dem ich 16 lampen ein und
auschalten will. Wenns dann Funktioniert würde ich das ganze später
gerne erweitern mit ner 7Segment anzeige oder LCD ;-) je nachdem wie
ich das blicke g. Daher dachte ich so nen atmel hört sich dafür doch
gar nicht so schlecht an. Jetzt stell ich mir allerdings die Frage ob
ich das 4bit Signal im Atmel schon decodieren soll, oder ihn quasi nur
als zwischenspeicher einsetzten soll und von 74HC 4514 << diesem IC
dann decodieren lasse.
Hätte mir das dann so vorgestellt:
Ich will z.b: lampe 1 und 2 einschalten, über den Computer sende ich
dann 0001 0010 (irgend en "übernehmen signal" natürlich noch) der avr
gibt jetzt an den ausgabepins dann immer abwechselnd 0001 0010 aus (geh
ja mal davon aus dass das ganze relativ schnell hintereinander passiert
;-) ). Diese Ausgabe wird dann vom 74HC 4514 decodiert und schält den
entsprechenden Optokopller
(http://www.knollep.de/Hobbyelektronik/projekte/25/index.htm
 << die schlatung würd ich dann zum lampen schalten verwenden)
jetzt weiß ich nur nicht, ist das unbedingt die schönste Art so? So
würde der Ausgabepin ja immer kurz auf low schalten. :( ... aber würde
das den triac der am ende des ganzen steht überhaupt intersieren? Bzw.
würde ein Kondensator abhilfe schaffen? Wenn ja was für einer? ...

Oder ne ganz andere variante ... ich decodier das ganze schon im avr
... nur irgendwie empfinde ich das als Pinverschwendung (bräuchte dann
ja über 20 pins). g ... vor allem wenn ich später mal noch ne Anzeige
dazu machen will.

Oder wie macht man sowas "standartmäßig"? g

Vielen Dank schonmal.

Toni

von Niels H. (monarch)


Lesenswert?

Das geht einfacher. Es gibt Schieberegister mit s.g. Strobe (4094).
Diese Dinger sind kaskadierbar, also hintereinander Schaltbär.

http://www1.jaycar.com.au/images_uploaded/CD4094BC.PDF

Jedes dieser Teile hat 8 Ausgänge, die du seriell über 3
Steuerleitungen setzen bzw löschen kannst. Fuktionieren tut das
folgendermaszen:

Ausgangszustand: alle drei steuereingänge low

Zuest legst du den Pegel für Q8 an die DATA-Leitung.
Jetzt gibst du einen taktimpuls auf Clock (low->hi->low)
Nun legst du den Pegel für Q7 auf data.
taktimpuls.
Pegel für Q6 auf Data
taktimpuls
Pegel für Q5 auf Data
takt
Q4
takt
Q3
takt
...
...
Q1
takt.

Das Register ist nun mit den Daten gefüttert. Ein Low-High-Übergang auf
STROBE legt die gefütterten Daten auf die Ausgänge. Die Ausgänge bleiben
solange erhalten, bis neue Daten gefüttert wurden und erneut ein
low-high-Übergang auf strobe gegeben wurde.

Die Dinger sind beliebig oft kaskadierbar. Auf diese Art und Weise
kannst du dir mit 3 Steuereingängen beliebig viele ausgänge basteln.

Allaska?

von Toni B. (Gast)


Lesenswert?

vielen dank :)
doch kein avr g schade eigentlich ;-). Oder den davor hängen und ncoh
andere Scherze damit machen? g naja mal so einfach wie mgölich
anfangen.

Größten Teils ist mir das klar, nur wie ich da jetzt zwei
hintereinander hänge ist mir noch ein rätsel. Sollte ich dafür dann den
seriell port am PC nehmen? (oder ginge auch lpt?) Hast du ein Tut für
den Seriellen Port, wie ich den mit VB programmiere? Clock
logischerweise kein quarz oda? einfach vom VB-Programm steuern. Für was
ist aber Enable Output ... versteh ich das so richtig, dass ich den
einfach auf 5V lege?

Thx schonmal.

Toni

von Niels H. (monarch)


Lesenswert?

Du kannst die ganz einfach in Reihe schalten:

Sämtliche Register bekommen CLOCKS' und STROBES' jeweils das selbe
Signal. Das DATA-Signal von deinem PC bekommt aber nur das erste
Register. Das zweite Register bekommt sein Data-Signal aus dem Qs des
Ersten. Das Dritte register sein Data-Signal aus dem Qs des
zweiten...usw...

Mit dem OutputEnable-eingang kann man die Ausgänge auch bei bedarf auch
hochohmig schalten. Wenn dus nicht brauchst, legst du den Eingang
einfach auf VCC.

Das Ganze geht eigentlich nur über den LPT. Beim Seriellen Port lassen
sich die Ausgänge so nicht programmieren, das man sie hier verwerten
könnte. Ich hab auch ne IO.DLL, um über VB den Parport auch ansteuern
zu können.

von A.K. (Gast)


Lesenswert?

Warum sollte das seriell nicht gehen? Natürlich, die Pegel passen erst
einmal nicht. Abgesehen davon bietet die serielle Schnittstelle 2 frei
programmierbare Ausgänge (DTR,RTS), eine u.A. als Takt verwendbare
Leitung (TxD) und diverse Eingänge. Es ist natürlich nicht sonderlich
schnell. Hier wohl egal.

von Niels H. (monarch)


Lesenswert?

Genau da ist der wunde Punkt! Die 4094'er brauchen 3 Leitungen und ich
denke nicht, das man mit einem nicht Kontrollierbaren Takt zu
brauchbaren Ergebnissen kommt.

Ist im Grunde genommen auch wurscht. Gewünscht war LPT und so ist es
auch am Einfachsten.

von Toni B. (Gast)


Lesenswert?

So langsam kommt wieder Hoffnung in mir hoch,
dass das sogar für mich schaffbar ist ;-). Noch eine Sache +g ... durch
meine praktische Erfahrung = 0 ... habe ich immer so meine Probleme beim
Teile besteleln ... finde bei Reichelt nicht den IC mit der genau
gleichen bezeichnung ...
http://www.reichelt.de/inhalt.html?ACTION=6;LASTACTION=3;SORT=artikel.artnr;GRUPPE=A2237;WG=0;SUCHE=4094;ARTIKEL=74HCT%25204094;START=0;END=16;STATIC=0;FC=668;PROVID=0;TITEL=0;ARTIKELID=3401
<< kommt der aufs gleiche raus?

Toni

PS: LPT ist gut ;-) da findet man wenigstens gengu tuts dazu g

von Niels H. (monarch)


Lesenswert?

Nein, das ist die "teure" Highspeed-version ;)
Die normalen Register findest du in der IC-CMOS-Rubrik

Gib mal in die Suche "MOS 4094" ein. Die kostet nur 28ct. Besser ist
das.

von A.K. (Gast)


Lesenswert?

@niels: Was ist da nicht kontrollierbar? 0xFF über die serielle ausgeben
gibt genau eine Puls auf TxD.

von Niels H. (monarch)


Lesenswert?

A.K: Und woher weisst du, wann die Pegel-wechsel kommen um die
DATA-Leitungen zu bedienen?

Mag ja sein, das man das mit viel Tüftelei irgendwie irgendwann
hinbekommt, aber das ist wesentlich zu umständlich.

von Niels H. (monarch)


Lesenswert?

ähh..moment...wenn ich 0xFF auf dem seriellen port ausgebe, kommen doch
mindestens 8 Pulse?! (imho sinds sogar mit startbit 9)

von A.K. (Gast)


Lesenswert?

Ich bin einigermassen sicher, dass RTS/DTR-Control und Datenübertragung
im Treiber serialisiert werden. Andernfalls kann RTS nicht als
Transmittersteuerung verwendet werden, und manches Modem guckt nur blöd
wenn Daten ohne DTR kommen.

Aber wenn Du es drauf anlegst, kannst Du auch ein Monoflop an TxD
hängen, mit halber Bytelänge als Dauer. getriggert auf der negativen
Flanke von TxD. 0x00 ist dann eine 0 und 0xFF eine 1, an der hinteren
Flanke vom Monoflop. Ein bischen Hardware, aber aus so ziemlich jeder
Programmierumgebung und jedem Rechner toteinfach anzusteuern - auch
jenen die, wie heute üblich, keinen Parallelport mehr haben.

von A.K. (Gast)


Lesenswert?

@niels: setzen, Sechs ;-).

Asynchrone Übertragung hat im Gegensatz zu MFM/Manchester/... keinen
Takt im Signal. Bei 0xFF kommt erst mal H (Ruhe), dann 1 Takt lang L
als Startbit, dann 9 Takte lang H für Daten und Stopbit. Bei 0x00
sieht's ähnlich aus, nur dauert der L-Zustand da 9 Takte.

Wenn Du partout mehere Pulse haben willst, probier's mal mit 0xAA.

von Niels H. (monarch)


Lesenswert?

Ja, hast ja recht.

von Toni B. (Gast)


Lesenswert?

g noch en ganz intelligente Frage zum Schluss ...
Bei Reichelt find ich ja nur MOS 4094 << den hier ;-) ohne weitere
angaben. Im datenblatt steht dass es vier verschiedene Bauformen gibt
... nur welcher ist dann das den ich bei reichelt bestell? ... mit nem
smd dingens könnt ich net wirklich viel anfangen :/.

Toni

von A.K. (Gast)


Lesenswert?

Im Papierkatalog gibt's ein MOS 4094 und ein SMD 4094, also ist MOS
4094 die Version im DIP-Gehäuse.

von Toni B. (Gast)


Lesenswert?

So gehäust war wohl das richtige g ...
jetzt nur noch eine Frage, ich hoffe die letzte ;-) ...

Was ist der Unterschied der Outputs Qs und Q's ... Qs kommt ja das
signal für den zweiten 4094 dann ... Q's dann auf GND?

toni

von Unbekannter (Gast)


Lesenswert?

@Toni,

ich würde Dir nicht den "MOS 4094" empfehlen, sondern den 74HCT4094
wenn Du das Teil an den Druckerport anschließen willst.

Der Grund dafür: Die HCT-Reihe kommt mit TTL-kompatiblen
Eingangsspannungen zurecht, die HC oder auch alten "MOS"-Serien
nicht. D.h. wenn Du z.B. eine Druckerschnittstelle mit 5V/TTL-Pegel
oder 3.3V/CMOS-Pegel oder 5V/CMOS-PEGEL hast, funktioniert der HCT
garantiert immer.

Ausserdem ist HCT (und HC) deutlich robuster als "MOS". "MOS" kann
von einmal scharf anschauen schon kaputt gehen.

von Toni B. (Gast)


Lesenswert?

:( zu spät ... bestellung ist schon da und ich schon am basteln :/ hoffe
doch schwer dass es trotzdem irgendwie funktionieren wird.

Robus wäre zwar gut, bei meinen ersten Gehversuchen ... aber irgendwie
wirds schon hinhauen ;-) ....

Reichelt wird mir wohl wegen nem IC kein paket schicken g

nur g unterschied zwischen Q's und Qs?

Toni

von A.K. (Gast)


Lesenswert?

Qs ist direkt der Ausgang des letzten Flipflop Schieberegisters. Qs'
folgt diesem einen halben Takt später (andere Flanke). Verwendet man
für die Kaskadierung Qs' statt Qs, dann hat man auch bei langsamer
Taktflanke garantiert keine Stabilitätsprobleme.

von Toni B. (Gast)


Lesenswert?

So Schaltung habe ich nun aufgebaut,
und es scheint zu funktionieren. Dachte ich bis gestern zumindest.
Hab mir dann mal nen qbasic programm geschrieben zum testen, und leds
an die ausgänge gehängt.(Q0 - Q7) (über transitor und so)

das Programm macht nun folgendes:

Man gibt: z.B. 01101011 ein
jetzt gibt das Programm am ltp aus:
data: 0
clock: 1
clock: 0
data: 1
clock: 1
clock: 0
usw usw.
strobe: 1
strobe: 0

... soweit so gut
mach ich jetzt z.B.
11111111 << gehen alle leds an so wies sein soll
auch 000000 << funktioniert
zumindest meistens.

Auch sachen wie
11110000
00001111 funktionieren

aaaaber:
10000000 << da fängt das komische an ... jetzt geht irgend eine led an
... manchaml die vierte manchmal die fünfte

dann kanns passieren dass auf 0000000 gar nichts passiert.

mach ich nach
10000000 gleich 11110000 gehen erst mal alle aus,
beim nächsten versuch funktioniert es "meistens" ...

kurz gesagt alles seeeehr unlogisch ....
und ich versteh einfach net was da net geht :/
Hab ich den IC schon geschrottet? (aber warum funktioniert dann
manches?)

Hoffe auf euere Hilfe.

toni

von Simon K. (simon) Benutzerseite


Lesenswert?

Qs' ist doch invertiert ?! Oder leb ich da seit ein paar Jahren falsch?
;)

Keine Angst, die MOS4094 sind schon OK...

Und was ist das mit dem Seriellen Port ?! Wenn ihr den Port über seine
Register betreibt, kann man den genauso nutzen wie den
Parallel-port...

siehe hier
http://franksteinberg.de/progss.htm#serielleSS

von Toni B. (Gast)


Lesenswert?

args *g* net dein ernst oda?
Jetzt hab ich halt schonmal Qs' angelötet ;-) ... naja was solls ;-)
...

Zu meinem obigen Problem ... ich vermute jetzt dass es der IC war ...
hab mich überwunden und den zweiten und letzten draufgesteckt ...
obwohl ich den dann um einiges mehr in den händen rumgeknetet und
gebogen habe (blöde pins passen doch nie in den sockel g) scheint er
nun zu funktionieren jubel find die ausgabe zwar en bissel komisch
... bei 10000000 gibts dann rigendwo bei Q4 oda so high ;-) aber es
funktioniert!

Also vielen Dank :) mal schauen wie's weitergeht g

Toni

von A.K. (Gast)


Lesenswert?

"Qs' ist doch invertiert ?!"

Wenn das Datasheet nicht an mehreren Stellen gleichzeitig lügt, ist das
Signal ist das gleiche qie Qs, wird aber an der invertierten Taktflanke
gespeichert.

von Niels H. (monarch)


Lesenswert?

Wenn man selbst unsicher ist, über das was man tut, ists nie verkehrt,
anderen mal über die Schulter zu gucken.

http://www.haecksen.org/~sphaera/blinkenmini/schematic.gif

in der software zur ansteuerung würde ich noch pausen einbauen, damit
die signale eindeutig sind (cmos ist auch in der regel nicht so
schnell)

alle ausgänge 0 (ausgangszustand)
pause
data 1
pause
clock 1
pause
clock 0
pause
data 0
pause
clock 1
pause
clock 0
pause
strobe 1
pause
strobe 0
pause
.
.

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.