Hallo, nachdem ich schon 2 Tage mit diesem Problem kämpfe, wollte ich fragen ob mir hier jemand helfen kann. Ich habe einen ATMEGA1280 und programmiere in in C mit dem AVR Studio und GCC. Mein Problem: Nach einem Reset springt der MC an irgendeine Stelle und tut nichts, anstatt an den Programmanfang zu springen. Ich verwende keinen Bootloader. Wie müssen hier die Fuse Bits richtig gesetzt werden? Boot vector, Boot flash section?? Wie bringe ich dem MC bei dass er nach dem Reset das Programm frisch startet? mfg Stefan
Stefan, benutzt du avrstudio um die fuses zu setzen ? ist immer gut, du gibst deine verwendete toolchain mit an... Wenn alle fuses richtig gesetzt sind, könnte auch ein "unsauberes" power on der versorgungsspannung dafür sorgen das der ProgramCounter irgendwo steht. Ergo, einen spannungsmonitor verwenden (z.B. etwas wie ZSM560, oder maxim, oder TI, oder von Atmel...), der die *Reset leitung erst freigibt, wenn Vcc sicher in einem vernünftigen Bereich steht. Ist generell bei jedem uC-Design zu empfehlen. Gruss, tom.
Naja, bei halbwegs vernünftigem Anstieg der Betriebsspannung funktioniert der Power-On-Reset eines AVR absolut brauchbar. Außer der Toolchain wäre der Hardwareaufbau noch interessant. ,,Vergessene'' Stützkondensatoren können seltensame Effekte hervor rufen.
Ja ich verwende das AVR Studio zusammen mit dem JTAGICE mkII um die FUSE Bits zu setzen. Die Reset Leitung hängt an einem externen Watchdog(MAX708), der VCC überwacht. mfg Stefan
Ist diese "irgendeine Stelle" zufällig immer die gleiche und zwar exakt am Anfang der Bootsektion?
Der Mega1280 braucht keinen externen Watchdog, der Vcc überwacht. Schalte mal den internen Brown-Out Detektor an.
Einen Sprung auf einen nicht initialisierten Bootloader würde man im praktischen Leben gar nicht bemerken. Die CPU kann nämlich gar nicht einfach ,,nichts tun'', sondern sie wird sofort beginnen, den Flash zu lesen und die entsprechenden Befehle abzuarbeiten. Die 0xFFFF des nicht initialisierten ROMs wirken dabei wie NOPs, sodass der PC nach kurzer Zeit bei 0 angekommen sein wird und ganz normal mit der Abarbeitung des Programms beginnt.
@Andreas: Um ehrlich zu sein keine Ahnung, ich vermute die FUSE Bits sind nicht richtig gesetzt, habe BOOTSZ=00 (default), wenn ich den Boot Reset Vector an oder ausschalte bewirkt es keine Änderung. Muss ich im C ähnlich wie in Assembler einen Jump nach dem Rest an den Anfang des Programmcodes setzten? Tut mir leid bin noch ziemlicher MC Neuling
Woher weisst du, dass er nach Reset an der falschen Stelle startet?
Reset wird über einen Taster ausgelöst, der am WD angeschlossen ist, beobachtet man die Spannung der Reset Leitung funktioniert das auch korrekt, geht auf GND und dann wieder stabil auf 3,3V. Kann mir jemand kurz die korrekte Einstellung der Fuse Bits erläutern, die nötig sind, damit der MC normalerweise nach dem Reset ins Programm einsteigt? Vielen Dank
Stefan wrote: > Kann mir jemand kurz die korrekte Einstellung der Fuse Bits erläutern, > die nötig sind, damit der MC normalerweise nach dem Reset ins Programm > einsteigt? Jede beliebige, sofern sie in der Lage ist, dass der Controller auch taktet. Was soll der Sinn eines Resets sein, wenn danach nicht das Programm abgearbeitet wird? Du musst den Fehler schon woanders suchen, sehr wahrscheinlich in deiner Hardware. Du lässt dir aber jedes Stückchen an Information über deine Umgebung aus der Nase ziehen, so wird das nichst, so kann dir keiner helfen.
Stefan wrote: > Bei normalem Start (dh VCC an/aus) schalte ich 2 LEDs an, nach einem > Reset gehen diese nicht an... Hängt dieses Anschalten von irgendwelchen Bedingungen ab? Nicht initialisierte Variablen wären dann eine Möglichkeit.
So, habe jetzt meine komplette externe Beschaltung des Reset Pins entfernt und den Reset Pin mit 10k an VCC gezogen, auch so funktioniert der Reset nicht.
Hi Stefan, testest du den Reset mit angeschlossenem ISP oder JTAG Programmer? Versuch doch mal dein Programm zu flashen, den Programmer trennen und dann den Reset. Nur so ne Idee... Gruss Nico
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.