Hallo Ihr Klugen Menschen, ich habe gerade geschlagene zwei Stunden nach der richtigen Doku gesucht, wo das beschrieben ist, was ich brauche, aber nicht mehr gefunden. Vor ein paar Jahren bin ich mal drüber gestolpert (ich glaube sogar hier im Forum), aber wenn man's dann später mal braucht ... Ich bastle gerade eine Platine mit 2 AVR-Tinys drauf (ein 4313 und ein 861), sowie einem ISP-Steckerchen, über das ich die beiden Dinger programmieren will. Aber natürlich immer nur einen von den Beiden, nicht beide gleichzeitig. Welcher gerade dran ist, will ich mit einem Jumper auswählen. Wie verschalte ich den ISP-Stecker und die MOSI/MISO/RESET/SCK-Pins mit diesem Jumper jetzt am Besten, so dass der gerade nicht zu programmierende weder stört noch aus Versehen gelöscht wird? Es gibt mehrere Möglichkeiten, eine davon wäre natürlich zwei getrennte ISP-Stecker, was ich aber unelegant finde. Es gibt auch - wenn ich mich richtig erinnere - von Atmel eine PDF-Datei mit einem "HowTo", aber eben ... das Internet ist groß, verdammt groß, und eine einzelne PDF ist da die berühmte Stecknadel im Heuhaufen. Hat jemand von Euch diese Information gerade mal kurz parat? Vielen Dank. Gerald.
Ob dein Vorhaben mit geringem Aufwand möglich ist, hängt davon ab, welche Funktion die ISP-Pins der beiden Controller in deiner Schaltung haben. Im unwahrscheinlichsten Falle, nämlich das sie nicht für etwas Anderes genutzt werden und sich hochohmig verhalten (Eingang), brauchst du nur eine Umschaltmöglichkeit (Jumper) für den Resetanschluss. Der mit nicht aktivem Reset, wird weiter sein Programm abarbeiten. Ist natürlich Verschwendung von Ressourcen, gerade bei Tinys. Wenn die Pins genutzt werden sollen, dürfen sie nur bei aktivem Reset zum ISP durchgeschaltet werden. Könnte man mit Analogsignalschaltern a la 4066 machen. Das macht dann aber die Platzersparnis gleich wieder zunichte - schade! mfG
Gerald schrieb: > Ich bastle gerade eine Platine mit 2 AVR-Tinys drauf (ein 4313 und ein > 861), sowie einem ISP-Steckerchen, über das ich die beiden Dinger > programmieren will. Aber natürlich immer nur einen von den Beiden, nicht > beide gleichzeitig. Welcher gerade dran ist, will ich mit einem Jumper > auswählen. > > Wie verschalte ich den ISP-Stecker und die MOSI/MISO/RESET/SCK-Pins mit > diesem Jumper jetzt am Besten, so dass der gerade nicht zu > programmierende weder stört noch aus Versehen gelöscht wird? Die Umschaltung kann (unter gewissen Randbedingungen) einfach über das Reset-Signal vom ISP-Stecker erfolgen. Das kannst du per Jumper entweder an den einen oder an den anderen µC legen. Damit ist erstmal sichergestellt, dass du nur den wirklich Gemeinten umprogrammierst. Nun zu den Randbedingungen: So lange an den drei anderen für ISP genutzten Pins nix anderes hängt, sollte das schon alles gewesen sein. Ansonsten wird es mehr oder weniger kompliziert...
Oha, da bin ich gleich in die erste Falle hineingelaufen, nämlich nicht genau zu erklären, was ich machen will. Hier also ein Nachtrag zum Problem. Die beiden Kleinen auf der Platine warten nämlich darauf, dass sie über eben diese Leitungen, die am ISP-Stecker liegen, ihre Befehle bekommen, und zwar sind sie beide als I2C-Slaves programmiert. Die Tinys verwenden ja für I2C und ISP die gleichen Pins, so dass der 10-polige Stecker im Normalfall (also zum Nicht-Programmier-Zeitpunkt) mit einem I2C-Master auf einer anderen Platine verbunden wird. MOSI wird zu SDA, und SCK wird zu SCL. Die Möglichkeit, die Reset-Leitung zu jumpern, ist also nicht geeignet, weil dann der andere Tiny, der nicht resetet wird, sein Programm weiter ablaufen liesse, und dieses Programm würde die ISP-Befehle auf MOSI/MISO/SCK als I2C-Befehle interpretieren. Als Folge davon würde er womöglich dann bei bestimmten Bytes plötzlich anfangen zu antworten und so die weitere Programmierung seines Kollegen stören. Deswegen scheidet diese Möglichkeit aus. Es müssen irgendwie beide Tinys (auch der gerade nicht programmierte) während der Programmierung auf passiv geschaltet werden, ohne dass dadurch aber sein Programm beschädigt wird. Die Reset-Leitung sollte also an beide ICs verdrahtet bleiben, denn genau dazu ist sie ja da: Um den Prozessor passiv zu machen. In der besagten Doku (die ich eben jetzt nicht mehr finde) wurde wohl eine andere Leitung gejumpert. Atmel empfiehlt für solche Fälle eine bestimmte Methode, die ich aber eben nicht mehr weiß. Rein logisch betrachtet, würde ich darauf tippen, dass man die SCK-Leitung auftrennen muss, aber ich bin mir eben nicht sicher, und es selbst auszuprobieren ist nervig. Deswegen möchte ich diese Doku gerne nochmal nachlesen, oder jemanden fragen, der sowas schon gemacht hat. Vielen Dank Gerald.
http://www.atmel.com/Images/Atmel-2521-AVR-Hardware-Design-Considerations_ApplicationNote_AVR042.pdf Punkt 4.1.1
Gerald schrieb: > Die Möglichkeit, die Reset-Leitung zu jumpern, ist also nicht geeignet, OMG... Natürlich ist sie "geeignet", sie stellt schließlich die einzige Möglichkeit dar, um überhaupt zum gewünschten Ergebnis zu kommen... Sie muss halt noch von weiteren geeigneten Maßnahmen flankiert werden, wenn die optimistische Grundbedingung nicht zutrifft, dass die ISP-Pins "frei" sind...
Dann spinne ich mal rum: SDA (MOSI) und SCL (SCK) sind durchverbunden für I2C und ISP MISO müsste auch durchverbunden sein, für ISP Falls die MISO-Schiene nicht für was Anderes gebraucht wird, könnte man sie zu "Friedenszeiten" mit Pullup gemeinsam hochziehen. In die Programme beider Controller kommt ein Pin-Change-Interrupt, der bei "Wackeln" an MISO, die I2C hochlegt und den Käfer bis zum nächsten Reset in einen sicheren Zustand bringt (blockiert). Anders wird man die Rückwirkungen auf den Gegenüber nicht vermeiden können. Die Strombegrenzungswiderstände aus der AN verhindern ja auch nicht das Gewackel, wenn die Gegenseite auf "Hören" steht und die Sache missversteht. Könnte vielleicht klappen...
Noch ne andere Idee: Wie wäre es damit die SCK Leitung zu jumpern? Die RST Leitung geht an beide Controller und hält beide während dem Programmieren im Reset. Da die SCK Leitung nur zu einem Controller geht, registriert nur dieser die Programmierbefehle. Der andere Controller sollte keine Befehle sehen, weil er keinen Takt hat. Übersehe ich was?
Ja, den Beitrag von InFo (Verweis auf Atmel AppNote AVR042, Punkt 4.1.1). Dort wird genau das vorgeschlagen. Vielen Dank an InFo.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.