Forum: Mikrocontroller und Digitale Elektronik Mehrere AVRs über ISP proggrammieren


von André W. (sefiroth)


Lesenswert?

Moin,

ich habe in einer Schaltung drei AVRs, die ich gerne über einen einzigen 
ISP-Stecker programmieren möchte. Ich habe schon im Forum gesucht, aber 
dort wurde immer nur von Varianten gesprochen, wo der SPI Bus nicht 
genutzt wird.

Bei mir ist es aber der Fall, dass die zwei der drei AVRs über den SPI 
Bus miteinander kommunizieren. Andere Busteilnehmer außer den drei AVRs 
gibt es nicht. Habt Ihr ne Idee, wie ich das Problem lösen kann? Habe 
leider nirgends was gefunden, weder in den Atmel Application Notes, noch 
bei Google...

Ich hab bisher überlegt die Reset und SCK Leitung jeweils mit Jumpern zu 
unterbrechen, aber dann hab ich wahrscheinlich ein Problem beim Flashen 
des Slave, da dann ja zwei Master (Programmer & der andere 
Mikroncontroller) am Bus hängen (könnten zwei Ausgänge zusammengelegt 
sein)... Wenn ich nur die SCK Leitung unterbreche, würde der Programmer 
alle AVRs in den Reset Modus ziehen, aber nur den an der SCK-Leitung 
programmieren, oder? Aber würden die anderen Chips dann nicht über die 
Reset-Leitung mitgelöscht werden (in der ISP-AN stand was, dass über ein 
getaktetes Signal der Reset-Leitung der Chip-Erase durchgeführt wird).

Wäre stark, wenn Ihr da ne Lösung habt. Schaltpläne, wo ne Lösung 
realisiert wurde, würden völlig genügen.

Danke schonmal!

von Christian U. (z0m3ie)


Lesenswert?

Wiso trennst du nicht die Versorgungsleitungen auf und versorgst beim 
programmieren nur den IC den du Programmieren willst ?

von domi (Gast)


Lesenswert?

Einfach die SCK Leitung für jeden Controller mit nem Jumper versehen?

von MicroMann (Gast)


Lesenswert?

> versorgst beim programmieren nur den IC den du Programmieren willst

Da muss man aber mal nachschlagen, ob die Pins überhaupt Spannung 
abkönnen, wenn der MC nicht versorgt ist.

von André W. (sefiroth)


Lesenswert?

domi wrote:
> Einfach die SCK Leitung für jeden Controller mit nem Jumper versehen?

Ist das jetzt ne Frage á la "Wie kann man nur?" oder ein 
Lösungsvorschlag? Ich hab da wie oben zu lesen drüber nachgedacht, hatte 
aber Zweifel wegen des Reset Pins...

Meine Sorge diesbeszüglich:
Programmierung beginnt -> Programmer aktiviert Reset
--> Alle µC Pins automatisch als Eingang konfiguriert
Programmierung wird durchgeführt
--> Da nur eine SCK Leitung durch Jumper verbunden, wird auch nur ein µC 
geflasht, dem Rest sind die Werte an MOSI/MISO wurscht
Programmierung beendet -> Reset deaktiv
--> µC nehmen normale Funktion auf
--> Ein µC konfiguriert sich als SPI-Master (MOSI = Output)
--> MOSI Leitung vom Programmer wahrscheinlich LOW, vom µC evtl HIGH
--> Kurzschluss (will ich nicht g)

(Alternative: Nach Chip-Erase muss der Programmer die Reset Leitung kurz 
auf HIGH-ziehen, bevor er proggen kann -> selbes Dilemma)

Ich hab mich mit dem Bus und dem ISP bisher nicht im Detail beschäftigen 
können, daher hoffe ich hier ja auf Eure Hilfe!

von Stefan (Gast)


Lesenswert?

Lösung von domi
Einfach die SCK Leitung für jeden Controller mit nem Jumper versehen?

steht auch in AVR042:

Multiple AVRs in a single application can share the same ISP interface 
to make it possible to program all of the devices through a minimal 
interface.

However, the AVR devices will all respond to the ISP instructions if 
special design considerations are not made.

If it is desired to have only one ISP interface on the target board, the 
ISP  programming can be designed so that only one of the AVR devices is 
provided with a SPI clock at a time.

All other SPI lines can then be shared. In this way all AVRs can be 
located “behind” the same protection resistors, since they all are held 
in RESET while the ISP reset line is activated.

The gating of the ISP clock can be accomplished e.g. using jumpers.

von André W. (sefiroth)


Angehängte Dateien:

Lesenswert?

Hoppla, diese Application Note habe ich wohl übersehen...

Okay, dann geht das ja mit den Jumpern. Ist dass dann so gemeint wie im 
Anhang? Welchen Wert würdet Ihr für die Schutzwiderstände nehmen? 1k? 
10k? Hab die noch nie in einer Schaltung eingesetzt :-)

von Christian U. (z0m3ie)


Lesenswert?

Vom Programmer zur schaltung 1K
Von der Schaltung zum programmer 100

Die 100 Ohm sind etwas radikal ich weiss aber atmega64 z.b. treiben 
recht wenig auf der spi ich hab in meinem programmer ursprünglich 
überall 1K drin gehat aber einige Controller lassen sich damit nicht 
mehr flashen, deshalb die 100 Ohm.

@ MicroMann
Ich hab das gerad mal ausprobiert mit spannungen an der SPI ohne 
Versorgungspannung also der Controller läuft noch ... und die SPI 
funktioniert auch noch.

von domi (Gast)


Lesenswert?

Wusste nicht, dass es meinen Vorschlag auch als APP-Note gibt. :-)

Normal bekommen aber die Reset-Pins noch eine Diode nach VCC.

Gruß,
Dominik

von André W. (sefiroth)


Lesenswert?

Wegen der Widerstände:
Kann ich den kleinen Widerstand nicht einfach auf 300 Ohm 
dimensionieren? Dann würden im Kurzschlussfall max. 17mA fließen, was 
ein Atmel ja locker verträgt und alles ist bueno. Christian, hast Du es 
schonmal mit 300 statt 100 ausprobiert?

domi wrote:
> Normal bekommen aber die Reset-Pins noch eine Diode nach VCC.

Muss diese Diode denn sein? Hab die noch nie verbaut und bisher ist mir 
kein AVR abgekratzt. In der AN wird die mit "ESD Protection" begründet - 
aber ich Finger doch nicht am Reset Pin rum, daher kann mir 
elektrostatische Entladung doch völlig Schnuppe sein.

von Christian U. (z0m3ie)


Lesenswert?

Ich hattes mit 220 probiert, das hat beim atmega8, 16 wunderbar geklappt 
der atmega64 hat da gestreikt danach bin ich auf 100 runter

von Stefan (Gast)


Lesenswert?

> Wusste nicht, dass es meinen Vorschlag auch als APP-Note gibt. :-)

Siehste mal ;-)

BTW. Cypress (die mit den PSoC, wo es hier diese Diskussion über das 
kostenlose Evalkit gibt) zahlen 250 Ocken für eine Applikationsnotiz, 
wenn diese veröffentlicht wird; und 50 Ocken mehr, wenn sie in einer 
zweiten Sprache als Englisch eingereicht wird.

von Andy H. (vinculum) Benutzerseite


Lesenswert?

André Wippich schrieb:
> Hoppla, diese Application Note habe ich wohl übersehen...
>
> Okay, dann geht das ja mit den Jumpern. Ist dass dann so gemeint wie im
> Anhang? Welchen Wert würdet Ihr für die Schutzwiderstände nehmen? 1k?
> 10k? Hab die noch nie in einer Schaltung eingesetzt :-)

Schon etwas länger her, aber sollten die SCK pins nicht noch einen 
Pullup bekommen, damit die beim Reset=LOW auf jeden Fall definierten 
Pegel haben? Will mir das dann auch so bauen.

http://www.mikrocontroller.net/attachment/21866/Multiple-ISP.gif

von André W. (sefiroth)


Lesenswert?

Andy H. schrieb:
> Schon etwas länger her, aber sollten die SCK pins nicht noch einen
> Pullup bekommen, damit die beim Reset=LOW auf jeden Fall definierten
> Pegel haben? Will mir das dann auch so bauen.

Ja, das würde Sinn machen. Einen offenen Takteingang (was er bei der 
Programmierung ja dann wäre) sollte man wirklich lieber vermeiden ;-) 
Kannst ihn ja eifnach mit 47K auf die Versorgungsspannung ziehen.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.