Forum: Mikrocontroller und Digitale Elektronik Programmieren via ISP in Zielschaltung?


von Rush .. (rush)


Lesenswert?

Hallo zusammen,

gibt es eine Möglichkeit, einen AVR controller in der fertigen Schaltung 
via ISP zu programmieren? Ich habe die entsprechenden Pins für LEDs etc. 
verwendet sodass hierbei mein AVRDragon die Periepherie und nicht den 
Controller treibt.

Ich hatte vor, mir mehrere Platinen bestücken zu lassen und wollte mir 
die Programmierkosten für die Controller ersparen indem ich sie selber 
programmiere.

MfG Rush

von Felix A. (madifaxle)


Lesenswert?

http://www.atmel.com/images/atmel-2521-avr-hardware-design-considerations_applicationnote_avr042.pdf

Seite 7. Für größere Lasten müssten dann Fets oder Transistoren 
eingesetzt werden.

von Jan H. (jan_m_h)


Lesenswert?

Rush .. schrieb:
> Ich habe die entsprechenden Pins für LEDs etc. verwendet sodass hierbei
> mein AVRDragon die Periepherie und nicht den Controller treibt.

Man kann die ISP Pins mitnutzen, dabei muss man nur darauf achten, dass 
die Peripherie nicht zu niederohmig ist und auch keinen Schaden 
davonträgt. LEDs leuchten halt beim Programmieren, ein Motor hingegen 
könnte schon mehr Probleme machen wenn der unkontrolliert anläuft.

von Rush .. (rush)


Lesenswert?

Auf Seite 7 steht nichts von FETs....
 Dort geht es doch nur darum dass der Programmer von der restlichen 
Peripherie geschützt wird...

von Felix A. (madifaxle)


Lesenswert?

Ach wirklich?

von Felix A. (madifaxle)


Lesenswert?

Warum sollte ich den Inhalt des Datenblattes hier nochmals wiedergeben?

von Rush .. (rush)


Lesenswert?

Sollst du nicht! Verlangt ja auch keiner!
Aber ich glaube nicht dass Widerstände in den ISP-Leitungen mein Problem 
lösen!

von Felix A. (madifaxle)


Lesenswert?

Jan H. hat es bereits geschrieben. Es hängt vom zu treibenden Strom ab. 
Eine LED mit einem 470 Ohm Widerstand sollte für den Programmer nicht 
das große Problem sein. Und bei größeren Lasten eben einen 
Transistor/Fet zum Entkoppelon der großen Last vom AVR.

von Rush .. (rush)


Lesenswert?

Also einen NPN der einen PNP steuert? Ist es das was du meinst ?

von Felix A. (madifaxle)


Lesenswert?

Bitte einmal den Schaltplan posten, bzw. den Teil, der mit den SPI-Pins 
bzw. den Progpins des AVR verdrahtet ist. So scheint das vom Verständnis 
her in beide Richtungen nix nichts zu werden.

Und wieso ein NPN, der einen PNP treibt?

: Bearbeitet durch User
von Stefan S. (sschultewolter)


Lesenswert?

Welchen Programmer nutzt du für dein Projekt? Beim mkII brauchst dir da 
wenig sorgen machen, der schaft es die Leitung entsprechend 
hoch/runterzuziehen. Hingegen bei den alternativen Programmern (meist 
der Ebay-Ramsch aus Fernost) kann es zu Problemen kommen.

Wenn du die Portpins nicht übermäßig belastet, sollte alles ohne 
Widerstände funktionieren. Auch wenn die Portpins eines AVRs deutlich 
mehr als 4mA treiben können, so folge ich dem Leitsatz, sobald mehr 
gebraucht wird, dann kommt dort ein DarlingtonArray/Transistor zum 
Einsatz.

von Rush .. (rush)


Angehängte Dateien:

Lesenswert?

Zum NPN/PNP:

Wenn mein Dragon ein High-pegel rausgibt muss der doch auch an dem 
Controller anliegen und nicht invertiert.

von Axel S. (a-za-z0-9)


Lesenswert?

Rush .. schrieb:
> gibt es eine Möglichkeit, einen AVR controller in der fertigen
> Schaltung via ISP zu programmieren?

Auch weniger erfahrene Anwender wissen, das "ISP" die Abkürzung von
"In System Programming" ist. Und wenn man das übersetzt ist es genau
das wonach du fragst: den µC in der fertigen Anwendungsschaltung zu
programmieren.

> Ich habe die entsprechenden Pins für LEDs etc.
> verwendet sodass hierbei mein AVRDragon die Periepherie und nicht den
> Controller treibt.

Erfahrene Anwender denken vorher nach, was sie an die ISP-Pins des µC 
anschließen und wählen irgendwas, das dann nicht stört. Klassiker sind 
low-current LED (die kann auch der ISP-Adapter mit treiben) oder Taster 
gegen GND (die darf man dann halt beim ISP-Vorgang nicht drücken).

Oder wenn es gar nicht anders dann eben Jumper die man für ISP anders 
setzt als für den Normalbetrieb.

von Rush .. (rush)


Lesenswert?

Grrrrr... ganz blöd bin ich nun auch nicht, obwohl es für dich so 
aussehen mag ;-)

Was ISP bedeutet ist mir durchaus bewusst... deswegen poste ich ja hier 
weil es eben nicht in allen Fällen das ist was es zu sein scheint 
sondern nur dann wenn man eben Peripherie dranhängt welche von dem 
Programmer getrieben werden können.

Du schreist ich soll LowCurrent LEDs nehmen. Die sind allerdings teurer, 
deswegen möchte ich keine!
Mein Ansatz war eben, dass ich einen Treiber brauche welcher einfach 
mehr Strom liefert als das Dragon.

von Felix A. (madifaxle)


Lesenswert?

Nein, nicht PNP vom ISP an den Controller.

In diesem Fall wird der Programmer direkt über die ISP-Stifte an den 
Controller gehängt.
AVR - ISP - Peripherie

In diesem Fall nimmst du zwei PNP-Transistoren mit z. B. 3k3 Ohm 
Widerständen an der Basis. Diese an ISP. Und am Collector der 
Transistoren dann die beiden LEDs und die Mosfets.

: Bearbeitet durch User
von Felix A. (madifaxle)


Lesenswert?

Leider kann der Controller aber trotzdem nicht mehr Strom ausgeben. Also 
ist der Ansatz "mehr Strom vom Dragon" leider so nicht "sinnvoll" 
machbar.

von Rush .. (rush)


Lesenswert?

Ich verstehe was du meinst, du aber scheinbar nicht.

Ich möchte bzw. kann nicht mehr die Schaltung ändern, deswegen suche ich 
ja was was ich an den Programmer hängen kann.

Transistoren zum Ansteuern der LED und es FETs will ich nicht mehr 
hinzufügen.

Was spricht denn gegen meine Variante ?

von Felix A. (madifaxle)


Lesenswert?

Aha, das die bereits fertig vor dir liegt, ist eine wichtige Info.
Dein Text klang nach ich wollte (im Sinne von "in der Zukunft", aber du 
bist dir bislang unsicher)

Dann brauchst du vielleicht einen Komparator an PB1 (MISO), dort gibt 
der Atmel Daten aus. Wenn der durch die LED zu stark belastet wird, 
erkennt der Dragon das nicht mehr sauber.
Für die anderen beiden Pins nimm einen Treiberbaustein, zum Beispiel 
mehrere Ausgänge eines TTL-Hex-Treibers oder vielleicht auch 
Mosfet-Treiber.

Und die Datenrate reduzieren. Vermutlich unter 50kHz, aber das lässt 
sich ausprobieren.

: Bearbeitet durch User
von Rush .. (rush)


Lesenswert?

Oh sorry... in der Tat hatte ich mich falsch ausgedrückt...

Der hier dürfte es doch tun oder ?
http://www.ti.com/lit/ds/symlink/sn74lv125a.pdf

von Felix A. (madifaxle)


Lesenswert?

Das könnte klappen. Zwei Gatter parallel vom Dragon in Richtung uC an 
PB0 (MOSI) und ein Gatter von PB1 (MISO) in Richtung Dragon sollten tun.

Allerdings gilt für PB1, dass die LED mit 150 Ohm Vorwiderstand den 
ATtiny-Pin derart belasten kann, dass die Spannung kleiner wird als 
0,7*Vcc und das Gatter dann auch nicht mehr sicher einen Highpegel 
erkennt.

Welcher LED-Strom wird denn eigentlich gezogen? Und welche Vf hat die 
LED bei Nennstrom?

Im Datenblatt vom ATtiny25/45/85 findet man im Abschnitt "Pin Driver 
Strength" Figure 22-22 ein Diagramm, welches zeigt, welche Spannung bei 
welchem Strom am Pin anliegt. Hier ist aber auch bei 20mA schluss.
Mit 150 Ohm sind etwa 33mA maximal möglich (LED kurzgeschlossen, also 
safe).

von Rush .. (rush)


Angehängte Dateien:

Lesenswert?

Hi,

die LEDs haben ein Vf=2,2V und If=20mA. Ich kann sie auch nur mit der 
halben Helligkeit leuchten lassen, dann wäre ich bei 10mA.

"Das könnte klappen. Zwei Gatter parallel vom Dragon in Richtung uC an
PB0 (MOSI) und ein Gatter von PB1 (MISO) in Richtung Dragon sollten 
tun."

Soweit hört sich das gut an, dann wäre ich bei 32mA. Sollte reichen bei 
10mA LED Strom. Aber ich habe ja MOSI und SCK. Also bräuchte ich hierfür 
insgesamt 4 Gatter + ein Gatter für MISO und brüchte ich nicht für den 
RESET auch noch eins? Oder wird der dauerhaft auf einen Pegel gelegt ?


Was hälst du denn von der Lösung in dem Simulationsfile welches ich 
drangehängt habe?

von Frank K. (fchk)


Lesenswert?

Rush .. schrieb:

Du verwendest offenbar einen Tiny 25/45/85. Korrekt? Wo liegt denn das 
Problem darin, statt eines 8-Pinners einen 14-Pinner wie zB Tiny 
24/44/84/441/841 zu verwenden. Dann hast Du die ISP-Pins frei.

fchk

von Felix Adam (Gast)


Lesenswert?

Ich würde normalerweise heute noch ausführlich antworten, bin aber den 
ganzen Tag unterwegs gewesen. Ich antworte dir morgen ausführlich.

Etwas jedoch schon vorweg:

Wegen der LED werden zwei parallel geschaltete Gatter benötigt -> 
Ausgangsstrom max. 70mA. Dann muss die LED nicht gedimmt werden.

An MISO ist das eine Gatter nur als Pegelanheber gedacht, sprich: falls 
die Spannung nur 4,3V statt 5V beträgt, würden am Programmer wieder 5V 
ankommen. 4,3V reichen vielleicht nicht.

An SCK habe ich nur PPM gelesen und hielt den Pin für unbelastet. Falls 
der doch belastet wird, nimm hier ein Gatter vom Dragon Richtung ATtiny. 
Ist er stark belastet, dann nimm das Gatter von MISO nach Dragon eben 
zusätzlich vom Dragon nach SCK. Ob der MISO-Pegel ausreicht, ist dann 
schnell getestet.

Reset sollte nicht stark belastet sein. Ein Pullup (10k .. 100k) nach 
VCC. Hier ist dann nichts weiter nötig.

Ergo:
es ist nur ein Baustein mit 4 Gattern vonnöten. Aber Achtung! Vor dem 
Zusammen stecken prüfen, ob Ausgang an Eingang und andersrum. Hierbei 
könnten Schäden entstehen. Am besten die Platine mit angestecktem 
Logikbaustein zunächst mit Labornetzteil mit Strombegrenzung 
ausprobieren.

von Felix A. (madifaxle)


Lesenswert?

Ich habe das Datenblatt nochmal angesehen. Tabelle 7.3 gilt. Da steht 
16mA je Gatter bei 5V.

Ich denke daher, wie beschrieben ist es das beste:
Zwei Gatter parallel vom Dragon Richtung PB0 (MOSI) wegen der LED 
(20mA), ein Gatter Dragon Richtung PB2 (SCK), scheinbar nicht belastet, 
und das verbleibende Gatter Tiny PB1 (MISO) Richtung Dragon.

Das Gatter an die 5V Versorgung. Die Enable-Leitungen gemeinsam an 
RESET. Dann kann der Controller nach Rückkehr zum Highpegel des Reset 
wieder normal weiterarbeiten, ohne dass die Treiber dann einen Einfluss 
haben.
Die Wahl eines Gatters mit Tristatefunktion ist da eine wirklich gute 
Idee.

von Axel S. (a-za-z0-9)


Lesenswert?

Das ist doch alles albern.

1. warum müssen die LED mit 20mA betrieben werden? Weil 20mA im 
Datenblatt stehen? Das ist der Maximalstrom den die LED aushalten. 
Leuchten tun sie auch mit viel weniger. LED sind über die letzten 10 
Jahre viel effizienter geworden. Die leuchten heute mit 2mA heller als 
damals mit 20mA.

2. low current LED sind zu teuer? Blödsinn. Der Preisunterschied ist 
nahezu nicht existent. Dazu kommt, daß low current LED auch nichts 
anderes sind als normale LED. Der Unterschied ist lediglich, daß für low 
current LED die Helligkeit bei kleinem Strom spezifiziert ist und für 
normale LED halt bei größerem Strom.

3. eine LED geht von MISO nach GND, die andere von MOSI. Das bedeutet, 
daß ein Treiber auf der Seite des ISP-Adapters allein nicht reicht. 
Denn der eine Pin wird während des ISP-Vorgangs vom Adapter getrieben, 
der andere vom µC. Falls(!) die LED also wirklich eine zu große Last 
darstellen, dann müßte man auf beiden Seiten Treiber vorsehen. Ergo die 
Platine ändern.

4. Ist denn überhaupt klar, daß die LED eine zu große Last sind? Man 
könnte ja mal den H-Pegel messen den ISP-Adapter und µC an MOSI resp. 
MISO erreichen. Und dann mit dem Datenblatt abgleichen ob das reicht um 
von der jeweils anderen Seite sicher als H-Pegel erkannt zu werden.

PS: meine Schätzung(!) - mit 20mA wird es grenzwertig sein (also geht in 
der Praxis obwohl es das Datenblatt nicht hergibt). Mit 10mA wird es 
vermutlich schon sicher gehen. Aber vermuten ist nicht wissen. Messen!

: Bearbeitet durch User
von Felix A. (madifaxle)


Lesenswert?

Wie geschrieben kann der Tiny laut Datenblatt 20mA treiben. Die 
Ausgangsspannung fällt dann um etwa 0,3 bis 0,5V ab. Hier ein Gatter zum 
Regenerieren nutzen, ist nicht verkehrt.

Dem TA geht es darum, den Programmer nicht zu beschädigen/zerstören. So 
auf Nummer sicher zu gehen, ist auch nicht verkehrt.

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.