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?
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)
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.
Ignacio Vazquez-Abrams
Michal
gwideman