Zwei ISPs verbinden

#3880148
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?
#3880168
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
#3880188
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.
#3880221
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.
#3880286
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?
#3880606
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.
(Firma: Vescomp) #3880649
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren