Spontane Resets

Die Elektronik des c't-Bot
cgiesen

Beitrag von cgiesen » 19 Feb 2006, 13:02

Benjamin.Benz hat geschrieben:Probiert mal die Version aus, die jetzt im CVS steht, da ist der Watchdog definitv deaktiviert. Wer es prüfen will, kann ja mal die Kommentare von Zeile 140 in ct-bot.c entfernen. Dann sollte auf dem Display ein Counter hochzählen.

MfG Benjamin Benz
Hi,

da ist es wieder mein Problem.
Wie lade ich diese Version, ohne meine Änderungen in der ct-bot.c kaputt zu machen? Ich habde dort die Display Erweiterung drin.

Kannst Du das entsprechende Segment nicht mal posten?

cu

Carsten

marvin
Wiki Master
Wiki Master
Beiträge: 415
Registriert: 18 Jan 2006, 16:21
Wohnort: Berlin
Kontaktdaten:

Beitrag von marvin » 19 Feb 2006, 13:17

Hallo Carsten,
cgiesen hat geschrieben: da ist es wieder mein Problem.
Wie lade ich diese Version, ohne meine Änderungen in der ct-bot.c kaputt zu machen? Ich habde dort die Display Erweiterung drin.
Hab gestern auch mit Erstaunen feststellen müssen, dass der CVS-Abgleich mit Eclipse nicht funktioniert, wenn man lokale Änderungen vorgenommen hat.

Hatte das bisher mit nem externen CVS-Client (z.B. SmartCVS) gemacht. Damit gibt es keine Probleme. Warum bei Eclipse nur 'synchronize with CVS' geht, aber kein 'update with CVS' ist mir ein Rätsel.

Wohl noch ein Programm mehr, das man installieren muß.

Gruß marvin

Benjamin.Benz

Beitrag von Benjamin.Benz » 19 Feb 2006, 14:03

Du kannst in eclipse ein Synchronize with Repository machen und den Compare-Editor verwenden. Dann kannst Du auch einzelne Änderungen übernehmen. Auf jedenfall aber einzelne Dateien

cgiesen

Beitrag von cgiesen » 19 Feb 2006, 14:05

Hi,

probieren geht über studieren!!!!

Das ist ja sowas von einfach UND GENIAL!!!!

Rechte Maustaste auf ct-bot.c im Navigator.
- Replace with
- latest from Head
ersetzt

- Compare with
-latest from HEAD

Stellt beide Dateien nebeneinander. Und du kannst mit Mausklick wunderbar das holen was du willst!

GENIAL

cu

Carsten

cgiesen

Beitrag von cgiesen » 19 Feb 2006, 14:29

Hallo ZUsammen,

bei mir sind die Reset nach wie vor vorhanden.
Auch wenn ich den Watchdog ausschalte wir es vorgeschlagen wurde.

cu

Carsten

marvin
Wiki Master
Wiki Master
Beiträge: 415
Registriert: 18 Jan 2006, 16:21
Wohnort: Berlin
Kontaktdaten:

Beitrag von marvin » 19 Feb 2006, 14:46

Ok, ok. Nehme alles zurück und behaupte das Gegenteil.
Update mit CVS funktioniert, zumindest heute geht es. Gestern ging es definitiv nicht. Die Menüpunkte bis auf 'Team, Synchronize mit CVS' waren ausgegraut und nicht bedienbar, auch nach eienm Eclipse Neustart. Bei Synchronize gabs dann logischerweise Fehlermeldungen.

Resets kann ich bei meinen c't-Bot bisher nicht feststellen. Dafür aber plötzlichen Stillstand (eingefrorenes LCD, LEDs, Motoren laufen einfach weiter usw.). Erst nach Reset drücken ging es wieder.

Gruß marvin

cgiesen

Beitrag von cgiesen » 19 Feb 2006, 15:27

Hi,

diese Effekte hatte ich auch schon ein paarmal.
Reset hatte ich gerade wieder ein paar mal, aber es war nichts auf der Resetleitung zu sehen.
Da habe ich ein 'Logic-Analyzer' dran hängen.
Ein Projekt der c't von vor min. 8 Jahren.

Ich frage mich, ob es wirklich ein Reset ist?
Oder ob es vielleicht so gewollt ist.
Das kann ich dem Code aber nicht entnehmen.

Frage an Herrn Benz. Was passiert, wenn eine ganze Zeit nichts passiert?
Startet der BOT dann von vorne?

cu

Carsten

schmart@

Beitrag von schmart@ » 19 Feb 2006, 18:38

Mit der neuen Version aus dem cvs habe ich auch noch die gleichen Probleme. Der Bot resetet sich. Ich war dann mal neugierig (oder mutig) und habe den Brown Out Reset enabled. Seitdem läuft der Bot stabil?!

Viele Grüße
Martin

chrimo

Beitrag von chrimo » 19 Feb 2006, 19:55

Mal ne böde Vermutung zum Reset...
Könnte es sein, dass irgend eine Interruptroutine ins Nirvana geht
und die CPU dadurch resetet ?
Hatte solche Probleme schon einmal mit einem 68000er...
Sind eigentlich alle Interruptvectortabellen ordentlich initialisiert ?

Ich schau mal, ob der Atmel sowas überhaupt kennt 8-)
Chrimo

cgiesen

Beitrag von cgiesen » 19 Feb 2006, 22:30

Hi,
schmart@ hat geschrieben:Ich war dann mal neugierig (oder mutig) und habe den Brown Out Reset enabled.
Kannst Du mich mal aufklären, was es damit auf sich hat, und wie du das gemacht hast?

cu

Carsten

schmart@

Beitrag von schmart@ » 20 Feb 2006, 08:47

cgiesen hat geschrieben: Kannst Du mich mal aufklären, was es damit auf sich hat, und wie du das gemacht hast?
Laut der hier schon zitierten Referenz resetet sich der Controller falls die Spannung unter einen gewissen Level (4V oder 2.7V) abfällt. Dies soll wohl verhindern, dass der Prozessor in einem undefinierten Zustand hängenbleibt.

cgiesen

Beitrag von cgiesen » 20 Feb 2006, 10:13

schmart@ hat geschrieben:
cgiesen hat geschrieben: Kannst Du mich mal aufklären, was es damit auf sich hat, und wie du das gemacht hast?
Laut der hier schon zitierten Referenz resetet sich der Controller falls die Spannung unter einen gewissen Level (4V oder 2.7V) abfällt. Dies soll wohl verhindern, dass der Prozessor in einem undefinierten Zustand hängenbleibt.
OK, habe ich verstanden. Aber so wie ich das sehe, wird doch durch setzen des Flags diese Funktion erst eingeschaltet?!?!?!

cu

Carsten

chrimo

Beitrag von chrimo » 20 Feb 2006, 10:42

Vielleicht zuerst noch einmal eine Frage zum Reset....

Wann tritt der Reset auf ?
Gibt es einen Zusamenhang zwischen der Motorsteuerung und dem Reset ?
Wird der Reset vielleich durch das Anlaufen der Motoren in bestimmten Situationen verursacht ?

Vielleicht verursachen die hohen Anlaufströme der Motoren Spikes in der Versorgungsspannung (< 2.7V) und daher Resets...

Man könnte ja mal versuchen den Motor mit separater Spannungsquelle zu betreiben...

Alles nur Vermutungen 8-(

BYe
Chrimo

cgiesen

Beitrag von cgiesen » 20 Feb 2006, 11:02

Hi,

die Ideen hatte ich auch schon.

Bei mir steht der BOT aufgebockt auf dem Schreibtisch.
Er kann also nicht fahren. Lampe ist aus.
Keine Motoren laufen, keine Veränderungen an den Sensoren.

Und trotzdem macht er einen Neustart.
Das es ein Neustart ist, kann ich daran erkennen, das ich im EEprom die Neustarts zähle.

mfg

Carsten

marvin
Wiki Master
Wiki Master
Beiträge: 415
Registriert: 18 Jan 2006, 16:21
Wohnort: Berlin
Kontaktdaten:

Beitrag von marvin » 20 Feb 2006, 11:55

Hallo Carsten,

Laß dir soch mal das MCU Control & Status Register ausgeben.
Dann müßte man die Ursache des Resets schon eingrenzen können.

Die Variable reset_flag global machen.
Den folgenden Code gleich in der Main Routine einbauen (vor oder hinter init):

[syntax="c"]
unsigned char reset_flag;
...
reset_flag = MCUCSR & 0x1F;
MCUCSR = 0;

[/syntax]

Die variable reset_flag dann auf dem LCD-Modul ausgeben lassen.

Die Bedeutung der Bits:
• Bit 4 – JTRF: JTAG Reset Flag
This bit is set if a reset is being caused by a logic one in the JTAG Reset Register
selected by the JTAG instruction AVR_RESET. This bit is reset by a Power-on Reset, or
by writing a logic zero to the flag.
• Bit 3 – WDRF: Watchdog Reset Flag
This bit is set if a Watchdog Reset occurs. The bit is reset by a Power-on Reset, or by
writing a logic zero to the flag.
• Bit 2 – BORF: Brown-out Reset Flag
This bit is set if a Brown-out Reset occurs. The bit is reset by a Power-on Reset, or by
writing a logic zero to the flag.
• Bit 1 – EXTRF: External Reset Flag
This bit is set if an External Reset occurs. The bit is reset by a Power-on Reset, or by
writing a logic zero to the flag.
• Bit 0 – PORF: Power-on Reset Flag
This bit is set if a Power-on Reset occurs. The bit is reset only by writing a logic zero to
the flag.
Gruß marvin

Antworten