Forum: PC-Programmierung kleines programm benötigt


von rainer (Gast)


Lesenswert?

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

von Vlad T. (vlad_tepesch)


Lesenswert?

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

von Martin (Gast)


Lesenswert?

@ Rainer

Wichtige Regeln - erst lesen, dann posten!

    * Groß- und Kleinschreibung verwenden

    usw.

von rainer (Gast)


Lesenswert?

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)

von Basti (Gast)


Lesenswert?

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?

von rainer (Gast)


Lesenswert?

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?

von MaWin (Gast)


Lesenswert?

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.

von rainer (Gast)


Lesenswert?

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

von rainer (Gast)


Lesenswert?

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

von rainer (Gast)


Angehängte Dateien:

Lesenswert?

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.

von rainer (Gast)


Lesenswert?

Upps,
Sorry für den Doppelpost aber ich seh grad noch einen Fehler im 
Schlatplan.
Es müssen natürlich B und *CLR an High und nicht A.

von STK500-Besitzer (Gast)


Lesenswert?

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.

von rainer (Gast)


Angehängte Dateien:

Lesenswert?

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

von HildeK (Gast)


Lesenswert?

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.

von rainer (Gast)


Lesenswert?

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

von HildeK (Gast)


Lesenswert?

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.

von rainer (Gast)


Lesenswert?

Cool,
danke für die Antwort :),
werd mich mal dranmachen und mein Halbwissen aufstocken.
Danke nochmal
Rainer

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.