Es gibt etwas das ich mich schon länger frage: Viele FPGAs, Controller u.ä. setzen ihre Pins während dem Programmieren auf "high". Gibt es dafür einen guten Grund? Das nervt gewaltig wenn man an diesen Pins Gatetreiber angeschlossen hat und mit einmal Programmieren die Brücke sprengt.
"des Programmierens" Sicher das da nicht "high Impedance" steht? Ich kenn mich nicht mit FPGAs aus, aber Controller gehen normalerweise auf "offen" und ein externer Widerstand kann was auch immer da dran hängt sicher festhalten.
Jens M. schrieb: > "des Programmierens" Hast ja recht. Ok ich hab mich falsch ausgedrückt. Die Pins gehen auf "Eingang", haben aber chip-intern einen Pull-up dran hängen. Das Ergebnis für angeschlossene Gatetreiber ist das Selbe: alle Schalter schalten ein. Pull-down Widerstände habe ich sogar eingeplant, aber schlichtweg vergessen zu bestücken. Das nennt sich dann wohl Lehrgeld. Trotzdem bleibt für mich die Frage nach dem Warum. Hat das irgendeinen Grund wieso offenbar standardmässig ein Pull-up vorgesehen wird? Das ist für mich irgendwie nicht logisch erklärbar, da je die angeschlossene Peripherie geschätzt in der Mehrzahl der Fälle "active high" ist.
asdf schrieb: > Viele FPGAs, Controller > u.ä. setzen ihre Pins während dem Programmieren auf "high". Nicht in meiner Welt. Nenn doch mal ein paar Beispiele [1]. asdf schrieb: > Ok ich hab mich falsch ausgedrückt. Die Pins gehen auf "Eingang", haben > aber chip-intern einen Pull-up dran hängen. Nicht in meiner Welt. Nenn doch mal ein paar Beispiele [1]. > Pull-down Widerstände habe ich sogar eingeplant, aber schlichtweg > vergessen zu bestücken. Das nennt sich dann wohl Lehrgeld. Lernen durch Schmerz. Besonders effektiv. > Trotzdem bleibt für mich die Frage nach dem Warum Mal abgesehen davon, daß das in meiner Welt nicht so ist ... man schließt Sensoren, Schalter etc. gern einseitig an GND an. Z.B. weil in einem Metallgehäuse GND allgegenwärtig ist. Und weil die Isolation dieser Leitung dann unkritisch ist. Zugehörige Eingänge brauchen dann im Betrieb einen Pullup. Ein extern beschalteter Pullup wäre dann immer aktiv. Falls interne Pullups nicht abschaltbar sein sollten, reicht das allein schon als Erklärung. Aber nach meiner Beobachtung sind sie i.d.R. abschaltbar und im Zweifelsfall auch abgeschaltet. Falls es doch anders sein (und so dokumentiert) sein sollte, dann muß man halt Vorkehrungen treffen. Im einfachsten Fall mit einem Pulldown. Oder indem man einen invertierenden Gatetreiber verwendet. Oder indem man das RESET Signal zum Sperren (Abschalten) der betroffenen Hardware heranzieht. [1] und zwar mit einem Pointer auf ein Dokument, das den Sachverhalt eindeutig klarstellt
Ich finde es gut, so denkt man an die Pulldowns vor jedem Gate/Gatetreiber weil man sofort merkt wenns knallt. Wenn ein Pin hochohmig wird und der Gate-Treiber offen ist kann es lange gut gehen und irgendwann knallts dann doch. Das wird wohl kaum die wirkliche Erklärung sein, die kenne ich nicht.
asdf schrieb: > Viele FPGAs, Controller > u.ä. setzen ihre Pins während dem Programmieren auf "high". Ich kenne nur einen einzigen MC, der das so macht, die 8051-Familie. Da kann man dann invertierende Gatetreiber dahinter schalten. Einige neuere 8051-Derivate erlauben aber, über ein Fusebit den Pullup auszuschalten. High-Impedance auf einen Gatetreiber zu geben, düfte aber auch nicht gesund für den FET sein. Es gibt daher auch Gatetreiber mit internen Pulldowns.
Du Pullups sind "in meiner Welt" meist um 50-100k, also "weak". Und bei den meisten µC entweder per Config abschaltbar oder sogar nur per Software einschaltbar. Und warum gehen die Pins wohl auf Input.... Weil sie umschaltbar sind, d'uh. Was meinst du wohl, was passiert wenn ein Projekt mit einstellbaren Pins auf einer Platine mit andersrum einstellbaren Pins laufen würde? Rrrrichtig, das knallt. Daher gehen die Chiphersteller auf Nummer sicher und machen den Chip so, das er im Reset oder "ist noch unprogrammiert"-Fall auf einen Zustand läuft der dem entspricht als wenn er nicht im Sockel stecken würde. Das ist normalerweise sicher. (Außer gegen falsches Programm mit falscher IO-Belegung...) Die Schaltung muss immer so ausgelegt werden, das ein fehlender Controller die Schaltung in einen Safe State bringt. Weil das ist was passiert wenn z.B. der Brownout-Reset anspricht. Oder das Teil programmiert wird. Oder debugged. Oder auch nur in der kurzen Zeitspanne zwischen Power on und
1 | void Setup() |
2 | bla(); |
3 | return; // <- hier |
:
Bearbeitet durch User
asdf schrieb: > Hat das irgendeinen > Grund wieso offenbar standardmässig ein Pull-up vorgesehen wird? Ein CMOS Eingang den man floaten lässt (also kein PullWiderstand), pendelt sich üblicherweise bei Ub/2 ein. Und da fließt dann ein verhältnismäßig hoher Strom im Chip. Ein "offener" Eingang ist weiterhin Käse, weil er sowohl in die eine als auch die andere Richtung "driften" kann. Daher ist es sinnvoll, einen Eingang per default mit einem Pullwiderstand nach Vcc oder GND zu ziehen. Dass dann die eine oder andere Richtung in deiner speziellen Applikation Probleme bereiten könnte, kann sein. An diesen Stellen musst du dann eben mit externen Pullwiderständen den für dich richtigen Pegel erzeugen.
Schlumpf schrieb: > Ein CMOS Eingang den man floaten lässt (also kein PullWiderstand), > pendelt sich üblicherweise bei Ub/2 ein. Und da fließt dann ein > verhältnismäßig hoher Strom im Chip. > Ein "offener" Eingang ist weiterhin Käse, weil er sowohl in die eine als > auch die andere Richtung "driften" kann. Beispiel des Herumfloatens von hier: https://e2e.ti.com/support/microcontrollers/msp430/f/166/t/534363 (Die beiden großen Sprünge um 2s sind von einer LED.)
:
Bearbeitet durch User
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.