www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Watchdog Timer Problem C515C


Autor: Martin S. (drunkenmunky)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
ich verwende das miniMODUL der Firma Phytec mit einem Infineon 
SAF-C515C. Ich programmiere mit Keil uVision3. Jetzt habe ich probiert 2 
Analogwerte einzulesen und mit dem Keil Simulator zu simulieren.

Problem ist aber dass er laufend "Watchdog Timer Reset occured" meldet.

Ist der Watchdog Timer standardmäßig eingeschalten? Wie setzt ich ihn 
zurück oder schalte ihn aus? Oder woran liegt es, dass der Watchdog 
anspricht?

Hier mal mein Code:
#include<stdio.h>
#include <reg515c.h>
 
int aduwert(char kanal)
{
  ADCON1 = kanal;
  ADDATL = 0;   // ADU starten
  while(BSY);    //auf Wandlungsende warten
  return((ADDATL>>6)+ADDATH*4);
}
      
void main(void)
{    
  int analogwert_AN0, analogwert_AN1;
  float spannung0, spannung1;
   
  ADEX = 0;    //interner Wandlungsstart
  ADM = 1;    // kontinuierliche Wandlung

  while(1)
  {
    while(BSY);
    analogwert_AN0 = aduwert(0);     //Analogwert einlesen lassen
    while(BSY);
    analogwert_AN1 = aduwert(1);
     
    spannung0 = 5 * ((float)analogwert_AN0/1024);    //Analogwert umrechnen auf Eingangsspannung bei 5V Referenzspannung
    spannung1 = 5 * ((float)analogwert_AN1/1024);
  
  }

}

Vielen Dank im voraus

Autor: Ralf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Problem ist aber dass er laufend "Watchdog Timer Reset occured" meldet.
Okay, das ist schon mal ne konkrete Fehlerbeschreibung.

> Ist der Watchdog Timer standardmäßig eingeschalten?
siehe Datenblatt

> Wie setzt ich ihn zurück oder schalte ihn aus?
siehe Datenblatt

> Oder woran liegt es, dass der Watchdog anspricht?
siehe Datenblatt

Die obigen Antworten sollen dir nur verdeutlichen, dass du mehr und 
bessere Antworten bekommst, je mehr Input du lieferst :) Also 
Datenblatt, Schaltplan, etc.

Hab's mir mal angesehen bzw. nur kurz überflogen. Kapitel 8.1 vom 
UserManual ist der Ansatzpunkt. Es gibt den PE/SWD Pin welcher u.a. 
bestimmt, ob der Watchdog bei einem Reset automatisch aktiviert wird. 
Leider konnte ich auf die Schnelle keinen Schaltplan zu deinem Board 
finden, aber der Beschreibung des Boards nach ist Jumper J7 die 
Verbindung zum PE/SWD Pin, vermute ich mal.

Soweit ich das sehen kann, gibt es keine Möglichkeit, den WatchDog zu 
deaktivieren, wenn er einmal gestartet wurde. Du musst ihn in dem Fall 
permanent rücksetzen -> siehe UserManual. Die andere Option ist, mittels 
Jumper den automatischen Start zu unterbinden. Die weiteren Auswirkungen 
(z.B. auf die Stromsparmodi, etc.) musst du selber bewerten und 
entscheiden, ob du das machen willst.

Deine Software hab ich mir jetzt nicht angeguckt, weil ich denke, dass 
du zuerst das mit dem Watchdog eintüten solltest :)
Wenn weitere Fragen sind, nur her damit...

Ralf

Autor: Ralf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> ...aber der Beschreibung des Boards nach ist Jumper J7 die
> Verbindung zum PE/SWD Pin, vermute ich mal.
Korrektur: Jumper J9 !!!

Ralf

Autor: R. W. (quakeman)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Martin S. schrieb:
> Hallo,
> ich verwende das miniMODUL der Firma Phytec mit einem Infineon
> SAF-C515C. Ich programmiere mit Keil uVision3. Jetzt habe ich probiert 2
> Analogwerte einzulesen und mit dem Keil Simulator zu simulieren.
>
> Problem ist aber dass er laufend "Watchdog Timer Reset occured" meldet.
>
> Ist der Watchdog Timer standardmäßig eingeschalten? Wie setzt ich ihn
> zurück oder schalte ihn aus? Oder woran liegt es, dass der Watchdog
> anspricht?

Bei der Simulation in µVision ist der Interrupt per Hardware Pin 
standardmäßig aktiviert. Um diesen in der Simulation zu deaktivieren 
mußt du den Pin PE/SWD=0 setzen. Dies machst du in dem du eine Datei mit 
der Endung .ini anlegst in welcher drinsteht:
PE_SWD = 0
RESET
Diese Datei gibst du dann unter "Project->Options for Target->Debug" in 
dem Feld "Initialization File" an. Beim Start des Debuggers wird diese 
Datei dann geladen und der Pin PE/SWD in der Simulation auf 0 gesetzt, 
wodurch der Hardware-Watchdog beim Start deaktiviert ist.

Ciao,
     Rainer

Autor: Martin S. (drunkenmunky)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
danke für die Antworten!

dann müsste ja der Watchdog auf dem miniMODUL ausgeschalten sein, denn 
der J9 ist noch auf 1+2 gestellt.

Und die ini in die Simulation mit einfügen hat auch geklappt.

Danke!

Autor: Martin S. (drunkenmunky)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Eine Frage hätte ich noch zum Analogwert einlesen. Ich habe das Programm 
ein bisschen erweitert:
sbit P20 = 0xa0;   //Definition Port-Pin 2.0
sbit P21 = 0xa1;   //Definition Port-Pin 2.1
sbit P22 = 0xa2;   //Definition Port-Pin 2.2
sbit P23 = 0xa3;   //Definition Port-Pin 2.3
 
int aduwert(char kanal)
{
  ADCON1 = kanal;
  ADDATL = 0;   // ADU starten
  while(BSY);    //auf Wandlungsende warten
  return((ADDATL>>6)+ADDATH*4);
}
      
void main(void)
{    
  int analogwert_AN0, analogwert_AN1;
  float spannung0, spannung1, test;
   
  ADEX = 0;   //interner Wandlungsstart
  ADM = 0;    //keine kontinuierliche Wandlung

  while(1)
  {
    while(BSY);
    analogwert_AN0 = aduwert(0);     //Analogwert einlesen lassen
    while(BSY);
    analogwert_AN1 = aduwert(1);

    spannung0 = 5 * ((float)analogwert_AN0/1024);    //Analogwert umrechnen auf Eingangsspannung bei 5V Referenzspannung
    spannung1 = 5 * ((float)analogwert_AN1/1024);
        
    if(spannung0 > 1.0)
      P20 = 1;
    else
      P20 = 0;

    if(spannung0 > 2.0)
      P21 = 1;
    else
      P21 = 0;
    
    if(spannung0 > 3.0)
      P22 = 1;
    else
      P22 = 0;
  }

}

die Variable analogwert_AN0 ist, wenn ich 1V am Eingang einstelle bei 5V 
Referenzspannung, nach der Zeile:
analogwert_AN0 = aduwert(0);

auf analogwert_AN0 = 204, soweit OK, aber nach der Zeile:
spannung0 = 5 * ((float)analogwert_AN0/1024);

ist analogwert_AN0 = 126

und nach
if(spannung0 > 1.0)

ist analogwert_AN0 = 0

warum verändert sich analogwert_AN0 überhaupt nochmal wenn ich ihm doch 
nichts neues zuweise?

Autor: R. W. (quakeman)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Martin S. schrieb:
> die Variable analogwert_AN0 ist, wenn ich 1V am Eingang einstelle bei 5V
> Referenzspannung, nach der Zeile:
>
>
analogwert_AN0 = aduwert(0);
>
> auf analogwert_AN0 = 204, soweit OK, aber nach der Zeile:
>
>
spannung0 = 5 * ((float)analogwert_AN0/1024);
>
> ist analogwert_AN0 = 126
>
> und nach
>
>
if(spannung0 > 1.0)
>
> ist analogwert_AN0 = 0
>
> warum verändert sich analogwert_AN0 überhaupt nochmal wenn ich ihm doch
> nichts neues zuweise?

Das liegt an der Optimierung des Compilers, welcher Variablen 
wiederverwendet insofern dies keine Auswirkung auf das Programm hat. Da 
du die Variable analogwert_AN0 nach der Umrechnung nicht mehr benutzt, 
wird der Speicherplatz dieser Variablen für die folgenden Berechnungen 
intern mitbenutzt. Dadurch werden keien neuen internen Variablen erzeugt 
und der Compiler spart RAM. Das ist also alles schon richtig so und du 
hast dadurch insgesamt auch mehr RAM für dein Programm zur Verfügung.

Ciao,
     Rainer

Autor: Martin S. (drunkenmunky)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Achso, dann bin ich ja beruhigt... :-)

Vielen Dank für die Antwort!

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.