Forum: Mikrocontroller und Digitale Elektronik open-drain output


von martin (Gast)


Lesenswert?

Ich habe eine Frage bezüglich open-drain outputs.

Bei einem Sensor den ich an die SPI meines ATmega32 anschließen will 
steht folgendes bezüglich dem Anschluss an einen 5V Mikrocontroller:

"Serial port inputs on the sensor should be connected to open-drain 
outputs from the microcontroller or use an active drive level shifter."


Was genau soll dies bedeuten? Kann ich den Sensor nicht einfach so an 
die SPI des ATmega32 anschließen?

Der Sensor benötigt nur 3,3V.
Bei der Resetleitung etc. steht dabei das man einn "Resistor Deivider" 
nutzen soll. Dort habe ich auch entsprechend Widerstände eingebaut.

von martin (Gast)


Lesenswert?

OK ich formulier das Problem einmal präziser.

Ein 5V Mikrocontroller spricht über eine SPI mit einem 3,3V Sensor.

Anfangs wurde ein PIC verwendet. Dieser hatte an den I/O Ports eine 
Output High Voltage von VDD-0.7, also bei Betriebsspannung ~5V wären das 
ca. 4.3V als High Output.

Nun wird der PIC durch einen mega32 ersetzt. Dieser hat an den I/O Ports 
eine Output High Voltage von min 4.2V und Angaben zu typical oder max 
sind nicht angegeben.

Beim Sensor ist als Input Voltage an der SPI max VDD+0.5V angegeben. Der 
Sensor wird mit 3.3V betrieben. Somit wäre eine Spannung von maximal 
3.8V zulässig.

Als Hinweis, für den fall das man einen 5V Mikrocontroller verwendet, 
steht im Datenblatt des Sensors:
"Serial port inputs on the sensor should be connected to open-drain 
outputs from the microcontroller or use an active drive level shifter."

Nun die Frage ob ich den Sensor getrost direkt an die SPI des mega32 
anschließen kann oder ob dies Probleme geben kann. Was sind "open-drain 
outputs" und hat der mega32 sowas? An dem PIC waren die SPI Leitungen 
direkt angeschlossen. So wie ich das verstehe ist aber auch beim PIC die 
Ausgangsspannung eigentlich zu hoch für den Sensor.

Zusätzlich etwas zwischen Mikrocontroller und Sensor zu baun wäre sehr 
aufwendig, andererseits wäre es noch aufwendiger wenn es erst später zu 
einem Problem kommt und man dann alles noch mal machen darf.

von Michael U. (amiga)


Lesenswert?

Hallo,

dan schreib das Programm so, daß Du den AVR-Ausgang sozusagen als 
OpenDrain betreibst: L in das Ausgaberegister. Mit H im DDR ist er 
Ausgang und aktiv L,
mit L im DDR ist er Eingang und damit hochohmig. Der PullUp hängt dann 
an der Betriebsspannung des Sensors und liefert dann dessen H-Pegel.

Gruß aus Berlin
Michael

von Falk B. (falk)


Lesenswert?

@  martin (Gast)

>"Serial port inputs on the sensor should be connected to open-drain
>outputs from the microcontroller or use an active drive level shifter."

Na dann tu das doch, nimm Open Drain oder einen Pegelwandler.

>Nun die Frage ob ich den Sensor getrost direkt an die SPI des mega32
>anschließen kann

Nein.

> oder ob dies Probleme geben kann.

Ja.

> Was sind "open-drain outputs"

Siehe Ausgangsstufen Logik-ICs.

> und hat der mega32 sowas?

Kann man per Software nachbilden.

> An dem PIC waren die SPI Leitungen
>direkt angeschlossen.

Halte ich aber auch für unzulässig, den die DInger sind auch CMOS-ICVs, 
die bringen nahezu Vcc bei High.

> So wie ich das verstehe ist aber auch beim PIC die
>Ausgangsspannung eigentlich zu hoch für den Sensor.

Ist sie auch.

>Zusätzlich etwas zwischen Mikrocontroller und Sensor zu baun wäre sehr
>aufwendig,

???

MFG
Falk

von martin (Gast)


Lesenswert?

Schonmal danke für die Antwort.

Ich würde ungerne noch etwas an der Schaltung ändern, da das Layout 
schon ziehmlich eng ist und ich so ziehmlich jede Leiterbahn neu ziehn 
müsste. Da dies das Erste mal ist, dass ich mich mit der Hardware 
befasse, und nicht nur mit der Programmierung, wäre das ein ziehmlicher 
Aufwand bei wenig Zeit.

Also mit dem PIC hat das Ganze wohl funktioniert. Den Verantwortlichen 
von damals kann ich leider nicht erreichen um zu fragen wie das lief.

Kann man somit davon ausgehen das es zwar geht aber nicht unbedingt 
allzu lange?

Wie kann man denn Open Drain per Software nachbilden und würde es dann 
funktionieren?

von kurz (Gast)


Lesenswert?

>Kann man somit davon ausgehen das es zwar geht aber nicht unbedingt
allzu lange?

Willst Du basteln oder gescheit arbeiten ?

Alle Antworten auf alle Fragen sind oben schon vorhanden. Nur lesen.

von martin (Gast)


Lesenswert?

Ich will in erster Linie in der Zeit fertig werden und liege sowieso 
nicht mehr im Plan.

Ich bin mir auch nicht sicher ob ich die Antwort von Michael richtig 
verstehe.

Ausgabe:
Also wenn ich ein Low Pegel am Ausgang erzeugen will dann ganz normal 
das entsprechende Bit im PORTB Register auf 0 setzen und das 
entsprechende Bit im DDRB Register auf 1.
Für einen High Pegel setze ich dann das entsprechende Bit in DDRB wieder 
auf 0 und dann hängt die Leitung auf dem Pullup vom Sensor und somit auf 
dessen High Signal. Hat der Sensor ein Pullup? Wo sehe ich das?

Eingabe:
OK hier das nächste Problem. Ich sehe grade das der PIC schon ca. 2V als 
High erkennt. Der mega32 benötigt aber 3,5V.

Also bleibt mir wohl nix anderes übrig als einen Pegelwandler zu nutzen, 
oder wie löse ich das am einfachsten bzw. am schnellsten?

von Falk B. (falk)


Lesenswert?

@  martin (Gast)

>Für einen High Pegel setze ich dann das entsprechende Bit in DDRB wieder
>auf 0 und dann hängt die Leitung auf dem Pullup vom Sensor und somit auf
>dessen High Signal.

Genau.

> Hat der Sensor ein Pullup?

Keine Ahnung. Wahrscheinlich nicht. Kann man aber messen. Wenn ein 
offenes Pin auf High liegt, dann hat er einen Pull-Up.

> Wo sehe ich das?

Im Datenblatt.

>OK hier das nächste Problem. Ich sehe grade das der PIC schon ca. 2V als
>High erkennt.

TTL Pegel.

> Der mega32 benötigt aber 3,5V.

Ist halt echt CMOS.

>Also bleibt mir wohl nix anderes übrig als einen Pegelwandler zu nutzen,

Ja.

>oder wie löse ich das am einfachsten bzw. am schnellsten?

AVR auf 3,3V laufen lassen ;-)

MFg
Falk

von martin (Gast)


Lesenswert?

Den ATmega32 auf 3,3V laufen lassen wär eine Möglichkeit. Problem ist 
dabei nur das ich noch nicht weiß ob er dann ohne Probleme mit den 
anderen 5V ICs kommunizieren kann. Genauso gibts dann nurnoch nen 8 MHz 
Quarz und ich hab hier zur Zeit nur 16er.

Was für SMD Pegelwandler könnt ihr mir empfehlen? Ich brauch etwas 
möglichst platzsparenes in SMD.


Falls das mit den Pullups für die Übertragung zum Sensor hin 
funktioniert, könnte man dann nicht einfach über einen Transistor und 
einem Widerstand zur Strombegrenzung die 5V für den Highpegel von VCC 
durchschalten?

von martin (Gast)


Lesenswert?

Kann es ein das es durch die kurzen Signale die man ja bei der SPI hat 
das trotzdem funktioniert? Der Sensor sollte ja eigentlich nicht die 
Zeit haben so viel zu ziehn das er dadurch kaputt geht.
Andere Richtung von Sensor zu µC könnte man das dort nicht einfach mit 
einem Transistor schalten?

von Falk B. (falk)


Lesenswert?

@  martin (Gast)

>Kann es ein das es durch die kurzen Signale die man ja bei der SPI hat
>das trotzdem funktioniert?

Nein.

> Der Sensor sollte ja eigentlich nicht die
>Zeit haben so viel zu ziehn das er dadurch kaputt geht.

DOCH! Die Dioden leiten innerhalb weniger Nanosekunden!
Nimm einen Längswiderstand von 1K und fertig. Siehe Artikel.

>Andere Richtung von Sensor zu µC könnte man das dort nicht einfach mit
>einem Transistor schalten?

Das ist eine Art von Pegelwandler. Nicht die schnelleste, aber OK.
Siehe Artikel.

MfG
Falk

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.