Forum: Mikrocontroller und Digitale Elektronik In System Programmierung bei benutzen Pins


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Michael W. (neuer_nutzer)


Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen!

Ich arbeite gerade an einer Platine für einen ATMega mit mehreren 
Schieberegistern. Ich möchte auch einen Anschluss zur Programmierung 
platzieren. Allerdings sind die Pins, welche für die Programmierung 
genutzt werden (MISO, MOSI, SCK) in der Schaltung schon anders belegt.

Die entsprechenden Pins gehen an ein 74HCT595 Ausgansschieberegister. 
MOSI vom µC hängt an RCLK, MISO an Output Enable und SCK hängt am Serial 
In vom Schieberegister. Output Enable liegt über einen Pull Up an 3.3V.

Da es sich bei den Pins am Schieberegister um Eingänge handelt sehe ich 
zumindest kein Problem darin, dass sich Spannungspegel gegenseitig 
bekämpfen könnten (wie z.B. wenn eine der Leitungen vom Controller an 
den Serial Out eines Eingangsschieberegisters geht, an dem vom SR High 
anliegt, aber z.B. SCK ein Low erzeugen will). Oder übersehe ich hier 
ein Problem?

Das Hauptproblem sehe ich darin, dass das Schieberegister faxen machen 
könnte, weil es an Serial In und Output Enable beim Programmieren 
Signale bekommt. Eine Lösung wäre VCC der Schieberegister über einen 
Jumper zu öffnen, wenn man den µC programmiert. Gibt es noch weitere, 
elegantere Möglichkeiten?


Eine andere Frage stellt sich mir noch im Zusammenhang mit der 
Spannungsversorgung: Verbinde ich VCC vom Programmer mit VCC der 
Platine? Wenn die Spannungen hier unterschiedlich sind kommt es zu 
Ausgleichsströmen. Sollte ich dann VCC vom Programmer einfach nicht 
verbinden? Oder sollte ich besser die externe Versorgung abklemmen und 
zur Programmierung den µC über den Programmer versorgen? Oder einfach 
einen Widerstand zwischensetzen?


Danke im Voraus für eure Unterstützung :)
Und einen schönen Sonntag noch ;)

Viele Grüße,
Michael

von Hmmm (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Je nachdem, was das Schieberegister tut, einfach beim Reset in einen 
definierten Zustand bringen.

Ein Programmer versorgt i.d.R. nicht das Target, sondern umgekehrt.

von W.A. (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Michael W. schrieb:
> Eine Lösung wäre VCC der Schieberegister über einen
> Jumper zu öffnen, wenn man den µC programmiert. Gibt es noch weitere,
> elegantere Möglichkeiten?

Widerstand zwischen Ausgang Schieberegister und MISO. Dann kann das 
Schieberegister machen was es will, solange der Programmierer 
niederohmig direkt am MISO zieht. Im normalen Betrieb stört der 
Widerstand nicht.

von Michael W. (neuer_nutzer)


Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

und Danke euch für die schnellen Antworten :)


Hmmm schrieb:
> Je nachdem, was das Schieberegister tut, einfach beim Reset in einen
> definierten Zustand bringen.
An den Schieberegistern hängen Relais, z.T. auch Stromstroßschalter. Ich 
glaube nicht, dass diese zucken könnten, aber wenn, wären das 
ungewünschte Effekte, wenn auch kein schwerwiegenden.

> Ein Programmer versorgt i.d.R. nicht das Target, sondern umgekehrt.
War mir so nicht bekannt.
Ich habe hier einen USP Programmieradapter. Da kommt zumindest genug 
raus, um das Steckbrett mit µC und LEDs etc. zu versorgen.


W.A. schrieb:
> Widerstand zwischen Ausgang Schieberegister und MISO.
Die MISO Leitung geht an einen Steuereingang des SR (G / Output Enable), 
das SR sollte hier ohnehin nicht aktiv einen Pegel erzeugen. Wenn es 
sich um den Ausgang eines ICs handeln würde hätte ich auch zuerst an 
einen Widerstand gedacht. Oder verstehe ich dich falsch?
Der PullUp an dieser Leitung sollte auch kein Thema sein, da der 
Programmer ggf. niederohmig durchsetzt wenn er nach Low zieht.

von Bernd (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Wenn du es ganz sicher haben willst, kannst du SCK auch per Jumper 
zwischen SPI und den Schieberegistern trennen. Oder etwas aufwändiger 
dieses umschalten an RST koppeln.

Atmel hat dazu auch was geschrieben:
http://www.atmel.com/Images/Atmel-2521-AVR-Hardware-Design-Considerations_ApplicationNote_AVR042.pdf

von Hmmm (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Michael W. schrieb:
>> Ein Programmer versorgt i.d.R. nicht das Target, sondern umgekehrt.
> War mir so nicht bekannt.

Die Atmel-ISPs versorgen das Target gar nicht, bei anderen (z.B. Diamex) 
kann man das bei Bedarf einschalten.

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


Bewertung
0 lesenswert
nicht lesenswert
Michael W. schrieb:
> ... sind die Pins, welche für die Programmierung
> genutzt werden (MISO, MOSI, SCK) in der Schaltung schon anders belegt.
>
> Die entsprechenden Pins gehen an ein 74HCT595 Ausgansschieberegister.
> MOSI vom µC hängt an RCLK, MISO an Output Enable und SCK hängt am Serial
> In vom Schieberegister.

Diese Belegung erscheint mir recht willkürlich. Es wäre sinnvoller 
gewesen, zumindest SCK und MOSI in der gleichen Funktion wie für SPI zu 
benutzen (als Schiebetakt und Daten). Aber egal. Die Taktleitung deines 
'595 ist ja anscheinend nicht dabei.

> Das Hauptproblem sehe ich darin, dass das Schieberegister faxen machen
> könnte, weil es an Serial In und Output Enable beim Programmieren
> Signale bekommt. Eine Lösung wäre VCC der Schieberegister über einen
> Jumper zu öffnen, wenn man den µC programmiert.

Nein, das wäre keine Lösung. Wenn ein Eingang des IC auf H liegt, 
ziehen die Eingangs-Schutzdioden Vcc des IC mit hoch. Je nachdem, was da 
noch an Vcc und IC-Ausgängen hängt, kannst du dabei die Schutzdioden 
überlasten oder es kommt gleich gar kein H-Pegel zustande.

> Gibt es noch weitere, elegantere Möglichkeiten?

Ich denke mal, OE vom '595 ist das Hauptproblem. Vermutlich würdest du 
wollen, daß das permanent auf H bleibt, so lange noch keine gültigen 
Daten im Register stehen. Mach also einen Jumper zwischen MISO und OE 
(mit dem Pullup auf der OE-Seite) den du zum programmieren öffnest.

> Eine andere Frage stellt sich mir noch im Zusammenhang mit der
> Spannungsversorgung: Verbinde ich VCC vom Programmer mit VCC der
> Platine? Wenn die Spannungen hier unterschiedlich sind kommt es zu
> Ausgleichsströmen.

Kommt auf den Programmer an. Manche (können) das Target über diesen 
Anschluß versorgen. Die haben dann aber i.d.R. einen Jumper oder 
Schalter, um das zu deaktivieren. So lange die Logikpegel hinreichend 
übereinstimmen, brauchst du hier Vcc nicht an den ISP-Anschluß zu 
führen.

Wieder andere Programmer verwenden den Vcc Anschluß dazu, die Spannung 
des Targets zu messen und um ihre Ausgangspegel entsprechend anzupassen. 
Hier mußt du Vcc am ISP-Anschluß haben.

Am universellsten ist es wohl, Vcc herauszuführen und auf der Seite des 
Programmers entsprechend zu jumpern.

von Michael W. (neuer_nutzer)


Bewertung
0 lesenswert
nicht lesenswert
Hallo nochmals!

Bernd schrieb:
> Atmel hat dazu auch was geschrieben:
> 
http://www.atmel.com/Images/Atmel-2521-AVR-Hardware-Design-Considerations_ApplicationNote_AVR042.pdf
Danke für den Link :) Ich denke du verweist konkret auf Kapitel 4.1. 
Werde ich mir gleich genauer anschauen.


Hmmm schrieb:
> Die Atmel-ISPs versorgen das Target gar nicht, bei anderen (z.B. Diamex)
> kann man das bei Bedarf einschalten.
Wieder was interessantes gelernt. Steht auch was in oben gelinkter Atmel 
Lektüre zu. Dann bin ich hoffentlich gleich noch schlauer :)


Viele Grüße,
Michael

von Michael W. (neuer_nutzer)


Bewertung
0 lesenswert
nicht lesenswert
Hallo Axel!

Da haben wir uns heute Mittag wohl knapp verpasst. Danke für deinen 
ausführlichen Beitrag :)

Axel S. schrieb:
> Diese Belegung erscheint mir recht willkürlich. Es wäre sinnvoller
> gewesen, zumindest SCK und MOSI in der gleichen Funktion wie für SPI zu
> benutzen (als Schiebetakt und Daten). Aber egal. Die Taktleitung deines
> '595 ist ja anscheinend nicht dabei.
Die Wahl der Belegung ergibt sich durch die Anordnung der Pins auf der 
Platine. Ich werde schauen, ob sich das ändern lässt. Taktleitung vom 
'595 ist jedenfalls nicht betroffen.

> Nein, das wäre keine Lösung. Wenn ein Eingang des IC auf H liegt,
> ziehen die Eingangs-Schutzdioden Vcc des IC mit hoch. Je nachdem, was da
> noch an Vcc und IC-Ausgängen hängt, kannst du dabei die Schutzdioden
> überlasten oder es kommt gleich gar kein H-Pegel zustande.
Danke für dein Intervenieren und die Erklärung :) Ich bin in diesem 
Gebiet nicht sehr versiert und daher noch ziemlich unbedarft.

> Ich denke mal, OE vom '595 ist das Hauptproblem. Vermutlich würdest du
> wollen, daß das permanent auf H bleibt, so lange noch keine gültigen
> Daten im Register stehen. Mach also einen Jumper zwischen MISO und OE
> (mit dem Pullup auf der OE-Seite) den du zum programmieren öffnest.
Du hast es auf den Punkt gebracht. Die Lösung mit dem Jumper zw. MISO & 
OE und dem PullUp auf OE Seite überzeugt auch :)


> Kommt auf den Programmer an...
Momentan habe ich einen "USBASP" Programmer, der scheinbar das Target 
auch zumindest mit ein bisschen Strom versorgen kann. Ich weiß nicht, ob 
es so gedacht ist, aber für Experimente mit u.a. mit 16*2 Display oder 
UART-LAN Adapter hat es gereicht. Einen Jumper gibt es nicht.

> Am universellsten ist es wohl, Vcc herauszuführen und auf der Seite des
> Programmers entsprechend zu jumpern.
Eine universelle Lösung wäre mir am liebsten. Bleibe ja nicht unbedingt 
ewig bei diesem Programmer. Platz für Jumper wäre auch vorhanden.

Verstehe ich dich dahingehend richtig, dass ich einen Jumper zur 
Verbindung VCC ISP (steht so auch drauf, nicht VTG) zu VCC Platine 
vorsehen soll?

Ich sollte vielleicht erklären, dass die Hauptplatine mit den 
Schieberegistern und Anschlussklemmen mit 5V versorgt ist. Der µC sitzt 
auf einer separaten Platine, welche eine Spannungsregelung auf 3.3V hat. 
Sollte mein Programmer mal VCC zur Messung des Targets zu nutzen, müsste 
ich auf den 3.3V Pin vom µC gehen. Da mein Programmer momentan aber 
konstant 5V an VCC abgibt würde er dann der µC mit 5V braten.

Wäre in dem Fall also die universellste Lösung 3 Pins, rechts 5V, links 
3.3V, Mitte an VCC vom ISP Port? So kann man wahlweise eine der beiden 
Spannungen verbinden - oder auch offen lassen.


Danke allen nochmal für deine eure Denkanstöße :)
Und einen schönen Sonntag Abend noch!

Viele Grüße,
Michael

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


Bewertung
0 lesenswert
nicht lesenswert
Michael W. schrieb:

>> Kommt auf den Programmer an...
> Momentan habe ich einen "USBASP" Programmer, der scheinbar das Target
> auch zumindest mit ein bisschen Strom versorgen kann. Ich weiß nicht, ob
> es so gedacht ist, aber für Experimente mit u.a. mit 16*2 Display oder
> UART-LAN Adapter hat es gereicht. Einen Jumper gibt es nicht.

Das ist ... nicht gut. Wohl so ein China-Ding. Da ist statt eines 
richtigen Jumpers oftmals ein Lötzinnklecks auf der Platine. Den kann 
man zwar wegmachen, aber so recht praxisgerecht ist das nicht.

>> Am universellsten ist es wohl, Vcc herauszuführen und auf der Seite des
>> Programmers entsprechend zu jumpern.
> Eine universelle Lösung wäre mir am liebsten. Bleibe ja nicht unbedingt
> ewig bei diesem Programmer. Platz für Jumper wäre auch vorhanden.
>
> Verstehe ich dich dahingehend richtig, dass ich einen Jumper zur
> Verbindung VCC ISP (steht so auch drauf, nicht VTG) zu VCC Platine
> vorsehen soll?

Wenn du deinen usbasp ohne "power target" Jumper verwenden willst und 
wenn du gleichzeitig die Platine eigenständig versorgen willst, dann 
wirst du um so einen Jumper nicht herum kommen. Es sei denn, du willst 
am ISP-Kabel basteln.

Die beste Lösung ist aber IMNSHO, beim Target immer Vcc auf den 
ISP-Anschluß zu legen und die Speisung des Targets im Fall des Falles am 
Programmer abzuschalten.

> Ich sollte vielleicht erklären, dass die Hauptplatine mit den
> Schieberegistern und Anschlussklemmen mit 5V versorgt ist. Der µC sitzt
> auf einer separaten Platine, welche eine Spannungsregelung auf 3.3V hat.
> Sollte mein Programmer mal VCC zur Messung des Targets zu nutzen, müsste
> ich auf den 3.3V Pin vom µC gehen.

Der Vcc-Anschluß am ISP-Steckverbinder muß immer zu Vcc des µC gehen. 
Denn diese Spannung bestimmt ja letztendlich, welche Pegel der 
Programmer senden bzw. empfangen muß.

> Da mein Programmer momentan aber
> konstant 5V an VCC abgibt würde er dann der µC mit 5V braten.

Da alle ATMega bis 5.5V vertragen, besteht keine Gefahr des "Bratens". 
Allerdings kannst du ja andere IC an Vcc hängen haben, für die das nicht 
gilt. In dem Fall hast du aber so oder so ein Problem. Denn wenn der µC 
mit 3.3V läuft, der usbasp aber mit 5V, dann sendet der usbasp zu hohen 
H-Pegel, was hoffentlich dank Serienwiderständen auf dem usbasp und 
Schutzdioden im Target gut geht. Der µC sendet aber in der Gegenrichtung 
zu niedrigen H-Pegel, was der usbasp möglicherweise nicht richtig 
erkennt. Das kann gut gehen, muß aber nicht.

Nun ist aber "usbasp" ein weites Feld. Es gibt durchaus Varianten, die 
per Jumper (oder Lötklecks) zwischen 5V und 3.3V umgeschaltet werden 
können. Die erkennst du sehr einfach daran, daß ein Spannungsregler für 
3.3V auf der Platine sitzt. So ein usbasp liefert dann nicht nur die 
richtigen Pegel, sondern könnte evtl. auch dein Target mit 3.3V 
versorgen.

> Wäre in dem Fall also die universellste Lösung 3 Pins, rechts 5V, links
> 3.3V, Mitte an VCC vom ISP Port? So kann man wahlweise eine der beiden
> Spannungen verbinden - oder auch offen lassen.

Nein. So niemals. s.o.

von Arduino Fanboy D. (ufuf)


Bewertung
0 lesenswert
nicht lesenswert
Michael W. schrieb:
> Der µC sitzt auf einer separaten Platine,

Wenn du die runter ziehen kannst, dann kannst du den µC auch separat vom 
anderen Kram beschreiben.

Alternativ:
Wie wäre es mit einem Bootloader, dann brauchst du den ISP Adapter nur 
beim ersten mal.

: Bearbeitet durch User
von Stefan ⛄ F. (stefanus)


Bewertung
0 lesenswert
nicht lesenswert
> Verbinde ich VCC vom Programmer mit VCC der Platine?

Normalerweise ja

> Wenn die Spannungen hier unterschiedlich sind kommt es zu
> Ausgleichsströmen.

Normalerweise dient die VCC Leitung dazu, die Ausgangstreiber des 
Programmieradapters zu versorgen. Damit passt er seine 
Ausgangsspannungen an die Versorgungsspannugn der Zielschaltung an.

Aber es gibt billige Programmieradapter, die das gerade nicht tun. Sie 
haben dann allerdings zumindest einen Umschalter von 3,3 zu 5V. 
Stromfluss in die falsche Richtung wird dabei im guten Fall durch Dioden 
und/oder Spannungsregler verhindert.

Die USBASP sind aber noch billiger als billig, da hat man alles weg 
gelassen, was möglich ist. Wenn du den auf 5V stellst und deine externe 
Schaltung eine eigene Spannungsversorgung hat, fließt tatsächlich ein 
Ausgleichsstrom der praktisch nur durch die dünnen Kabel begrenzt wird.

Bei 3,3V ist es nicht ganz so schlimm, da der verbaute Spannungsregler 
kein problem hat, wenn er "hinten herum" eine höhere Spannung ab 
bekommt. Allerdings sind die Signale trotzdem noch mit 5V Pegel! Der 
Spannungsregler wird nur zur Versorgung der Zielschaltung verwendet, 
aber der µC auf dem USBASP und damit auch alle Signale haben fest 5V.

Ich habe in diesem Jahr 3 USBASP bei unterschiedlichen Händlern gekauft. 
Sie sehen auch alle etwas anders aus, entsprechen jedoch exakt diesem 
idiotischen Schaltplan: 
http://jimlaurwilliams.org/wordpress/wp-content/uploads/2014/12/AC-PG-USBASP_03_LRG.jpg

Mit folgender Ausnahme: Die Sicherung F1 und die Jumper JP2 und JP3 
haben sie auch noch weg gespart.

Ich halte das für eine Fehlkonstruktion. Um deine Zielschaltung nicht zu 
zerstören, solltest du beim USBASP in alle Signal-Leitungen 180 Ohm 
Widerstände einschleifen. Die haben aber auch wieder Nebenwirkungen.

Der USBASP ist nicht für Anfänger geeignet - ist meine Meinung.

: Bearbeitet durch User
von Frank K. (fchk)


Bewertung
0 lesenswert
nicht lesenswert
Michael W. schrieb:

> Ich arbeite gerade an einer Platine für einen ATMega mit mehreren
> Schieberegistern. Ich möchte auch einen Anschluss zur Programmierung
> platzieren. Allerdings sind die Pins, welche für die Programmierung
> genutzt werden (MISO, MOSI, SCK) in der Schaltung schon anders belegt.

Dann nutze doch JTAG. Das liegt auf anderen Pins. Wäre eine Lösung.

Die Alternative wäre ein bidirektionaler Busswitch wie FST3257, 
74CBTLV3257 oder ähnliche. Die ISP-Funktionalität ist nur bei !RST=Low 
aktiv, und dieses Signal kannst Du zum Umschalten des Busswitches 
benutzen.

> Signale bekommt. Eine Lösung wäre VCC der Schieberegister über einen
> Jumper zu öffnen, wenn man den µC programmiert.

Das ist keine Lösung. Schau mal ins Datenblatt. Die Logikbausteine 
können nämlich nur Signale von 0V bis Vcc ab, und wenn Vcc auf 0V liegt, 
müssen alle Eingangssignale auch auf 0V liegen, sonst kann der Chip 
kaputt gehen.

> Eine andere Frage stellt sich mir noch im Zusammenhang mit der
> Spannungsversorgung: Verbinde ich VCC vom Programmer mit VCC der
> Platine? Wenn die Spannungen hier unterschiedlich sind kommt es zu
> Ausgleichsströmen. Sollte ich dann VCC vom Programmer einfach nicht
> verbinden? Oder sollte ich besser die externe Versorgung abklemmen und
> zur Programmierung den µC über den Programmer versorgen? Oder einfach
> einen Widerstand zwischensetzen?

Vcc am ISP-Port ist dafür vorgesehen, die (bei vernünftigen Programmern 
vorhandenen) Pegelwandler zu versorgen. Sonst nichts. Insbesondere ist 
dieser Pin nicht dafür gedacht, die Schaltung darüber zu versorgen, 
obwohl viele Leute das machen. Und: Dieser Pin ist erforderlich, also 
einfach anschließen. Gilt für JTAG genauso.

fchk

von Frank K. (fchk)


Bewertung
-2 lesenswert
nicht lesenswert
Michael W. schrieb:
> Momentan habe ich einen "USBASP" Programmer, der scheinbar das Target
> auch zumindest mit ein bisschen Strom versorgen kann. Ich weiß nicht, ob
> es so gedacht ist, aber für Experimente mit u.a. mit 16*2 Display oder
> UART-LAN Adapter hat es gereicht. Einen Jumper gibt es nicht.

Also Schrott.

Das beste wäre dann, einen Pegelwandler mit 4 74LVC1T45 aufzubauen.

https://assets.nexperia.com/documents/data-sheet/74LVC_LVCH1T45.pdf

VCCA geht dann VCC vom Programmer, VCCB geht an VCC vom Target. Bei 
guten Programmern sind solche Bausteine auch verbaut. Da Du Dir einen 
schlechten gekauft hast, musst Du jetzt Geld in die Hand nehmen und das 
nachrüsten.

Das Beste wäre ein ATMEL-ICE. Der kann neben ISP auch PDI und JTAG.

fchk

von Michael W. (neuer_nutzer)


Bewertung
0 lesenswert
nicht lesenswert
Guten Morgen zusammen!

Habe leider jetzt erst die nötige Zeit dazu gefunden hier wieder 
reinzuschauen und zu antworten.
Danke für die vielen Informationen die noch gekommen sind :)

Axel S. schrieb:
> …Wohl so ein China-Ding…
Ja, so ein China Ding :-/ Wurde irgendwo „empfohlen“. Kostet fast 
nichts, kann auch vielleicht fast nichts. Hat für mich aber bisher 
gereicht, da es den µC jedes Mal erfolgreich programmiert hat.

> ...dann wirst du um so einen Jumper nicht herum kommen...
Wie gesagt, eine universelle Lösung fände ich gut, und Platz für eine 
Jumper ist da.

> Die beste Lösung ist aber IMNSHO, beim Target immer Vcc auf den
> ISP-Anschluß zu legen und die Speisung des Targets im Fall des Falles am
> Programmer abzuschalten.
Wenn der Programmer das kann, gerne. Wenn mir meiner nicht mehr reicht 
hole ich auch gerne etwas Besseres. Bis dahin schadet ein Jumper auf der 
Platine aber denke ich nicht. Wenn man ihn gebrückt lässt ist es fast 
so, als wäre er nicht da.

> Der Vcc-Anschluß am ISP-Steckverbinder muß immer zu Vcc des µC gehen.
> Denn diese Spannung bestimmt ja letztendlich, welche Pegel der
> Programmer senden bzw. empfangen muß.
Das China Ding ballert denke ich immer mit 5V, da ist nichts mit 
Pegelanpassung fürchte ich. Aber wenn ich die VCC vom Programmer mit 5V 
an VCC vom µC lege wird der auch mit 5V gespeist und die Pegel passen.

> Da alle ATMega bis 5.5V vertragen, besteht keine Gefahr des "Bratens".
Stimmt, habe ich im Datenblatt inzwischen auch nachgelesen. Dachte es 
gäbe verschiedene (5V, 3.3V) Varianten, aber das ist nur der 
Spannungsregler.

> Allerdings kannst du ja andere IC an Vcc hängen haben, für die das nicht
> gilt.
An den 3.3V VCC vom µC hängt sonst nichts bisher.

> In dem Fall hast du aber so oder so ein Problem. Denn wenn der µC
> mit 3.3V läuft, der usbasp aber mit 5V, dann sendet der usbasp zu hohen
> H-Pegel, was hoffentlich dank Serienwiderständen auf dem usbasp und
> Schutzdioden im Target gut geht. Der µC sendet aber in der Gegenrichtung
> zu niedrigen H-Pegel, was der usbasp möglicherweise nicht richtig
> erkennt. Das kann gut gehen, muß aber nicht.
Wie schon gesagt, bisher geht es gut. Eine gute Lösung ist es aber 
natürlich nicht.

> Nun ist aber "usbasp" ein weites Feld. Es gibt durchaus Varianten, die
> per Jumper (oder Lötklecks) zwischen 5V und 3.3V umgeschaltet werden
> können. Die erkennst du sehr einfach daran, daß ein Spannungsregler für
> 3.3V auf der Platine sitzt. So ein usbasp liefert dann nicht nur die
> richtigen Pegel, sondern könnte evtl. auch dein Target mit 3.3V
> versorgen.
Ich werde die Platine vom Programmer mal genauer anschauen, ob ich einen 
Regler finde. Ggf. hole ich mir auch mal einen anständigen, wenn es sich 
lohnt weil ich ihn häufiger brauche. Bisher ist bei mir aber alles 
erstmal Spielerei und Ausprobiererei.

> Nein. So niemals. s.o.
Ok, überzeugt, lasse ich ;)

Danke für dein ausführliches Feedback :)


Arduino F. schrieb:
> Wenn du die runter ziehen kannst, dann kannst du den µC auch separat vom
> anderen Kram beschreiben.
Kann ich abziehen, mache ich im Moment auch so. Ist aber recht aufwendig 
und auf Dauer auch nicht gut für die Lötaugen, da man immer ein wenig 
„Gewalt“ anwenden muss.

> Alternativ:
> Wie wäre es mit einem Bootloader, dann brauchst du den ISP Adapter nur
> beim ersten mal.
Puh, wieder was, von dem ich keine Ahnung habe :/ Treibt durch die 
nötige Einarbeitung den Aufwand für mich wahrscheinlich auch erstmal in 
die Höhe :( So wie ich jetzt beschreibe weiß ich, wie es geht, und das 
es funktioniert.


Stefan U. schrieb:
>> Verbinde ich VCC vom Programmer mit VCC der Platine?
> Normalerweise ja
Normaler Weise, wenn man keinen billigen China USBASP Programmer hat ;)

>> Wenn die Spannungen hier unterschiedlich sind kommt es zu
>> Ausgleichsströmen.
>
> Normalerweise dient die VCC Leitung dazu, die Ausgangstreiber des
> Programmieradapters zu versorgen. Damit passt er seine
> Ausgangsspannungen an die Versorgungsspannugn der Zielschaltung an.
Normaler Weise, wenn man keinen billigen China USBASP Programmer hat ;)

> Aber es gibt billige Programmieradapter, die das gerade nicht tun. Sie
> haben dann allerdings zumindest einen Umschalter von 3,3 zu 5V.
> Stromfluss in die falsche Richtung wird dabei im guten Fall durch Dioden
> und/oder Spannungsregler verhindert.
Dass es sich bei meinem Programmer um einen „guten Fall handelt“, 
bezweifle ich inzwischen :/

> Die USBASP sind aber noch billiger als billig, da hat man alles weg
> gelassen, was möglich ist. Wenn du den auf 5V stellst und deine externe
> Schaltung eine eigene Spannungsversorgung hat, fließt tatsächlich ein
> Ausgleichsstrom der praktisch nur durch die dünnen Kabel begrenzt wird.
Ich denke ich werde noch einen Schalter vorsehen, mit dem ich die 
externe Spannungsversorgung der Platine abschalten kann. Dann fließt 
auch nix und ich sollte damit ein Problem weniger haben.

> Bei 3,3V ist es nicht ganz so schlimm, da der verbaute Spannungsregler
> kein problem hat, wenn er "hinten herum" eine höhere Spannung ab
> bekommt. Allerdings sind die Signale trotzdem noch mit 5V Pegel! Der
> Spannungsregler wird nur zur Versorgung der Zielschaltung verwendet,
> aber der µC auf dem USBASP und damit auch alle Signale haben fest 5V.
Wenn der Programmer mit VCC 5V den µC an seinem 3.3V VCC Pin versorgt 
läuft ja auch der µC auf 5V und die Signalpegel passen. Es ist aber gut 
zu wissen, dass der Spannungsregler diese 5V „hinten herum“ auch 
verträgt.

> Um deine Zielschaltung nicht zu zerstören, solltest du beim USBASP
> in alle Signal-Leitungen 180 Ohm Widerstände einschleifen. Die haben
> aber auch wieder Nebenwirkungen.
Ja, eine gute oder gar optimale Lösung zu finden gestaltet sich doch 
recht schwer. Irgendwo geht man doch immer einen Kompromiss ein :(
>
> Der USBASP ist nicht für Anfänger geeignet - ist meine Meinung.
Vom Preis mal abgesehen ;)


Frank K. schrieb:

> Dann nutze doch JTAG. Das liegt auf anderen Pins. Wäre eine Lösung.
>
> Die Alternative wäre ein bidirektionaler Busswitch wie FST3257,
> 74CBTLV3257 oder ähnliche. Die ISP-Funktionalität ist nur bei !RST=Low
> aktiv, und dieses Signal kannst Du zum Umschalten des Busswitches
> benutzen.
>
Danke für die Hinweise, muss ich mir genauer anschauen.

>> Eine Lösung wäre VCC der Schieberegister über einen
>> Jumper zu öffnen, wenn man den µC programmiert.
>
> Das ist keine Lösung. Schau mal ins Datenblatt.
Danke auch für die Info. Das ist weiter oben schon aufgeklärt worden. Da 
bin ich zu naiv rangegangen :(
>
> Vcc am ISP-Port ist dafür vorgesehen, die (bei vernünftigen Programmern
> vorhandenen) Pegelwandler zu versorgen. Sonst nichts. Insbesondere ist
> dieser Pin nicht dafür gedacht, die Schaltung darüber zu versorgen,
> obwohl viele Leute das machen. Und: Dieser Pin ist erforderlich, also
> einfach anschließen. Gilt für JTAG genauso.
Wie du schon sagst, bei vernünftigen Programmern. Also ist es bei mir 
anders ;)

Frank K. schrieb:
> Also Schrott.
Kann man natürlich so sagen. Stimmt wahrscheinlich auch objektiv. Ist 
aber immer von der Perspektive abhängig. Womöglich könnte ich das über 
dein Fahrrad auch sagen, wenn es kein High End Teil ist. Aber wenn es 
dich bei gelegentlichen kleinen Ausflügen zum Ziel bringt reicht es 
vielleicht für dich ;)

> Das beste wäre dann, einen Pegelwandler mit 4 74LVC1T45 aufzubauen.
> https://assets.nexperia.com/documents/data-sheet/74LVC_LVCH1T45.pdf
>
> VCCA geht dann VCC vom Programmer, VCCB geht an VCC vom Target. Bei
> guten Programmern sind solche Bausteine auch verbaut. Da Du Dir einen
> schlechten gekauft hast, musst Du jetzt Geld in die Hand nehmen und das
> nachrüsten.
>
> Das Beste wäre ein ATMEL-ICE. Der kann neben ISP auch PDI und JTAG.
Danke für diese Anregungen :) Muss ich mir aber auch erstmal im Detail 
anschauen :(


Danke nochmal an alle für die teils ausführlichen Beiträge und die 
vielen Hinweise. Ich habe jetzt auf jeden Fall viel Input den ich mir 
genau anschauen und über den ich nachdenken muss.

Viele Grüße,
Michael

von Stefan ⛄ F. (stefanus)


Bewertung
0 lesenswert
nicht lesenswert
> Ich denke ich werde noch einen Schalter vorsehen

Ja, mach das. Anstatt bei allen targets einen VCC Jumper einzufügen, der 
nicht Standard konform ist, würde ich lieber den Programmer umbauen.

Es kann nicht schwer sein, eine Leiterbahn oder gar das Flachkabel 
durchzuschneiden und einen Schalter einzufügen. Bei der Gelegenheit 
würde ich auch gleich noch eine Sicherung (400mA PTC) einfügen, falls 
der Programmer keine hat.

: Bearbeitet durch User
von Michael W. (neuer_nutzer)


Bewertung
0 lesenswert
nicht lesenswert
Ja, da hast du wohl auch recht.
Am Kabel anzusetzen habe ich noch gar nicht in Betracht gezogen. So 
einfach habe ich nicht gedacht.
Aber ich schaue auch nachher erstmal ob auf der Platine ein Jumper oder 
eine Brücke o.ä. sind, wo man vll auch 5V/3.3V umstellen kann.

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


Bewertung
0 lesenswert
nicht lesenswert
Stefan U. schrieb:
> Ich habe in diesem Jahr 3 USBASP bei unterschiedlichen Händlern gekauft.
> Sie sehen auch alle etwas anders aus, entsprechen jedoch exakt diesem
> idiotischen Schaltplan:
> 
http://jimlaurwilliams.org/wordpress/wp-content/uploads/2014/12/AC-PG-USBASP_03_LRG.jpg

In der Tat idiotisch. Richtig würde man einen ATMega88 verwenden und den 
per Jumper entweder mit 3.3V oder 5V versorgen. In die Reset, MISO, MOSI 
und SCK Leitungen zum Target gehören Serienwiderstände ca. 150R. Und für 
die optionale Versorgung des Targets aus dem Programmer gehört da ein 
extra Jumper hin.

Dann kann der usbasp wahlweise 5V oder 3.3V Pegel liefern, was für 99% 
der Anwendungen ausreichen dürfte.

> Der USBASP ist nicht für Anfänger geeignet - ist meine Meinung.

Das Problem ist halt, daß usbasp kein geschützter Begriff ist. So lange 
so ein Ding sich mit korrekter VID/PID am USB anmeldet und das usbasp 
Protokoll spricht, sieht es für den Laien und für avrdude wie ein usbasp 
aus. Die reale Hardware kann dann nochmal heftig differieren.

Als Fischl damals (vor über 12 Jahren!) den ersten usbasp 
zusammengekloppt hat, gab es noch keinen ATMega88 oder überhaupt einen 
AVR, der bei 3.3V schon mit 12MHz Taktfrequenz gelaufen wäre. Deswegen 
spricht der Ur-usbasp auch nur fest 5V.

von Frank K. (fchk)


Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Michael W. schrieb:

>> Das beste wäre dann, einen Pegelwandler mit 4 74LVC1T45 aufzubauen.
>> https://assets.nexperia.com/documents/data-sheet/74LVC_LVCH1T45.pdf
>>
>> VCCA geht dann VCC vom Programmer, VCCB geht an VCC vom Target. Bei
>> guten Programmern sind solche Bausteine auch verbaut. Da Du Dir einen
>> schlechten gekauft hast, musst Du jetzt Geld in die Hand nehmen und das
>> nachrüsten.

> Danke für diese Anregungen :) Muss ich mir aber auch erstmal im Detail
> anschauen :(

Und damit Du nicht dumm stirbst, hier der Pegelwandler zum Nachpinseln.

Die 74LVC1G125 dienen nur dazu, die Ausgänge hochohmig zu schalten, wenn 
der Programmer nicht aktiv ist. Die 74LVC1T45 sind die eigentlichen 
Pegelwandler. Den USBASP kannst Du auf 5V lassen, das Target kann mit 
einer beliebigen Spannung zwischen 1.65V und 5.5V arbeiten.

fchk

von Veit D. (devil-elec)


Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

eine Anmerkung zum Busswitch. Den kann man auch nicht einfach mit Reset 
verbinden zum automatischen umschalten. Reset zappelt beim flashen. An 
den Busswitch muss auch ein Jumper oder Schalter zum umschalten.

: Bearbeitet durch User
von Frank K. (fchk)


Bewertung
0 lesenswert
nicht lesenswert
Veit D. schrieb:
> Hallo,
>
> eine Anmerkung zum Busswitch und Pegelwandler. Die kann man jedoch auch
> nicht einfach alle mit Reset verbinden zum automatischen umschalten.
> Reset zappelt beim flashen. An den Busswitch oder Pegelwandler muss auch
> ein Jumper oder Schalter zum umschalten.

ISP-Befehle können nur und ausschließlich nur bei !RST=Low übertragen 
werden. !RST=High beendet den ISP-Modus. Immer.

In Deinem Beispiel wird ab Anfang sicher die ID abgefragt und die Fuses 
programmiert. Das sind einzelne, in sich abgeschlossene Transaktionen, 
und zwischen denen kann der ISP-Modus wieder verlassen werden. Beim 
Übertragen der Flash-Daten bleibt !RST dauerhaft auf Low. So soll es 
sein.

fchk

von Veit D. (devil-elec)


Bewertung
0 lesenswert
nicht lesenswert
Hallo,

das Bild zeigt eine normale Programmierung aus Atmel Studio heraus. Fuse 
ändere ich dabei nicht.

Ich hatte wo gelesen bzw. mitgeteilt bekommen das zum löschen Reset 
zappelt. Deswegen habe ich bei mir noch einen Schalter vorgesehen. Du 
bist dir sicher das man alles ohne extra Schalter machen kann. Reset 
überall gemeinsam ran ohne Einschränkungen? Noch ist meine Platine nicht 
beauftragt. Ich kann es noch ändern.

: Bearbeitet durch User
von S. R. (svenska)


Bewertung
1 lesenswert
nicht lesenswert
Die USBASPs, die ich bisher gesehen habe (und besitze), nutzen den Vcc 
vom ISP-Anschluss nicht. Da ist ein 3V3-Regler drauf, der per Lötklecks 
oder Jumper überbrückt wird. Dann hat man 5V-Pegel (direkt vom USB), 
ohne Klecks (= mit offenem Jumper) hat man 3V3-Pegel auf den 
Datenleitungen. Fehlt der Regler, hat man immer 5V-Pegel.

Wenn du also deinen AVR vom USBASP versorgt hast, dann war das 
wahrscheinlich eine parasitäre Versorgung durch die Datenleitungen, 
gestützt durch den Abblockkondensator. Das funktioniert, ist aber nicht 
gut. Merke: Während du programmierst, sollte das System versorgt sein 
und Vcc auf dem ISP-Anschluss anliegen.

Lass dir nicht die Stimmung vermiesen.
Die USBASP sind billig, aber sie programmieren.

Was das Ursprungsproblem angeht, ist deine Verdrahtung schlecht. Ich 
empfehle, den Enable-Eingang vom Register als /CE irgendwo 
anzuschließen, mit einem externen Pullup. Wenn der AVR im Reset ist 
(programmiert wird), floatet der Pin und der Pullup deaktiviert das 
Schieberegister; wenn du aktiv mit dem Chip sprichst, ziehst du den Pin 
in deiner Software aktiv runter.

von Frank K. (fchk)


Bewertung
0 lesenswert
nicht lesenswert
Veit D. schrieb:

> Ich hatte wo gelesen bzw. mitgeteilt bekommen das zum löschen Reset
> zappelt.

Ja, aber das macht nichts. Die ISP-Datenübertragung darf nur bei !RST=0 
stattfinden. Deswegen darfst Du einfach !RST als ISP-Enable nehmen und 
damit die Treiber oder Multiplexer steuern.

Debugwire ist ein anderes Thema. Da ist der !RST-Pin im dW-Modus eben 
kein Reset mehr.

Bei JTAG sind die LVC1G125 unnötig. Solange die JTAGEN Fuse aktiv ist, 
sind die JTAG-Pins exklusiv für JTAG reserviert.

fchk

von Veit D. (devil-elec)


Bewertung
0 lesenswert
nicht lesenswert
Hallo,

Danke Frank, verständlich erklärt  :-)  dann kann ich den Schalter vom 
Busswitch IC wieder entfernen. Mit SMD ICs kann ich das aktuell nicht 
testen.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.