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_Init
Routine 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?
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.
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
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.
Benutzer101095