Forum: Mikrocontroller und Digitale Elektronik ATMEGA128 resetet sich automatisch...


von Boese (Gast)


Lesenswert?

Mahlzeit,

Hab hier ein Versuchsaufbau mit einem ATMEGA128. Der Controller resetet
sich nach ca. 2 Sekunden Automatisch, obwohl er mitten in einer Schleife
steckt.

Hier das Bascom-Programm:

$baud = 9600
$regfile = "m128def.dat"
Config Serialin = Buffered , Size = 20
$crystal = 16000000
Enable Serial
Config Pinb.6 = Output
stop watchdog

print "Start"
Do
print "Test"
Loop

end


Weiß jemand Rat?

Gruss

Jan

von Rufus T. Firefly (Gast)


Lesenswert?

> stop watchdog

Wozu das?

von boese (Gast)


Lesenswert?

>Wozu das?

ich dachte zuerst der Watchdog sei dafür verantwortlich dass der uC
sind ständig selbst resettet....

Gruss

Jan

von Thorsten (Gast)


Lesenswert?

Resettet er sich auch, wenn du das print aus der Schleife rausnimmst?

von Boese (Gast)


Lesenswert?

Hallo Thorsten,

Ja, dann resettet er sich weiterhin :(((

Gruss

Jan

von Denis (Gast)


Lesenswert?

stacküberlauf?
watchdog per fuses ausgeschaltet?
spannungszusammenbruch?

von boese (Gast)


Lesenswert?

Hallo Denis,

Watchdog per Fuses? Seh ich in Ponyprog gar nicht, dass man den direkt
deaktivieren kann...
Spannung ist stabil

Woran erkenne ich ein Stacküberlauf?

Gruss

Jan

von Thorsten (Gast)


Lesenswert?

Gibt Bascom sowas wie ein Hex-File aus? Wenn ja, kannst du das ja mal
ins AVR Studio laden und durch simulieren. Vielleicht hilft das weiter.
Oder wenn du dich mit Assembler schwer tust, poste doch mal das
Hex-File. Ich kanns mir mal ansehen.

von Dirk (Gast)


Lesenswert?

Hi,

du kannst auch direkt in Bascom simulieren. Der Simulator zeigt ein
Stackoverflow an , aber bei diesem kleinen Prg wird es nicht am STack
liegen.

Der 103er Mode ist nicht aktiv? Probier doch mal ein anderes kleines
Prg. ohne Serial.

Blockkondensatoren befinden sich an VCC und GND? Pullup am Reset Pin?

Kann man die Hardware ausschliessen?

Mfg
Dirk

von Christian (Gast)


Lesenswert?

Er führt möglicherweise die Schleife nur genau einmal durch, obwohl es
eine Endlosschleife ist. Das Problem ist bei mir mal aufgetreten als
ich eine do{}while(1) Schleife gemacht habe. Das Schlüsselwort volatile
hat das Problem gelöst.

mfg Chris ;)

von boese (Gast)


Angehängte Dateien:

Lesenswert?

@christian

> Das Schlüsselwort volatile hat das Problem gelöst.

was meinst du damit?

Im Anhang das Hex-File was bascom produziert hat.

@Dirk

M103 Mode ist in PonyProg unchecked (unprogrammiert) = logisch eins.
werd mal ein anderes Prog testen...

Pullup ist am Reset dran, dort auch 47 pico Farad gegen Masse, am
Festspannungsregler 1x 10 uF, 2 x 100 nF, und heute hab ich direkt vor
alle GND und V+ Eingänge am Controller noch jeweils 1x 100 nF gehängt
(ich glaube dadurch wurde der Abstand ein wenig größer bis zum nächstes
Reboot, kann aber auch Zufall gewesen sein...)

Es ist zum verweifeln :((((((((

Gruss

Jan

von boese (Gast)


Lesenswert?

So hab mal das ganze ohne Serielle Schnittstelle getestet, also nur
einen Port getoggelt (an, aus)...

Meine fuses sehen so aus:

Programmiert sind (logisch null): Bootz1, Bootz0, BootRst, SUT0, WDTON


und genau WDTON mal fix im Datenblatt nachgeschaut, deaktiviert, und
schon läufts perfekt!!!!!

Da sitzt mal fast n Tag dran, nur wegen so einem blöden Fusebit ;)
hehe

Danke aber für eure Hilfe!

Gruss

Jan

von Christian (Gast)


Lesenswert?

volatile : Sagt dem Compiler das eine Variable außerhalb des normalen
Programmablaufs geändert wird bzw das er hier nichts wegoptimieren
soll.
Endlosschleifen werden oft vom Compiler rausgeschmissen weil er erkennt
das der durchlauf "überflüssig" 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
Noch kein Account? Hier anmelden.