Forum: Mikrocontroller und Digitale Elektronik ATMEGA1280 springt nach Reset nicht an Programmanfang


von Stefan (Gast)


Lesenswert?

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

von tom (Gast)


Lesenswert?

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.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

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.

von Stefan (Gast)


Lesenswert?

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

von Andreas K. (a-k)


Lesenswert?

Ist diese "irgendeine Stelle" zufällig immer die gleiche und zwar exakt 
am Anfang der Bootsektion?

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

Der Mega1280 braucht keinen externen Watchdog, der Vcc überwacht. 
Schalte mal den internen Brown-Out Detektor an.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

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.

von Stefan (Gast)


Lesenswert?

@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

von Andreas K. (a-k)


Lesenswert?

Woher weisst du, dass er nach Reset an der falschen Stelle startet?

von Stefan (Gast)


Lesenswert?

Bei normalem Start (dh VCC an/aus) schalte ich 2 LEDs an, nach einem 
Reset gehen diese nicht an...

von Gregor B. (gregor54321)


Lesenswert?

wie wird der Reset denn ausgelöst?

von Stefan (Gast)


Lesenswert?

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

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

Wie schnell läuft der 1280?

von Stefan (Gast)


Lesenswert?

Über QuartzOszi mit 8MHz

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

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.

von Karl H. (kbuchegg)


Lesenswert?

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.

von Stefan (Gast)


Lesenswert?

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.

von Nico (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.