Forum: Mikrocontroller und Digitale Elektronik PIC startet nach undefinierter Zeit neu


von S1026 (Gast)


Lesenswert?

Hallo zusammen,

bin derzeit an einem Projekt beschäftigt und alles an was es fehlt ist 
mal wieder der PIC...

Hab ne Software geschrieben, die läuft auch wie ich will, allerdings 
resetet sich der PIC nach etwa zwei Minuten. Die Zeit ist nicht 
konstant.
Mit dem geschriebenen Code kanns eigentlich nichts zu tun haben, hab ein 
kurzes Testprogramm geschrieben, in dem nichts gearbeitet wird, trotzdem 
tritt der Fehler auf.
1
#pragma udata overlay my_overlay_data1=0x1fc
2
static unsigned int reset;
3
4
void main()
5
{
6
  if(reset != 0xAA)
7
  {
8
    reset = 0xAA;
9
  }
10
  else
11
  {
12
    reset = 0x0;
13
  }
14
  
15
  while(1)
16
  {
17
  } 
18
}

In dem Fall kann ich natürlich nur debuggen und nen Breakpoint setzen. 
Mit der eigentlichen Software kann ich den Fehler auch ohne Debugger 
erkennen. Es macht keinen Unterschied.

Zuerst habe ich mit dem MPLAB IDE und dem C18 Compiler gearbeitet, nun 
habe ich den Hi Tech C Compiler als Eval-Version, es ändert sich nichts.

Habs auch mit nem zweiten, identischen Prozessor ausprobiert, der hängt 
direkt an nem ICD3, externer Oszillator mit 20MHz und 15pF Kondensatoren 
( Config bit auf HS oscillator), 10k Pull-Up Widerstand am MCLR Pin.

Hat jemand von euch schon einmal ein solches Problem gehabt? Oder ne 
Idee an was das liegen könnte?

von Εrnst B. (ernst)


Lesenswert?

S1026 schrieb:
> Habs auch mit nem zweiten, identischen Prozessor ausprobiert, der hängt
> direkt an nem ICD3, externer Oszillator mit 20MHz und 15pF Kondensatoren
> ( Config bit auf HS oscillator), 10k Pull-Up Widerstand am MCLR Pin.

100nF an den VCC/GND-Paaren vergessen?

von Meister E. (edson)


Lesenswert?

S1026 schrieb:
> alles an was es fehlt ist
> mal wieder der PIC...

Ich bezweifle das mal.

S1026 schrieb:
> Mit dem geschriebenen Code kanns eigentlich nichts zu tun haben, hab ein
> kurzes Testprogramm geschrieben, in dem nichts gearbeitet wird, trotzdem
> tritt der Fehler auf.

Zeig mal deine Config-Einstellungen. Dein "Testprogramm" sagt überhaupt 
nichts aus.

S1026 schrieb:
> Hat jemand von euch schon einmal ein solches Problem gehabt? Oder ne
> Idee an was das liegen könnte?

Ohne zu wissen welchen PIC-Typen du konkret benutzt...?

Gruß,
Edson

von B. S. (bestucki)


Lesenswert?

Es kann fast alles sein. Spannungseinbrüche der Speisung, Spikes auf der 
Speisung, Abblockkondensatoren vergessen, Watchdog eingeschaltet (obwohl 
die Zeit ein bisschen lang dafür ist), offene Eingänge usw. Schau mal im 
Datenblatt nach, welche verschiedene Resets dass es gibt und wann sie 
ausgelöst werden.

Ohne Schema ist das ein heiteres Rätsel raten...

von Patrick B. (p51d)


Lesenswert?

S1026 schrieb:
> static unsigned int reset;

Kennst du den Unterschied von Initialisieren und Deklarieren?

Wie schon erwähnt wurde, kann es sehr viele Gründe dafür geben, und bei 
99,99% ist nicht der PIC schuld.

Erforderlich für eine Hilfeleistung:
- PIC Typ
- GANZES Programm (also inkl. den Configs)
- Schema (Speisung, Blockkondensatoren)
- ICD angeschlossen/nicht -> welches Verhalten, self-powered oder nicht, 
ICD mit Speisung angeschlossen....


MFG
Patrick

von S1026 (Gast)


Angehängte Dateien:

Lesenswert?

Die 100nF Kondensatoren sind vorhanden. Versorgt wird der PIC über den 
ICD 3. Das wird passen. Auch mit nem ICD2 und Spannungsversorgung direkt 
vom Netzgerät tritt der gleiche Fehler auf.

Es handelt sich um einen PIC18F45K22.

Die ConfigBits seht ihr im Anhang.
Inzischen habe ich auch den externen Oszillator weggelassen. Macht 
keinen Unterschied.

Ich denke dass das Testprogramm genug sagt. Der PIC macht in dem Fall 
nichts, ich bekomm es aber mit, wenn er nen Reset gemacht hat! Das war 
das Ziel von dem Programm, alles auszuschließen.

Spannungseinbrüche denk ich nicht, dazu ist das Auftreten zu 
'regelmäßig'.

Im Testfall sind alle Eingänge offen und auch nicht konfigriert. Das 
macht aber keinen Unterschied zum eigentlichen Aufbau, hier werden alle 
nicht benötigten Ports als Ausgang definiert und auf LOW geschaltet.

Ich weiß dass es viele Möglichkeiten gibt, bei denen der Controller nen 
Reset macht. Ich 'befehle' es aber nie und im Testprogramm kann ja auch 
nichts falsch sein, so dass er einen machen würde. (Stack Full, Stack 
Underflow, BOR, WDT)

von S1026 (Gast)


Lesenswert?

Zum Aufbau:
-100nF an beiden Versorgungspaaren VDD, VSS
-10k Pullup an MCLR
-PGC, PGD, MCLR, VDD, VSS zum Debugger

Zum Programm:
-Zum testen wird nur das oben erwähnte Programm verwendet, die 
Configbits habe ich vorher hochgeladen

ICD
-Es macht keinen Unterschied, ob ich über den ICD versorge oder über ein 
Netzgerät
-Auch wenn ich den eigentlichen Aufbau ohne Debugger laufen lasse, 
verhält es sich genau gleich

von Patrick B. (p51d)


Lesenswert?

Setze die Configs mal etwas anders (hier ist die "richtige" Variante):
-PWRTEN -> Enable (damit der Oszillator richtig starten kann, alles 
andere ist Murks)
-WDTEN -> Disable (hier ist warscheindlich das Hauptproblem: der 
Watchdog ist aktiviert, aber du setzt den Timer in deinem Programm nie 
zurück)...

von Gockel (Gast)


Lesenswert?

ja, der Watchdog.
Entweder disablen oder in der Hauptroutine zurücksetzen...

von Frank K. (fchk)


Lesenswert?

Du solltest entweder den Watchdog bedienen oder das WDTEN Bit in den 
Config Words abschalten.

fchk

von S1026 (Gast)


Lesenswert?

Au man, vielen Dank!

Hab den Watchdog noch nie benutzt und wär auch nicht drauf gekommen, 
dass der defaultmäßig aktiviert ist. Weiter hätt ich auch nie gedacht, 
dass man den auf 2.18 Minuten einstellen kann...

Ach und ich wollte den PIC nicht schlecht machen mit meiner Aussage, 
dass es nur an ihm fehlt. Ich meinte damit, dass das ganze Drumrum läuft 
und auch das eigentlich Programm das Richtige macht, nur an der einen 
Stelle hats halt gefehlt..

Vielen Dank an alle und entschuldigt die Umstände, den Fehler hätt ich 
selber finden müssen!!

von Michael R. (mexman) Benutzerseite


Lesenswert?

S1026 schrieb:
> Au man, vielen Dank!

Schoen, dass es so leicht war ;-)

Dann war aber Deine Aussage
"Die Zeit ist nicht konstant."
nicht korrekt.



Die Loesung hatte Dir "be stucki" bereits 15 Minuten nach Deiner Anfrage 
geschrieben.....



Gruss

Michael

von Gockel (Gast)


Lesenswert?

>>Weiter hätt ich auch nie gedacht,
>>dass man den auf 2.18 Minuten einstellen kann...

Ja, das hat was. Kann eben nicht jeder!

von S1026 (Gast)


Lesenswert?

Das mir der nicht konstanten Zeit verwundert mich immer noch. Ich bin 
mir eigentlich sicher, dass die nicht immer gleich lang war.. So kann 
man sich vertun!

Ich weiß, dass die Antwort mit dem Watchdog recht schnell kam, aber er 
hat dies ja selbst gleich angezweifelt und ich hab da gar nicht drüber 
nachgedacht.. Kam mir einfach viel zu lang vor!




Man lernt nie aus! Echt fein, dass man hier so schnell Hilfe findet, 
wenn die Lösung auch so nah liegt :-)

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.