Siro
22.05.2019, 15:08
Ich wuste jetzt nicht wohin damit, deshalb hab ich es mal hier eingeparkt.
Hat eigentlich was mit Mikrocontrollern allgemein zu tun:
Bei einem Reset sind, bei den meisten Controllern, die Eingänge auf Input konfiguriert.
Oftmals ist dann auch zusätzlich ein interner Pullup aktiv, damit die Pins nicht schweben, sondern einen definierten Pegel haben (High)
Soweit nix aufregendes, aber:
Es gibt Controller, die haben keine "echten" Pullups, sondern Stromquellen und hier wirds unter umständen "br(ä)nzlig".
Wenn man ein Gate eines Mosfets am Port hat, so wie ich einen N-Channel, dann ist er im "Reset" Zustand durchgeschaltet,
da der Pullup das Gate nach VCC zieht. Der Mosfet leitet also. Das war auch so geplant und gewollt.
Jeder Mosfets benötigt jedoch um sicher (niederohmig) durchzuschalten eine bestimmte Gate Source Spannung.
Ist die Spannung zu niedrig, schaltet er nicht richtig durch, wird heiss und ....
Bei meinem Controller, der mit 3,3 Volt versorgt wird, hab ich mir da kaum einen Kopf gemacht, ein High von 3,3 Volt sollte bei den meisten Typen ausreichen.
Das bestätigten auch diverse Versuche.
Jetzt kommt aber der Clou:
Der Controller (in meinem Falle, der LPC1768 hat keine "richtigen" Pullups, sondern Stromquellen und an dieser Stromquelle fällt eine erhebliche Spannung ab.
In meinem Controller tatsächlich rund 1,2 Volt. Somit liegt das Gate bei einem Reset nur noch auf 2,1 Volt statt 3,3.
Das ist im Normalfalle ja nur Kurzzeitig, denn der Port wird ja auf Ausgang geschaltet um den Mosfet entsprechend zu schalten.
Halte ich aber den Prozessor zum Beispiel mit einem Breakpoint fest, bevor das Richtungsregister für diesen Pin gesetzt wurde,
bleibt der Pin auf 2,1 Volt stehen, was in meinem Falle, glücklicherweise "glimpfliche" Auswirkungen hatte, der Mosfet hat nämlich thermisch abgeschaltet.
Er versuchte mit schwächelndem On Widerstand ein Magnetventil zu schalten.
Gewundert hatte ich mich, weil das angesteuerte Magnetventil plötzlich klackte, obwohl die Software grade stand.
Erst wenn das Direction Register im Controller auf Output gesetzt ist, wird der Pin auch "richtig" High annähernd 3,3 Volt.
Ein externer, zusätzlicher "richtiger" Pullup hat das Problem dann beseitigt.
Übrigens: die LPC24xx Serie hat auch das Problem, die LPC13xx Serie nicht.
Siro
Um das prüfen, einfach den Reset Pin auf Low halten und am nicht beschalteten Portpin die Spannung messen.
Hat eigentlich was mit Mikrocontrollern allgemein zu tun:
Bei einem Reset sind, bei den meisten Controllern, die Eingänge auf Input konfiguriert.
Oftmals ist dann auch zusätzlich ein interner Pullup aktiv, damit die Pins nicht schweben, sondern einen definierten Pegel haben (High)
Soweit nix aufregendes, aber:
Es gibt Controller, die haben keine "echten" Pullups, sondern Stromquellen und hier wirds unter umständen "br(ä)nzlig".
Wenn man ein Gate eines Mosfets am Port hat, so wie ich einen N-Channel, dann ist er im "Reset" Zustand durchgeschaltet,
da der Pullup das Gate nach VCC zieht. Der Mosfet leitet also. Das war auch so geplant und gewollt.
Jeder Mosfets benötigt jedoch um sicher (niederohmig) durchzuschalten eine bestimmte Gate Source Spannung.
Ist die Spannung zu niedrig, schaltet er nicht richtig durch, wird heiss und ....
Bei meinem Controller, der mit 3,3 Volt versorgt wird, hab ich mir da kaum einen Kopf gemacht, ein High von 3,3 Volt sollte bei den meisten Typen ausreichen.
Das bestätigten auch diverse Versuche.
Jetzt kommt aber der Clou:
Der Controller (in meinem Falle, der LPC1768 hat keine "richtigen" Pullups, sondern Stromquellen und an dieser Stromquelle fällt eine erhebliche Spannung ab.
In meinem Controller tatsächlich rund 1,2 Volt. Somit liegt das Gate bei einem Reset nur noch auf 2,1 Volt statt 3,3.
Das ist im Normalfalle ja nur Kurzzeitig, denn der Port wird ja auf Ausgang geschaltet um den Mosfet entsprechend zu schalten.
Halte ich aber den Prozessor zum Beispiel mit einem Breakpoint fest, bevor das Richtungsregister für diesen Pin gesetzt wurde,
bleibt der Pin auf 2,1 Volt stehen, was in meinem Falle, glücklicherweise "glimpfliche" Auswirkungen hatte, der Mosfet hat nämlich thermisch abgeschaltet.
Er versuchte mit schwächelndem On Widerstand ein Magnetventil zu schalten.
Gewundert hatte ich mich, weil das angesteuerte Magnetventil plötzlich klackte, obwohl die Software grade stand.
Erst wenn das Direction Register im Controller auf Output gesetzt ist, wird der Pin auch "richtig" High annähernd 3,3 Volt.
Ein externer, zusätzlicher "richtiger" Pullup hat das Problem dann beseitigt.
Übrigens: die LPC24xx Serie hat auch das Problem, die LPC13xx Serie nicht.
Siro
Um das prüfen, einfach den Reset Pin auf Low halten und am nicht beschalteten Portpin die Spannung messen.