Bootloaderproblem

  • Sehr gut, wenn selbst das Brutalo-Programm nicht läuft, dann sind wir schon deutlich klüger.
    Wir müssen also nicht mehr den Quelltext in unsere Überlegung einbeziehen.
    Aber lasse das Brutalo-Program mal im Flash, jetzt schauen wir weiter.



    Es ist sehr wahrscheinlich so, dass der Bootloader oft nicht korrekt beendet wird.
    Also das genaue Gegenteil vom Thread-Topic.


    Der Bootloader bleibt in sich hängen, so dass das eigentliche Programm nicht aufgerufen wird.
    Wahrscheinlich lauert der auf irgendwas (serielle Daten) das nicht so kommt, wie er es erwartet.


    Das kann mit der Beschaltung des FT232 zusammenhängen.
    Vielleicht fängt die sich irgendein Radioprogramm ein oder so. Ich schaue mir gleich mal das Datenblatt von dem Ding an, gibt da ja mehrere Schaltungsvarianten.

  • Vorschlag um einzukreisen, ob es mit dem FT232 und Bootloader zusammenhängt, im weitesten Sinne:


    Trenne mal mit 'nem Cutter die Leiterbahn vom TXD des FT232 (also Pin1) zu PinD.0 des Controllers.
    Dann verbinde den PinD.0 testweise per 10k Widerstand mit GND und teste mal.


    Wenn nicht gut, dann zweite Variante: PinD.0 über den Widerstand mit VCC des Controllers verbinden, statt mit GND.


    Jetzt kann uns eigentlich kein Bootloader mehr dazwischen funken, das Programm sollte starten und die Selbsthaltung aktivieren.
    Mindestens in einem der beiden Fälle sollte es so sein.


    Wenn ja, dann kümmern wir uns im Anschluss mal um den Reset-Pin des FT232.



    Kannst Du auch mal das Layout und/oder ein Foto der Schaltung posten?

  • Der Bootloader bleibt in sich hängen, so dass das eigentliche Programm nicht aufgerufen wird.
    Wahrscheinlich lauert der auf irgendwas (serielle Daten) das nicht so kommt, wie er es erwartet.

    Ja, in die Richtung habe ich auch schon gedacht. Meine USB-Buchse ist nämlich mit 15cm Kupferlackdraht ausgelagert. Habe ich aber noch vor dem Erstellen des Threads ausprobiert und den Kupferlackdraht und damit die Antenne vom 232 entfernt, ohne Veränderung natürlich.
    Aus dem Layout wird wohl kaum einer schlau werden. Wie gesagt sind die USB Buchse und ausserdem der Reedkontakt ausgelagert. Masseflächen habe ich ausgeblendet. Ein Bild des Aufbaus und Änderungen kann ich frühestens morgen wieder machen.

  • Habe jetzt mal den FT232 komplett vom Controller getrennt und PortD.0 gegen GND und gegen VCC des Controllers geschalten und es haben sich keine Besserungen ergeben.;( Aus lauter Selbstzweifel habe ich dann nochmal das Programm ohne Bootloader geflasht und das tut. Ich würde gerne mit einem neuen Layout und frischen Bauteilen nochmal "neu anfangen". Irrlicht: hast du noch eine Idee oder darf ich dich um deine Verbesserungsvorschläge bitten?
    Mit den Bildern wird man wohl nichts anfangen können. Die Platine sieht durch das Modifizieren schon aus wie Sau.
    [Blockierte Grafik: http://www.abload.de/thumb/imag0363hcb44.jpg][Blockierte Grafik: http://www.abload.de/thumb/imag0364iaf7p.jpg]

  • Ei, das ist ja merkwürdig.
    Also rebelliert der Bootloader, selbst wenn er absolut keine seriellen Daten bekommt.
    Hast Du den auch wirklich in den richtigen Speicherbereich geflasht?
    Oder hast Du in einem Rutsch, mit immer identischen Einstellungen Deine vier Platinen programmiert, wobei nur eine zickte?


    Bist Du eigentlich auch bereit, mal einen anderen Bootloader einzusetzen?
    Immerhin können wir in den bisherigen nicht hineinschauen, wissen also nicht im Detail, was der macht.



    Und die Platine neu zu machen, halte ich durchaus für sinnvoll. Der Schaltplan war schon nicht recht nach meinem Geschmack. Da kann man Dinge vereinfachen.
    Ich würde ein einseitig bestücktes Layout empfehlen. Wird zwar etwas größer, erleichtert aber die Fehlersuche sehr. Auch die Bestückung.
    Einseitig bestückt, kann man bequem im Pizzaofen oder mit Heißluft löten.


    Als ich damals die Spielautomaten layoutete war das seitens des Kunden sogar eine Vorgabe: Doppelseitig geätzte Platine (kein Multilayer) und nur einseitige Bestückung- aus Kostengründen. Und wie man sieht geht das, selbst bei erheblich aufwändigeren Sachen.
    Schön ist es, wenn man von Anfang an im Hinterkopf hat, wie man die Platine später einbauen will und dass man nach dem Einbau noch in der Lage ist, alle Bauteile per Messspitze zu erreichen.
    Ein paar Testpins an wichtigen Signalen sind ebenfalls hilfreich.
    Auch layoute ich gern so, dass man bestimmte Signale bei Bedarf per Cutter bequem trennen kann, falls man mal modifizieren muss.


    Noch ein Tipp für den Schaltplan:
    GND nicht mitzeichnen, sondern einfach je ein Massesymbol einsetzen.
    Schon gar nicht Masse oder VCC irgendwie verwinkelt zeichen. Ganz oben eine durchgehende Versorgungsspannungsleitung (oder - wie bei GND - VCC-Symbole).
    Ganz unten entweder eine durchgehende Masseleitung, oder eben (besser) Massesymbole.
    Das speckt schon die gefühlte Komplexität des Schaltplans schon mal deutlich ab, weil man nur noch die relevanten Signale sieht.


    Und alle Anschlüsse als solche deutlich erkennbar im Schaltplan einzeichen. Also nicht einfach irgendeine Leitung mit "VBATT" beschriften oder so, ohne eine Buchse oder Lötpins einzuzeichnen.


    Die USB-Buchse gehört im Layout übrigens möglichst dicht an den FT232. Also nix mit "15cm Klingeldraht". USB bedeutet effektiv Hochfrequenz!


    Und zu der Selbsthaltung habe ich auch noch Ideen, ebenso zu der Sache mit T1 und T2, vor dem WS2801. Aber dazu fehlt mir jetzt gerade die Zeit.
    Jedenfalls können wir viel Hühnerfutter wegrationalisieren, wenn wir das Ding von Grund auf neu aufziehen.


    Bin etwas im Stress, wegen der Industriemesse, aber am Wochenende habe ich wieder mehr Zeit, dann entrümpeln wir das Ding mal gründlich.

  • So, bin wieder da.
    Nun ein paar Vorschläge für die Version 2 der Schaltung:


    Zu dem UND-Gatter:
    Du kannst die Transistoren T1 und T2, sowie die Widerstände R27 und R28 wegrationalisieren.


    Möglichkeit 1)


    Statt T2 einen MOSFET einsetzen. Dessen Gate direkt (ohne Vorwiderstand)
    an PD6 und dessen Drain nicht an VCC, sondern dort das SCK vom
    Controller anlegen.


    Das ist also eine UND-Verknüpfung, die nur dann CKI vom WS2801 bedient, wenn PD6 das Gate ansteuert UND der Controller den SCK ausgibt.
    Statt vier Bauteile, mit zusammen 10 Lötstellen, hast Du dann nur noch ein Bauteil mit drei Anschlüssen.



    Möglichkeit 2)
    Sogar noch einfacher, ich würde es so probieren:
    Den CKI vom WS2801 einmal direkt an PD6 anschließen und einmal über einen Widerstand an SCK vom Controller.
    Gar keine Transistoren oder MOSFETs, nur ein Widerstand!


    Solange PD6 aktiv low ist, kann der Controller an SCK sowie rumtakten
    wie er will, der WS2801 bekommt davon nichts mit, weil das Signal über
    den Widerstand abgeschwächt und von PD6 auf low gezogen wird.


    Um nun das SCK zum WS2801 durchzuleiten, schaltest Du den PD6 auf Eingang. Er wird also hochohmig (Tristate. Bitte ohne Pullup).
    Der Widerstand zwischen CKL und CKI darf nur nicht zu hochohmig sein, sonst verwaschen die dort ankommenden Flanken.
    Bei dieser Beschaltung kann auch noch der R26 entfallen.
    Statt 5 Bauteilen, mit zusammen 12 Lötstellen, wäre also nur noch ein Widerstand mit zwei Lötstellen vorhanden.




    Zu der Selbsthaltung:

    Den AVR permanent an VBATT hängen und bei Bedarf in den Sleepmodus versetzen. Da verbraucht er nur Bruchteile eines Mikroamperes. Der Akku wird also ewig halten.


    T4 ersetzen durch einen negativ ansteuerbaren MOSFET, dessen Gate direkt
    (ohne Widerstand, da überflüssig) von PC2 angesteuert wird.
    Der MOSFET (ehemals T4) schaltet aber nicht mehr den AVR, denn der hängt ja - wie erwähnt - direkt an VBATT.


    Der Reedkontakt wird an einen freien Portpin geschaltet, z.B. wie gehabt
    an PD2, mit programmiertem Pullup. Das andere Ende vom Reed an GND.


    Das Programm reagiert dann derart auf den Reedkontakt, dass eine
    Betätigung den AVR aus dem Sleepmodus weckt, eine erneute (dauerhafte?)
    Betätigung ihn aber erneut in den Sleepmodus versetzt.


    Das spart sechs Bauteile: R20, R1, R22, T3, beide Dioden.
    Also 13 Lötstellen gespart.
    Wobei zu beachten ist, dass bei dauerhafter Betätigung des Reedkontaktes ein Strom über den internen Pullup nach GND abfließt.
    Der interne Pullup liegt laut Datenblatt zwischen 20 und 50k.
    Bei 20k würden also 3,7V / 20k = 185 Mikroampere fließen, auch wenn der Controller schläft.
    Aber nur dann, wenn der Reed geschlossen ist. Weiß ja nicht, ob das der Fall ist, bei Dir.


    Die "Kunst" liegt halt darin, den AVR so zu programmieren, dass er über
    den Kontakt sowohl zu aktivieren ist, als auch in den Sleepmodus zu
    versetzen ist. Da muss also eine Routine programmiert werden, die diese
    Funktion bringt, nebst Kontaktentprellung.


    Ist zwar graue Theorie (habe selbst tatsächlich noch nie den Sleepmodus verwendet) würde aber erwarten, dass das geht.
    Kannst Du ja mal mit 'ner Modifikation einer Deiner vorhandenen Schaltungen testen.
    Jedenfalls lassen sich theoretisch bis zu 10 Bauteile sparen, mit zusammen 23 Lötstellen.




    Was macht eigentlich der PC1, der da zwischen R2 und R3 geschaltet ist?
    Sollte das mal 'ne Batteriespannungsmessung werden?


    Dem AVR würde ich noch 'nen Resettaster spendieren. Es gibt immer mal merkwürdige Hänger, wo das dann hilft.


    Schau auch mal, ob Du nicht auch den Reset vom RFM12 bedienst. Bin
    gerade zu faul in dessen Datenblatt nachzusehen, aber wenn solche Pins
    einfach frei in der Luft hängen, kribbelt es bei mir immer. Schau mal,
    ob das überhaupt zulässig ist.

  • hey Irrlicht,


    ich wüsste nicht, wie ich beim Flashen falsch gemacht haben könnte. Das MyAVR ProgTool lässt einem denke ich mal auch nicht so viele Möglichkeiten. Die drei Platinen welche nicht so recht wollen, habe ich in einem Rutsch programmiert, die "Gute" war der Layouttest vorab. Welchen Bootloader ich da nun einsetzte, ist mir eigentlich egal, solange es ein GUI dazu gibt. Zum Testen auch gerne eine Konsolenvariante.


    Nun zur Neuauflage der Platine:
    Leider spielt der Platz nicht mit, alle Bauteile auf eine Seite zu packen. Vielleicht klappt es mit der Rationalisierung der Bauteile, aber ich denke eher nicht. Der Reedkontakt ist nur zum Toggeln des Betriebszustands geschlossen, dessen Stromhunger also irrelevant. Durch deine Einwände sind nun einige Bauteile weggefallen, auch den ADC-Teil spare ich mir nun und aktiviere im RFM12 die brown-out-detection, die sparsamer ist als die des Controllers und ihn über PD3 schlafen legen soll. PC1 sollte diese Aufgabe im letzten Layout übernehmen, um die Schaltung von der Batterie zu trennen, solbald deren Ladezustand kritisch wird. Der Reset des RFM12 ist intern beschalten und fungiert als IO, damit kann man sowohl das Modul auf Reset ziehen als auch den Controller; je nach Beschaltung und Programmierung.


    Deine Ansprüche an den Schaltplan habe ich auch umgesetzt. Beim Letzten war nicht geplant, dass ihn jemand ausser mir zu sehen bekommt. Da kommts dann halt nur aufs Layout an und nicht dass man sich gut darin zurecht findet.
    Gibts noch was zu verbessern oder kann ich mit dem Layouten anfangen?

  • Hallo Elite,


    Erstmal zum Schaltplan:
    Ich würde GND-Symbole immer nach unten zeichnen.
    Daran angeschlossene, diskrete Bauteile darüber.


    Und die VCC-Pfeile immer nach oben zeigen lassen.
    Das vereinfacht das Lesen des Schaltplans sehr, die Denkweise dabei ist halt die, dass der "Saft" wie Regen von oben kommt und letztendlich nach unten in den Gulli fließt (GND).


    Signale, die man mit zwei bis vier Winkeln durchzeichen kann, würde ich auch durchzeichnen.
    Nur ein solches Signal, das sich kreuz und queer durch den Schaltplan schlängeln würde, versehe ich mit 'nem Signalsymbol & Label, statt es als verbundene Linie durchzuzeichnen.
    Ein gut lesbarer, diszipliniert gezeichneter Schaltplan kommt dann mit
    wirklich wenigen Leiterbahnwinkeln aus, obwohl man fast alle Signale
    durchzeichnet.



    Weiterhin sollte der vorwiegende Signalfluss von links nach rechts sein.
    Das ist zwar in der Praxis nicht zu 100% einhaltbar, sollte aber in möglichst hohem Maße umgesetzt werden. Auch das erleichtert das Lesen des Schaltplans.


    Sieht dann so aus, dass man den Controller nach links setzt und daran angeschlossene Befehlsempfänger nach rechts.
    Der WS2801 ist eindeutig ein reiner Befehlsempfänger, also gehört der vorzugsweise rechts vom Controller angeordnet, der Übersichtlichkeit halber.
    Selbst der RFM ist eher Befehlsempfänger als Geber, weil er per SPI vom Controller angesteuert wird, also mehr Eingänge als Ausgänge hat.


    Den Teil mit der USB-Buchse würde ich nach dieser Philosophie daher spiegeln.
    Betrachtungsweise dabei: Die Signale VON der USB-Buchse gehen ZUM FT232. Also von links nach rechts.
    Die Buchse und der FT232 gehören funktionell direkt zusammen. Die würde ich also unbedingt im Schaltplan auch räumlich direkt zusammengehörend zeichen, mit durchgezeichneten Verbindungen.


    Wenn man zu viele Symbole und Labels einsetzt, wird das Lesen mühsam, weil man nie wissen kann, ob ein Signal noch woanders hin geht.
    Bei einer durchgezeichneten Linie sieht man das sofort. Und gerade bei der Kombination USB-Buche und FT232 fällt das förmlich in den Schoß. Absoluter Quatsch, die räumlich auseinander zu reißen und mit Signalsymbol und Label zu arbeiten. Spart ja nichtmal Platz, versaut nur die flotte Lesbarkeit.



    Das sind natürlich nur Schönheitsdetails, aber ein mit dieser Denkweise diszipliniert gezeichneter Schaltplan ist binnen weniger Sekunden voll erfassbar.
    Bei Deinem Entwurf musste ich nervig lange suchen, um meine Vorschläge als umgesetzt zu erkennen.


    Nochwas zum Schaltplansymbol des Controllers:
    Bei solchen ICs ist es schick, wenn sich Portpins immer nur rechts und links befinden.
    Alle Pins, die mit Masse verbunden werden, unten.
    Alle Pins, die mit VCC verbunden werden, oben.
    So kann man Massesymbole und VCC-Symbole direkt auf kürzestem Weg dranzeichnen.
    Das Schaltplansymbol des Controllers wird dadurch schmal und hoch. So bekommt man platzmäßig gut den Signalfluss von links nach rechts hin, indem man Befehlsempfänger rechts davon anordnet.


    Löse Dich von der Denkweise, die Anschlüsse des Chips im Schaltplan so durchzunummerieren, wie der reale IC im Layout es ist.
    Im Schaltplan kann/darf/soll das durcheinander gehen. Da gruppiert man die Anschlüsse eines ICs nach ihren Funktionen.
    Vorzugsweise so (wenn auch nicht immer vollständig einhaltbar), dass Eingänge (z.B. Reset) links gezeichnet sind und Ausgänge rechts; die Spannungsversorgung oben und GND-Anschlüsse unten.


    Die Schaltpläne in der Zeitschrift Elektor glänzen meistens durch sehr gute Lesbarkeit.
    Die halten sich zwar auch nicht zu 100% an meine beschriebenen Ratschläge (geht auch nicht zu 100%), aber deren Pläne kann man durchweg meistens die Schulnote 1-2 verpassen. Mit etwas Suchen findet man auch bei Elektor immer was zu verbessern, aber bei Deinen Entwürfen muss man dazu nicht suchen, da springt es einen an.
    Du bist jetzt auf einem Level, wo der nächste Schritt ansteht. Projekte realisieren kannst Du, das hast Du bewiesen. Wenn es jetzt noch an ein paar Stellen professioneller wird, dann kannst Du Dich als Fachmann verkaufen.


    Ich huste bei meinen Entwürfen übrigens auch auf manche Norm. Normen ändern sich dauernd und sind international oft nicht identisch mit der Art, wie man es in Deutschland macht.
    Aber man kann Pläne so zeichnen, dass man sie in wenigen Augenblicken zu erfassen vermag, selbst wenn irgendwelche normierten Details ignoriert wurden.



    Ich habe jetzt nicht jedes Detail Deines Plans explizit auf Funktion kontrolliert, es sollte aber funzen, sofern Du keine neuen Bugs eingebaut hast.


    Aufgefallen ist mir aber noch, dass die beiden Schalter noch immer als Öffner gezeichnet sind, obwohl es Schließer sind.