Forum: Mikrocontroller und Digitale Elektronik Arduino: Eingänge, Ausgänge, I2C, Leitungslängen,.


von Marc.K (Gast)


Lesenswert?

Hallo µC Gemeinde,

bei mir sind es schon über 25 Jahre her, dass ich etwas direkt mit 
Elektronik zu tun hatte. Nach meiner Ausbildung habe ich mich auf 
Software spezialisiert.

Jetzt hat es mich aber nun doch wieder gepackt. Die Einfachheit der 
heutigen µC, die Anbindung an den PC, sowie die simple C 
ähnliche/gleiche Programmierung, das hat meine Neugierde geweckt.

Trotz einen intensiven Blick in alten Schulheften/Bucher und eigenen 
Berechnungen, klafft da natürlich eine riesige Wissenslücke, die ich nun 
hoffe mit Eurer Hilfe ein wenig zu schließen.

Ich habe mir mal ein (z.Zt noch) fiktives Kleinprojekt ausgesucht, das 
wie folgt aussieht:

Zeitmessung mittels einer Start- und einer Stopp Lichtschranke und einer 
Rot/Grün Ampel. Dazu kommt dann eine kleine PC Software, die eine 
Ranking Tabelle / Startliste verwaltet.

Meine Bauteile: Arduino Uno, 2 x Lichtschranken 24V PNP und 2 x 24V 
150mA LED Lampen.

Für die Pegelanpassung an den Eingängen mit 5V -> 24V dachte ich an:

in o-----+
         |
        R1
         |
         +----R3-----+----> µC
         |           |
        R2           Z
         |           |
        GND         GND

R1-3 = 4k7, Z = BZX55, 5V1 Zenerdiode

Durch den Spannungsteiler R1/R2 halbiere ich mir die Eingangspg und mit 
R3 (Strombegrenzung) und der Diode ziehe ich die dann auf 5,1V. Der 
Grund für diese Aufteilung sollte sein, dass die Lichtschranken 
eventuell an einem Kabel mit 50m und länger hängen (Spannungsfall). 
Damit bekomme ich ein High bei ca. 6V. Der Strom von ca. 3mA bei 24V 
sorgt mir dafür, dass nicht jedes Peak einen Flankenwechsel am Eingang 
erzeugt. Ach ja, entprellen wollte ich per SW.

Die beiden Ausgänge für die Ampel wollte ich über einen ULN2008 
schalten, wobei ich hier wegen dem Einzelstrom je 4 Darlington's 
zusammen schalten wollte. (Laut Datenblatt kann der ULN2008 in Summe 
500mA mit bis zu 50VDC)


Ich wäre Euch sehr dankbar, wenn Ihr mir mal so Eure Meinung dazu sagen 
würdet, wie z.B. ist das als Anfängerprojekt schon zu groß gewählt, 
passen meine Gedanken zu den 24V Eingängen/Ausgängen,...

Eventuell baue ich diese Schaltung dann später auch in echt. Gedacht 
wäre das  für den Agility Sport (Hundeparcours, ähnliche dem 
menschlichem Hürdenlauf, LOL)

Vielen Dank

Marc

von Uwe K. (ukhl)


Lesenswert?

Marc.K schrieb:
> Die Einfachheit der
> heutigen µC, die Anbindung an den PC, sowie die simple C
> ähnliche/gleiche Programmierung, das hat meine Neugierde geweckt.

So hat es mich auch erwischt.

> Meine Bauteile: Arduino Uno, 2 x Lichtschranken 24V PNP und 2 x 24V
> 150mA LED Lampen.
>
> Für die Pegelanpassung an den Eingängen mit 5V -> 24V dachte ich an:
>
> in o-----+
>          |
>         R1
>          |
>          +----R3-----+----> µC
>          |           |
>         R2           Z
>          |           |
>         GND         GND
>
> R1-3 = 4k7, Z = BZX55, 5V1 Zenerdiode

Finde ich grundsätzlich gut, ist also grundsätzlich nicht falsch.

Aber es geht einfacher:
Den Spannungsteil brauchst Du auf Grund der Z-Diode nicht. Die 
Strombegrnzung mit R3 sollte genügen.

Es geht sogar noch einfacher bei einem ATMEL:
Die ATMEL haben zum Schutz schon eine Z-Diode eingebaut. Diese verträgt 
aber maximal 1mA. Die 4k7 sind dann etwas klein. Versuche es mit 100k 
direkt als Eingang. Das reicht für bis zu 100V. ( Siehe Application Note 
AVR182 ).

> Durch den Spannungsteiler R1/R2 halbiere ich mir die Eingangspg und mit
> R3 (Strombegrenzung) und der Diode ziehe ich die dann auf 5,1V. Der
> Grund für diese Aufteilung sollte sein, dass die Lichtschranken
> eventuell an einem Kabel mit 50m und länger hängen (Spannungsfall).
> Damit bekomme ich ein High bei ca. 6V. Der Strom von ca. 3mA bei 24V
> sorgt mir dafür, dass nicht jedes Peak einen Flankenwechsel am Eingang
> erzeugt. Ach ja, entprellen wollte ich per SW.

Dann vieleicht doch den Spannungsteiler verwenden. Einfach ausprobieren.

> Die beiden Ausgänge für die Ampel wollte ich über einen ULN2008
> schalten, wobei ich hier wegen dem Einzelstrom je 4 Darlington's
> zusammen schalten wollte. (Laut Datenblatt kann der ULN2008 in Summe
> 500mA mit bis zu 50VDC)

Du meinst den ULN2803A ? Eine Darlington schafft 500mA. Da brauchst Du 
für 150mA nichts zusammenschalten. Denke daran, dass am Darlington 
nochmal 1V abfällt.

> Ich wäre Euch sehr dankbar, wenn Ihr mir mal so Eure Meinung dazu sagen
> würdet, wie z.B. ist das als Anfängerprojekt schon zu groß gewählt,
> passen meine Gedanken zu den 24V Eingängen/Ausgängen,...

Machbar. Hau rein. Alles Super.

> Eventuell baue ich diese Schaltung dann später auch in echt.

Es gibt nichts Gutes, ausser man tut es.
Nicht "Eventuell"; Vielecht"; "unter Unständen". Mach fertig, wir wollen 
was sehen. Gibts nächte Woche Bilder vom Ergebnis?

von Mike A. (Gast)


Lesenswert?

Uwe K. schrieb:
> Es geht sogar noch einfacher bei einem ATMEL:

Aber nur, wenn die Signalquelle bei "0" sicher im Bereich für den µC 
gültiger Low-Pegel liegt.

von Marc.K (Gast)


Lesenswert?

Meine Herren,

vielen dank für die super schnelle Antwort. Damit hätte ich ja nie 
gerechnet.


Uwe K. schrieb:
> Du meinst den ULN2803A ? Eine Darlington schafft 500mA. Da brauchst Du
> für 150mA nichts zusammenschalten. Denke daran, dass am Darlington
> nochmal 1V abfällt.

Äh, ja. Da hatte ich mir wohl den faschen ausgesucht. Der ULN2003 hat 7 
Darlington und der ULN2803A hat 8. Aber ansonsten kann ich im Datenblatt 
keine Unterschiede gesehen. Mal eine Frage dazu: Soll das heißen, das 
der 8 x 500mA = 4A verträgt? Niemals, oder? Als Imax hätte ich das 
"Total substrate-terminal current" = 2,5A angenommen. Und das ist schon 
sehr viel.


Uwe K. schrieb:
> Dann vieleicht doch den Spannungsteiler verwenden. Einfach ausprobieren.

Ja, den wollte ich mir schon erhalten. Dann hab ich was zum spielen, 
wenn ich Probleme mit den Eingangssignalen hab.

Über Nacht ist in mir dann noch der Gedanke gewachsen, dass eine 
Zeitanzeige  ja auch nicht verkehrt wäre. Nach einigem Suchen hab ich 
mir den MAX7221 ausgesucht. Zum einen kann der direkt bis zu 8 
7-Segmentanzeigen ansteuern und zum anderen brauch ich das Multiplexing 
nicht von µC aus zu machen. Ach ja, und der Anschluss begnügt sich mit 3 
Adern (SPI).

Aber kann ich diese Signale auch über 50m übertragen? Bei der hohen 
Taktung bekommen ich doch bestimmt Mist auf das Signal, oder nicht? 
Solte ich die drei über Optokoppler / ULN2803 führen um eine höher Spg 
für die Übertragung zu bekommen? Bei 50m und 5V habe ich ja massig 
Spannungsfall durch die Leitung.

Noch was, gehe ich recht in der Annahme, dass immer noch 10pF als Filter 
an jedes IC zwischen Vcc und GND kommen? So habe ich das zumindest 
"früher" mal gelernt.

von Frank K. (fchk)


Lesenswert?

Marc.K schrieb:

> Äh, ja. Da hatte ich mir wohl den faschen ausgesucht. Der ULN2003 hat 7
> Darlington und der ULN2803A hat 8. Aber ansonsten kann ich im Datenblatt
> keine Unterschiede gesehen. Mal eine Frage dazu: Soll das heißen, das
> der 8 x 500mA = 4A verträgt? Niemals, oder? Als Imax hätte ich das
> "Total substrate-terminal current" = 2,5A angenommen. Und das ist schon
> sehr viel.

Ich würde dafür eher kleine MOSFETs nehmen. IRLML2502 zB. SOT23 Gehäuse, 
kann bei 25°C und VGS=4.5V 4.3A in so einem kleinen Gehäuse und hat dann 
45mΩ Durchgangswiderstand. Einfach kleinen Vorwiderstand vors Gate (zB 
22Ω), dann passt das.

http://www.irf.com/product-info/datasheets/data/irlml2502.pdf

>> Dann vieleicht doch den Spannungsteiler verwenden. Einfach ausprobieren.

Denke dran: Dein Spannungsteiler ist nur für den Gleichstromfall 
korrekt. Wenn Du später schnelle Signale über einen solchen führst, 
musst Du auch die Blindwiderstände berücksichtigen, sonst gehts 
irgendwann nicht mehr.

> Über Nacht ist in mir dann noch der Gedanke gewachsen, dass eine
> Zeitanzeige  ja auch nicht verkehrt wäre. Nach einigem Suchen hab ich
> mir den MAX7221 ausgesucht. Zum einen kann der direkt bis zu 8
> 7-Segmentanzeigen ansteuern und zum anderen brauch ich das Multiplexing
> nicht von µC aus zu machen. Ach ja, und der Anschluss begnügt sich mit 3
> Adern (SPI).
>
> Aber kann ich diese Signale auch über 50m übertragen? Bei der hohen
> Taktung bekommen ich doch bestimmt Mist auf das Signal, oder nicht?
> Solte ich die drei über Optokoppler / ULN2803 führen um eine höher Spg
> für die Übertragung zu bekommen? Bei 50m und 5V habe ich ja massig
> Spannungsfall durch die Leitung.

Spannungsabfall bedingt, dass ein Strom fließt.
Aber Du hast recht. Bei 50m sind TTL-Signale nicht mehr das wahre. Das 
einfachste wären RS232-Treiber, oder RS422/485 für differentielle 
Signalübertragung.

> Noch was, gehe ich recht in der Annahme, dass immer noch 10pF als Filter
> an jedes IC zwischen Vcc und GND kommen? So habe ich das zumindest
> "früher" mal gelernt.

10p sind zu wenig. 100n ist üblich.

fchk

von Uwe K. (ukhl)


Lesenswert?

Marc.K schrieb:
> ... Der ULN2003 hat 7
> Darlington und der ULN2803A hat 8. Aber ansonsten kann ich im Datenblatt
> keine Unterschiede gesehen.

Stimmt.

> Mal eine Frage dazu: Soll das heißen, das
> der 8 x 500mA = 4A verträgt? Niemals, oder?

Mein Datenblatt sagt 500mA bis 50V pro Dalington. 8 x 500mA sind 
tatsächlich 4A. Oder habe ich was übersehen?

Du kannst natürlich auch den ULN2003 nehmen. Für TTL-Pegel nimmt man die 
3 am Ende. Einen ULN2008 konnte ich aber nirgends finden.

Den Vorschlag von Frank K. kann man auch in Erwägung ziehen.

von Frank K. (fchk)


Lesenswert?

Denkt auch an die Verlustleistung in Euren ULNs!

Bei 350mA Kollektorstrom habt Ihr einen Spannungsabfall zwischen C und E 
von 1.3V laut Datenblatt. Das macht eine Verlustleistung von 0.455W, bei 
allen 8 Stufen also 3.64W an Wärme. Bei einem thermischen Widerstand von 
66°C/W beim Wide SOIC habt Ihr eine Erwärmung um 240°C. Aua! Das Teil 
verbrennt Euch ohne weitere Maßnahmen.

Der MOSFET, den ich da vorgeschlagen habe, hat nur einen Innenwiderstand 
von 45mΩ. Bei 350mA gibt es da also nur einen Spannungsabfall von 15mV 
und eine Verlustleistung von 5.5mW. Deswegen kann der auch in so einem 
kleinen Gehäuse eingepackt sein.

Und deswegen nimmt man heutzutage MOSFETs.

fchk

von Marc.K (Gast)


Lesenswert?

Frank K. schrieb:
> Denkt auch an die Verlustleistung in Euren ULNs!

Ganz klar ein guter Einwand. Da ich 2 (bzw. 4 bei zwei Ampeln) Ausgänge 
benötige, wollte ich je zwei Darlingtons im ULN parallel schalten.

Die LED's in den Leuchtmelder ziehen 120mA. Bei 4 Meldern macht das 
insgesamt 0.625W. Wobei nur die Hälfte zum tragen kommt, da ja bei 
meiner Ampel immer nur eine der Leuchten eingeschaltet ist.

Was mich auch ein wenig abschreckt, ist, dass ich noch nie SOT23 also 
SMD selber verlötet habe. THT Technik ist mir daher ein wenig lieber.

Frank K. schrieb:
> Aber Du hast recht. Bei 50m sind TTL-Signale nicht mehr das wahre. Das
> einfachste wären RS232-Treiber, oder RS422/485 für differentielle
> Signalübertragung.

Genau das war meine Befürchtung. Jedoch hoffte ich auf eine andere 
Lösung. RS422/485 sind differentielle Schnittstellen, d.h. ich brauche 6 
anstatt 3 Drähte für die Übertragung.

Würde eine Übertragung mit höheren Pegeln und einem Strom von 2-3 mA mit 
Spannungsteiler am anderen Ende und mit Hilfe eines Schmitt-Triggers 
(74C914) nicht auch gehen? Oder bekomme ich dann zu große Verschiebungen 
in den Signalen und das Timing vom SPI unbrauchbar?

Ich hab mittlerweile so einige Threads bezüglich I2C/SPI und Kabellängen 
gelesen. Doch so richtig schlau, was denn nun möglich bzw. 
"funktionssicher" ist, habe ich daraus nicht wirklich erkennen können. 
Einer benutzt ein 100m ungeschirmtes CAT und behauptet es gäbe keine 
Probleme und andere wiederum "bekriegen" sich wegen des 
Wellenwiderstands.

Da ich, wie gesagt einen MAX7221 für die Anzeige verwenden wollte und 
die Aktualisierung des Anzeigewertes nicht so im Vordergrund steht, kann 
ich mir auch eine "langsame" Übertragung erlauben.

von Frank K. (fchk)


Lesenswert?

Marc.K schrieb:
> Frank K. schrieb:
>> Denkt auch an die Verlustleistung in Euren ULNs!
>
> Ganz klar ein guter Einwand. Da ich 2 (bzw. 4 bei zwei Ampeln) Ausgänge
> benötige, wollte ich je zwei Darlingtons im ULN parallel schalten.
>
> Die LED's in den Leuchtmelder ziehen 120mA. Bei 4 Meldern macht das
> insgesamt 0.625W. Wobei nur die Hälfte zum tragen kommt, da ja bei
> meiner Ampel immer nur eine der Leuchten eingeschaltet ist.

Gut, unter diesen Umständen hast Du nur eine Erwärmung um 20°C, d.h. bei 
25°C Umgebungstemperatur wird der Chip 45°C warm.

> Was mich auch ein wenig abschreckt, ist, dass ich noch nie SOT23 also
> SMD selber verlötet habe. THT Technik ist mir daher ein wenig lieber.

Alles eine Frage der Übung.

> Frank K. schrieb:
>> Aber Du hast recht. Bei 50m sind TTL-Signale nicht mehr das wahre. Das
>> einfachste wären RS232-Treiber, oder RS422/485 für differentielle
>> Signalübertragung.
>
> Genau das war meine Befürchtung. Jedoch hoffte ich auf eine andere
> Lösung. RS422/485 sind differentielle Schnittstellen, d.h. ich brauche 6
> anstatt 3 Drähte für die Übertragung.

Dann nimm halt RS232. Bei 50m solltest Du mindestens 9600 bps erreichen.

> Würde eine Übertragung mit höheren Pegeln und einem Strom von 2-3 mA mit
> Spannungsteiler am anderen Ende und mit Hilfe eines Schmitt-Triggers
> (74C914) nicht auch gehen? Oder bekomme ich dann zu große Verschiebungen
> in den Signalen und das Timing vom SPI unbrauchbar?

Vergiss Deinen Spannungsteiler! Der funktioniert nur im 
Gleichspannungsfall so, wie Du es Dir vorstellst. Gleichspannungsfall 
heißt: Strom einschalten, warten bis sich nichts mehr ändert, dann 
messen. Wenn Du digitale Signale überträgst, hast Du diesen Fall nicht 
mehr. Dann spielen auch die unvermeidlichen Kapazitäten und 
Induktivitäten Deines Restsystems eine Rolle, die Du dann kompensieren 
darfst. Einen Spannungsteiler verwendest Du nur dann, wenn Du 
beispielsweise eine Versorgungsspannung etc messen willst.

Eine andere Möglichkeit ist die Stromschleife. Hier arbeitest Du mit 
Konstantstromquellen. Diese prägen der Leitung einen Strom von zB. 4 
oder 20mA ein, d.h. sie drehen die Spannung so lange hoch, bis die 20mA 
erreicht sind. Sind sie mit der Spannung am Anschlag, ist die Leitung 
unterbrochen, ist der Strom viel zu hoch, ist irgendwo ein Kurzschluss. 
Wird heutzutage nur noch selten für serielle Datenübertragung 
eingesetzt. TI hat Bausteine dafür.

> Ich hab mittlerweile so einige Threads bezüglich I2C/SPI und Kabellängen
> gelesen. Doch so richtig schlau, was denn nun möglich bzw.
> "funktionssicher" ist, habe ich daraus nicht wirklich erkennen können.
> Einer benutzt ein 100m ungeschirmtes CAT und behauptet es gäbe keine
> Probleme und andere wiederum "bekriegen" sich wegen des
> Wellenwiderstands.

Du kennst den Loriot-Sketch "Das Ei ist hart!"? Die Frage ist: Willst Du 
ein weiches Ei oder ein zufällig weiches Ei? Genauso ist es in der 
Elektronik. Wer ein reproduzierbar funktionierendes System haben will, 
verwendet Dinge, die für den jeweiligen Anwendungsbereich gedacht und 
geeignet sind und reizt die Spezifikationen nicht bis zum Letzten aus.

> Da ich, wie gesagt einen MAX7221 für die Anzeige verwenden wollte und
> die Aktualisierung des Anzeigewertes nicht so im Vordergrund steht, kann
> ich mir auch eine "langsame" Übertragung erlauben.

Du kannst natürlich auch einen kleinen PIC wie zB den 8-pinnigen 
PIC12F1840 nehmen, der einen UART und einen SPI-Port in Hardware 
enthält. Über den UART empfängt der PIC den Anzeigewert und sendet ihn 
über SPI an den MAX7221 weiter. So brauchst Dur nur eine Ader (der PIC 
muss ja nicht zurück senden) plus Ground. Der zusätzliche PIC könnte 
billiger werden als die zusätzlichen Adern in dem Kabel.

fchk

von Marc.K (Gast)


Lesenswert?

Frank K. schrieb:
> Du kannst natürlich auch einen kleinen PIC wie zB den 8-pinnigen
> PIC12F1840 nehmen, der einen UART und einen SPI-Port in Hardware
> enthält. Über den UART empfängt der PIC den Anzeigewert und sendet ihn
> über SPI an den MAX7221 weiter.

Hmm, interessanter Ansatz, aber einen PIC kann ich nicht selber 
beschreiben, mangels Brenner.

Hast Du denn schon mal mit dem SC16IS740 von nxp gearbeitet? (Ja, ist 
auch SMD, ich weiß, wäre dann zur Übung) Der scheint mir genau für den 
Fall entwickelt zu sein. Dann hätte ich auch nicht nur ein zufällig 
weiches Ei. (LOL, klar kenne ich den Sketch)

Ansonsten lass ich die externe Zeitanzeige, das scheint mir vom Aufwand 
doch ein wenig zuviel für mein erstes Projekt zu sein.

Vielen Dank für Deine hilfreiche Hinweise.

Marc

von Frank K. (fchk)


Lesenswert?

Marc.K schrieb:
> Frank K. schrieb:
>> Du kannst natürlich auch einen kleinen PIC wie zB den 8-pinnigen
>> PIC12F1840 nehmen, der einen UART und einen SPI-Port in Hardware
>> enthält. Über den UART empfängt der PIC den Anzeigewert und sendet ihn
>> über SPI an den MAX7221 weiter.
>
> Hmm, interessanter Ansatz, aber einen PIC kann ich nicht selber
> beschreiben, mangels Brenner.

Einen PICKit3-Nachbau (der kann alle 8/16/32 Bit PICs mit Flash, von 6 
Pins bis 144 Pins) gibts beim Chinamann für 20€. Das ist also kein 
Argument. Und "Brenner" sind sowas von 80'er, das war noch zu der Zeit, 
als die PICs noch EPROM-basiert waren und mit UV-Licht gelöscht wurden. 
Sowas nimmt man heutzutage nicht mehr.

> Hast Du denn schon mal mit dem SC16IS740 von nxp gearbeitet? (Ja, ist
> auch SMD, ich weiß, wäre dann zur Übung) Der scheint mir genau für den
> Fall entwickelt zu sein. Dann hätte ich auch nicht nur ein zufällig
> weiches Ei. (LOL, klar kenne ich den Sketch)

Das ist ein SPI-Slave. Der macht ohne seinen Master nichts. Der MAX ist 
auch nur Slave. Du brauchst einen Master, und genau das wäre der PIC.

> Ansonsten lass ich die externe Zeitanzeige, das scheint mir vom Aufwand
> doch ein wenig zuviel für mein erstes Projekt zu sein.

Warum nicht?

fchk

von Marc.K (Gast)


Lesenswert?

Frank K. schrieb:
> Das ist ein SPI-Slave. Der macht ohne seinen Master nichts.
Stimmt, das habe ich übersehen, war von der Überschrift in der Doku so 
fasziniert. Sorry.

Einen PICKit3 für 20.- Euro sind nicht viel, wenn man den denn dann auch 
mehrfach braucht. Und das weiß ich zur Zeit ja noch nicht. Dies ist mein 
erstes Projekt.

Ich überlege es mir zu einem späteren Zeitpunkt nochmal, ob ich eine 
Zeitanzeige mache oder nicht. Ich lass mir mal die RX/TX Pins frei, denn 
ich denke die Grundidee eine UART zu verwenden ist die Richtige. 
Eventuell kaufe ich mir eine fertige Anzeige, die eine RS232/485/422 
Schnittstelle hat.

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.