Hallo, ich muss mit einem Microcontroller (Arduino Uno) mehrere Spannungen Potentialfrei messen. Dazu habe ich hier einen Tipp bekommen das sich das relativ einfach mit dem ADUM140x und dem A/D Wandler MCP3002 realisieren lässt. Jetzt habe ich mir zwei Platinen aufgebaut (Schaltbilder siehe Anlagen). Jede für sich funktioniert wunderbar am Arduino. Aber wenn ich beide gemeinsam am gleichen SPI-Bus verwenden will bekomme ich nur Datenmüll. Jede der Platinen hat Ihren eigenen SS/CS-Pin am Microcontroller. Dieser wird auch immer nach jedem Vorgang wieder auf "High" gesetzt. Trotzdem funktioniert es nicht. Sobald ich auf einer Platine einen der ADUM's raus nehme (Sockel) funktioniert die andere Platine perfekt. Mit dem selben Arduino Sketch nur ohne die ADUM's funktionieren beide A/D Wandler am gleichen Bus. Wo liegt mein Fehler? Brauche ich noch Pull-Ups oder Pull-Downs? Da bin ich bei meinen Suchen nicht ganz schlau geworden? (Einen PullDown habe ich schon eingebaut R3 - ohne diesen hatte ich öfter Messfehler). Wenn ja - wo? Auf der Seite des Microcontrollers oder auf der Seite des A/D-Wandlers? oder seht ihr noch ganz andere Probleme bzw. Verbesserungen. Vielen Dank für eure Hilfe.... Ach ja.. seid bitte nachsichtig mit meinen Schaltplänen - das sind die ersten Versuche mit Eagle.
Dein MISO-Signal wird von beiden ADUM gleichzeitig getrieben -> gar nicht gut. Die Ausgänge der MCP3002 mögen zwar hochohmig werden, wenn CS inaktiv ist, aber den ADUM interessiert das nicht: der treibt munter weiter.
noch ein möglicher Lösungsvorschlag: du könntest VE2 (Pin 10) ansteuern, um die MISO Treiber des jeweils nicht benutzten ADUM zu disablen. Dummerweise ist dieser Pin High-aktiv, der CS des ADC aber low-aktiv. Aber sonst kann auch einiges nicht stimmen: wieso lässt du Pin 14 des ADUM1401 den SCK treiben, wenn gleichzeitig der µC den SCK zum ADUM1402 treiben soll? Liegen die beiden MCP3002 auf dem selben Potential, oder müssen die auch untereinander getrennt sein? Wie soll deiner Planung nach der Signalfluss aussehen (wer treibt welches Signal)?
Hallo Achim, danke für deine Iddeen... hier ist mal der Link wo ich die Tipps mit dem ADUM bekommen habe: Beitrag "Anfänger: Spannungen potentialfrei an Arduino messen" Die MCP's sind ganau die die ich vom Potential trennen muss - ich will Spannungen vor und hintern einem Ladereger messen der die Masseleitung steuert. Der Arduino würde durch die gemeinsame Masse den Ladereger brücken. Mein Plan war so: Arduino SPI(Master) |-> ADUM1401 -> MCP3002(Slave) -> Messspannung |-> ADUM1402 -> MCP3101(Slave) -> Messspannung (|-> EthernetShield - optional) Der Arduino Steuert mit dem SS-Pin jeweils den MCP an der gerade abgefragt werden soll. Ich habe das so verstanden das ich die anderen Pins (Clock, MISO, MOSI) an allen Slaves angeschlossen lassen kann und nur mit dem SS das jeweilige Device auswählen. Stimmt das? oder habe ich da einen Denkfehler? Die Idee mit dem Pin10 (VE2) geällt mir eigenlich sehr gut. Welche einfache möglichkleit gäbe es denn das Singal zu invertieren? Ich hoffe ich konnte es halbwegs verständlich erklären. Danke :-)
Stefan L. schrieb: > Die MCP's sind ganau die die ich vom Potential trennen muss - ich will > Spannungen vor und hintern einem Ladereger messen der die Masseleitung > steuert. Ich habe verstanden, dass die MCPs vom Arudino getrennt sein müssen. Aber müssen sie auch untereinander getrennt sein? Ansonsten könntest du die beiden MISO-Signale vor dem ADUM zusammenschließen. Stefan L. schrieb: > Mein Plan war so: > > Arduino SPI(Master) |-> ADUM1401 -> MCP3002(Slave) -> Messspannung > |-> ADUM1402 -> MCP3101(Slave) -> Messspannung > (|-> EthernetShield - optional) > > Der Arduino Steuert mit dem SS-Pin jeweils den MCP an der gerade > abgefragt werden soll. > Ich habe das so verstanden das ich die anderen Pins (Clock, MISO, MOSI) > an allen Slaves angeschlossen lassen kann und nur mit dem SS das > jeweilige Device auswählen. Stimmt das? oder habe ich da einen > Denkfehler? Das hast du im Prinzip richtig verstanden, aber falsch umgesetzt. Wenn der Controller SCLK treibt, dann darfst du nicht SCLK auf Pin 14 eines ADUM1401 legen. Pin 14 ist ein Ausgang, der ADUM1401 und der µC arbeiten gegeneinander. Bei der zweiten Schaltung hast du es richtig gemacht: SCLK wird vom µC getrieben und geht auf Pin 12 eines ADUM1402 (also einen Eingang) und von dort zum ADC. Stefan L. schrieb: > Die Idee mit dem Pin10 (VE2) geällt mir eigenlich sehr gut. Welche > einfache möglichkleit gäbe es denn das Singal zu invertieren? Einen Inverter draufbasteln? Oder einen freien IO-Pin des Arduino zum Aktivieren der Ausgänge nutzen? Aber auch wenn der Teil klappt kann ich mir nicht vorstellen, dass die erste Schaltung funktioniert (z.B. wegen der Kollision bei SCLK).
ja ich sehe es auch... das hab ich falsch gezeichnet.. aber richtig gelötet. ADUM1401 MCP Arduino ----- G -09 | | 8- G V -10 | | 7- V MISO -11 | | 6- MISO CLK -12 | | 5- CLK SS -13 | | 4- SS MOSI -14 | | 3- MOSI G -15 | | 2- G V -16 | | 1- V ----- Einen freien IO habe ich leider nicht mehr. Daher würde mit der Inverter gefallen. Welcher Transistor schafft denn die Geschwindigkeit? Ich habe gerade gesucht und bin auf den BC547B gestoßen. Würde der funktionieren? gibt es einen passenderen? Danke!
Stefan L. schrieb: > Die Idee mit dem Pin10 (VE2) geällt mir eigenlich sehr gut. Welche > einfache möglichkleit gäbe es denn das Singal zu invertieren? 74LVC1G04. Ist extra für diesen Zweck gemacht. fchk
Frank K. schrieb: > 74LVC1G04. Ist extra für diesen Zweck gemacht. Den Typ finde ich (als Privatperson) leider nicht zum kaufen. Gibt es einen Vergleichstypen den man auch einkaufen kann (ab besten bei Conrad - da wäre ich morgen).
Du kannst auch einen ganzen 74HC04 oder HC00 nehmen und nur ein Gatter benutzen. Die 74AHC1G* und 74LVC1G* enthalten immer genau ein Gatter der jeweiligen Sorte und sind damit kleiner und einfacher unterzubringen. fchk
Vielen Dank für die nützlichen Infos... Ich besorge mit die nötigen Teile und dann versuche ich es weiter. Nur noch eine kurze Verständnis Frage... Wieso treiben die ADUM's weiter? - Wenn der A/D-Wandler hochohmig wird müsste doch die "rest Spannung" an dem Widerstand abfallen oder? - Dann dürfte doch der ADUM nur einen Logische 0 an seinem Ausgang ausgeben. - Das sollte doch die anderen Geräte am SPI-Bus nicht beeinträchtigen oder? So habe ich es als Laie verstanden... Ich würde es nur gerne Verstehen.. das ich in Zukunft nicht wieder so doof fragen muss. DANKE!
Stefan L. schrieb: > - Dann dürfte doch der ADUM nur einen Logische 0 an seinem Ausgang > ausgeben. richtig > - Das sollte doch die anderen Geräte am SPI-Bus nicht beeinträchtigen > oder? falsch, wie kommst du darauf? Wenn ein ADUM auf MISO eine 0 treibt und der andere versucht gleichzeitig eine 1 zu treiben, dann - stresst das die beiden Treiber - ergibt es einen undefinierten Pegel auf MISO, so dass der Arduino Unsinn einliest. Es gibt einige Busse, bei denen ein Pegel dominant ist (d.h. entweder die 0 oder die 1 "gewinnt" einen Buskonflikt). Bei deinem SPI-bus ist das nicht so: der ADUM hat weitgehend symmetrische Treiber, die 1 und die 0 werden annähernd gleich stark getrieben.
Alles klar. Meine Vermutung war das wenn eine Logische 0 anliegt einfach "kein Strom" da ist. Aber habe ich verstanden das der Pin dann richtig auf Masse gezogen wird (PullDown?). Das dass den kompletten Bus beeinträchtigt ist dann auch mir klar ;-). Jetzt habe ich verstanden. Vielen Dank nochmal. Stefan
Stefan L. schrieb: > Aber habe ich verstanden das der Pin dann richtig auf > Masse gezogen wird (PullDown?) ja, aber nicht über einen passiven Pulldown-Widerstand, sonder über einen aktiv angesteuerten FET, der über die Drain-Source-Strecke den Ausgang mit Vss verbindet.
so... hab jetzt alles zusammengebaut und es funktioniert. :-) Vielen Dank nochmal. Habe wieder etliches dazu gelernt. Ihr seid Spitze!
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.