PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Mehrere AVR an einer ISP-Schnittstelle und Programmieren?



Mitch64
18.01.2010, 06:48
Hallo,

wie kann ich mit nur einem einzigen ISP-Stecker, an dem mehrere AVR angeschlossen sind, sicherstellen, dass nur ein bestimmter AVR beim programmieren angesprochen wird. Die anderen Controller können bereits programmiert sein und dürfen das Signal an der ISP-Schnittstelle nicht stören.

Die Idee ist, alle Controller (MISO,MOSI,SCK und Reset) mit dem Programmierstecker zu verbinden. Reicht es nun aus, nur die MOSI-Leitung per Jumper mit dem Controller zu verbinden, der programmiert werden soll? Die MOSI-Leitung zu den anderen wäre dann unterbrochen. Oder muss eine andere Leitung unterbrochen werden und wenn ja welche?

Ich kann mir vorstellen, dass die SCK-Leitung auch eine Möglichkeit wäre. Ich bin mir aber nicht sicher.

Kann mir jemand die Frage beantworten?

Gruß Mitch.

christian_u
18.01.2010, 07:27
Reset wäre am sichersten, damit bekommt man dann nur den controller in den Programmiermodus der auch rein soll. Alternativ würde auch SCK gehn.

Andun
18.01.2010, 10:01
Bei allen Varianten, bei denen du nur eine Leitung trennst, kann es dir aber natürlich immer passieren, dass die gerade inaktiven Controller die Leitung stören, oder sind die Pins ausschließlich mit dem Programmieradapter belegt?

Alternativ mal prüfen, wie sich das System verhällt, wenn du die anderen Controller dauerhaft in den Reset ziehst, während du einen anderen programmierst.

Sind die Pegel während eines Resets hochomig? Aber für diese Lösung müsstest du natürlich eine komplizierte Jumper-Konstruktion bauen, um die anderen Reset-Leitung zu ziehen.

kolisson
18.01.2010, 12:12
hallo,

wenn du dir die standardschaltung des isp-programmers (die version mit dem hc244 als treiber) ansiehst, scheint es naheliegend für jeden avr einen solchen HC244 zu spendieren und die Tristate steuerleitungen des selbigen zu schalten. das ist dann bullet-proof

gruss klaus

bax
18.01.2010, 12:19
Die Variante mit einer schaltbaren Reset-Leitung hab ich in einem Projekt mit bis jetzt 5 parallelen AVR's problemlos am laufen.

Rajko

TheDarkRose
18.01.2010, 15:49
Also ich würde solche 4-poligen Drehschalter mit mehreren Stellungen hernehmen wie hier: http://www.shop.robotikhardware.de/shop/catalog/product_info.php?cPath=67&products_id=76

Mitch64
18.01.2010, 17:00
So nun ich nochmal.

Danke erst mal für die vielen Antworten.
Vielleicht nochmal kurz zur schaltung.
Es sollen 3 AVR's verwendet werden. Zwei davon verwenden den Pin MOSI zusätzlich als PWM-Ausgang. Ein Controller verwendet MOSI nicht.

Es müssen also zum Programmieren eines Controllers alle Controller per Reset auf Low gehalten werden. Da Controller 2 und 3 den MOSI auch als PWM-Ausgang verwenden, müssen die natürlich per Diode entkoppelt werden, bevor sie zusammen geführt an den ISP-Stecker gehen. Bei MISO und SCK ist das nicht notwendig.

Ich denke, wenn ich nun den SPI-Clock nur an den Controller leite, der Programmiert werden soll, müßte es doch funktionieren.

Was meint ihr?

christian_u
18.01.2010, 18:18
Ja aber ich find das ziemlich gefährlich, der Controller geht ja gerad in den Programmiermodus dadurch das reset vom programmer auf Low gezogen wird und zusätzlich eine Byte Sequenz hingeschickt wird. Wenn auf deinem Sck was zappelt könnte einer der Controller doch auch im Programmiermodus landen. Du brauchst reset nicht auf Low halten wärend du einen programmierst. Ich würd Reset wie gesagt auftrennen dann bist du sicher.

Mitch64
18.01.2010, 18:39
Wenn ich nur Reset auftrenne, dann wird der Controller resettet, der programmiert werden soll. Die anderen Controller sind munter am arbeiten und stören die Signale.

Ich hab mal ein Schaltbild beigefügt, wie ich mir das vorstelle.

Reset geht auf Alle Controller. Nur der Controller kann in den Programmiermodus gehen, der einen Befehl erhält. Dazu müssen Daten per SCK getaktet werden. Da aber nur der zu programmierende Controller SCK bekommt, kann auch nur der Befehle abarbeiten und ausführen. Die anderen warten.

Bei der Schaltung wird PWM an den MOSI-Pins verwendet. Deshalb ist eine Entkopplung per Dioden notwendig. Da über die Dioden nur High auf den MOSI-Pin gelegt werden kann, wäre ein PullDown vermutlich angebrach (ca. 47k). Den hab ich nicht eingezeichnet. Damit SCK nicht in der Luft hängt, sollte hier auch ein PullDown abhilfe schaffen können.

Die SCK-Leitung vom ISP-Stecker wird auf einen Jumper-Block gegeben. Es wird immer nur ein Jumper gesteckt und leitet den SCK an das IC1 bis 3 weiter. Der Miso-Pin wird von keinem Controller verwendet und ist somit im Tri-State. Hier ist eine Entkopplung per Dioden nicht erforderlich.

Wie die Auftrennung mit dem Reset funktionieren soll weis ich nicht. Vielleicht kann mir das mal jemand erklären, was da genau aufgetrennt wird und wo verbunden bleibt.

Mitch.

oratus sum
19.01.2010, 15:35
Ich habe ebenfalls die Variante mit der reset Version mit 3 Controllern problemlos am laufen und wie TheDarkRose es vorgeschlagen hat mit genau dem gleichen Schalter :-D

Mitch64
19.01.2010, 17:31
Hallo,

ich glaube ihr habt meine Problematik nicht gar nicht verstanden. Diese Umschaltplatine wie sie DarkRose und Oratus Sum vorschlagen, ist zwar eine Möglichkeit. Dies erfordert aber 4 ISP Anschlüsse auf der Platine, wenn da 4 Controller drauf sind. Alle müssen dann mit der Umschaltbox verbunden werden und diese wieder mit dem PC.

Ich wollte aber nur einen ISP-Anschluss auf der Platine haben, aus Platzgründen. Ein solcher 6-poliger Wannenstecker als ISP ist größer als das zu programmierende IC. Das steht in keinem Verhältnis.

Also ich hoffe die Problematik ist jetzt klar?
2 oder mehrere Controller auf einer Platine, die mit einem einzigen ISP-Anschluss programmiert werden können. Nur ein einzelner Jumper bestimmt, welches IC geflashed werden soll.

Also die Frage ist: Nur der Controller bekommt das SCK-Signal vom ISP-Anschluss auf den Pin durchgeschleust. Die anderen erhalten dauerhaft Low per PullDown Widerstand.

Geht das?

bax
19.01.2010, 18:28
Es sollte funktionieren, ja.
Was zu bedenken ist, der ISP muß bei H-Pegel auf der MOSI-Leitung dann gegen 3 Pulldown-R's ankommen + die Last an den Stellen, wo das PWM-Signal hingeht. Inwiefern das der Flankenform schadet kann man eigentlich nur ausprobieren.

Im Protokoll zur seriellen Programmierung ist weiterhin beschrieben, daß der ISP bei verlorener Syncronisation Reset kurz auf High nehmen soll. Inwieweit sich das auswirkt und wie oft das vorkommt, wer soll das wissen?

Ich persönlich würde unter Deinen Umständen bei (nur) 3 Controllern die ISP-Anschlüsse einzeln als einfache Pfostenleiste 2x3 machen und kennzeichnen wie rum der Stecker draufgehört. Das spart schon ne Menge Platz.

Rajko

Mitch64
19.01.2010, 18:56
Na endlich mal ne Antwort die mir gefällt!

Mir ist klar, wenn MOSI auf High gelegt werden soll, dass dann gegen alle PullDown's gearbeitet wird. Aber die Signal-Eingänge sind relativ hochohmig, so dass 3 parallel geschaltete PullDowns je 47k kein problem darstellen sollten. Die Last an den Pins ist eigentlich nur ein FET, der über 1k am Gate gesteuert wird. Sollte also gehen.

Die PWM kann sich nicht negativ auswirken, da Reset auf allen Controllern gleichzeitig liegt. Somit sind alle Pins der Controller als hochohmige Eingänge anzusehen. Somit wird auch keine PWM ausgegeben.

Sollte ein kurzer H-Pegel an Reset wegen verlohrener Synchronisation notwendig werden, wird die PWM aiuch nicht sofort aktiv. Meist wird der Controller verzögert gestartet mit Waitms 500 oder ähnlichem.

Ich werds mal ausprobieren müssen und 3 Controller auf dem Steckboard zusammenbasteln.

Danke nochmal für die Antwort.

Mitch.