Hallo Allerseits, Der Attiny9 (4,5,10) hat nur 6 Pins, 3 davon werden für TPI-Programmierschnittstelle benötigt + 2 Pins für Versorgung. In der Atmel AVR918 AppNote wird beschrieben, wie man die Pins trotzdem nutzen kann. Dazu werden zwischen uC und Applikation Widerstände eingesetzt, damit der Programmer die Applikationspegel überschreiben kann. Leider funktioniert es so bei mir nicht. Ich habe die Schaltung soweit reduziert, dass ich nur den Atmel-ICE an den uC angeschlossen habe. So kann ich die Device Signature auslesen, die Verbindung funktioniert also. Wenn ich aber an Pin 1 einen externen Pegel anlege, auch über einen Widerstand, dann funktionert nichts mehr. Einfachheithalber habe ich Pin 1 (TPI Data) mit 20kOhm an Masse gelegt. Den Pegel zu überstimmen ist eigentlich ein Leichtes, es funktioniert trotzdem nicht. Wenn ich 20k an VCC lege, dan läuft es wieder. Es scheint, dass der Atmel-ICE open collector Ausgänge hat und keine push-pull. Damit klappt doch die Entkopplung nicht mehr, oder? Wenn ich einen Pull-Up für ICE am Pin 1 installere und z.B. einen Schmitt-Trigger über einen Widerstand am uC einlese, und der Schmitt-Trigger-Ausgang gerade LOW ist, dann muss ich den Pull-Up so dimensionieren, dass uC HIGH interpretiert und ICE den LOW ziehen kann. Ohne ICE, also im Normaleinsatz, wird der Pin durch Pull-Up nun immer HIGH sehen, egal was der Schmitt-Trigger macht. Wie kann man nun die uC-Pins fürs TPI-Programmieren UND für die Applikation nutzen?
Hallo, vielleicht kannste das vom ISP übernehmen. Die "PA" Leitungen gehen weiter in die Schaltung. Die "ISP" Leitungen gehen zum ISP Programmierstecker. Mittels Resetsignal erfolgt die Umschaltung automatisch.
Veit D. schrieb: > Mittels Resetsignal erfolgt die Umschaltung > automatisch. Für einen ATtiny9 ist das aber ein Overkill. Wenn man nur drei bis vier I/O Pins benötigt, aber dann einen Mux-IC einbaut, hat man keinen Platz gewonnen. Da würde sich ein größerer ATtiny dann eher anbieten.
Benedikt M. schrieb: > Veit D. schrieb: >> Mittels Resetsignal erfolgt die Umschaltung >> automatisch. > > Für einen ATtiny9 ist das aber ein Overkill. Wenn man nur drei bis vier > I/O Pins benötigt, aber dann einen Mux-IC einbaut, hat man keinen Platz > gewonnen. Da würde sich ein größerer ATtiny dann eher anbieten. Danke an Veit, aber genau so ist es. Ich wollte den Attiny9 benutzen, weil ich Platz sparen wollte und seine Funktionalität mir voll ausreicht.
Hallo, hmmm okay, Platzproblem, dann schlage ich einen 8 Pin ATtiny212 vor der wird mittels UPDI programmiert. Dafür wird kannste deinen ICE nehmen oder einen Widerstand und Python.
Veit D. schrieb: > Hallo, > > hmmm okay, Platzproblem, dann schlage ich einen 8 Pin ATtiny212 vor der > wird mittels UPDI programmiert. Dafür wird kannste deinen ICE nehmen > oder einen Widerstand und Python. Ja, das ist immer eine Option. Aber bezogen auf die Eingangsfrage heisst das, dass es nicht geht? Oder es geht so: ich baue eine Zwischenschaltung für den ICE, die aus seinen open collector-Ausgängen push-pull macht?
Tycho B. schrieb: > Oder es geht so: ich baue eine Zwischenschaltung für den ICE, die aus > seinen open collector-Ausgängen push-pull macht? Hast Du verifiziert, dass der ATtiny bei der TPI-Übertragung die Pins mit Pull-Up versieht?
Benedikt M. schrieb: > Tycho B. schrieb: >> Oder es geht so: ich baue eine Zwischenschaltung für den ICE, die aus >> seinen open collector-Ausgängen push-pull macht? > > Hast Du verifiziert, dass der ATtiny bei der TPI-Übertragung die Pins > mit Pull-Up versieht? Ich weiss nicht genau wie ich das nachmessen soll. Ich habe keinen Oszi zuhause. Wenn ich nur den Programmer ausmesse, also uC abgestöpselt, dann sehe ich mit Multimeter am Reset 4,6V 103uA, CLK 4,6V 103uA und Data 3,8V 5uA gegen Masse. 4,9V sind von einer externen Spannungsquelle auch dran.
Hallo, wenn der ICE mit dem ATiny direkt verbunden ist klappt alles? Das was an Schaltung angeschlossen ist darf während der Programmierung nicht aktiv sein. Was hängt da dran? Ansonsten würde ich es einmal mit 10k Längswiderständen versuchen.
Veit D. schrieb: > Hallo, > > wenn der ICE mit dem ATiny direkt verbunden ist klappt alles? > Das was an Schaltung angeschlossen ist darf während der Programmierung > nicht aktiv sein. Was hängt da dran? Ansonsten würde ich es einmal mit > 10k Längswiderständen versuchen. Wie geschrieben, da ist ein Schmitt-Trigger dran, und der ist aktiv (LOW). Serienwiderstand von 20K hat nichts gebracht.
Tycho B. schrieb: > Veit D. schrieb: >> Hallo, >> >> wenn der ICE mit dem ATiny direkt verbunden ist klappt alles? >> Das was an Schaltung angeschlossen ist darf während der Programmierung >> nicht aktiv sein. Was hängt da dran? Ansonsten würde ich es einmal mit >> 10k Längswiderständen versuchen. > > Wie geschrieben, da ist ein Schmitt-Trigger dran, und der ist aktiv > (LOW). Serienwiderstand von 20K hat nichts gebracht. Der Eingang oder Ausgang vom Schmitt-Trigger? Wenn es der Eingang ist sollte es gar keine Problem beim flashen geben, auch ganz ohne Widerstände. Was die Schaltung während des flashens macht ist eine ganz andere Frage. Wenn es der Ausgang vom Schmitt-Trigger wird ein Widerstand benötigt. Nur muss sichergestellt werden das während des Flashens sich der Pegel seitens des Schmitt-Triggers nicht ändert. Der Programmer kann nur einen bestimmten Strom auf den Signalen schalten. Deswegen muss zur Schaltung hin ein Widerstand rein, damit der Programmer nicht überlastet wird und die Pegel weit genug runter oder hoch ziehen kann. Allerdings baut man sich damit einen Spannungsteiler. Ich weiß nicht was der ICE für Ströme verkraftet, aber verschiedene Werte der Widerstände solltest du nochmal probieren. Bis runter auf 1k sollte machbar sein. Weil das flashen sehr schnell geht kommst du mit einem Multimeter nicht weit. Du müßtest dann schon die Spannungspegel mit Oszi anschauen um beurteilen zu können ob es den unzureichenden Pegeln liegt oder doch an etwas anderem.
> Der Eingang oder Ausgang vom Schmitt-Trigger? Ausgang > Wenn es der Eingang ist sollte es gar keine Problem beim flashen geben, > auch ganz ohne Widerstände. Was die Schaltung während des flashens macht > ist eine ganz andere Frage. > Wenn es der Ausgang vom Schmitt-Trigger wird ein Widerstand benötigt. > Nur muss sichergestellt werden das während des Flashens sich der Pegel > seitens des Schmitt-Triggers nicht ändert. Pegel des Schmitt-Triggers ändert sich nicht. Ich habe 1k, 4k7 und 20k zwischen Schmitt-Trigger Ausgang und TPIData probiert, ohne Erfolg. > > Der Programmer kann nur einen bestimmten Strom auf den Signalen > schalten. Deswegen muss zur Schaltung hin ein Widerstand rein, damit der > Programmer nicht überlastet wird und die Pegel weit genug runter oder > hoch ziehen kann. Allerdings baut man sich damit einen Spannungsteiler. > Ich weiß nicht was der ICE für Ströme verkraftet, aber verschiedene > Werte der Widerstände solltest du nochmal probieren. Bis runter auf 1k > sollte machbar sein. Weil das flashen sehr schnell geht kommst du mit > einem Multimeter nicht weit. Du müßtest dann schon die Spannungspegel > mit Oszi anschauen um beurteilen zu können ob es den unzureichenden > Pegeln liegt oder doch an etwas anderem. Ich habe einen Logikanalysator hier. Die Idee mit push-pull war Quatsch, weil Data-Leitung bidirektional verwendet wird, also muss es open collector sein.
:
Bearbeitet durch User
Beitrag #6299638 wurde vom Autor gelöscht.
Deinen Messungen zufolge sitzen die Pull-Ups im Atmel ICE und bilden den oberen Teil des Spannungsteilers. Du solltest die Werte der Pull-Ups bestimmen, um die Serienwiderstände zum Schmitt-Trigger korrekt wählen zu können.
Benedikt M. schrieb: > Deinen Messungen zufolge sitzen die Pull-Ups im Atmel ICE und bilden den > oberen Teil des Spannungsteilers. Du solltest die Werte der Pull-Ups > bestimmen, um die Serienwiderstände zum Schmitt-Trigger korrekt wählen > zu können. Der kleinste Widerstand, bei dem ich programmieren kann, ist 47k. Mir war im Gedächtnis, dass die Eingangsimpedanz eines Atmel-Pins so ca. 50k ist(oder war es PullUp?). Damit hätte ich doch 50:50 Spannungsteiler für das Nutzsignal und in der Applikation würde ich den Schmitt-Trigger-Pegel nicht mehr korrekt erkennen. Nun habe ich den Programmer abgeklemmt, der uC ist unter Strom. Den Pegel des Schmitt-Trigger-Ausgangs habe ich auf 0 und 5V gesetzt. Am uC-Pin liegt die volle Spannung an. Es scheint, dass die Pin-Impedanz doch viel höher ist.
Guck ins Datenblatt. Die Dinger werden in Millionenstückzahlen verbaut, du kannst absolut sicher sein, dass die Datenblattangaben über Eingangs-/Ausgangsparameter der Pins korrekt sind. Wenn es dann trotzdem nicht geht, liegt der Fehler in deiner Software.
DR schrieb: > Guck ins Datenblatt. Die Dinger werden in Millionenstückzahlen verbaut, > du kannst absolut sicher sein, dass die Datenblattangaben über > Eingangs-/Ausgangsparameter der Pins korrekt sind. Wenn es dann trotzdem > nicht geht, liegt der Fehler in deiner Software. Isch abe gar keine Software. Ja, 50k waren die pullups, Inputimpedanz ist mindestens 5M. Es geht also doch, nur im Gegensatz zu den Werten, die ich im Netz gefunden habe (1k, 4k7), muss der serielle Widerstand deutlich größer sein.
:
Bearbeitet durch User
Tycho B. schrieb: > Ja, 50k waren die pullups, Inputimpedanz ist mindestens 5M. > Es geht also doch, nur im Gegensatz zu den Werten, die ich im Netz > gefunden habe (1k, 4k7), muss der serielle Widerstand deutlich größer > sein. Nö, der Pull-Up im Programmieradapter muss entsprechend niederohmig sein. 1k ist OK, macht ja gerade mal 3,3mA bei 3,3V. RTFM. Siehe Datenblatt, Abschnitt 14.3.9 Collision Detection Exception "The TPIDATA line is driven by a tri-state, push-pull driver with internal pull-up. The output driver is always enabled when a logical zero is sent. When sending successive logical ones, the output is only driven actively during the first clock cycle. After this, the output driver is automatically tri-stated and the TPIDATA line is kept high by the internal pull-up. The output is re-enabled, when the next logical zero is sent." Eine arg verquere Formulierung für einen Open Collektor Ausgang! Ergo. Pack einen 1K Pull-Up an TPDATA auf deinem Programmierdadapter gegen VCC und alles wird gut, dann reichen auch 10k als Entkoppelwiderstand zu externen Ausgängen, die Eingänge vom AVR speisen sollen.
Falk B. schrieb: > Pack einen 1K Pull-Up an TPDATA auf deinem Programmierdadapter > gegen VCC und alles wird gut, dann reichen auch 10k als > Entkoppelwiderstand zu externen Ausgängen, die Eingänge vom AVR speisen > sollen. Danke für den Vorschlag. Es ist etwas unverständlich, warum Atmel einerseits die Möglichkeit des dual use anzeigt, andererseits es mit ihrem ICE-Programmer nicht ohne weiteres geht (also im Falle eines aktiven Pegels am Port wie bei mir). Sie gehen aber in der Appnote nicht auf die Werte der Widerstände ein, die Werte von 1k/4k7 habe ich aus dem avrfreaks-Forum. Vielleicht ist 50k normal. Es ist jedoch so, dass ich nur ungern am Programmer rumlöten würde, nur wenn es mit 50k nicht funktioniert.
Hallo, die Werte der I/O Pullups vom µC stehen im Complete Datasheet Kapitel 17.2. Zudem du nicht rumlöten musst, kannst den vorgeschlagenen Pullup von Falk extern anklemmen. Oder gar in dein Layout einbauen. Oder baust dir ein zweites Programmierkabel mit Widerstand drin. Oder ... beim nächstenmal einen der TinyAVR 1 Serie :-) Wünsche erstmal maximale Erfolge.
Veit D. schrieb: > Oder gar in dein Layout einbauen. Die Pullups im Layout müsste ich dann über nRST aktivieren/deaktivieren, weil sonst sie mir ständig die Eingänge übersteuern, oder?
Tycho B. schrieb: > Die Pullups im Layout müsste ich dann über nRST aktivieren/deaktivieren, > weil sonst sie mir ständig die Eingänge übersteuern, oder? Bau dir einen Zwischenadapter für dein Programmierkabel! Alles andere ist Nonsense, denn damit geht der Vorteil der kleinen Baugröße des Tiny(!) verloren.
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.