AVR ISP-Programmier-LEDs SCK

Ich verwende einen Attiny45-Mikrocontroller und USBtinyISP als Programmierer, und dies ist das erste Mal, dass ich Dinge (in diesem Fall nur LEDs, aber irgendwann möchte ich einen Himbeer-Pi verbinden) an die Programmierstifte (SCK , MISO, MOSI). Da ich möchte, dass der Mikrocontroller neu programmierbar ist, wenn alles verlötet ist. Ich habe zuerst die Schaltung gesteckt, um sicherzustellen, dass sie funktioniert. Das habe ich gefunden:

Wenn ich eine LED und einen Widerstand in Reihe zwischen SCK oder MOSI habe, wirft avrdude diesen Fehler auf mich:

avrdude: Initialisierung fehlgeschlagen, rc=-1

Durch Abziehen der LED wird der Fehler behoben, aber erlaubt der ISP dies nicht? (Arduinos haben eine LED, die an Pin 13 SCK angeschlossen ist)

Bei MISO passiert dies jedoch nie und ich kann das Programm mit der angeschlossenen LED hochladen. Warum ist das? Gibt es eine Möglichkeit, dieses Verhalten auf SCK und MOSI zu erhalten? Wie wird dieses Problem beeinflusst, wenn ich die LEDs durch einen logischen Pegelwandler durch Himbeer-Pi-GPIO ersetze?

"Der Programmierer muss vor jedem Gerät außer dem AVR geschützt werden, das versuchen könnte, die Leitungen zu steuern." Ich sehe nicht, wie LEDs die Leitungen ansteuern könnten
@Michal: Ich bin mir nicht sicher, ob Ihr Kommentar vor oder nach der Antwort von alexan_e war, aber: Das AVR-Datenblatt besagt, dass die zum Programmieren des AVR verwendeten Leitungen nicht durch andere angeschlossene Geräte gestört werden dürfen, insbesondere nicht durch ein anderes Gerät, das möglicherweise Signale sendet als Teil der Programmierkommunikation (fehl-)interpretiert. Eine fehlerhafte Programmierung oder schlimmer noch, eine schwer zu korrigierende Programmierung der Sicherungen könnte die Folge sein. LEDs "treiben" in dem Sinne, dass sie Strom vom AVR- oder Programmierer-Pin ziehen und verhindern, dass der AVR oder Programmierer gültige 0- und 1-Spannungspegel erzeugt. Glücklicherweise bemerkt Avrdude dies.

Antworten (1)

Arduinos haben eine LED an Pin 13 SCK angeschlossen (und haben kein Problem)

Ja, aber werfen Sie einen Blick auf ein typisches Schema von Arduino UNO (als Beispiel)

Geben Sie hier die Bildbeschreibung ein

Wie Sie sehen können, ist der SCK-Pin mit einem als Puffer verdrahteten OPAMP verbunden, der dann die LED ansteuert. Der Effekt davon ist, dass der SCK-Pin nur die hohe Eingangsimpedanz des OPAMP als Last sieht, sodass der Pin vom Programmierer leicht angesteuert werden kann.

Bei MISO passiert dies jedoch nie

Der MISO-Pin ist der Slave-Ausgang und in diesem Fall ist der Slave der AVR, der im Vergleich zum Programmierer anscheinend eine höhere Antriebsfähigkeit hat und den Ausgang auch mit angeschlossener LED erfolgreich ansteuern kann.

Wenn Sie eine LED verwenden möchten, sollten Sie entweder einen hochohmigen Treiber verwenden (wie einen OPAMP, einen Komparator, einen Mosfet usw.), oder Sie können einen Jumper verwenden, um die LED während der Programmierung zu trennen.

Abgesehen davon habe ich LEDs, die ziemlich häufig ohne Konsequenzen mit AVR-Programmierstiften verbunden sind. Ich denke, das eigentliche Problem mit der OP-Schaltung ist der Strompfad von einem Pin zum anderen durch die LED. In jedem Fall ist die Verwendung eines solchen Treibers eine gute Übung.