Hallo miteinander. Ich habe mir eine Schaltung gebastelt, die einen ATMega328p mit einem W5500 und PoE-fähigkeit auf einer Platine vereint. PoE wird hier über einen TPS2376 realisiert, und die ~55V des PoE schicke ich zuerst durch ein LM2596HVS-Modul (der einfachkeithalber ein fertiges Modul zum Auflöten gewählt, da ich mir noch nicht ganz zutraue, Schaltregler selbst zu designen - vielleicht in der nächsten Iteration, um die Linearregler abzulösen) um handliche 12V zu bekommen (die brauche ich für weitergehende Funktionen), danach jeweils durch AMS1117-Linearregler für 3,3V und 5V. Der ATMega läuft mit 16MHz (im Schaltplan irrtümlich 8 angegeben), und besitzt einen NE555 als Watchdog, der den RESET nach GND zieht, wenn nicht regelmäßig ein HIGH von Pin 12 des ATMega kommt. Zusätzlich lässt das testprogramm auf dem Mega die LED an Pin 13 alle 2 Sekunden für 100ms blinken. Das ganze ist auf einer handlichen, 4-lagigen Platine aufgebaut, beim layout habe ich mir, so gut es mir mit meinem aktuellen Kenntnisstand möglich ist, an "good-practice" gehalten. Beim Schaltplan habe ich diverse Referenzschaltpläne aus den datenblättern zur rate gezogen, und auch, besonders was den TPS2376 betrifft, andere Schaltungen aus dem Internet... Die Schaltung funktioniert soweit hervorragend; auch PoE funktioniert und die Verbindung mit meinem LAN läuft, ABER: Wenn ich sie erstmalig einstecke, booten scheinbar ATMega und W5500 nicht richtig. Beim W5500 blinkt die Duplex-LED (Speed leuchtet), und es kommt keine funktionierende Verbindung zustande. Beim ATMega blinkt die LED an Pin 13 im Sekundentakt, was mit dem Code im Flash ja gar nichts zu tun hat. Interessanterweise wird trotzdem der NE555 getriggert. Wenn ich dann aber einmalig einen RESET auslöse, funktioniert alles wie es soll. Der PG-Pin des TPS2376 soll eigentlich den EN-Pin des LM2596HVS füttern (dafür müsste wohl noch ein Inverter dazwischen, da der PG lt. Datenblatt auf RTN gezogen wird, und der PG einen HIGH-Pegel braucht), aber der PG-output blinkt nur komisch, deswegen hab ich den EN erstmal stur auf POE+ gehängt. Ich hab den Schaltplan als PDF angehängt, vielleicht kann jemand mit dem Fehlerbild etwas anfangen, oder sieht direkt einen Fehler. Ich bin dankbar für jeden Lösungsansatz! :)
Matthias G. schrieb: > und > besitzt einen NE555 als Watchdog, der den RESET nach GND zieht, wenn > nicht regelmäßig ein HIGH von Pin 12 des ATMega kommt. Nö. Sobald PB0 auf Ausgang low gesetzt wird, bleibt der 555 auf High und somit Reset auch. Der 555 ist als Watchdog denkbar ungeeignet, da er keine Flankentriggerung besitzt, wie ein richtiger Monoflop (4538, 74HC123). Der 555 ist nur ein RS-FF mit 2 Komparatoren davor. Was stört Dich an dem internen Watchdog des AVR? Den kann man sogar per Fusebit als nicht abschaltbar setzen.
Probiere mal, den Brown-Out Detektor (in den Fuses) zu aktivieren. Ich hatte mal eine Schaltung, die ebenfalls nicht zuverlässig startete, weil das Netzteil zu langsam hoch fährt. Mit dem Brown-Out Detektor konnte ich das Problem umgehen.
Matthias G. schrieb: > Ich bin dankbar für jeden Lösungsansatz! Dinge die mir in deinem Schaltplan negativ aufstossen: U5 und U7 haben an ihrem Eingang keine Abblock-Kondensatoren. Das kann je nach Topologie (Aufbau) problematisch sein. Die Spannungsregler brauchen auch am Eingang einen Kondensator damit sie sauber arbeiten. Nur wenn U4 sehr nahe an U5 und U7 platziert sind könnte man evtl. darauf verzichten. U7 muss 9 V verbraten. Da der W5500 sehr viel Strom braucht wird das für den U7 "ungemütlich". Auch der U5 muss jede Menge Spannung sinnlos verbraten. Sinnvoller wäre einen Schaltregler von 12V auf 5V zu verwenden und daraus die 3.3V daraus zu erzeugen. Ich vermute die AMS1117 werden gut warm .... Deine Abblock-Kondensatoren sind im Block angeordnet, damit lässt sich nicht beurteilen ob diese auf der Platine an den jeweiligen Pins angeordnet sind oder nicht. Der Mega328 braucht mindestens drei davon an seinen Pins!
Wastl schrieb: > Ich vermute die AMS1117 werden gut warm .... Ob die Regler auch vernünftig funktionieren (Regelschwingung oder sehr schlechte Regelung) lässt sich aus der Entfernung naturgemäss nicht beurteilen. Eine statische Spannungsmessung dürfte jedenfalls zu wenig Aussagekraft haben.
Peter D. schrieb: > Nö. > Sobald PB0 auf Ausgang low gesetzt wird, bleibt der 555 auf High und > somit Reset auch. > Der 555 ist als Watchdog denkbar ungeeignet, da er keine > Flankentriggerung besitzt, wie ein richtiger Monoflop (4538, 74HC123). > Der 555 ist nur ein RS-FF mit 2 Komparatoren davor. > > Was stört Dich an dem internen Watchdog des AVR? > Den kann man sogar per Fusebit als nicht abschaltbar setzen. Das hatte ich falsch angegeben. ich ziehe den Pin für das Signal natürlich auf GND, und den rest der Zeit schalte ich den Pin hochohmig. Das system funktioniert bei mehreren Projekten einwandfrei, teilweise schon jahrelang. Allerdings geht es darum nicht ;) @Steve van de Grens: Tatsächlich hatte ich mir über Fuses nicht großartig den Kopf zerbrochen ;) Ich mache es mir einfach und programmiere das Ding über die Arduino-IDE (schande auf mein Haupt) und nehme die so, wie sie der Arduino-Bootloader (den ich dann wieder überschreibe) mitbringt... Aber ich werde jetzt mal sehen wie ich die Fusebits ordentlich gesetzt bekomme... @Wastl: Danke für die ausführlichen Hinweise! Ich habe mir mal den Spaß gemacht, und mein billig-oszi an die 5V-Spannung zu hängen, sofern man bei dem Ding von Oszi sprechen kann, aber es hat mir schön öfter gute Dienste geleistet. Das Ergebnis hänge ich mal an. Die Spannung steigt innerhalb 40ms auf 5V an und sieht da auch recht stabil aus, die Schwankungen dürften irgendwo bei wenigen mV liegen. Im Datenblatt des AMS1117 steht: "The circuit design used in the AMS1117 series requires the use of an output capacitor as part of the device frequency compensation. The addition of 22µF solid tantalum on the output will ensure stability for all operating conditions." Auch im Referenzschaltbild steht ist kein Kondensator am Eingang eingezeichnet. Und ja, U4, U5 und U7 liegen praktisch direkt in einer Reihe auf der Platine. Ansonsten bin ich 100% bei dir was die Regler angeht, das werde ich bei der nächsten Iteration auch definitiv so berücksichtigen - aber an Schaltreglerdesigns hatte ich mich einfach noch nicht ran getraut, und wollte meine Platine auch nicht mit lauter fertigen Modulen pflastern ;) Allerdings sind die Regler mit den Werten innerhalb der Specs, sollten also bzgl Last keine Probleme machen. Sie werden angenehm handwarm ^^ Die Abblockkondensatoren habe ich im Layout so dicht wie nur irgendwie möglich an die Versorgungspins gesetzt, so wie es sich gehört. Dass der ATMega mindestens 3 braucht war mir nicht bewusst... Ich hatte das glaub ich einfach aus einem Arduino-Schaltplan übernommen. Ich werde einfach mal ein oder zwei mit dranlöten, und sehen was passiert. Macht es sinn, ein Bild vom Layout oder der Platine zu posten?
Wastl schrieb: > Der Mega328 > braucht mindestens drei davon an seinen Pins! Hab nun 4 dran. Leider keine Veränderung im Verhalten...
Matthias G. schrieb: > IMG_20240108_150644731.jpg Die Anstiegszeit sieht gut aus, daran wird es nicht liegen.
Steve van de Grens schrieb: > Die Anstiegszeit sieht gut aus, daran wird es nicht liegen. Denke ich eben auch. Habe jetzt mit den Fuses rumgespielt. Habe CKSEL3 eingeschaltet (waren alle aus) EESAVE hab ich auch eingeschaltet (weil es immer nervt, wenn beim flashen der eeprom gelöscht wird) und BOD habe ich auf 4,5v gestellt (war auf 2,7v). Fuses sind jetzt dementsprechend 0xF7, 0xD2 und 0xF9. Leider keinerlei Verhaltensänderung. Ich werd mich jetzt mal informieren, wie der interne watchdog funktioniert, vielleicht kann ich den bei einem fehlstart erstmal auslösen lassen, obwohl das ja eigentlich nur ein workaround ist...
Sicher das der W5500 schon wach ist wenn er sein Init bekommt? Nicht das der nur die Hälfe verstanden hat und der Avr auf eine Antwort wartet die nie kommt. Da war was mit 300ms?
Matthias G. schrieb: > Ich werd mich jetzt mal informieren, wie der interne watchdog > funktioniert, Stelle vorher sicher, dass der neue Bootloader (der mit 115200 Baud) installiert ist. Wenn der Watchdog erst mal aktiviert ist, versagt danach der alte Bootloader.
Steve van de Grens schrieb: > Stelle vorher sicher, dass der neue Bootloader (der mit 115200 Baud) > installiert ist. Wenn der Watchdog erst mal aktiviert ist, versagt > danach der alte Bootloader. Wie würde sich das auswirken? Ich meine ja eh, dass ich den Arduino-Bootloader überschreibe, wenn ich per ISP flashe. Was mich noch etwas irritiert ist, dass in den Fuses auch ein Reset-Vector und Boot-Size angegeben wird, das übersteigt mein Vedrständnis aktuell noch etwas ;) Allerdings nutzt mir der interne Watchdog hier sowieso nichts. Ich habe inzwischen ein bisschen damit herumgespielt, aber der resettet leider nur den ATMega selbst, die externe RESET-Leitung bleibt davon unbeeindruckt, so dass der W5500, der ja von der selben Leitung zurückgesetzt wird, fröhlich weiterspinnt. Mein NE555-Watchdog dagegen macht einen Systemweiten Reset :) Achim H. schrieb: > Sicher das der W5500 schon wach ist wenn er sein Init bekommt? Nicht das > der nur die Hälfe verstanden hat und der Avr auf eine Antwort wartet die > nie kommt. Da war was mit 300ms? Das ist eine interessante These. Allerdings wüsste ich nicht warum der AVR warten sollte. Ich habe auch schon testweise delays von 1000ms an verschiedenen Stellen eingebaut, ohne Erfolg. Um einen Konflikt im SPI-Interface werde ich die Tage mal die Schaltung testen, wenn ich den den AVR-Teil weglasse und nur den W5500 verbaue. Und evtl. umgekehrt. Mal sehen was dann passiert!
Matthias G. schrieb: > Allerdings wüsste ich nicht warum der AVR warten sollte. Ich auch nicht. Im Datenblatt steht was von 10µs/1ms aber dennoch reagierte er falsch wenn da keine 500ms (300ms ertestet, 800ms von anderer Seite empfohlen) zwischen seinem Reset und dem ersten Ansprechen waren. Das Spi lief mit "gemütlichen" 2Mhz. (nichts anderes getestet) Matthias G. schrieb: > Wie würde sich das auswirken? > Ich meine ja eh, dass ich den Arduino-Bootloader überschreibe, wenn ich > per ISP flashe. > Was mich noch etwas irritiert ist, dass in den Fuses auch ein > Reset-Vector und Boot-Size angegeben wird, das übersteigt mein > Vedrständnis aktuell noch etwas ;) Der Watchdog würde den Bootloader unterbrechen da der kein WDR(Watchdogreset) enthält. Ist es per ISP möglich nicht den ganzen Flash zu löschen? Quasi nur Blockweise wie der Bootloader das macht? Er springt dann zu dem Reset Vector findet dort nur FF. Dann arbeitet er die solange (ohne Wirkung) ab bis er bei Adresse 0 ankommt wo der Code beginnt. Das kann dann Probleme machen wenn der Code so lang wird das da keine FF mehr stehen ;-)
:
Bearbeitet durch User
Matthias G. schrieb: > Ich meine ja eh, dass ich den Arduino-Bootloader überschreibe, wenn ich > per ISP flashe. Ja > Was mich noch etwas irritiert ist, dass in den Fuses auch ein > Reset-Vector und Boot-Size angegeben wird, das übersteigt mein > Vedrständnis aktuell noch etwas ;) Damit reservierst du einen Bereich am Ende des Flash für den Bootloader. Nach einem Reset beginnt der Programmzähler dann nicht an Adresse 0x0000, sondern dort wo der Bootloader steht.
Matthias G. schrieb: > Wenn ich sie erstmalig einstecke, booten scheinbar ATMega und W5500 > nicht richtig. Man kann doch einfach die Statusregister des W5500 abfragen, wo es klemmt. Man kann auf jeden Fall dem W5500 einen Resetbefehl (Bit RST im Mode Register) schicken. Daß es nach dem Einstecken des Ethernetkabel elend lange dauern kann, bis er am Host angemeldet wurde, ist doch normal.
Matthias G. schrieb: > Wenn ich sie erstmalig einstecke, booten scheinbar ATMega und W5500 > nicht richtig. Dann mußt Du eben debuggen. Planlos rumprobieren hilft da nicht weiter. In den Debugmodus zu kommen, ist beim ATMega328p allerdings etwas tricky (DebugWIRE). Ich würde daher einen kleinen Monitor einbauen, der über die UART Register oder RAM auslesen kann. Dann kann man sich den Zustand anschauen, ohne daß der MC stehen bleibt, d.h. er kann nebenbei immer noch die W5500 Interrupts behandeln. Dein 555 Watchdog läßt sich ja ganz einfach über Low-Pegel totlegen, ist also ein ziemlich müder Watchdog.
Peter D. schrieb: > Dann mußt Du eben debuggen. Planlos rumprobieren hilft da nicht weiter. > In den Debugmodus zu kommen, ist beim ATMega328p allerdings etwas tricky > (DebugWIRE). > Ich würde daher einen kleinen Monitor einbauen, der über die UART > Register oder RAM auslesen kann. Dann kann man sich den Zustand > anschauen, ohne daß der MC stehen bleibt, d.h. er kann nebenbei immer > noch die W5500 Interrupts behandeln. > Dein 555 Watchdog läßt sich ja ganz einfach über Low-Pegel totlegen, ist > also ein ziemlich müder Watchdog. Naja, DebugWire klingt toll, aber die benötigte Hardware dafür würde momentan mein Budget sprengen ;) Allerdings habe ich jetzt trotzdem Fortschritte gemacht: Der LM2596HVS Schaltregler scheint die Schwierigkeiten zu verursachen. Ich habe probeweise, um die PoE-Sache ausschließen zu können, den Regler von der PoE-Spannung getrennt und dafür sauber geregelte 23V (mehr hatte das kleine Netzteil, das ich gerade zur hand hatte, nicht zu bieten) eingespeist, und hatte das gleiche Fehlerbild. Darauf habe ich den LM2596 komplett ausgelötet und dafür einfach 12V eingespeist und siehe da, die ganze Sache läuft wunderbar. Das ist natürlich nicht im Sinne des Erfinders, und jetzt sollte ich eine Möglichkeit finden, entweder die Spannung des Schaltreglers zu filtern, oder einen Ersatz dafür zu finden, der mit den 50V klar kommt... Genau aus dem Grund habe ich auf einen gekauften Schaltregler zurückgegriffen, anstatt selbst einen zu designen. Das ärgert mich jetzt doppelt 😥 Edit: ich muss mich korrigieren. Bei dem fraglichen Schaltregler handelt es sich NICHT um einen LM2596HVS, den hatte ich wohl nur als Platzhalter im Schaltplan angegeben - den Footprint des tatsächlichen Reglers hatte ich selbst gezeichnet. Beim tatsächlichen Regler handelt es sich um eine "V100 EY9" von ali, die Bezeichnung auf dem verbauten IC ist abgefräst... Ich werde mal testweise einen "echten" LM2596HVS auflöten und schauen was passiert. Der ist zwar nur mit 50V angegeben, und mein PoE liegt knapp drüber, aber wird schon halten ;) Ich werde weiter berichten...
:
Bearbeitet durch User
Beitrag #7590343 wurde vom Autor gelöscht.
> Der ist zwar nur mit 50V angegeben, und mein PoE liegt > knapp drüber, aber wird schon halten ;) Wenn der Schaltregler wegen der Überspannung irgendwie hängen bleibt und dabei "einfach Durchschaltet", hast du Vin = Vout, und grillst neben dem Schaltregler auch alles weitere dahinter...
:
Bearbeitet durch User
Tim S. schrieb: > Wenn der Schaltregler wegen der Überspannung irgendwie hängen bleibt und > dabei "einfach Durchschaltet", hast du Vin = Vout, und grillst neben dem > Schaltregler auch alles weitere dahinter... Das wäre fatal... Aber ich hab beim rumprobieren das Problem gefunden, es liegt nicht an der Stromversorgung! Schuld ist der 1m-Widerstand am Qarz vom W5500. Den hatte ich im ursprünglichen Platinenlayout nicht drin und hatte ihn nachgerüstet, weil ich dachte der muss da hin. Ich hab mehrere Testmodule am laufen, und mich gewundert, warum ich bei einem den Fehler nicht mehr reproduzieren konnte... Bei dem hatte ich den Widerstand vergessen. Hab ihn dann bei zwei anderen Boards entfernt und ZACK, beide laufen auf Anhieb wie vorgesehen! Es kann so einfach sein, damit wäre das dann wohl gelöst. Bleibt mir nur noch, etwas an der Linearreglersituation zu ändern, der 3,3V regler wird halt schon ordentlich warm. Und wenn ich dessen eingang an den ausgang vom 5v regler hänge, wird halt der dafür heiß. Vielleicht bastle ich noch einen kleinen schaltregler dazwischen, mal sehen 😉
Nimm doch einen MPM3610 statt den Linearregler.
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.