Hallo,
ich benötige diverse 24V-Ports, die bidirektional sein müssen. Manche
werden nur als Ausgang benutzt, andere nur als Eingang (per Software
definierbar).
Es gibt aber auch welche, bei denen beide Funktionalitäten benötigt
werden. Z.B. Ein Taster, der eine eingebaute Lampe hat, die zur
Quittierung dient (siehe Schaltung im Anhang). Drückt man den Taster, so
wird über ein Spannungsteiler ein 5V-Signal an den AVR gegeben. Während
der Taster gedrückt ist, leutet die Lampe (bedingt durch die Hardware).
Der Prozessor muß den Pin dann als Ausgang initialisieren und die Lampe
leuchten lassen, solange bis ein bestimmter Prozeß abgearbeitet wird.
Erst danach darf die Lampe wieder ausgehen und der AVR den Prozessorpin
wieder als Eingang initialisieren.
Gibt es eine "bessere" und eventuell preiswertere Schaltung hierfür?
Hier die Randbedingungen:
* 24V-Eingang: 10...20mA Strom bei 24V Pegel
(Mindeststrom wegen den mechanischen Kontakten)
* 24V-Ausgang: 200mA / kurzschlußfest
(daher der BTS High-Side-Switch von Infineon)
Diese Schaltung ist ein sogenanntes Flop.
Denn:
wenn das Ding als Eingang funktionieren soll, ist der uC-Pin hochohmig.
Dann kommten 24V herein.
Über den Spannungsteiler werden das 5V.
Diese 5V gehen zum uC und zum BTS !
Dann schaltet der BTS durch und gibt 24V aus.
Damit wird der Zustand "es waren mal 24V da" gemerkt.
Ergo: Flop.
BTW: die Diode nach dem BTS ist unnötig. Der High-Side-Treiber nimmt es
Dir nicht übel, wenn du an den Ausgang 24V anlegst. Die bidirektionalen
Eingänge mache ich auch so (nur eben mit 2 Controller- bzw. FPGA-Pins).
@Lothar Miller:
oh stimmt. Daran habe ich nicht gedacht.... Spätestens beim
Versuchsaufbau auf dem Steckbrett hätte ich es gemerkt.
Wie könnte man das Problem umgehen? Wie wird denn das in Geräten
gemacht, die bidirektionale 24V I/O´s haben? So was gibts ja bereits,
habe aber über Google nichts gescheites gefunden. Außer ein Spezial-IC
vom IC-Haus, aber das wird sicherlich recht teuer sein und man ist
abhängig von einem Hersteller...
@Martin M. (rst)
>Wie könnte man das Problem umgehen? Wie wird denn das in Geräten>gemacht, die bidirektionale 24V I/O´s haben?
Du brauchst zwei IOs am AVR. Einer Eingang, einer Ausgang.
MFG
Falk
>Wie wird denn das in Geräten gemacht, die bidirektionale 24V I/O´s haben?
Ja, machs wie Falk es sagt:
-- ein Pin für den Ausgang:
Der Schaltet mit High die 24V auf den 24V-IO-Pin durch
und mit Low den Ausgang vom BTS ab.
Also ist der 24V-IO-Pin im abgeschalteten Zustand praktisch hochohmig.
-- einen anderen Pin für den Eingang:
Der liest dann einfach den aktuellen Zustand des 24V-IO-Pins ein.
Damit kann z.B. auch schön kontrolliert werden, ob am 24V-IO-Pin
tatsächlich 24V ankommen, wenn der BTS durchgeschaltet hat. Das ist eine
Selbstdiagnose, wenn der 24V-IO-Pin als Ausgang verwendet wird.
daran habe ich auch schon gedacht. Ich werde wohl nicht drum herum
kommen.
Dann muß ich halt ein paar Schieberegister ergänzen (Port-Expander mit
SPI), denn sonst reichen die Prozessorpins nicht....
Applikationen für kurzschluss feste und zurücklesbare Ausgänge, mit
Freilaufdiode für indultive lasten, sind hier beschrieben:
http://www.ichaus.biz/wp1_mikrocontroller
hatte das Problem auch schon, und habe es so gelöst. Jedoch ist mein
bidirektionaler Pegelwandler für 3.3V <> 8V, sollte aber auch mit 24V
kein Problem sein.
Man muss mit dem Spannungsteiler ja nicht auf exakt 5V gehen, sondern
kann auf auf einen kleineren Wert gehen, der vom AVR noch als high
erkannt wird.
Bsp:
Der AVR erkennt 0,7 V_cc (an den meisten Pins) sicher als high; bei 5V
also 3,5V.
Spannungteiler 3,9k / 820: 24V -> 3,56V
Die Kenngrößen vom High-Side-Switch kenne ich nicht; wenn das Verhältnis
V_in_high_min / V_in_low_max kleiner als 5/3,56 ist, kann man den
AVR-Ausgang (über einen weiteren Spannungsteiler) daran anschließen.
Ist der Eingang des High-Side-Switches negiert, oder das Verhältnis
V_in_high_min / V_in_low_max größer als 5/3,56, könnte man einen
Komparator zwischenschalten.
Insgesamt aber eher eine "Bastellösung" mit wahrscheinlich mehr Aufwand
als die fertigen ICs von ichaus.biz
Grüße
Ladde