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
staticunsignedintreset;
3
4
voidmain()
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?
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?
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
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...
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
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)
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
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)...
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!!
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
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 :-)