Auch wenn es dieses Thema wohl schon extrem oft hier gegeben hat: Ich werde noch ganz kirre, ehrlich! Ausgangssituation: Ich habe einen Bootloader (nicht so wirklich klasse, weil nur 19200 Baud) geschrieben. Dieser Funktioniert in einem ATmega168 fehlerfrei. Jetzt möchte ich diesen Loader in einem 328p laufen lassen und jetzt wird es ganz und gar nicht lustig. Mein Problem (welches viele hatten - und ich schäme mich sehr, weil ich nicht wirklich Anfänger bin) ist: - Bootloader läßt sich (scheinbar ? ) ab Adresse 7000h installieren Dann passiert das, was vielen schon passiert ist: Nach einem ersten Application-Upload ist der Bootloader überschrieben ! Die gesetzten Fuses sind: Lo: FF Hi: D8 Ex: 05 Uuuuuund, damit der Loader nicht überschrieben werden SOLL die Lockbits: Lock: CF Bei einem Application Upload mittels AVRDUDE wurde die Option -D mitgegeben, damit kein Chip-Erase durchgeführt wird (und die Lockbits erhalten bleiben) ... Bootloader wird dennoch überschrieben. Was muß ich tun ? (hrmpf ... ich geb bald auf, aber ich mache mich jetzt mal an das Hexfile des Loaders um das auseinander zu nehmen und zu überprüfen ob der Loader auch wirklich an der richtigen Stelle sitzt) Netten Gruß, Ralph
PS: Betriebssystem ist Slackware Linux (aber das tut ja glaub ich nix zur Sache)
so ... ich hab den ATmega328 direkt nach dem Flashen wieder ausgelesen und der Bootloader ist ab der Adresse 7000h vorhanden !!!
Ralph S. schrieb: > so ... ich hab den ATmega328 direkt nach dem Flashen wieder ausgelesen > und der Bootloader ist ab der Adresse 7000h vorhanden !!! Und wo ist jetzt Dein Problem?
das Problem ist, dass ich über den Bootloader ein Programm genau EIN mal uploaden kann, danach meldet sich der Loader nicht mehr (und ich habe keine Ahnung woran das liegt). Der Bootloader ist (jetzt überprüft) nach dem Upload eines Programms immer noch an der selben Stelle (also nicht überschrieben), dennoch bekomme ich keinen Zugriff mehr auf diesen !
Hm, eigentlich nicht wirklich vorstellbar. Schalte doch zu Anfang im Bootloader eine LED für eine Sekunde ein. Bestimmt beginnt diese auch beim zweiten Mal zu leuchten und Dein Problem ist ein ganz anderes.
Frank M. schrieb: > Und wo ist jetzt Dein Problem? Da: Ralph S. schrieb: > Hi: D8 Ralph S. schrieb: > das Problem ist, dass ich über den Bootloader ein Programm genau EIN mal > uploaden kann, danach meldet sich der Loader nicht mehr (und ich habe > keine Ahnung woran das liegt). Dein Problem ist, dass du die BOOOTRST-Fuse nicht gesetzt hast. Dann läuft der Controller, wenn nur der Bootloader drauf ist, ab Adresse 0 durch den leeren Speicher bis zum Bootloader und alles ist gut. Wenn dann aber die Applikation drauf ist, wird der Bootloader nie mehr erreicht. Ein wahrer Klassiker. mfg.
Thomas Eckmann schrieb: > Ein wahrer Klassiker. Oh, ja. Ich konnte mir einfach nicht vorstellen, dass der ATmega gänzlich jungfräulich war. Ist aber eine gute Erklärung für das Phänomen.
:
Bearbeitet durch Moderator
Frank M. schrieb: > Thomas Eckmann schrieb: >> Ein wahrer Klassiker. > > Oh, ja. Ich konnte mir einfach nicht vorstellen, dass der ATmega > gänzlich jungfräulich war. Ist aber eine gute Erklärung für das > Phänomen. nein, die Fuses waren nicht jungfräulich ... und auch Hi: D8 ist nicht das Problem, denn (ich such ja schon wie gestört): Führe ich über einen Taster gleich nach dem Start von AVRDUDE einen Hardreset aus, springt er in den Bootloader. Von daher geh ich jetzt mal in der Hardware suchen (die serielle Schnittstelle sendet den Hardwarereset und der scheint dann wohl nicht zu funktionieren, beim ATmega168 dann wundersamerweise doch ) (war jetzt verwirrt, habe die BOOTRST-Fuse zig mal kontrolliert und bei D8 ist der Resetvector 7000h ... oder - wordmässig gezählt - bei 3800h
Thomas Eckmann schrieb: > Dein Problem ist, dass du die BOOOTRST-Fuse nicht gesetzt hast. Dann > läuft der Controller, wenn nur der Bootloader drauf ist, ab Adresse 0 > durch den leeren Speicher bis zum Bootloader und alles ist gut. Wenn > dann aber die Applikation drauf ist, wird der Bootloader nie mehr > erreicht. > > Ein wahrer Klassiker. DANKE! ich zweifelte schon an meinen Verdrahtungskünsten, damit funzt mein Protoyp Arduino mit m1284p grrrr, sowas doofes, ich suche und suiche und lese Anleitungen, aber darauf wäre ich nie gekommen.
so ... und meinem Problem bin ich auch auf der Spur: alle Fuses waren wie ich angegeben habe wohl richtig, denn (was ich vergessen habe zu sagen): die serielle Schnittstelle wird über einen Logilink USB2UART Adapter hergestellt. Laß ich meinen Bootloader über /dev/ttyS0 laufen funktioniert das. über /dev/ttyUSB0 (und natürlich dem eingesteckten Adapter) ... funktioniert der Loader nur mit einem ATmega168 aber mit dem 328 nicht. Jetzt guck ich mal wie ich das Ansprechverhalten nach einem Reset hinbekomme oder ob ich die Parameter für den Adapter verändern kann !
Joachim B. schrieb: > grrrr, sowas doofes, ich suche und suiche und lese Anleitungen, aber > darauf wäre ich nie gekommen. Dann hat es ja wenigstens dir geholfen. Bei Ralph scheint es ja was anderes zu sein. Ralph S. schrieb: > Von daher geh ich jetzt mal in der Hardware suchen (die serielle > Schnittstelle sendet den Hardwarereset und der scheint dann wohl nicht > zu funktionieren, beim ATmega168 dann wundersamerweise doch ) Arduinomässig mit Kondensator? Vielleich hast du es so knapp dimensioniert, dass es von Bauteiltoleranzen abhängig ist? mfg.
Thomas Eckmann schrieb: > Arduinomässig mit Kondensator? ich hatte nach Anleitung mit 100nF aufgebaut, hatte nicht gereicht, der Reset kam über DTR nicht an, mit einem weitern 220nF parallel kam der Reset dann an, löste aber mein vergessenes BOOOTRST-Fuse Problem nicht
Thomas Eckmann schrieb: > Arduinomässig mit Kondensator? > Vielleich hast du es so knapp dimensioniert, dass es von > Bauteiltoleranzen abhängig ist? genau an der Stelle bin ich jetzt dran (am Kondensator). Leider hab ich hier kein Scope zur Hand (zu Hause) und von daher seh ich jetzt nicht, wie lange der Impuls ist. Für mich verwunderlich ist, dass ich über den Adapter den Controller "anrufen" kann und er sich auch meldet, aber nachdem ein Upload erfolgt ist, ein Reset von Hand erfolgen muss. Der Ausgang eines Max232 Pins geht über einen 100nF auf den Reset des Controllers (der zudem über einen 100k an Versorgungsspannung liegt). Es will mir einfach nicht runter. 10 Stck. ATmega168 ==> funktionieren alle 8 Stck. Atmega328 ==> nicht einer !
Ralph S. schrieb: > Controllers (der zudem über einen 100k an Versorgungsspannung liegt). Am Reset als zusätzlichem Pullup? Parallel dazu hängt noch der interne Reset-Pullup. Welche 168er hast du? Davon gibt es 3 Verschiedene. 168, 168P und 168A/PA. Vom 328 gibt es praktisch nur einen, den 328/328P. Der entspricht dem 168A/PA. Möglicherweise ist der interne Pullup bei den neueren Typen kleiner geworden. Das wäre eine Erklärung. mfg.
kein Scheiß jetzt: ich kann es nicht mehr lesen welcher Typ 168er das ist (Augen lassen zu wünschen übrig, auch mit Lupe nicht... smile, irgendwie zu abgegriffen). Aber auf die Idee mit dem internen PullUp bin ich auch schon irgendwie. Nur: das werde ich morgen mit dem Scope messen und sehen wie und ob der Impuls "zusammenbricht" ... Grundsätzlich muß es etwas mit der Anstiegsdauer / Verweildauer des Impules des Adapters oder der Ansteuerung zu tun haben, denn: Über denselben Adapter mit einem Win7 ... funktioniert es. Deshalb: Messen und vergleichen und dann den Kondensator und den PullUp entsprechend anpassen ! (Prinzipiell bin ich allerdings geneigt, nun dann doch wirklich eine richtige Resetschaltung zu machen, damit das auch wirklich mit jedem Controller funktioniert der in den Sockel passt)
( schade um die bereits schöne geätzte Platine ... smile, oder sich vom Bootloader verabschieden und eben wieder über ISP Flashen )
ich hatte mich beim externen pullupp an 10k gehalten mit paralleler 1N4148 Diode nach +Vcc den 10nF von /RESET nach GND hatte ich wieder rausgeknipst wegen Fehlersuche weiss einer ob Serial.print bei den ProMinis mit FTDI Adapter grundsätzlich nicht geht? ich bekomme nie ein Serial.print raus, weder mit ProMini 328p noch mit meinem m1284p über den FTDI Adapter erscheint mir unlogisch, warum soll das nicht gehen, ausser der Bootloader verhindert das Umprogrammieren der Schnitte
... ich glaube da mußt du die ARDUINO Leute fragen, ich mach hier nur das "pure C" (ohne ++). smile und bei mir funktioniert ja auch nur der Bootloader unter Linux über einen Adapter nicht (und das bekomm ich schon noch raus woran das liegt). Dein Problem hört sich eher nach Software an (das hat es sich bei mir zuerst allerdings auch nach einem soften Problem angehört gehabt)
so, unglaublich (aber wahr), eine einfache Monoflop-Schaltung mit (uralt) 555 hat das Problem gelöst, aber so wirklich glücklich bin ich mit dieser Lösung auch nicht, ich hätte es gerne (auch aus Platzgründen) ohne weiteren Baustein realisiert gehabt. By the way (für mich auch so etwas "unglaubliches"): Bei der ursprünglichen Schaltung funktionierte das unter Windows XP und Windows 7 (auf demselben Rechner mit demselben USB2RS232 Adapter) einwandfrei ! Die Wege der Elektronik sind manchmal unergründlich (zumindest für mich)
Guten Morgen, Joachim B. schrieb: > ich hatte mich beim externen pullupp an 10k gehalten mit paralleler > 1N4148 Diode nach +Vcc > > den 10nF von /RESET nach GND hatte ich wieder rausgeknipst wegen > Fehlersuche Ist der Reset-Pin wie auf Seite 5 im Bild 2.1 beschaltet ? # http://www.atmel.com/Images/Atmel-2521-AVR-Hardware-Design-Considerations_ApplicationNote_AVR042.pdf Kann es sein, dass die Diode mit ihrer Anode an Vcc ist ?
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.