Forum: Mikrocontroller und Digitale Elektronik PIC16 Wait-Funktion


von SwissPG (Gast)


Lesenswert?

Hallo,

für den Programmablauf ( Programmiersprache ist C )auf einem PIC16 sind 
bei mir mehrere Unterbrechungen nötig. In meinem Kurs haben wir damals 
unter anderem Pausen über verschiedene Delay Routinen und Timer 
Funktionen erstellt.
Da der PIC 16 bei mir nur einen Timer hat, den der Watchdog auch noch 
verwendet, bin ich etwas ratlos im Moment.

Ich möchte aus der Main Funktion eine Unterfunktion ( Bsp. Wait ) 
aufrufen, die dann einfach eine bestimmte Zeit vergehen lässt und danach 
wieder in die Main zurückkehren. In Assembler kann man dafür ja einfach 
einen Register Wert dekrementieren.
Da ich es aber in C schreiben möchte, habe ich mir gedacht den Timer 
laufen zu lassen, aber dieser ist ja schon durch den Watchdog belegt.
In meinem Kurs habe ich gelernt, dass man auf Delay Routinen verzichten 
sollte, da diese dafür sorgen, dass der PIC nebenher keine weiteren 
Aufgaben erfüllen kann. Allerdings wäre das eine einfache Lösung.

Meine Fragen wären nun :
- Würdet ihr in diesem Fall auch von deiner Delay Routine abraten ?
- Kann man den Timer sowohl für den Watchdog als auch eine weitere 
FUnktion verwenden ? Also zeitgleich ?
- Was würdet ihr empfehlen um mit einer einfachen Funktion zum Beispiel 
ein paar ms vergehen zu lassen, bevor mit dem Hauptprogramm fortgesetzt 
wird ?

Vielen Dank.

von Karl H. (kbuchegg)


Lesenswert?

Nicht das ich da jetzt der große PIC Experte wäre.
Aber imho stimmt da in deinen Ausführungen was nicht.

Die PIC 16 haben Timer
http://www.sprut.de/electronic/pic/grund/timer/timer.htm

die nichts mit dem Watchdog zu tun haben. Der Watchdog hat nur für sich 
alleine einen eigenen Timer.

http://www.sprut.de/electronic/pic/config/config.htm#watchdog

von SwissPG (Gast)


Lesenswert?

Bin mir ja auch nicht ganz sicher, deshalb frage ich ja.
Mein PIC16 hat nur einen Timer. Den Timer0 da bin ich mir sicher. Steht 
zumindest so im Datenblatt drin. Und der Watchdog wird ja auch vom 
Timer0 gesteuert soweit ich weiß ??

von Chris B. (dekatz)


Lesenswert?

SwissPG schrieb:
> Bin mir ja auch nicht ganz sicher, deshalb frage ich ja.
> Mein PIC16 hat nur einen Timer. Den Timer0 da bin ich mir sicher. Steht
> zumindest so im Datenblatt drin. Und der Watchdog wird ja auch vom
> Timer0 gesteuert soweit ich weiß ??

Jain...
Der Watchdog hat einen eigenen RC Oszillator.
Man KANN den Prescaler des Timer0 dem Watchdog zuweisen - damit ist 
dieser dann für den Timer0 nicht mehr verfügbar.
Den Timer0 ohne Prescaler kann man aber weiterhin verwenden!

von Peter II (Gast)


Lesenswert?

Die frage ist doch, ob du wirklich einen Watchdog brauchst.

von SwissPG (Gast)


Lesenswert?

Der Watchdog ist vorgesehen.
Könnt ihr mir bitte bei den Fragen weiterhelfen ?

- Was spricht außer dem ständigen Reset gegen den Watchdog ?
- Was spricht gegen eine Delay Rotinen ? Bzw für eine Wartefunktion über 
eine Timer Funktion ?

Vielen Dank.

von B. S. (bestucki)


Lesenswert?

SwissPG schrieb:
> - Was spricht außer dem ständigen Reset gegen den Watchdog ?

Weiss du, was ein Watchdog ist? Normalerweise will man nicht, dass 
dieses Reset durchgeführt ist, deshalb wird er auch ständig vom 
Hauptprogramm zurückgesetzt.

von GroberKlotz (Gast)


Lesenswert?

SwissPG schrieb:
> Mein PIC16 hat nur einen Timer.

Gib doch mal die genaue Bezeichnung Deines PIC an. PIC16 genügt einfach 
nicht! Die Dinger haben 100%ig TMR0 und TMR1, für genaueres braucht man 
aber das Datgenblatt. Ohne genaue Bezeichnung läuft nichts!
Z.B. so : PIV 16F628.
Dann kann Dir auch auf die Sprünge geholfen werden!

mfG groberKlotz

von Chris B. (dekatz)


Lesenswert?

GroberKlotz schrieb:
> SwissPG schrieb:
> Die Dinger haben 100%ig TMR0 und TMR1,...........
>
> mfG groberKlotz

Vermutlich handelt es sich (wieder einmal bzw. noch immer) um den 
junsteinzeitlichen PIC16F84 - der hat tatsächlich nur 1!

von Chris B. (dekatz)


Lesenswert?

SwissPG schrieb:
> Was spricht gegen eine Delay Rotinen ?

Nichts.
Wenn das Programm nur eine LED blinken lassen soll, dann kann man die 
Zeit auch  mit "delay" verbraten. Und sie blinkt auch schön konstant vor 
sich hin....
Sobald aber 1 oder 2 Tasten ins Spiel kommen- z.B um die 
Blinkgeschwindigkeit zu ändern etc. ist vorbei damit - spätestens da 
wird eine Timerlösung fällig.

von Klaus (Gast)


Lesenswert?

Chris B. schrieb:
> Vermutlich handelt es sich (wieder einmal bzw. noch immer) um den
> junsteinzeitlichen PIC16F84 - der hat tatsächlich nur 1!

Kann man den noch kaufen oder muß man den im Museum klauen?

MfG Klaus

von W.S. (Gast)


Lesenswert?

SwissPG schrieb:
> für den Programmablauf ( Programmiersprache ist C )auf einem PIC16 sind
> bei mir mehrere Unterbrechungen nötig.

Wahrscheinlich siehst du das falsch. Überdenke mal deinen prinzipiellen 
Programmentwurf. Wozu sollen denn diese Unterbrechungen bzw. 
Verzögerungen dienen?

SwissPG schrieb:
> Der Watchdog ist vorgesehen.
> Könnt ihr mir bitte bei den Fragen weiterhelfen ?

na klar. Mein Rat: mach es richtig.

Mal im Ernst: Deine geposteten Anfangs- bzw. Randbedingungen erscheinen 
nicht nur mir sondern auch anderen ein wenig zweifelhaft und da kommt 
logischermaßen alles auf den Prüfstand. Ist der Watchdog überhaupt 
sinnvoll? Ist dein Konzept überhaupt tauglich? Denkst und programmierst 
du eher prozedural (wie das Rumpelstilzchen: heute back ich, morgen 
brau ich, übermorgen ..naja) oder könntest du deine Konzepte auch auf 
ereignisgesteuerte Funktionalität aufbauen?

Alles Fragen, auf die man besser nicht mit nem patzigen "Der Watchdog 
ist vorgesehen" antworten sollte.

W.S.

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.