hallo liebe uC-freunde,
ich hab hier ein kleines problem.
ich hab mir vorgenommen, mit der seriellen schnittstelle - als
einstiegsübung zur elektronik :D - 8 (paralelle) kanäle zu schalten
(H/L).
also eigentlich nur einen 8bit serial/parallel converter.
dazu habe ich mir ein 8bit schieberegister (74HC164) und nen NE555
geholt.
der 555 gibt den takt entsprechend der baudrate (C1=1uF;R1=R2=4800 Ohm
-> 100Hz) und das schieberegister verwandelt mir die 1en und 0en in High
und Low.
um zu verhindern, dass der HC164 mir die daten bis zum 8ten bit schiebt
und danach auch löscht, wird die clock nach dem 8ten bit auf H gesetzt.
das ,,auf H setzten" möchte ich mit einem seriellen ausgang DTR/RTS
umsetzten.
und nun zu dem was ich brauche:
ein programm soll mir bei jeder daten ausgabe auf TxD senden - am besten
mit schönem button von pin 1-8 - und DTR auf H setzten sobald es damit
fertig ist. DTR wird mit CLK vom HC164 verbunden und friert die
einstellung am ende des sendevorgangs ein, da die CLK nicht mehr taktet.
aber da wäre noch ein problem: wenn DTR nicht auf High ist, ist es
logischer weise auf Low :D. Low ist beim seriellen ausgang aber nicht
masse, sondern -High. wie bekomm ich das in den griff?
wie gesagt, bin ich in der e-technik noch nicht so ganz fit. ich weis
auch, dass dieser aufbau nicht ideal ist. ja, uCs sind schneller,
besser, genauer und vielleicht billiger, aber ich hab das jetzt schon so
angefangen und ich werd ihn auch auf teufel komm raus fertigstellen.
nix gegen uCs :P
ich hoff auf eure hilfe und vllt auch generelle tipps zu dem thema (auch
wenn viele den mist warscheinlich satt haben)
mfg rainer
rainer schrieb:> dazu habe ich mir ein 8bit schieberegister (74HC164) und nen NE555> geholt.> der 555 gibt den takt entsprechend der baudrate (C1=1uF;R1=R2=4800 Ohm> -> 100Hz) und das schieberegister verwandelt mir die 1en und 0en in High> und Low.
ist ziemlich kompliziert.
Ich würde einen AtMega8, oder einen tiny2313 nehmen
rainer schrieb:> aber da wäre noch ein problem: wenn DTR nicht auf High ist, ist es> logischer weise auf Low :D. Low ist beim seriellen ausgang aber nicht> masse, sondern -High. wie bekomm ich das in den griff?
dafür gibts PEgelwandler: zB Max232
der Aufbau sähe dann so aus:
PC-RS232 <-> MAX232 <-> µC, via Uart
der µC braucht dann nur ein kleines Programm, welches die Zeichen von
der Uart entgegennimmt und die entsprechenden Ports einschaltet.
Das hätte den oVorteil, du bräuchtst am PC kein spezielles Programm,
sondern kannst jedes Termina-Programm (win zB: hyperterminal) nutzen
ja :D,
das hab ich auch schon tausend mal gelesen.
ich weiss, dass es leichter ist. aber wie ich schon geschrieben habe,
will ich es mit dem shiftregister umsetzten - zu übungszwecken.
(bin trotzdem am überlegen, ob ich mir bei pollin für rund 20€
evaluationboardbausatz und attiny1323 kaufe)
Da kann ich nur eins sagen: Vergiss den NE555, oder ist das so ne Art
Hausaufgabe? Abgesehen du wählst die Taktrate seeehr niedrig, hätte ich
bedenken, dass der NE555 falsch geht (Widerstand/Kondensator).
Evtl mal schauen, es muss doch noch mehr als eine taktbare Leitung an
der RS232 geben, oder evtl Bit-Banging mode oder so?
Basti schrieb:> Da kann ich nur eins sagen: Vergiss den NE555, oder ist das so ne Art> Hausaufgabe? Abgesehen du wählst die Taktrate seeehr niedrig, hätte ich> bedenken, dass der NE555 falsch geht (Widerstand/Kondensator).> Evtl mal schauen, es muss doch noch mehr als eine taktbare Leitung an> der RS232 geben, oder evtl Bit-Banging mode oder so?
Die serielle Schnittstelle hat 4 Ausgänge:
TxD - serielle Daten
DTR, RTS, CTS - H/L Ausgänge
Ob ich die H/L als Taktgeber benutzen kann, weiß ich nicht da ich die
maximale Hertzzahl nicht kenn. Das wär aber auch eine gute Lösung.
Gibt es hier jemanden der derartige Programme schreiben kann?
Wenn du sowieso kein normgemässes serielles Protokoll fährst, schliesst
CLK an TxD und SerialIN an RTS (oder DTR) an und spar dir den NE555. Man
sendet dann jeweils ein 0x00 und das auf RTS (DTR) ausgegebene Bit wird
ins Schieberegister geschoben.
Du brauchst Vorwiderstände von sagen wir 10k bis 100k zwischen RS232 und
dem Schieberegsiter, weil das mit 5V und die Schnittstelle mit bis zu
15V fährt.
Willst du ein normgerechtes serielles Signal (eben damit man KEIN
Programm schreiben muss) ist die Wahl des 74HC164/NE555 etwas ungünstig.
Neben dem 8 bit Schieberegister braucht man da nämlich noch einen
rücksetzbaren 8 bit Zähler der mit der 16-fachen Baudrate getaktet wird
(74HC161).
Geht die RS232 Leitung von MARK auf SPACE und ist bit 8 dieses Zählers
gesetzt, wird bei ihm CLEAR aktiv. Der Ausgang Bit 3 ist das Taktsignal
für das Schieberegister. Wird Bit 8 HIGH, wird der Zähler gestoppt.
So kommst du mit einem NE555, einen 74HC161 und einem 74HC165 aus und
kannst normale 8 bit Datenbytes senden mit 1 Startbit und 1-2 Stoppbits
und niemand muss ein Programm schreiben.
Daran hab ich noch gar nicht gedacht.
Ist ne echt gute Idee - einfacher und übersichtlicher.
Danke
Ich werd das mal ausprobieren, sobald ich die neuen Teile hab.
MfG
Hallo nochmal,
mein Vorhaben ist jetzt beendet.
Das Ganze wurde weder mit uC noch mit Ne555 umgesetzt, sondern mit
Labview.
Über die serielle Schnittstelle kommt eine einstellbare Clock, die
seriellen High und Lows und mit der Breakfunktion des TxD werden am Ende
des Schiebens 8 Transistoren auf H gesetzt, um erst dann zu öffnen, wenn
die Schieberei vorbei ist.
Bei Gelegenheit werd ich den Aufbau hochladen - samt Programm, damit
hier auch mal ein fertiger Thread ist. :D
So,
hier die versprochenen Daten:
-Hardwareaufbau
-LabviewExe (benötigt den Labview RuntimeEngine 8.xx)
Als CLK dient DTR, RTS gibt die seriellen Daten aus und TxD schaltet
nach dem Senden in den Breakzustand(High), damit man über einen
(Leistungs-)Transistor die Verwirrung während des Schiebens vermeiden
kann.
Die seriellen Daten kann man mittels Klickschalter aktivieren -ich weiß
- für Echtzeitsteuerung nicht grade perfekt, dafür beträgt die Sendezeit
aber min. 8ms.
Wenn es noch Fragen oder Verbesserungsvorschläge gibt, nehme ich die
gerne an.
Und danke, dass ihr mir nicht gleich ein Programm hingeworfen habt.
Durch das Selbermachen bin ich um einiges schlauer geworden.
Schön, dass es funktioniert.
Burkhard Kainka hatte in einem seiner Bücher (vorm "erschwingliche
Mikrocontroller"-Zeitalter) Schaltungen mit Logik-Bausteinen realisiert,
die Daten über die serielle Schnittstelle versendet haben.
Die brauchten nicht mal Handshake-Leitungen.
Hallo,
jetzt brauch ich doch nochmal Hilfe.
Ich hab jetzt 2 H-Brücken an die Schnittstelle angeschlossen, allerdings
mit externer Stromversorgung, siehe Anhang.
Die BC337 sollten eigentlich bis zu 0,5A halten. Als ich aber messen
wollte, wieviel Strom jetzt wirklich fließt, sprich Messgerät dazwischen
gehängt, sind sie mir ziemlich schnell weggedampft. :(
Als Stromquelle hatte ich einen Trafo mit max. 18V und 800mA(liegt etwa
da schon der Fehler?)
Nun meine Fragen:
1) Wieso sind alle 4 Transistoren (einer Brücke) durchgebrannt? Zieht
das Messgerät mehr Strom als die Schaltung, denn mit den Motoren hat es
- wenn sie auch ziemlich schwach waren - gut geklappt? Und warum alle
Vier, es leitet ja immer nur ein Zweig und ich hatte ja nicht alle beide
an?
2) Normalerweise müssten die Motoren doch ganz normal laufen (bei einem
geschlossenen Brückenzweig), warum tun sie das bei mir nicht?
3) Hilft es wenn ich die Transistoren der H-Brücke parallel schalte, um
mehr Strom zu ertragen?
Danke im Voraus
Rainer
Eine überaus seltsame Schaltung:
- Kollektor direkt an 74LS04 - wo ist der (sichere) HIGH-Pegel, wenn der
Transistor sperrt? Ja, ich weiß, TTL und LS-TTL sind bei offenem Eingang
HIGH, aber das nutzt man nicht in einer Schaltung!
- Keinerlei Basisvorwiderstände! Arme Transistoren und armer LS164
- H-Brücke mit NPN auf beiden Zweigen und dann auch noch parallel
geschaltet Transistoren (z.B. Q11 und Q16)? Und, alles wieder ohne
Vorwiderstände an der Basis. Selbst wenn welche drin wären: die jeweils
oberen Transistoren können nicht auf 12V schalten, höchstens auf 4,3V.
- was habe ich auf die Schnelle alles nicht gesehen?
Meine Empfehlung: delete all und fange nochmals von vorne an.
Hi HildeK,
ich weiß, dass ich von der Sache noch ziemlich wenig Ahnung habe und
vermutlich viel falsch mache, aber anstatt mir zu raten, alles was ich
aufgebaut habe, wieder abzubauen, könntest du mir vielleicht ein paar
Tipps geben, wie ich es besser machen kann. Nicht, dass ich deinen Rat
nicht schätze - er sagt mir, dass meine Schaltung noch ziemlich
verbesserungswürdig ist - aber ich bin eben ein Neuling und schon froh
über die ansteuerbaren LEDs. Die Vorwiderstände hab ich weggelassen -
ich weiß auch nicht wozu die genau gut sind - Jetzt wäre es eben noch
ein toller Fortschritt, die 2 H-Brücken mit ausreichend Stromstärke zu
betreiben.
Rainer
rainer schrieb:> könntest du mir vielleicht ein paar> Tipps geben, wie ich es besser machen kann.
Hab ich doch. Ich habe die notwendigen Basisvorwiderstände erwähnt (mit
Begründung, wer sich nicht darüber freuen wird), ich sagte, dass die
oberen Transistoren kein Ausgangssignal bis 12 liefern können (sie
werden ja an der Basis von max. 5V angesteuert und der Emitter liegt
immer tiefer), dass der Q11, da seine Basis hart mit der Basis von Q16
verbunden ist, nicht wirklich so arbeiten wird, wie du das wolltest.
Dessen Emitterspannung wird kaum über 0V hinausgehen.
Zugegeben, es ist mir zuviel Aufwand, deine Schaltung neu zu zeichnen.
Aber ich suche mal selber ein paar Beispiele zusammen:
Beim Ansteuern eines TTL-Gatters mit einem Transistor ist an dessen
Kollektor ein Widerstand nach +5V notwendig (zumindest sehr
empfehlenswert). Bei CMOS-Gattern absolut notwendig.
H-Brücke, geht auch mit NPN und PNP-Transistoren anstatt nMOS und pMOS:
http://s-huehn.de/elektronik/fahrtregler/fahrtregler.htm
Wenn du in dem Bild die Eingänge über R8 und R10 bzw. R9 und R11
miteinander verbindest, so kannst du daran die Signale von U1a und U1b
von deinem Bild anschließen.
H-Brücken gibt es auch integriert:
http://www.mikrocontroller.net/articles/H-Br%C3%BCcken_%C3%9Cbersicht
Oder auch:
Beitrag "Verständnisfrage zu der H- Brücke"Beitrag "Warum PNP und NPN in H-Brücke?"
Basiswiderstand (dort ist auch ein Beispiel drin, wie LEDs beschaltet
werden):
http://www.mikrocontroller.net/articles/Basiswiderstand
Viele weitere Ergebnisse liefert z.B. die Forensuche.