Hallo,
ich möchte eine Schaltung aufbauen mit ICs die unterschiedliche
Versorgungsspannungen haben. Einmal einen ATmega328 bei 5V, da ich
diesen bei 20 MHz betreiben möchte. Außerdem einen ENC 28J60 Netzwerk
Controller der bei 3,3V arbeitet aber bei dem glücklicherweise die
meisten Pins 5V tollerant sind. Einzig der SO Pin am ENC, der mit MISO
am ATmega verbunden ist, ist nicht 5V tollerant (auch wohl weil es ein
Output Pin ist).
Das Problem was ich jetzt sehe ist, dass der MISO Pin am ATmega auch für
die Programmierung verwendet wird und der Programmer hier vermutlich 5V
Signale gibt. Ich dachte mir dann, dass ich den ATmega einfach mit 3,3V
programmiere. Das sollte an sich kein Problem sein, da die Spannung noch
hoch genug ist, um als High erkannt zu werden. Ich hab also die Platinen
in Auftrag gegeben und dabei nicht an den Programmer gedacht.
Ist es problematisch wenn man Target Voltage beim STK500 auf 3,3V stellt
und ein Mikrocontroller programmiert der bei 5V betrieben wird? Ich habe
gerade etwas in den Schaltplan geguckt und dort sieht es so aus als
wären die Kontakte vom ISP Header direkt an zwei Mikrocontroller
angeschlossen. Wenn die Mikrocontroller dann mit 3,3V betrieben werden
ist es natürlich genauso ungünstig, wenn dort 5V Signale reinkommen. Ich
steige aber auch nicht so ganz durch den Schaltplan des STK500 durch.
Welche der folgenden Szenarien würdet ihr mir empfehlen?
1) Mikrocontroller mit 5V programmieren und SO Pin am ENC möglicherweise
beschädigen
2) Mikrocontroller mit 3,3V programmieren und möglicherweise Programmer
beschädigen
3) Mikrocontroller mit 3,3V betreiben und trotzdem bei 20MHz außerhalb
der Spezifikation betreiben
In dem Fall reicht eine (Schottky ist da Pflicht) Diode und ein
Widerstand.
Der Widerstand zwischen Pin am Mega und Gnd (Pulldown) und die Diode vom
ENC an den Pin (Kathode an Pin, anode an ENC), fertig. Den Wert des
Resis muss man ermitteln, sollte klein genug für steile flanken sein und
groß genug um den ENC nicht zu überlasten (--> Datenblatt sagt dir den
maximalen I/O-strom). Ist zwar etwsa "pfuschig", funktioniert aber (der
Mega erkennt ab etwa 2,7 V High und 3,3 V - [Schottkydrop=0.3V] = 3 V =>
0.3 V "Reserve".
Sollte das dir zu unsicher sein, dann mach aus einem (VGth < 3 V) MOSFet
einen Levelshifter (
http://husstechlabs.com/support/tutorials/bi-directional-level-shifter/
), muss man halt auch den Pullup (in der Einzahl, da man auf der 3,3 V
Seite hier keinen brauch) tunen.
Edit: Du musst nur sicher sein können, das der ENC nicht beim proggen
zwischenquatscht
Da ich wie oben schon geschrieben das Board bereits hab fertigen lassen
kann ich wenn überhaupt nur kleinere Änderungen machen. Außerhalb der
Schaltung programmieren ist leider auch nicht möglich da der
Mikrocontroller SMD ist.
Über eine Diode hatte ich erst nachgedacht, aber nach den Angaben im
Datenblatt sind 3V die Grenze ab der Signale noch als High erkannt
werden, also ist man selbst bei nur 0,3V Spannungsabfall stark an der
Grenze, daher habe ich die Idee erstmal verworfen. Trotzdem noch eine
Frage aus Interesse: Warum ist der Pulldown Widerstand notwendig?
Kann vielleicht jemand etwas zu der ursprünglichen Frage sagen? Ist es
sehr problematisch wenn man mit einem Programmer (speziell das STK500)
bei 3,3V eine Schaltung programmiert, die bei 5V betrieben wird? Ich
muss dazu sagen ich habe das völlig unbedacht an einer anderen Schaltung
ausprobiert bevor ich die Platinen in Auftrag gegeben habe. Es hat wie
gewünscht funktioniert und das STK500 lebt noch. Ob es trotzdem
Problematisch ist weiß ich nicht. Ich hätte eigentlich gedacht so ein
Programmer ist halbwegs gegen so etwas geschützt.
Wäre es vielleicht eine Idee, den STK-500 durch einen AVRISP-MKii zu
ersetzen? Der stellt sich selbst auf die entsprechende Target-Spannung
ein. Nur so als Gedanke...
Was ist denn die richtige Target Spannung? Wenn ich an den VCC Pin 5V
anlege programmiert der AVRISP-MKii wohl mit 5V was schlecht für den ENC
ist und wenn ich dort 3,3V anlege dann programmiert er mit 3,3V was dann
wiederrum schlecht für den Programmer sein könnte weil 5V Signale vom
ATmega kommen. Also gleiches Problem wie mit dem STK500.
Hi
>Wäre es vielleicht eine Idee, den STK-500 durch einen AVRISP-MKii zu>ersetzen? Der stellt sich selbst auf die entsprechende Target-Spannung>ein. Nur so als Gedanke...
Das STK500 auch:
The VCC of the target application is detected by STK500 and signals are
converted into voltage levels suitable for the target system.
MfG Spess
spess53 schrieb:>> Das STK500 auch:>
Das wußte ich nicht. Ich war der Meinung, daß es dort in der Software
eingestellt werden muß.
Danke für den Hinweis!
Geh' mal davon aus, dass die meisten Programmiergeräte mit 5/3.3V, egal
in welcher Richtung, keine Probleme haben.
Wenn ich richtig verstanden habe, geht's um das 3,3V-Teil, welches
eventuell aus der Fassung springt und nicht um den µP.
Unter dem Strich bleiben Dir wohl nur drei Möglichkeiten:
1. Neues Layout
2. Jumper
3. Mit 'ner Diode probieren (drauf ankommen lassen).
Ich habe gerade nochmal in den Schaltplan des STK500 geschaut. Vorher
habe ich mir scheinbar den falschen Schaltungsteil angeschaut. Habe
jetzt aber den Teil gefunden, der für die Umwandlung der Signale
zuständig ist. Leider verstehe ich die Schaltung nicht wirklich. Ich
habe den entsprechenden Ausschnitt als Bild angehängt. Kann mir jemand
sagen wie die Schaltung funktioniert und ob es Problematisch ist wenn
Signale mit 5V reinkommen? Das VCC-Netz hat eine Spannung von 5V und das
VTG-Netz die der eingestellten Programmierspannung also 3,3V.
sebi707 schrieb:> Über eine Diode hatte ich erst nachgedacht, aber nach den Angaben im> Datenblatt sind 3V die Grenze ab der Signale noch als High erkannt> werden, also ist man selbst bei nur 0,3V Spannungsabfall stark an der> Grenze, daher habe ich die Idee erstmal verworfen. Trotzdem noch eine> Frage aus Interesse: Warum ist der Pulldown Widerstand notwendig?
Man könnte auch statt der Diode nur einen Widerstand in die Leitung
hängen, der muss dann so kalkuliert sein, dass die (vmtl. vorhandenen;
VORHER nachlesen; notfalls nachrüsten) Schutzdioden im ENC die Spannung
auf seiner Seite auf 3,3 V runterziehen können (da ist halt auch wieder
speed <-> strom das prob). Dann den CS (oder wieauchimmer Microchip das
nennt) auf "abgewählt" ziehen, wenn der Mega resetet ist, dann geht der
ENC-Ausgang automatisch tristate und sollte nicht stören.
Der Pulldown im Dioden-Design ist nötig weil die Diode nur ein High
"durchreicht" und ohne widerstand der Pin einmal auf 3 V geladen würde
und dann nichtmehr Low gehen könnte...
Um etwas pfusch wirst du bei der Sache nicht rumkommen ^^
Ich wundere mich schon sehr, dass du zuerst die Platine herstellen lässt
und und dann fragst, wie die Schaltung angepast werden musst!
Da nun das Kind in den Brunnen gefallen ist, rate ich dazu:
1) Den AVR außerhalb der Schaltung zu programmieren, oder
2) Den ENC mit Sockel zu verwenden und beim Programmieren zu entfernen.
Als ich die Platine in Auftrag gegeben habe dachte ich, dass ich durch
das Programmieren des ATmega mit 3,3V das Problem gelöst hätte. Der
ATmega erkennt 3,3V noch als High und der ENC kriegt bei 3,3V keine
Probleme. Für mich sah alles optimal aus bis ich dann gestern an den
Programmer gedachte habe, der ja jetzt mit 3,3V programmiert aber 5V
Signale vom ATmega kriegt.
Ich hab mir ja auch vorher einige Schaltungen von anderen Boards mit
ATmega und ENC Netzwerkcontroller angeguckt und keiner hat irgendwelche
Dioden an dem SO Pin am ENC. Ganz so kritisch kann es also nicht sein.
Beispiele für Schaltungen ohne zusätzlichen "Schutz":
http://www.lochraster.org/etherrape/http://www.ulrichradig.de/home/index.php/avr/eth_m32_exhttp://www.pollin.de/shop/dt/MTQ5OTgxOTk-/Bausaetze_Module/Bausaetze/Bausatz_AVR_NET_IO.html
Kann vielleicht noch jemand etwas zu dem Pegelumsetzer im STK500 sagen
(etwas weiter oben von mir angehängt). Ich bin auf jeden Fall schonmal
beruhigt, dass die Pins vom ISP Header nicht direkt an einen
Mikrocontroller gehen sondern erst umgewandelt werden und dann erst an
einen Mikrocontroller der auch mit 5V betrieben wird. Nach meinem Wissen
kann bei ein Paar Transistoren und Widerständen keine höhere Spannung
rauskommen als die Versorgungsspannung und damit ist der Mikrocontroller
hinter der Schaltung schonmal sicher. Es könnte also höchstens noch
sein, dass die Transistoren irgendwie überlastet werden. Da der kleinste
Widerstand aber 1KOhm ist glaube ich nicht das dort so hohe Ströme
fließen können um die Transistoren zu beschädigen. Ich wäre aber
beruhigter falls jemand meine Annnahmen nochmal bestätigen kann oder am
besten die Funktionsweise der Schaltung und was passiert wenn vom ISP
Header 5V kommen.
Ich finde es ja schon faszinierend, dass das Datenblatt nichts zur
maximalen Eingangsspannung am SO Pin aussagt, aber dennoch kommerzielle
Schaltungen im Umlauf sind, die diesen Pin mit "überspannung" belegen -
sogar ohne Vorwiderstand.
Du kannst ja mal antesten, ob überhaupt ein Strom fließt:
1
1k
2
5V o---(mA)---[===]------> SO Pin vom EN28J60
Wenn dabei kein Strom fließt, dann wird es wohl Ok sein, auf den
pegelwandler zu verzichten. Ansosnten würde ich einen einbauen.
Man könnte auch einen 470 Ohm Widerstand zur Strombegrenzung einsetzen,
allerdings verschlechtert er dann zusammen mit der Eingangskapazität des
AVR die Signalflanken - eventuell sogar so stark, dass die Schaltung
dann nicht mehr funktioniert.
Naja der SO Pin ist ja eigentlich ein Ausgang am ENC. Wenn der ENC nicht
gerade dort Daten sendet ist der Pin laut Datenblatt Hochohmig.
Einen Zwischenstecker könnte ich natürlich auch bauen. Könnte man sich
aber sparen wenn das STK500 sowieso damit klar kommt, dass 5V Signale
reinkommen. Daher nochmal: Kann irgendwer die oben angehängte Schaltung
erklären?
Konrad S. schrieb:> Du könntest einen Zwischenstecker basteln, der V-Target für den> Programmer auf 3.3V setzt.
Ach du meinst nur V-Target nicht die Signale vom ATmega. Das kann man
sich beim STK500 auch sparen, da man V-Target entweder vom Board das man
programmieren will nimmt oder per Jumper auch eine Spannungsquelle vom
STK500 nehmen kann die sich per Software auf die gewünschte Spannung
einstellen lässt. Der VTG Pin vom ISP ist an meinem Board momentan
unbeschaltet, ließe sich aber einfach mit einem Stück Kabel auf der
Rückseite auf 3,3V oder 5V legen. Bleibt aber die Frage was passiert
wenn V-Target 3,3V ist und 5V Signale vom ATmega ans STK500 gehen.
> Der VTG Pin vom ISP ist an meinem Board momentan unbeschaltet
Schlechte Idee, denn einige Programmer (z.B. der "Originale" AVR ISP
mkII) benötigen dort eine Spannung um die Treiber der drei ISP Leitungen
zu versorgen. Die passen sich nämlich an die Versorgungsspannung des
Targets an. Ohne Spannung keine Funktion.
Ich würde meine Geräte nicht von einem bestimmten Programmer abhängig
machen.
> Habe jetzt aber den Teil gefunden, der für die Umwandlung der Signale> zuständig ist. Leider verstehe ich die Schaltung nicht wirklich.
So eine Schaltung (allerdings eine qualitativ bessere) befindet sich im
AVR ISP mkII. Sie sorgt dafür, dass die ISP Schnittstelle mit der
Versorgungsspannung des Targets betrieben wird, unabhängig von der
"eigenen" Versorgungsspannung des Programmers.
Für mich ist das wichtig, denn ich betreibe meine Basteleien oft mit
Batterien. Bei mir gibt's nicht nur 3,3V und 5V, sondern den ganzen
Bereich von 2,8V bis 5,3V.
Ich habe auch zwei alte Programmer in der Wühlkiste, die nur 3,3V/5V
können. Die benutze ich aber schon lange nicht mehr.
Für Deinen Anwendungsfall hilft aber auch der pegelwandler des AVR ISP
mkII nicht. Denn wenn Du ihn mit 5V versorgst, hast Du mehr, als der
EN28J60 (mutmaßlich) verträgt. Wenn Du ihn mit 3,3V versorgst, geht er
warscheinlich kaputt, wenn er 5V vom Target-Mikrocontroller empfängt.
Der Pegelwandler von oben ist meiner Meinung nach Käse, da er viel zu
große Pull-Up Widerstände enthält. Damit wirst Du keine hohen Taktraten
erreichen - für die Verbindung zwischen AVR und EN28J60 ist er mit
Sicherheit ungeeignet. Nimm dazu lieber IC's, die hohe Ströme treiben
können. Hier sind einige erklärt:
http://www.mikrocontroller.net/articles/Pegelwandler#5_V_.E2.87.92_3.2C3_V
Der ganze Artikel könnte Dir helfen, diverse Pegelwandler-Schaltungen zu
verstehen.
Den oben verlinkten Pegelwandler will ich ja gar nicht einbauen sondern
dieser ist auf dem STK500 schon vorhanden. Ich denke mal nicht das der
total Käse ist sonst wäre der wohl kaum von Atmel so aufgebaut worden.
Obwohl ich den Wandler nicht verstehe sollte es nach meinen Annahmen
(siehe weiter oben) kein Problem sein wenn vom Mikrocontroller 5V
Signale kommen und VTG 3,3V beträgt. Idealerweise bestätigt jetzt noch
jemand meine Annahmen oder kann die Schaltung gar komplett erklären.
> Ich denke mal nicht das der total Käse ist sonst> wäre der wohl kaum von Atmel so aufgebaut worden.
Programmieren kann man ja auch beliebig langsam. Ich wollte nur
klarstellen, dass der Pegelwandler für die Verbindung zwischen AVR und
Ethernet Chip nicht geeignet ist - weger der viel höheren Bitrate.