Forum: Mikrocontroller und Digitale Elektronik PIC16F616 Watchdog Timer


von PIC_User (Gast)


Lesenswert?

Bei einem Projekt muss die ganze Schaltung bis der Benuzer ein 
Kapazitives Touchpad auf dem Print betätigt im Sleepmode laufen. Dann 
sollte Timer0 des PIC16F616 beginnen zu laufen und der Watchdog Timer 
disabled werden. Wird das selbe Touchpad wider betätigt sollte der PIC 
wider in den Sleep mode gehen, bis das Touchpad betätigt wird.
Wie kann ich im Verlauf des Programms den Watchdog Timer starten und 
wieder stoppen? Im Datenblatt wird vom CONFIG Register gesprochen, der 
Compiler (xc8) gibt da aber Fehlermeldungen aus.
Stimmt der Aufruf mit SLEEP(); um den PIC in den Sleepmodus zu 
versetzen?
1
while(1)
2
{   pad_abfrage1();
3
    if(ucPad1 == 1)
4
    {   if(ucPad1old == 0)
5
        {   //Watchdog off
6
            ulTimeCounter = 60000;
7
            CCPR1L = 0;
8
            ucPad1old = 1;
9
        }
10
    }
11
    else
12
    {   //Watchdog on
13
         ulTimeCounter = 60000;
14
         SLEEP();
15
         ucPad1old = 0;
16
    }
17
}

von daVinciClaude (Gast)


Angehängte Dateien:

Lesenswert?

Das/die CONFIG Register sind für deine SW nicht zugänglich. Du kannst 
sie in MPLAB unter Window >> PIC Memory Views >> Configuration Bits 
einstellen.
Dann das konfigurierte Outputten ("Generate Source Code to Output") und 
diesen Code z.B. in einer config.h mit einbinden.
Bei meinem momentan verwendeten 16F886 gibt es die Option "WDT disabled 
and can be enabled by SWDTEN bit of the WDTCON Register". Nehme an, dies 
wird bei deinem PIC auch der Fall sein.

SLEEP() funktioniert halt nur, solange kein (zugelassenes) Interrupt 
Flag gesetzt wird und Dir die CPU wieder anschiebt.

Gruss

Felix

von PIC_User (Gast)


Lesenswert?

Die Config register habe ich folgendermassen gesetzt:
1
// CONFIG
2
#pragma config FOSC = INTOSCIO  // Oscillator Selection bits (INTOSCIO oscillator: I/O function on RA4/OSC2/CLKOUT pin, I/O function on RA5/OSC1/CLKIN)
3
#pragma config WDTE = ON       // Watchdog Timer Enable bit (WDT disabled and can be enabled by SWDTEN bit of the WDTCON register)
4
#pragma config PWRTE = OFF      // Power-up Timer Enable bit (PWRT disabled)
5
#pragma config MCLRE = OFF       // MCLR Pin Function Select bit (MCLR pin function is MCLR)
6
#pragma config CP = OFF         // Code Protection bit (Program memory code protection is disabled)
7
#pragma config IOSCFS = 8MHZ    // Internal Oscillator Frequency Select bit (4 MHz)
8
#pragma config BOREN = ON       // Brown-out Reset Selection bits (BOR enabled)

Interrupts verwende ich nur die des Timer 0 und des AD Wandler.
Ich will eigentlich den PIC immer im SleepMode betreiben und alle paar 
ms wecken um zu schauen ob jemand ein Kapazitives Touchpanel berührt 
hat. Wenn dies nicht der Fall ist, wieder in den Sleep mode. Sonst will 
ich den Watchdog in der Software Disabeln. Laut Datenblatt kann man dies 
im CONFIG Register machen. Der Compiler gibt aber sobald ich das 
Register in der SW schreibe eine Fehlermeldung. Die andere Möglichkeit 
wäre, den PIC mit dem Timer1 zu wecken, aber wenn man dazu den Watchdog 
verwendet benötig der PIC angeblicher weise weniger Energie.

von daVinciClaude (Gast)


Angehängte Dateien:

Lesenswert?

Irgendie hat Microchip da ziemlich Mist gebaut. Im von Dir geposteten 
Output steht:
1
#pragma config WDTE = ON       // Watchdog Timer Enable bit (WDT disabled and can be enabled by SWDTEN bit of the WDTCON register)

Das stimmt aber so nicht, das SWDTEN Bit im WDTCON Register existiert 
beim 16F616 gar nicht! Dein Problem ist, dass das CONFIG-Register nur 
für den Programmer zugänlich ist. WDT durch Deine Firmware 
ein-/ausschalten kann der gar nicht.

Z.B. beim 16F886 siehts so aus (siehe Bild im Anhang):
1. Entweder du setzt das WDTE Bit im CONFIG1 Register einmalig, dann 
läuft der WDT immer.
2. Du löschst das WDTE Bit und aktivierts den WDT manuell mit dem SWDTEN 
Bit.

Wenn Du diese Funktionalität so implementieren willst, wirst du wohl 
oder übel einen anderen PIC nehmen müssen.


Gruess

Felix

von PIC_User (Gast)


Lesenswert?

Danke für deine Antwort. So muss ich wohl eine andere Lösung suchen (sei 
es mit einem Timer oder mit einem anderem PIC). Diese Vermutung hatte 
ich auch schon angestellt, aber war der Meinung, dass dies nicht 
wirklich Ideal ist, auch die Widersprüchliche Angabe des Konfiguration 
Bit Manager und des Datenblatt...
Gruss Moritz

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.