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
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: D8Ralph 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.
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)
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)