Forum: Mikrocontroller und Digitale Elektronik Versuche PIC HLT nachzubilden


von Gerd B. (bertr2d2) Benutzerseite


Lesenswert?

Hallo,

ich verwende einen PIC16F1709 der über etliche CIP (Core Independent 
Peripheral) verfügt, nur leider kein HLT. Es geht darum einen GPIO 
abzuschalten, wenn es über eine definierte Zeit (100-200ms) kein 
Ereignis (keine Änderung an einem anderen Pin) gibt.

Das kann man natürlich auch über einen Timer und "Interrupt on Change" 
nachbauen. Aber das führt u.U. zu einer starken Belastung durch 
Interrupts. Daher wäre mir ein Lösung über CLC/TMR/COG etc. pp. lieber.

Hat jemand eine Idee ?

Gruß

Gerd

von Teo D. (teoderix)


Lesenswert?

Gerd B. schrieb:
> wenn es über eine definierte Zeit (100-200ms) kein
> Ereignis (keine Änderung an einem anderen Pin) gibt.

Bei "Ereignis" ein Bit rücksetzen, im Timer alle 100ms prüfen und 
setzen, wenn schon gesetzt abschalten.


PS: Ubs. Jetz hab ich doch fast, einen Watchdog-Timer nach gebaut. ;)

: Bearbeitet durch User
von Gerd B. (bertr2d2) Benutzerseite


Lesenswert?

Teo D. schrieb:
> Gerd B. schrieb:
>> wenn es über eine definierte Zeit (100-200ms) kein
>> Ereignis (keine Änderung an einem anderen Pin) gibt.
>
> Bei "Ereignis" ein Bit rücksetzen, im Timer alle 100ms prüfen und
> setzen, wenn schon gesetzt abschalten.
>
> PS: Ubs. Jetz hab ich doch fast, einen Watchdog-Timer nach gebaut. ;)

Hallo Teo,

die Idee ist nicht schlecht :-) Ein kleiner Wermutstropfen hat die Sache 
aber: Die Zeit nach dem letzten Ereignis ist variabel, da nur alle 100ms 
(oder eben das Zeitraster) abgefragt wird ...
Wenn ich nix anderes finde werde ich das so machen.

Gruß

Gerd

: Bearbeitet durch User
von Volker S. (vloki)


Lesenswert?

Gerd B. schrieb:
> allo Teo,
>
> die Idee ist nicht schlecht :-)

Wirklich?
Wie unterscheidet man, ob es eine gerade Anzahl von Änderungen gab oder 
keine?

Gibt es beim 16F1709 ein Capture ohne Interrupt?
Dann könntest du z.B. alle 100ms nachschauen, ob sich der Wert geändert 
hat.

<edit> Ich glaub, ich habe die Version von teoderix nicht richtig 
gelesen. Könnte auf was ganz ähnliches hinaus laufen...

: Bearbeitet durch User
von Gerd B. (bertr2d2) Benutzerseite


Lesenswert?

Hallo Volker,

vielen Dank für Deine Anregungen.

Volker S. schrieb:
> Wie unterscheidet man, ob es eine gerade Anzahl von Änderungen gab oder
> keine?

Die Anzahl (ob gerade oder ungerade) spielt in diesem Fall keine Rolle.

>
> Gibt es beim 16F1709 ein Capture ohne Interrupt?

Ja, gibt es, nennt sich Interrupt On Change:

"13.1 Enabling the Module
To allow individual pins to generate an interrupt, the IOCIE bit of the 
INTCON register must be set. If the IOCIE bit is disabled, the edge 
detection on the pin will still occur, but an interrupt will not be 
generated."

> Dann könntest du z.B. alle 100ms nachschauen, ob sich der Wert geändert
> hat.
>

Jepp. Ich frage das entsprechende Bit periodisch alle 2ms ab, und wenn 
es 50 mal Null ist, dann hat sich 100ms nix verändert.
Ansonsten setze ich den Zähler und Bit zurück.

So die Idee. Nicht ganz alleine mit CIP gelöst, aber zumindest teilweise 
:-)

Gruß

Gerd

: Bearbeitet durch User
von Teo D. (teoderix)


Lesenswert?

Gerd B. schrieb:
> 2ms ...

Hättest du bei mir auch haben können. ;)
Spart aber einen Befehl und ich mag keine Hardware, die dumm rumliegt.

: Bearbeitet durch User
von Gerd B. (bertr2d2) Benutzerseite


Lesenswert?

Teo D. schrieb:
> Gerd B. schrieb:
>> 2ms ...
>
> Hättest du bei mir auch haben können. ;)
> Spart aber einen Befehl und ich mag keine Hardware, die dumm rumliegt.

Irgendwie habe ich Dich doch nicht verstanden - meinst Du ich sollte den 
Watchdog nutzen ?
In meinem Fall eher unbrauchbar für diesen Zweck. Die Wechsel am PIN 
geschehen unregelmäßig und sind u.U. nur kurz (1us) bzw. kurz 
hintereinander. Eine ISR ausgelöst durch IOC wäre u.U. im Dauereinsatz.

von Teo D. (teoderix)


Lesenswert?

Gerd B. schrieb:
>> Spart aber einen Befehl und ich mag keine Hardware, die dumm rumliegt.
>
> Irgendwie habe ich Dich doch nicht verstanden - meinst Du ich sollte den
> Watchdog nutzen ?

Nene. Das war nur so ne Flunkerei.
Ich hätte satt das da oben, auch schreiben können "1000x besser", aber 
wer macht das schon. ;)

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.