Bootloaderproblem

  • Normalerweise ja, aber bei 3,3V und wenigen Mikrofarad wird der Reedkontakt auch ohne Widerstand quasi ewig leben.
    Da funkt nicht viel; die gespeicherte Energiemenge ist zu gering, um großartig Kontaktverschleiß zu verursachen.


    Denn der Kondensator wird sich schon beim ersten Kontaktprellen komplett entladen, darauf basiert hier ja das Prinzip der Entprellung. Daher gibt es auch keine Abreißströme.
    Eleganter ist es aber auf jeden Fall mit Widerstand.
    Nur muss der so gering dimensioniert sein, dass es auf jeden Fall gewährleistet ist, dass sich der Kondensmann schon beim ersten Prellen quasi komplett entladen kann.


    Falls das Datenblatt des Reedschalters keine Auskunft gibt, über Prellzeiten, und Elite nicht das Equipment hat, das nachzumessen, würde ich Auge mal Pi ein Tau von 100 Mikrosekunden veranschlagen.
    Die Zeit des ersten Prellens ist mit Sicherheit ein paar Mal höher (Millisekunde oder so).


    Wir wären für den Widerstand also bei 45 Ohm, als guten Kompromiss zwischen Vermeidung von Stromspitzen und sicherem Entladen schon beim ersten Preller.

  • Naja, gut. Das kann ich ja alles beim nächsten Layout berücksichtigen. Nur liegt hier nicht das Problem.?
    Die Kommunikation mit den WS2801 läuft problemlos auch wenn die jetzige Transistorlösung nicht optimal ist. Hatte damals gegoogelt und die verwendete Schaltung als logisches UND aus Transistoren gefunden. Gibts denn eine bessere Lösung, welche einen kleineren Drop verursacht?
    Viel wichtiger wäre mir zu wissen, warum der Controller nur sporadisch startet.

  • Ganz andere Frage: Sind denn an den unbenutzten µC-Pins die Pullups gesetzt...?


    soll man lt. Datenblatt machen - wusste ich bis vor kurzem auch nicht, bis dann das erste Mal in 4 Jahren AVR-Gebastel auch ne Schaltung zum "rumspinnen" (Startet z.t. nicht, macht z.t. von selbst Reset, oder einfach irgendnen Blödsinn) angefangen hat.


    Der Lötmeister hat mich dann drauf hin gewiesen, Pullups angeschaltet, Problem weg. ;)


    hatte ich so auch nicht erwartet, war vorher noch nie passiert - erklärt nun auch nicht unbedingt, warum's bei Dir ohne Bootloader funktioniert - aber ggfs. würde ich dann zumindest diese potentielle Fehlerquelle mal ausschließen - bei mir hat die Schaltung mit angestecktem Programmer auch funktioniert, wohl, weil sie über diesen geerdet war... ohne Programmer dann eben nicht mehr zuverlässig

    It's only light - but we like it!


    Da es sich in letzter Zeit häuft: Ich beantworte keine PNs mit Fragen, die sich auch im Forum beantworten lassen!
    Insbesondere solche von Mitgliedern mit 0 Beiträgen, die dann meist auch noch Sachen fragen, die bereits im entsprechenden Thread beantwortet wurden.
    Ich bin keine private Bastler-Hotline, technische Tipps etc. sollen möglichst vielen Lesern im Forum helfen!

  • Gibts denn eine bessere Lösung, welche einen kleineren Drop verursacht?


    Ja klar!
    Und ich hätte noch mehr zu meckern, an Deiner Schaltung.
    Aber bevor wir damit anfangen, erzähle doch mal, woran Du es merkst, dass der Controller nicht startet?
    Greift die Selbsthaltung nicht (das wäre ein klarer Indikator), oder woran macht Du das fest?


    Und mit "Naja gut" würde ich das mit dem Pegel am WS2801 nicht abtun, Du bist definitiv außerhalb der Spec!



    Der Hinweis von Pesi ist natürlich ebenfalls sehr gut!
    Damit das nicht passiert, setzte ich in meinen Quelltexten möglichst immer Eingang und Pullup in einem Rutsch.


    Was außerdem leicht mal passiert, ist dass man einen Pin EIGENTLICH als Eingang definiert hat, eine Routine den dann später aber als Ausgang verwendet (das macht Bascom ohne zu murren mit). Passiert bei Guttenbergtechnik sehr leicht, wenn man also eine Routine per Copy&Paste einfügt und vergisst die Deklaration der Pins am Anfang des Quelltextes entsprechend anzupassen.
    Die Frage die sich dann stellt und was ich erst überprüfen müsste, ist was danach ist, wenn die Routine nicht mehr den Pin als Ausgang verwendet?
    - Ist der dann automatisch wieder Eingang, so richtig mit Pullup?


    Ist Dein Quelltext eigentlich geheim, oder kannst Du den mal posten?

  • Ja klar!

    das hatte ich erwartet. So war die Frage nicht gemeint. Hast du auch nen Link oder ein Bild oder eine Beschreibung?
    Pullups sind natürlich nicht gesetzt, war noch nie notwendig. Bin mal gespannt, obs ne Veränderung bringt. Klingt ja vielversprechend.


    >>Du bist definitiv außerhalb der Spec!
    Alles was funktioniert ist recht.^^


    >>Greift die Selbsthaltung nicht (das wäre ein klarer Indikator), oder woran macht Du das fest?
    siehe Post 14
    zum Anderen erinnere ich mich an ein ähnliches Layout mit Bootloader (dem Sender, die hier diskutierte Platine ist der Empfänger), bei dem der Controller auf externen Quarz gefused war und ich kein Einschwingen messen konnte. Muss ich hier auch mal machen; Taktausgabe fusen und messen bzw. Layout mit Quarz und dann messen.


    Den geheimen Code hab ich angehängt.

  • das hatte ich erwartet. So war die Frage nicht gemeint. Hast du auch nen Link oder ein Bild oder eine Beschreibung?


    Ja klar!
    Aber wie ich schon schrieb: Ich habe noch mehr zu meckern und würde einiges anders machen. Das führt an dieser Stelle aber zu weit, solange der Fehler noch vor dem Schaltungsteil sitzt, den ich anders realisieren würde.



    Zitat

    Pullups sind natürlich nicht gesetzt, war noch nie notwendig.


    Gnaaaa!!!!
    Natürlich sind die notwendig!
    Auf den ersten Blick: Du definierts z.B. PinD5 als Eingang und lässt den einfach wie 'ne "Antenne" in der Luft hängen. Der fängt sich sonstwas ein.


    Auch die Abtastung des Reedkontaktes an PinD2 kann ohne Pullup nicht zuverlässig funktionieren.
    Merke: Eine Diode ist ein *stromgesteuertes* Bauteil! Wie soll die ihren Job tun, wenn gar kein Strom fließt, weil kein Pullup existiert, der den hergibt?



    Zitat


    >>Du bist definitiv außerhalb der Spec!
    Alles was funktioniert ist recht.^^


    Du musst Dich nicht wundern, dass es nicht funktioniert, wenn Du etliche Grenzwertigkeiten einbaust.



    Zitat


    zum Anderen erinnere ich mich an ein ähnliches Layout mit Bootloader (dem Sender, die hier diskutierte Platine ist der Empfänger), bei dem der Controller auf externen Quarz gefused war und ich kein Einschwingen messen konnte.


    Das klappt auch nicht unbedingt.
    Ein Quarzoszi kann nicht unbedingt schwingen, wenn Du einen Oszi-Tastkopf dranhängst.
    Schwingschaltungen sind sensibel.
    Wer misst misst Mist!


    Daher war mein früherer Rat, eine LED zu toggeln. Das erpart das Messen am Quarz, das diesen erheblich beeinflusst.
    Aber wegen der Selbsthaltung kannst Du Dir das schenken, die ist bereits ein zuverlässiger Indikator.



    Setze das alles mal um, wenn es dann noch hakt schaue ich mir die Sache nochmal näher an. Dann reden wir auch über Dein Transistor-UND.

  • Nochmal ich, danke für Deine PN, Elite, ich antworte mal öffentlich:


    Aus Deinem Quelltext:


    Config Pind.2 = Input
    Pind.2 = 1


    ... sooo nicht!
    Du sagst erst Input, setzt den dann aber auf 1, wie einen Ausgang. Später tastest Du den als Eingang ab ... Nenene, so nicht!


    Schau mal einen Schnipsel aus 'nem Qelltext von mir, wie man sowas handhaben kann (muttu anpassen, an Deinen Fall):



    Code
    '#######Definition der Ports und Pullup-Widerstände#############################'.........76543210PortA = &B00000000  	'Pullup AUSDdra =  &B11111111  	'Portpins sind Ausgänge'.........76543210PortB = &B10100011  	'Pullup teilweise ANDdrB =  &B01011100  	'Portpins sind teilweise Eingänge, teilweise Ausgänge'.........76543210Portc = &B00000000  	'Pullup AUSDdrC =  &B11111111  	'Portpins sind Ausgänge'.........76543210Portd = &B11111111  	'Pullup ANDdrd =  &B00000000  	'Portpins sind Eingänge.'.........76543210'###############################################################################


    Edit: Code-Tags verwendet (siehe Folgepost von Pesi) und Tabs ersetzt.

  • Doch, wird bei mir als Monospace-Font angezeigt... das Problem sind eher die Tabulatoren, die sind ja bei jedem Editor anders eingestellt, wenn Du in Deinem Quelltext nen Tab benutzt, dann kann der hier halt nen anderen Abstand haben als im Bascom-Editor - das Problem habe ich mit AVR-Studio auch...


    es gibt hier übrigens nen "Code"-Tag, damit sieht das dann so aus:



    ändert zwar nun nix an dem Tab-Problem, aber man hat automatisch ne Festbreiten-Schrift, und der Schnipsel sticht gleich raus als Code... und wenn man drüber redet, kann man gleich sagen "In Zeile soundso", ohne die abzählen zu müssen... ;)

    It's only light - but we like it!


    Da es sich in letzter Zeit häuft: Ich beantworte keine PNs mit Fragen, die sich auch im Forum beantworten lassen!
    Insbesondere solche von Mitgliedern mit 0 Beiträgen, die dann meist auch noch Sachen fragen, die bereits im entsprechenden Thread beantwortet wurden.
    Ich bin keine private Bastler-Hotline, technische Tipps etc. sollen möglichst vielen Lesern im Forum helfen!

  • Baahh, es gibt hier ja einen WYSIWIG-Editor!
    Der wurde bei mir nur durch NoScript geblockt!
    Und ich tipper die ganze Zeit im Quelltext-Mode ...


    Sorry!




    Edit von Irrlicht: Habe Post 27 editiert.
    Post 29 und 30 sind nun obsolet und können vom Mod gerne gelöscht werden.


    EDIT Pesi: Post 29 gelöscht - diesen hier nicht, weil sich die Antwort unterhalb ja darauf bezieht...

  • Noscript hatte ich auch mal drauf, gleich wieder runter geschmissen, das Teil schadet mehr als es nützt, viele Seiten waren praktisch unbrauchbar, ständig rumklicken, dass die ne Ausnahme sein sollen etc., total nervig! - ich schreibe ansonsten eh' lieber im Quelltext-Modus, aber Geschmäcker sind ja verschieden.... ;o)


    sorry für o.t.!


    wo wir schon bei Programmiertipps sind (das gehört ja schon ein bisschen dazu, evtl. liegt's ja an den fehlenden Pullups ;)), ich mache das mit den Ausgängen und Pullups so:


    schon immer verwende ich Alias-Namen für bestimmte Signale, z.B. ne Routine, die WS2801 ausgibt, Data und Clock, da definiere ich halt vorher an zentraler Stelle:


    Code
    .equ WS2801_PORT = PortC
    .equ WS2801_DDR = DDRC
    .equ WS2801_SDO = 0
    .equ WS2801_CLK = 1


    dann kann ich mit:


    Code
    sbi WS2801_DDR, WS2801_SDO
    sbi WS2801_DDR, WS2801_CLK


    die beiden Pins auf Ausgang schalten - und später z.B. mit sbi WS2801_Port, WS2801_SDO den entsprechenden Pin auf "High"


    Vorteil: portiere ich die SW in ein anderes Projekt, wo die Signale z.B. an PortA1 und PortA2 hängen, muss ich das nur einmal zentral ändern, und nicht an x Stellen im Code...


    und eben mir nicht die Bitmuster zampfriemeln zum auf Ausgabe stellen und Pullups einschalten... bei den Eingängen ebenso mit Definition, und dann da Pullup setzen


    das ging aber nur "gut", wenn alle Pins benutzt waren - waren welche leer, musste man doch gucken, welche, und da noch "per Hand" die Pullups setzen...


    jetzt mache ich das so: Man kann das DDR ja auch lesen - also setze ich erst mal wie oben beschrieben alle Pins auf Ausgang, die ich als Ausgang brauche - und dann einfach:



    also wird "automatisch" an jedem Pin, der als Eingang definiert ist, ein Pullup gesetzt, weil ja überall, wo im DDR ne 1 ist im Port dann 0 und umgekehrt - Pullup am Eingang "schadet" ja auch in 98% der Fälle nicht, in den restlichen 2% muss man's halt doch wieder "zu Fuß" machen...


    ja, ist Assembler, lässt sich aber in Bascom sicher auch so umsetzen... irgendwie PortA = ~DDRA oder so ähnlich...


    EDIT: Ach, oben übersehen:


    Config Pind.2 = Input
    Pind.2 = 1

    wenn damit der Pullp gesetzt werden sollte, dann ist das wohl falsch - da müsste es heissen:

    Zitat

    Config Pind.2 = Input
    Portd.2 = 1

    "Pin" ist ja das Register für den Eingang, man kann das aber nicht nur lesen, sondern schon auch da Bits setzen - das bewirkt dann, dass der Pin getoggelt wird, wenn er auf Ausgang steht.


    ist auch praktisch, weiß ich leider auch erst seit kurzem (man lernt immer dazu) - früher hatte ich z.B. ne LED an PortD6 getoggelt mit:


    Code
    in temp0, portd
    eor temp0, (1<<6)
    out portd, temp0


    jetzt einfach mit sbi Portd, 6 ;)


    übrigens, beim AVR sind nach dem Reset sowieso erst mal alle Pins auf Eingang - den Befehl Config Pind.2 = Input braucht man also eigentlich nur, wenn man zwischendurch mal wieder auf Eingang schalten will - beim Programmstart reicht es, die gewünschten Pins auf Ausgang zu schalten (also wenn man es mit der Methode macht, nicht per Bitmuster in's DDR schreiben...)


    (ob's nun Config Pind.2 = Input heisst oder Config Portd.2 = Input, oder beides das selbe bewirkt k.A., bin kein Bascom-Spezialist...)

    It's only light - but we like it!


    Da es sich in letzter Zeit häuft: Ich beantworte keine PNs mit Fragen, die sich auch im Forum beantworten lassen!
    Insbesondere solche von Mitgliedern mit 0 Beiträgen, die dann meist auch noch Sachen fragen, die bereits im entsprechenden Thread beantwortet wurden.
    Ich bin keine private Bastler-Hotline, technische Tipps etc. sollen möglichst vielen Lesern im Forum helfen!

    Einmal editiert, zuletzt von Pesi ()

  • So, habe eben mal alle Vorschläge umgesetzt. Aktueller Stand ist damit:
    10µF + 56R parallel zum Reedkontakt S1
    PORTC.2 zuerst aktivieren
    C4 + R1 (Resetbeschltung) verdoppelt
    zweiter 100µF an VCC
    Pullups aktiviert (wie Konfiguriert man SPI und Xtal richtig?)


    PIND.5 hängt an VCC, J1 ist also geschlossen.
    PIND.2 sollte ja nun der Pullup aktiv sein.


    Zitat

    Probiere auch mal, dem C2 noch 'nen Elko parallel zu schalten


    du meinst bestimmt C1? Ich habe eben mal nen 4,7µF Elko parallel zu C1 angelötet, damit gehts nicht mal mehr sporadisch.
    Waaaaahhhhhhh so langsam könnts dann aber auch mal funktionieren.


    BTW: mein Pegel an CLK liegt bei 3,7V VCC bei 2,8V high und 0,95V low. Nice, ne? funktioniert aber.^^


  • 10µF + 56R parallel zum Reedkontakt S1


    Genau in die falsche Richtung, beide Werte ...
    Also: Es geht darum, dass sich der Kondensator beim ersten Prellen des Reddkontaktes praktisch komplett entladen kann.
    Das müssen wir gewährleisten. Das erste Prellen dauert vielleicht 'ne knappe Millisekunde (geschätzt!).
    Dazu benötigen wir also ein entsprechend kleines Tau.
    Du hast aber das Tau vergrößert, stur rechnerisch auf mehr als eine halbe Millisekunde.
    Und bei nur einmal Tau ist der Kondensator noch nicht leer. Nur ziemlich leer.
    Wenn Du Pech hast ist das Kontaktprellen auch kürzer als 'ne Millisekunde. Wir müssen also ein wirklich kleines Tau hinbekommen, damit der Kondensmann sich wirklich schon beim ersten Preller richtig entladen kann.


    Elkos haben zudem eine dicke Toleranz, meistens nach oben. Womöglich hast Du real mehr als 10uF, z.B. 13 uF oder so. Und der gesamte Widerstand ist vermutlich ebenfalls eteas höher, als 56R, denn wir haben den Innenwiderstand des Kondensators und die diversen anderen prarasitären Widerstände vernachlässigt.(Kontaktübergangswiderstand, der zwar geringe, aber vorhandene Leiterbahnwiderstand etc.)
    Die kann man "eigentlich" auch vernachlässigen, aber da Du ohnehin schon ein reichlich großes Tau hast, geht der Zug halt in die falsche Richtung.


    Lass den 56R Widerstand mal lieber weg, bzw. bewege Dich bei seinem Wert mehr in Richtung Drahtbrücke.
    Ich hatte Auge mal Pi 45R genannt, in der Annahme dass nur 2,2uF eingesetzt werden. Das war aber schon als eher oberster Wert gedacht, im Zweifel nimm eher weniger. Tendenz halt in Richtung Drahtbrücke.
    Und nimm keinen Elko, falls Du das hast, sondern einen keramischen Kondensator. Die haben einen geringeren komplexen Innenwiderstand und kommen mit Impulsbelastung besser klar.



    Zitat


    zweiter 100µF an VCC


    Nur zur Sicherheit: Mit VCC meinst Du hoffentlich die eingespeiste Spannung und nicht den VCC-Pin am Controller, oder?




    Zitat


    du meinst bestimmt C1? Ich habe eben mal nen 4,7µF Elko parallel zu C1 angelötet, damit gehts nicht mal mehr sporadisch.


    Ja, stimmt, ich meinte C1. Da hat wohl ein Fliegenschiss auf dem Monitor die 1 wie 'ne 2 aussehen lassen, sorry.
    Dass es damit gar nicht mehr geht, ist merkwürdig. Deutet für mich darauf hin, dass T4 nicht dolle genug durchsteuert, so dass C1 zu langsam geladen wird. Und zwar so langsam, dass es länger als etwa 4ms dauert, was der ungefähre Zeitwert ist, den Deine Resetbeschaltung mit R1 und C4 verursacht.
    Und das dürfte damit zusammenhängen, dass das Tau zu groß ist, bei dem Kondansator parallel zum Reedkontakt.


    Probiere doch mal, gar nicht den Reedkontakt zu betätigen, sondern die CE-Streke von T4 kurz per Schraubendreher oder so zu überbrücken.
    Ich würde erwarten, dass es dann läuft. Wenn ja, dann müssen wir uns den Schaltungsteil um den Reedkontakt und T4 nochmal genauer vorknöpfen. Damit bin ich ohnehin nicht wirklich glücklich.


    Nebenbei bemerkt: Was sollen eigentlich die beiden Dioden beim Reedkontakt?
    Ersetzte die mal durch Drahtbrücken. Dein PinD.2 ist ein Eingang. Der liefert also keinen Strom, abgesehen von dem Fitzelstrom durch den internen Pullup. Da brauchst Du keinen Schutz durch Dioden, damit keine Ströme in ungute Richtungen fließen.



    Zitat


    BTW: mein Pegel an CLK liegt bei 3,7V VCC bei 2,8V high und 0,95V low. Nice, ne? funktioniert aber.^^


    3,7V VCC?
    Im Schaltplan steht 3,3V. Damit würde es vermutlich nicht funzen. Wenn doch dann pures Glück - es ist außerhalb der Spezi.

  • Danke für den Input, habe jetzt auf 4,7µF und 8,2R umgebaut, war sowieso schon auf Keramisch. Damit ist Tau kleiner als bei 2,2µF und 45R.
    Mit VCC meine ich am Controller, also nach T4. Da hat sich dann auch ein Vorzeichenfehler eingeschlichen. Es sind natürlich 100nF keramisch. An VBAT (vor T4) ist nur C11 mit 10µF.
    CE-Streke von T4 habe ich eben 10 mal überbrückt und die Saelbsthaltung hat nicht gegriffen.
    Die Dioden sind fürs Auslesen des Reedkontakts. Habe ich so aus einer Selbsthalteschaltung übernommen. Deine Erklärung macht Sinn, nur keinen Effekt. Nach überbrücken der Dioden habe ich nicht mal mehr sporadisch eine Funktion.
    Die 3,3V im Schaltplan sind die des FT232RL, werden aber nicht verwendet.


    Edit: Manchmal startet die Schaltung, wenn ich das USB Kabel einstecke. Das sollte doch eigentlich nicht möglich sein.? Auch ist es unmöglich die Schaltung zu starten, wenn das USB Kabel eingesteckt ist. Waaahhhh bahnbrechende Entdeckung: eben mal bei angesteckter Schaltung das GUI gestartet und auf Connect und dann ohne den Reedkontakt zu betätigen wieder Disconnect geklickt und daraufhin hat sich die immer noch angesteckte Schaltung per Reedkontakt jedes Mal starten lassen. Beim Versuch das zu wiederholen geht allerdings wieder gar nichts.
    nochmal Edit: hatte die Schaltung eben mal ein paar Minuten eingesteckt und siehe da, sie lässt sich jedes Mal per Reedkontakt starten.???? Nur ganz kurz ausgesteckt und wieder eingesteckt und schon gehts nicht mehr. Ich wette in einer Minute gehts wieder.
    Und nochmal: Auch nach 3 Minuten gehts nicht. Wenns denn mal mit eingestecktem Kabel geht, dann dauerhaft bis mal ausgesteckt wurde.

  • Jetzt vermute ich langsam, dass der Controller nicht richtig verlötet ist.


    Das kannst Du überprüfen, mit 'nem Multimeter, auf Diodentest:
    - Schaltung von der Spannungsversogung trennen.
    - Die schwarze Strippe vom Multimeter auf die Leiterbahn, die zum VCC-Pin vom Controller führt.
    - Die rote Strippe der Reihe nach auf alle Leiterbahnen, die direkt mit dem Controller verbunden sind.


    !!! Bitte nicht mit der Messspitze direkt auf die Beinchen vom Controller, sondern auf die jeweilige Leiterbahn, an die der jeweilige Pin gelötet sein sollte. !!!


    Korrekt verlötet ist es, wenn der Diodentest eine Diodenstrecke ermittelt, also ungefähr 0,6V oder 0,7V anzeigt.
    Dabei misst Du die im Controller integrierte Schutzdiode, die nach VCC führt.


    Bei diesem Test aber im Hinterkopf behalten, dass die angeschlossenen Bauteile hier und da den Test versaubeuteln können.



    Anschließend auch mal mit dem Durchgangsprüfer einen Kurzschlusstest machen, von Pin zu Nachbarpin des Controllers (da kannst Du dann mit den Messspitzen direkt auf die Pins).



    Und noch ein Tipp, wenn die Schaltung Spannung hat, aber mal wieder zickt: Löse doch mal einen Reset am Controller aus.
    Das wichtigste Bauteil in einer Mikrocontroller-Schaltung ist der Reset-Taster, echt.
    Danmit können wir alle Macken ausschließen, die mit zu langsam kommender Spannung und so weiter zu tun haben.
    Irgendwann, nach soundsoviel Millisekunden, hat der Controller seine Versorgungsspannung. Dann Reset drücken. Jetzt sollte er starten und die Selbsthaltung aktivieren.
    Dann kann der Magnet entfernt werden.


    Wenn das funktionieren sollte, wissen wir, in welchem Bereich das Problem liegt

  • Softwaremaßnahmne bringt keine Veränderung; geht nur sporadisch.
    Auch durch den Reset nach ungeglücktem Starten läuft nichts. Was aber geht: Wenn die Schaltung erstmal läuft den Controller bei betätigtem Reedkontakt zu resetten. Dann läuft das Programm nach der Bootpause und den zusätzlichen 500ms wieder.
    Pesi hatte mal gefragt, ob denn die Kommunikation gut funktioniert. Zeitweise bekomme ich die Meldung im GUI dass ein falscher Bootloader gefunden wurde.

  • Irgendwie ist mir gar nicht klar, wie eigentlich der Bootloader aufgerufen wird?
    Woher weiß die Schaltung, dass sie den Bootloader starten soll, wenn das anliegt?


    OK, da kommen serielle Daten vom FT232, schön.
    Die gehen auf PD.0, prima.


    Aber dann?
    Im Quelltext sehe ich weder einen Aufruf der Bootloaderroutine, noch
    irgendeine serielle Empfangsroutine. Aber irgendwas muss das ja
    auslösen, dass die Bootloaderroutine angesprungen wird.


    Kannst Du dieses wie-auch-immer-geartete Aufrufen des Bootloaders testweise irgendwie unterbinden?



    Noch 'ne Frage: Woher kommt eigentlich die Versorgungsspannung für den Controller, wenn kein USB-KAbel gesteckt ist?



    Nochwas: Erhöhe mal testweise beide Stacks ganz erheblich.
    Jeder Call verballert 128 Bytes, ich glaube auf dem Stack (bin da aber unsicher).



    Noch ein Brutalo-Test:
    Reduziere mal testweise Dein Programm auf nichts weiter, als das Setzen der Selbsthaltung, innerhalb einer Endlosschleife:




    Das Ding flashen, dann Spannung an die Schaltung und manuell 'nen Reset auslösen.
    Ich erwarte, dass dann die Selbsthaltung ohne "Wenn und Aber" greift.


    Edit: Nicht Return sondern End. Quelltext korrigiert.


    Edit 2: Nach erstem Edit war die Darstellung des Postings im Eimer. Hiermit korrigiert.

  • Dieser Bootloader wird bei jedem Start aufgerufen und wartet dann kurz, ob man versucht sich seriell zu verbinden. Findet kein Verbindungsversuch statt, wird im Optimalfall der Programmcode gestartet. Mehr weiß ich auch nicht. Das einzigste was ich machen kann, ist das Programm ohne Bootloader zu brennen, anderen Einfluss habe ich nicht, da ich den Quellcode der Bootloaders nicht kenne.
    Oben rechts der NUD4001 ist eigentlich ein MAX1811 und an dem hängt ein Li-Akku (mit VBAT gekennzeichnet).
    Nach dem Erhöhen der Stacks hab ich nach 10 Versuchen aufgehört.
    Der Brutalo-Test geht auch nur sporadisch.
    Manchmal sollte man das Zeug einfach in die Ecke werfen. Normalerweise gibts immer eine logische Erklärung, auch für solche sporadischen Sachen. Schade, dass in der Elektronik Gewalt meist nicht hilft.