PIC-I/O-Pin-Status beim Einschalten

Ich habe eine LED auf folgende Weise an Pin RA1 von PIC18F25K20 (mit 3,3-V-Versorgung versorgt) angeschlossen:

5V-Schiene -> Widerstand (200 Ohm) -> LED-Anode -> LED-Kathode -> RA1

RA1 : Eingang -> LED ist aus
RA1 : Ausgang Low -> LED ist AN.

Ist dies der richtige Weg, um die LED anzuschließen, da der PIC mit 3,3 V betrieben wird und die LED mit 5 V verbunden ist?

Ich habe RA1 als Eingang initialisiert, wie in der DEVICE_InitRoutine gezeigt. Code ist in C-Sprache geschrieben - Microchip C18-Compiler.

void main()
{
    DEVICE_Init();
    //wait one second
    while (1)
    {
        TRISA = 0; //led is on
        //wait 2 seconds
        TRISA = 0x06; //led is off
        //wait 4 seconds
    }
}

void DEVICE_Init (void)
{
    OSCCON = 0x73; //PRIMARY INTERNAL OSCILLATOR
    PORTA = 0;  
    LATA = 0;           
    TRISA = 0x06;           //RA1, RA2 INPUT
    ....
}

Wenn ich den Chip zum ersten Mal einschalte, schaltet sich die LED für den Bruchteil einer Sekunde ein und dann aus. Mein Verständnis ist, dass die IO-Pins beim Zurücksetzen eingegeben werden. Warum sollte die LED beim Einschalten für einen kurzen Moment aufleuchten?

Ich hatte RA1 & RA2 als Eingänge mit angeschlossenen LEDs..ignoriere RA0 bitte..andererseits verhält es sich unabhängig von den I/O-Pins auf allen gleich..

Antworten (3)

PIC-I/O-Pins wachen beim Einschalten im Zustand hoher Impedanz auf.

Der Grund, warum Sie den LED-Glitch sehen, liegt wahrscheinlich darin, dass die 5-V-Versorgung schneller hochkommt als die 3,3-V-Versorgung und die LED-Kathode vorübergehend durch die Schutzdiode an diesem Pin im PIC niedrig gehalten wird. Dies ist nicht gut und kann beim Einschalten zu einem Latchup führen.

Wenn Sie sicherstellen können, dass die 3,3-V-Versorgung vor der 5-V-Versorgung anliegt und nach ihr abfällt, kann Ihr Schema funktionieren. Es ist jedoch besser, einen Transistor zu verwenden oder die LED von der 3,3-V-Versorgung zu betreiben. Letzteres verschwendet auch weniger Strom, vorausgesetzt, Ihre 3,3-V-Versorgung ist einigermaßen effizient.

Kann es nicht mit 3,3 V betreiben, da es eine blaue LED hat ... und versucht, die Verwendung von Transistoren zu vermeiden ...
Wie kann ich sicherstellen, dass die 3,3-V-Schiene zuerst vor 5 V anliegt und nach 5 V stirbt? Eine Möglichkeit, die ich mir überlegt habe, besteht darin, die Elektrolytkondensatoren für die Bypass-Filterung für jeden dieser Linearregler auszutauschen. Was kann ich sonst noch tun, um dies sicherzustellen?
@user: Es kann schwierig sein, dies sicherzustellen. Die Verwendung eines Transistors zum Schalten der LED ist wahrscheinlich einfacher und zuverlässiger.

Ihre LED schaltet sich für den Bruchteil einer Sekunde ein, weil die Ausgänge auf Hi-Z (hohe Impedanz) oder schwebend zurückgesetzt werden. Um dieses Problem zu beheben, setzen Sie etwas wie einen 10k-Widerstand vom Ausgang auf Masse. Dies ist als Pulldown-Widerstand bekannt und macht den Ausgang beim Start niedrig. Ich habe hier eine ähnliche Frage gestellt:

https://stackoverflow.com/questions/41557868/atmega128-output-flicker-on-startup

Bei einem kleinen Widerstandswert (weniger als 100 K) bleibt die LED dunkel, wenn sie nicht eingeschaltet sein soll, und bei einem höheren Widerstandswert sehe ich, dass sie sich beim Einschalten für den Bruchteil einer Sekunde einschaltet.
Das liegt daran, dass der LED-Pfad mit den höheren Widerständen immer noch weniger Widerstand hat, also wird er die Floating-Spannung nehmen. Es gibt wahrscheinlich eine magische Zahl, aber ohne alles zu sehen, was Sie verwenden, wird es mir unmöglich sein, Ihnen diese zu geben.

Initialisieren Sie sie nicht als Eingänge, sondern nur als Ausgänge. Ausgänge können Quelle und Senke sein. Alle Pulldown-Widerstände reichen nicht aus, da die Diode in dieser Konfiguration Strom liefert. Nicht hochziehen!!. Initialisieren Sie einfach die Ports so schnell wie möglich. Ihre Diode muss Uv> 1,7 V haben.

Meinen Sie also, um die LED auszuschalten, sollte ich den Pin-Ausgang anstelle des Eingangs hoch machen?