Watch dog

TSE

Neues Mitglied
16. Feb. 2009
51
0
0
Sprachen
Hallo,
ich bräuchte für mein Programm einen "Sicherheits Schalter" der erkennt wenn der µP mehr als 1ms hängt.
der normale Watchdog hat eine minnimale ansprechzeit von 15ms...:stupido3:
gibt es eine möglichkeit den watchdog beine zu machen?
oder könnte man Timer0 missbrauchen und einen resett auslösen?
 
Hi TSE,

oder könnte man Timer0 missbrauchen und einen resett auslösen?
dafür könnte man theoretisch jeden Timer vergewohltätigen :D
Schreib doch einfach in den Interrupt-Vektor des Timers ein
jump 0x0000
rein. ;) => Sprung auf Adresse 0 wie beim Reset.

Du mußt dann nur jede 1ms den Timer neu starten damit er keinen
Overflow bekommt. Mit den anderen Compare-Vektoren könnte man
das auch zu beliebigen Zeitpunkten machen. In Assembler geht das
jedenfalls. Wie es in anderen Sprachen aussieht ??? :confused:

Gruß
Dino
 
da ich in C programiere dürfte ich das mit
asm("jump 0x0000"); implementieren können
in welchen modus soll ich dann den timer laufen lassen ?
 
Hi Dino, hi TSE,

Schreib doch einfach in den Interrupt-Vektor des Timers ein
jump 0x0000
rein. ;) => Sprung auf Adresse 0 wie beim Reset.

ein Sprung an die Adresse 0x0000 wirkt bezüglich des Programmablaufs wie ein Reset, ist aber eigentlich keiner. Die IO-Register werden hier nicht initialisiert, wurde zB. zuvor ein Timer oder ein USART konfiguriert und aktiviert, sind diese Module nach dem "Reset" immer noch aktiv!

Am besten macht man einen Reset, indem man den Watchdog aktiviert und dann in eine Endlosschleife geht. Da hat man aber wieder das Problem mit der Überlaufzeit des Watchdogtimers :rolleyes: (Ich weiß jetzt auch nicht auswendig wie klein man diese Zeit einstellen kann, da müßte ich im Datenblatt nachsehen).

Grüße,
Dirk
 
Hallo TSE,

könnte man nicht einen freien Pin an den resett Pin hängen?
oder läst sich der µP dan gar nicht mehr einschalten
Ist auch ne Idee :)

Du schaltest nen 100nF oder 470nF oder so (müßte man ausprobieren)
von einem Port-Pin auf den Reset-Eingang. Wenn Du den Port-Pin dann
von High nach Low wechselst dann zieht er für ganz kurze Zeit den
Reset-Pin über den Kondensator mit nach GND und der Prozessor wird
resettet. Wegen dem Kondensator gibts aber keinen Dauer-Reset.
Das wär nen Versuch wert. Diesen Reset-Puls könnte man dann in der
Interrupt-Service-Routine des Timer-Overflow auslösen :D

Problem gelöst :rolleyes: :cool: :confused:

Gruß
Dino
 
läst sich ein so beschalteter µP überhaupt starten?
der Kondensator zieht mir doch im einschaltmoment den reset Pin auf GND....
 
Hi TSE,

läst sich ein so beschalteter µP überhaupt starten?
der Kondensator zieht mir doch im einschaltmoment den reset Pin auf GND....
Warum nicht ? Der Kondensator macht das doch nicht dauernd (wenn er es
im Einschaltmoment überhaupt macht). Und wenn du den Port-Pin nach
High ziehst dann passiert ja am Reset-Pin nix außer noch mehr positives
Potential.

Also ungefähr so ...

Reset -----||------PB1

zum Beispiel.
Mit der normalen Beschaltung am Reset: 10k nach +5V und 47nF nach GND.
Ich würde dann von Reset nach PB1 nen 220nF nehmen um den 47nF am
Reset zu übersteuern. Aber man kann es ja einfach auch mal mit nem kleinen
47nF oder mit nem 100nF testen. Versuch macht Kluch :D :D

Evtl doch erst mal mit nem 47nF testen weil ich nicht weiß wie ein 220nF den
Programmiervorgang über ISP beeinflußt.

Gruß
Dino
 
Also ungefähr so ...

Reset -----||------PB1


Hallo zusammen!

Also ob der statet bin ich mir auch nicht sicher.... oder ob er sich dann evtl. wie ein alter stoternder Motor starten würde.
Du gibst zwar auf den Reset-Pin ein High-Signal.... aber der Pin müsste doch nach dem Reset Low sein.
Er hätte zwar eine ungleiche Polarität und würde sich aufladen, aber...... :hmmmm:
Bin mir da auch nicht sicher! Ist aber schnell ausprobiert.

Gedanken würde ich mir da eher um den Reset-Impuls machen.
Reicht die Zeit denn aus, den µC ordnungsgemäß zu resetten?
Könnte mir vorstellen, dass die Resetzeit noch etwas verzögert werden müsste.

Da hilft wohl einfach nur mal ausprobieren......
Der Schaltungs- und Programmieraufwand ist ja ziemlich gering. ;)

Gruß,
Cassio
 
geressettettetete Reset-Pins am ATmega

Hi Cassio,

Also ob der statet bin ich mir auch nicht sicher.... oder ob er sich dann evtl. wie ein alter stoternder Motor starten würde.
Du gibst zwar auf den Reset-Pin ein High-Signal.... aber der Pin müsste doch nach dem Reset Low sein.
Er hätte zwar eine ungleiche Polarität und würde sich aufladen, aber...... :hmmmm:
Bin mir da auch nicht sicher! Ist aber schnell ausprobiert.
Machen wir mal ein paar Gedankenspiele ... :dirol:

1.) Also nach dem Datenblatt sollte der Reset mindestens 1,5us Low gehalten
werden. Low bedeutet unterhalb von 0,85V (max).

2.) Der Kondensator am Reset nach Masse verzögert beim Einschalten des
ganzen Gelumpes den Anstieg der Spannung am Rest-Pin, da er sich erst
mal über den 10k nach +5V (und dem internen Pullup im Prozessor) aufladen
muß. Das sind mit 10k und 47nF ca 470us (wenn ich mich nicht verrechnet
habe). Eher weniger wegen dem internen Pullup.

3.) Die Pins sind am anfang alle auf Eingang geschaltet. Ohne Pullups.

4.) Der Kondensator zwischen Reset und PB1 würde sich beim Einschalten
normalerweise mit aufladen. Um das absolut sicherzustellen könnte man
noch einen 1k bis 4,7k von PB1 nach GND legen. Dann funktioniert das
bestimmt.

5.) Wenn die Ports initialisiert werden. Ist der Kondensator schon geladen.
Damit würde ein Low am PB1 keine Auswirkungen haben. Wenn man ihn
dagegen dann auf High zieht, hat man lediglich für kurze Zeit eine
Ladungspunpe gebaut, die dem Reset aber nichts anhaben dürfte.

6.) Beim Wechsel von Low nach High entlädt sich der Kondensator zwischen
PB1 und Reset. Jetzt könnte er also wieder Ladung aufnehmen.

7.) Beim ersten Wechsel von High nach Low lädt sich der Kondensator
wieder auf und zieht damit den Reset-Pin kurzzeitig nach Low.

8.) Um den Pegel weit genug nach unten zu ziehen, muß der Kondensator
zwischen PB1 und Reset auch die Ladung von dem Kondensator vom
Reset nach GND aufnehmen (der ja noch geladen ist). Darum sollte
der Kondensator PB1-Reset also eigentlich größer sein als der Kondensator
Reset-GND.

Ergebnis und Empfehlung:
Widerstand Reset --==-- +5V : 10k
Kondensator Reset --||-- GND : 22nF
Kondensator Reset --||-- PB1 : 100nF (... 220nF)
Widerstand PB1 --==-- GND : 2,2k

So könnte man es mal probieren.

Die beiden Kondensatoren addieren sich bei PowerUp (Einschalten) beinahe
und damit hat man in etwas 122nF am Reset-Pin. Nach meiner Meinung :D

Jetzt bin ich mal gespannt. Meine Gedankengänge kennt ihr jetzt. Wer
probiert es nun aus ? :rolleyes:

Gruß
Dino
 
Das sind mit 10k und 47nF ca 470us (wenn ich mich nicht verrechnet
habe). Eher weniger wegen dem internen Pullup.

3.) Die Pins sind am anfang alle auf Eingang geschaltet. Ohne Pullups.

4.) Der Kondensator zwischen Reset und PB1 würde sich beim Einschalten
normalerweise mit aufladen. Um das absolut sicherzustellen könnte man
noch einen 1k bis 4,7k von PB1 nach GND legen. Dann funktioniert das
bestimmt.

5.) Wenn die Ports initialisiert werden. Ist der Kondensator schon geladen.

Hi Dino!

Ich kann deinem Gedankenspiel schon folgen. ;)

Ich übelege nun gerade....
Wenn der Kondensator 470µs benötigt um sich aufzuladen...... und danach erst die Pins initialisiert werden, ist das aber auf den gesamten Watchdog von 1ms gesehen schon eine beachtliche Zeit!

Wenn er also nach 1ms den Controller resetten will/muss und der "Neustart" allein schon wieder fast 0,5ms dauert, dann bleibt aber nicht mehr viel Spiel, oder?

Weiß ja nicht, ob er diese Zeitspanne mit eingerechnet hat!

Wenn sonst ein Resetimpuls von 1,5µs ausreichend ist und danach alle Pins initialisiert werden (wie lange dauert das eigentlich?), ist sein Zeitfenster aber um einiges größer!

Oder habe ich nun einen Knoten im Hirn? :hmmmm:

Finde es sowieso Wahnsinn, einen WD mit 1ms arbeiten zu lassen! :eek:


Ach so, Dino....
Wo wir gerade dabei sind...
Wenn ab 0,85V abwärts eine Spannung als Low identifiziert wird,
ist dann jede andere Spannung darüber für den µC automatisch "High"? :hmmmm:
Wenn er sonst z.B. ab 3,0V und mehr erst ein Signal als High definieren würde, dann gebe es ja einen "toten" Bereich. Ich dachte immer, den gibt es nicht!
Der Pin eines µC ist ja auch immer definiert! Entweder hat er Vcc oder GND.... Dazwischen (quasi ein "Nichts") gibt es doch auch nicht!
Wie ist das nun bei der Flankenerkennung?

Gruß,
Cassio
 
ich will die funktion eig nur als letzten reserve schutz für meine LED's die ich per 8 fach multiplexe
da ich das ganze noch mit 155Hz betreibe (ich weiß ist zu viel aber die hälfte ist schon fast wieder zu wenig) kommt man auf eine Zeit /Zeile von unter 1ms
von dem her wärs eig egal wenn der resett mal länger dauert
hauptsache der wird ausgelöst!
 
logische Pegelbereiche sind definiert

Hallo,
'tschuldigung, wenn ich mich hier auch einmische.....
Hi Dino!

Entweder hat er Vcc oder GND.... Dazwischen (quasi ein "Nichts") gibt es doch auch nicht!
Wie ist das nun bei der Flankenerkennung?

Gruß,
Cassio

Die digitalen C-MOS-IC CD4001; CD 4009 etc. können auch im "verbotenen" Bereich betrieben werden, dann sind sie wie analoge Verstärkerstufen anwendbar. Bei C-MOS ändert sich mit der Versorgungsspannung ganz stark dieser Bereich. Das Verhalten bei +5V und +15 V Speisespannung ist dann völlig unterschiedlich. Einige Schaltungen laufen dann garnicht mehr bei der angegebenen Taktfrequenz.
Beispiel: Elektronenorgel von damals
Drumbox: Produziert gedämpfte Schwingungen bei einmaliger Triggerung.

Also, diesen "Totbereich" gibt es tatsächlich.


Gruß von Oskar01
 
weitere Gedankenspiele,

Hallo zusammen,

Wenn der Kondensator 470µs benötigt um sich aufzuladen...... und danach erst die Pins initialisiert werden, ist das aber auf den gesamten Watchdog von 1ms gesehen schon eine beachtliche Zeit!
Die 470us sind einmalig am Anfang beim Einschalten und natürlich auch beim
"TimerWatchdog-Reset". Wobei er sich da ja direkt nach dem Runterziehen
des Ausgangspins PB1 und Auslösen des Resets schon wieder aufladen kann.

Das ist aber wohl eine minimale Zeit gegenüber der Reset-Verzögerung der
Reset-Logik im Prozessor (Datenblatt ATmega128 Seite51 Fig22). Da ist
unten noch ein delayCounter zu sehen, der das Reset-Ereignis zusätzlich
verlängert. Wenn ich das Datenblatt richhtig interpretiere (Seite40 Tabelle10,
12, ...) liegen die Verzögerungen im Millisekunden-Bereich bis der Prozessor
überhaupt wieder anläuft.

Wo wir gerade dabei sind...
Wenn ab 0,85V abwärts eine Spannung als Low identifiziert wird,
ist dann jede andere Spannung darüber für den µC automatisch "High"? :hmmmm:
Definitiv Nein! Du hast einen unteren Bereich, in dem der Spannungspegel
sicher als Low interpretiert wird und einen oberen Spannungsbereichh, der
sicher als High interpretiert wird. Diese Spannungsbereiche sind natürlich
auch von der Betriebsspannung des Prozessors abhängig (3,3V oder 5V, ...)
Der Bereich dazwischen ist undefiniert und verboten. Man kann nicht wirklich
immer sagen, als was der Pegel erkannt wird.


Wenn er sonst z.B. ab 3,0V und mehr erst ein Signal als High definieren würde, dann gebe es ja einen "toten" Bereich. Ich dachte immer, den gibt es nicht!
Der Pin eines µC ist ja auch immer definiert! Entweder hat er Vcc oder GND.... Dazwischen (quasi ein "Nichts") gibt es doch auch nicht!
Wie ist das nun bei der Flankenerkennung?
Tja das war wohl eine Fehlmeinung :D Auch bei Digitaltechnik muß man immer
etwas analog denken :rolleyes: Leider gibt es diesen toten Bereich. Darum ist
die Flankensteilheit bei Digitalsignalen auch wichtig. Je flacher die Signalflanke
ist, desto länger ist der Eingangspin im undefinierten Bereich und man weiß
nicht so richtig was da passiert.
Die Ausgangspins eines Prozessors sind auch nicht auf +5V oder GND sondern
du hast immer noch den Spannungsabfall an den Ausgangstreibern wenn du
einen Strom rausziehst. Bei einem Durchgeschalteten bipolaren npn-Tarnsistor
(z.B. BC547) fällt da immer nocch 0,25V ab. Du hast also 0,25V für Low und
4,75V für High :D Bei MOSFET-Ausgangsstufen sieht es wieder anders aus.
Es ist also alles nicht ganz so einfach....

-----Der nächste-----

ich will die funktion eig nur als letzten reserve schutz für meine LED's die ich per 8 fach multiplexe
da ich das ganze noch mit 155Hz betreibe (ich weiß ist zu viel aber die hälfte ist schon fast wieder zu wenig) kommt man auf eine Zeit /Zeile von unter 1ms
von dem her wärs eig egal wenn der resett mal länger dauert
hauptsache der wird ausgelöst!
Also ein Schutz der Dioden die Du wohl über den Kenndaten im Grenzdaten-
Bereich fährst. Da sind dann höhere Impulsströme angegeben die aber nur
wenige Millisekunden fließen dürfen bevor die LED gegrillt wird. Ich empfehle
da erst mal das Datenblatt der LED bzw Anzeigen GENAU zu lesen und die
Daten mal hier reinzustellen oder selber nachzurechnen. Da sind bestimmt
Diagramme mit Strömen und Zeitangaben drin. Sieh mal bei meiner FAQ
hier nach. Da hab ich das ein wenig erklärt. Evtl hilft das
ja schon mal weiter. Du solltest auch mal darüber nachdenken, das du bei
falscher Programmierung deine Anzeigen auch mit noch nicht funktionierendem
Watchdog grillen kannst. Grenzdaten sind nie gut. Als zum Testen würd ich
auf jeden Fall erst mal in den Kenndatenbereich zurückgehen. Auch wenn es
dann etwas dunkler ist. Hoschschrauben kann man immer noch.

----Der nächste----

'tschuldigung, wenn ich mich hier auch einmische.....

Die digitalen C-MOS-IC CD4001; CD 4009 etc. können auch im "verbotenen" Bereich betrieben werden, dann sind sie wie analoge Verstärkerstufen anwendbar. Bei C-MOS ändert sich mit der Versorgungsspannung ganz stark dieser Bereich. Das Verhalten bei +5V und +15 V Speisespannung ist dann völlig unterschiedlich. Einige Schaltungen laufen dann garnicht mehr bei der angegebenen Taktfrequenz.

Also, diesen "Totbereich" gibt es tatsächlich.
Genau das, was ich oben schon geschrieben habe. Auch bei Digitaltechnik
ist nicht alles nur schwarz oder weiß sondern mit vielen Grauwerten
dazwischen :D Da hast Du absolut recht. Und wenn ich mir da alte elektor-
Hefte ansehe und was die da drin mit den ICs alles angestellt haben ...
ich würde dazu vergewohltätigt sagen. Da mußte dann aus der 74er-Reihe
ein bestimmter Typ von einem bestimmten Hersteller verwendet werden
damit es klappt ... :eek: :eek: usw. ;) Da ging dann nur 74HC14 aber kein
74LS14 oder sowas und der mußte dann von SGS sein oder sowas ...

Naja, ich glaube das reicht mal.

Als Tip: Die Hersteller haben die Datenblätter nicht nur zum Scherz gemacht.
Da stehen manchmal recht interessante Dinge drin. Und wenn man dann ein
wenig interpretiert und kombiniert kommen da manchmal recht dolle Sachen
bei raus :p

Gruß
Dino
 
Dino03 schrieb:
Bei einem Durchgeschalteten bipolaren npn-Tarnsistor
(z.B. BC547) fällt da immer nocch 0,25V ab. Du hast also 0,25V für Low und
4,75V für High Bei MOSFET-Ausgangsstufen sieht es wieder anders aus.
Es ist also alles nicht ganz so einfach....

Ja, ja, Herr Doktor! ;)

Nun seien Sie mal nicht so spitzfindig! So waren meine +5V und GND ja auch nicht gemeint! ;)


Hi Dino!

Letztlich ist aber doch ein digitaler Controllerpin immer High (durch den Pullup), sofern ich ihn nicht in Richtung GND ziehe.
OK, man könnte auch diesen mit einem Poti, einem Widerstand oder einer externen Spannung auf einen "Mittelwert" bringen....... aber den Grenzfall betrachten wir nun mal aus der Praxis.

Der Controller wird 5V versorgt.
Wir haben einen Eingangspin mit Pullup aktiviert.
An den Pin gelangt nun eine "externe" Spannung von 3V.
Low ist das ja nun nicht!
Richtig High ist es auch nicht!
Vielleicht liegt die Spannung im verbotenen Berreich?

Nun kann ich das Datenblatt hoch und runter scrollen... ich habe aber keine Grafik entdeckt, in der dies erklärt wird.
Es muss doch irgendwo z.B. eine porzentuale Angabe vorhanden sein, die in Abhängigkeit zur Versorgungsspannung eine "Schaltschwelle" oder "Erkennungsschwelle" definiert......
Oder müssen die es gar nicht angeben, weil es ja im verbotenen Bereich liegt? :hmmmm:

Wir kommen vom Thema ab.... :)

Gruß,
Cassio
 
DC Chaaracteristics

Hi Cassio,

Ja, ja, Herr Doktor! ;)
Darf ich mir jetzt nen Urkunde mit Siegel an die Wand bappen ? :adore:

Nun kann ich das Datenblatt hoch und runter scrollen... ich habe aber keine Grafik entdeckt, in der dies erklärt wird.
Es muss doch irgendwo z.B. eine porzentuale Angabe vorhanden sein, die in Abhängigkeit zur Versorgungsspannung eine "Schaltschwelle" oder "Erkennungsschwelle" definiert......
Ich hab im Moment nur das ATmega128 ausgedruckt und gebunden neben mir.
Also da steht auf Seite 318 : DC Characteristics ...

Output Low Voltage : 0,7V@5V , 0,5V@3V
Output High Voltage : 4,2V@5V , 2,2V@3V
das sind die Verluste der Ausgangstreiber.

Input Low Voltage : zwischen 0,1..0.2*Vcc (für die einzelnen Pins)
Input High Voltage : zwischen 0,6..0,85*Vcc (für die einzelnen Pins)
dazwischen liegt der verbotene Bereich.

Reset Pull-up Resistor : 30..60k (der interne Reset-Widerstand)
I/O Pull-up Resistor : 20..50k (interner PIN-Widerstand wenn man ihn anschaltet)

usw ...

Man hat meißtens Tabellen mit DC-Characteristics, Timings, Kenndaten,
Grenzdaten und dann Timig-Diagramme für die verschiedenen Signale.

Was auch hilfreich ist ...
- Die Tabellen mit den Register-Summaries
- Die Tabellen mit den Instruction-Summaries
- Die Blockschaltbilder der einzelnen funktionsblöcke (Reset Logic,
Timer/Counter Block Diagram, USART Block Diagram, ...)

Das Mega128 Datenblatt liegt eigentlich beim Basteln immer neben mir, weil
dort viele Funktionsblöcke der anderen kleineren Prozessoren drin stehen.
Und es erleichtert das Verständnis der internen Abläufe ungemein. :D

So das sollte jetzt aber reichen mit dem ganzen Datenblattgewusel.

Gruß
Dino
 
Input Low Voltage : zwischen 0,1..0.2*Vcc (für die einzelnen Pins)
Input High Voltage : zwischen 0,6..0,85*Vcc (für die einzelnen Pins)
dazwischen liegt der verbotene Bereich.

Danke dir! :flowers:

Das ist doch schon mal eine Angabe, die man auch im Kopf behalten kann! :)


Gruß,
Cassio
 

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)