Forum: Mikrocontroller und Digitale Elektronik Zwei ISPs verbinden


von Rangi J. (rangi)


Lesenswert?

Hallo Forum,

ich würde gerne zwei AVRs (Tiny und Mega) über einen ISP-Stecker 
flashen.
Folgender Hintergrund: Es gibt eine Leiterplatte mit einem Mega64 mit 
einem ISP-Stecker. Zur Laufzeit wird an diesen Stecker ein 
Flachbandkabel zu einer anderen Platine gesteckt. Auf dieser arbeitet 
ein ATTiny. Auch dieser hat den gleichen ISP. Beide kommunizieren zur 
Laufzeit über diese Verbindung, zum Programmieren werden sie getrennt 
und dann einzeln geflasht.
Zur Vereinfachung soll der Mega und der Tiny jetzt auf nur eine 
Leiterplatte. Sinnvollerweise werden die MISO, MOSI und SCLK-Leitungen 
direkt verbunden. Deshalb habe ich nur einen ISP-Stecker. Über einen 
Jumper könnte ich jetzt auswählen, welcher der beider geflasht wird.
Jetzt aber das Problem: der andere, der gerade nicht programmiert wird, 
versucht mit dem anderen zu reden und stört somit das ISP-Protokoll.
Wenn ich ihn versuche abzuschalten (Reset auf 0) wird er auch mit 
programmiert.

Gibts hier irgendeine sinnvolle Lösung, die mit möglichst wenig Jumpern 
und Kabeln auskommt?

von Peter II (Gast)


Lesenswert?

Rangi Jones schrieb:
> Gibts hier irgendeine sinnvolle Lösung, die mit möglichst wenig Jumpern

2 umschalt (3pin) -  Jumper

damit schaltet du jeden Atmel zwischen

Dauerreset - Normal - Programieren

um.

von Rangi J. (rangi)


Lesenswert?

Wird der im Dauerreset nicht "mitprogrammiert"?

von Jochen S. (jochen_s)


Lesenswert?

Hallo Rangi,

wenn die zwei Controller über diese Verbindung kommunizieren sollen, 
bedeutet das doch, dass die MISO und MOSI gekreuzt werden müssen? Bist 
du sicher, dass die ISP Steckverbindung dann für beide Controller 
korrekt belegt ist?

Bitte korrigiert mich falls ich jetzt einen Dreher im Kopf habe.


Gruß
Jochen

von Peter II (Gast)


Lesenswert?

Rangi Jones schrieb:
> Wird der im Dauerreset nicht "mitprogrammiert"?

oh, stimmt.

Wenn du noch einen Pin an den Atmels frei fast, kannst du ja abfragen 
wie der Jumper steht. Wenn der 1.Programiert wird dann darf der 2. 
einfach nichts machen.

von Rangi J. (rangi)


Lesenswert?

@Jochen:
Ja, du hast recht, aber ich verwende für die Kommunikation nicht die SPI 
sondern ein eigenes Protokoll.

von Rangi J. (rangi)


Lesenswert?

@PeterII
hab ich auch schon dran gedacht, aber leider habe ich auf dem Tiny kein 
Pin mehr frei.

von Max D. (max_d)


Lesenswert?

1. MISO und MOSI werden immer 1zu1 verbunden (heißen ja MasterInSlaveOut 
und MasterOutSlaveIn, ändern also immer richtig ihre Richtung)

2. Fürs programmieren würde ich Reset an beide Controller führen und 
dafür die SCK-Leitung umschalten. Die muss man dann zwar bei jedem 
Controller mittelohmig (paar k) hoch oder runter ziehen damit kein noise 
einstreut, aber das sind nur 2 resis.

von Ralf G. (ralg)


Lesenswert?

Rangi Jones schrieb:
> Zur Vereinfachung soll der Mega und der Tiny jetzt auf nur eine
> Leiterplatte.

So eine Notlösung hatte ich auch schon mal vor.
Der Tipp, der mir damals geholfen hat: 'Nimm einen größeren ATmega für 
alles!'
(Ich hatte allerdings auch dazugesagt, was ich konkret machen will.)

von Rangi J. (rangi)


Lesenswert?

@Ralf G.
Noch größer wird echt schwer. Ich brauche 3 serielle Schnittstellen im 
Vollduplex. Dann bleibt nur noch ein Mega640/1280/2560. Den gibts aber 
nur im TQFP100-Package. Das bekomme ich nicht mehr gelötet.

Die andere alternative wäre ein Soft-UART. Aber für Voll-Duplex brauche 
ich 2 Timer. Die habe ich aber nicht mehr frei, maximal einen.

Ansonsten müsste ich vom AVR weggehen. Das bereit aber Arbeit und 
Schmerzen.

von oli (Gast)


Lesenswert?

TQFP 100 loeten. .. geht doch. Eine gute Brille und man ist dabei.

von Rangi J. (rangi)


Lesenswert?

@oli
ja, aber nicht auf selbergemachten Leiterplatten.

von Max D. (max_d)


Lesenswert?

Xmegas haben schon im qfp44 eine halbe Tonne USARTs....

von Peter II (Gast)


Lesenswert?

Rangi Jones schrieb:
> ja, aber nicht auf selbergemachten Leiterplatten.

warum denn nicht? Meist ist das Routing dann ein Problem aber doch nicht 
das Löten.

Du könnest auch nur die großen Atmel programmieren und diese 
Programmiert dann den kleinen.

von Rangi J. (rangi)


Lesenswert?

@Peter
Das bringt mich auf eine Idee mit der Frage: könnte das funktionieren?

Der ISP wird mit dem Mega verbunden, ganz normal. Die Verbindung zum 
Tiny erfolgt dann nicht mehr über die MISO, MOSI und SCKL-Leitungen des 
Megas, sondern über irgendwelche anderen Portpins. Wenn der Tiny jetzt 
programmiert werden soll, muss ich diese Leitungen transparent 
durchleiten. Dazu würde ich PCINTs verwenden und bei jeder Änderung an 
den Leitungen den Weg durchschalten. Der Reset vom ISProgrammer geht zu 
einem 3er Jumper. 1-2 zum Mega-Reset-Pin und 2-3 zum Tiny-Reset-Pin und 
zu einem Portpin (Input) des Megas. Um zu erkennen das der Tiny 
angesprochen werden soll, kann ich die Reset-Leitung auf dem Megas 
einlesen. Sobald hier ein Low kommt, schalte ich den Weg (MISO, MOSI und 
SCLK) durch und die Interrupts frei.
Ist die Reset-Leitung während des gesamten Vorgangs ISP (alles was da so 
dran hängt, Fuses, etc.) immer 0 oder geht wird damit auch etwas 
codiert?
Kann das mit der Laufzeit (PCINT-ISR @ 20MHz) funktionieren?

von Peter II (Gast)


Lesenswert?

Rangi Jones schrieb:
> Kann das mit der Laufzeit (PCINT-ISR @ 20MHz) funktionieren?

keine Ahnung, aber ich würde es ohne Interrupt machen.

einfach in einer schleife eingang auf ausgang zuweisen und da so lange 
wie der Jumper das will.
1
while( Jumper )
2
  pinOut = pinIN;

von Rangi J. (rangi)


Lesenswert?

@Peter II
ja, auch eine Idee, am besten gleich in der ISR. Dann nerven auch andere 
Interrupts nicht. In diesem Modus kann der ohnehin nichts sinnvolles 
machen, ob er das in der ISR macht oder draussen ist egal.

von Eduard S. (schneehase)


Lesenswert?

Wiso so kompliziert?

Einfach Vcc (5v) schalten.

Mikrocontroller ohne Spannung lässt sich nicht flashen!

Mit Dioden, Wiederständen oder einem 74xx

von Peter II (Gast)


Lesenswert?

Eduard Scheske schrieb:
> Mikrocontroller ohne Spannung lässt sich nicht flashen!

außer wenn er über seine IO-Pins sich die 5V besorgt. (z.b. I2C Bus)

von Rangi J. (rangi)


Lesenswert?

@Eduard Scheske
Das ist garkeine gute Idee. Die SPI-Leitungen des ISP und des 
Controllers versorgen den abgeschalteten IC über die Clamping-Dioden 
also 5V - 0,7V = 4,3V. Das reicht allemal, das der anläuft und auch 
arbeitet.
Dann belastet es auch die Datenleitung und löst u.u. auch einen 
Kurzschluss aus.

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

Rangi Jones schrieb:
> direkt verbunden. Deshalb habe ich nur einen ISP-Stecker. Über einen
> Jumper könnte ich jetzt auswählen, welcher der beider geflasht wird.
> Jetzt aber das Problem: der andere, der gerade nicht programmiert wird,
> versucht mit dem anderen zu reden und stört somit das ISP-Protokoll.
> Wenn ich ihn versuche abzuschalten (Reset auf 0) wird er auch mit
> programmiert.
>
> Gibts hier irgendeine sinnvolle Lösung, die mit möglichst wenig Jumpern
> und Kabeln auskommt?

 Reset von anderem uC abfragen ?
 Wenn auf 0, still sein, keine Kommunikation, alles andere kann gehen.
 Falls später gewünscht, Pin als Ausgang schalten und anderen uC
 flashen.

von ich (Gast)


Lesenswert?

Hi,
also Jumpern mit 2x2 Jumper für jede Leitung kontakt 12 flashen vom 
Mega, 34 der Tiny und dann Arbeitsstellung 24 bzw. 12.
Hab ich nen Fehler?
Hoffe geholfen zu haben.
MfG
ich

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.