mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Eingangsspannung wenn keine Versorgung anwesend


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Autor: Evert D. (evert)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Leute,

um bei einen PIC mit einen Drucktaster eine andere Routine zu
wählen, während der sich in eine "Warteschleife" befindet, habe
ich eine eigentlich blöde Idee erfunden.

(Mit Interrupt geht es nicht, weil der dann nachher in denselben
Warteschleife zurückspringt)

An einen Eingang lege ich einen Widerstand von 47 kΩ mit parallel
daran einen Kondensator von 22 µF. t etwa 1 Sekunde.

Mit ein Wechseltaster unterbreche ich die Versorgungsspannung,
und lege die 5V am Eingang mit RC.

Wird der Taster wieder losgelassen, fängt der Kontroller von Vorne
an, und kontrolliert einige Eingänge, ähnlich wie diese beschriebene.

Daraus können dann verschiedene Routinen gewählt werden.


Frage ist nun: Darf ein Eingang 5 Volt haben, wenn der Kontroller
keine Versorgungsspannung hat.
Mit ein Transistor kann es verhindert werden, aber die Platine wird
dann wieder viel komplizierter.



Schonmal vielen Dank für die Infos


LG, Evert

Autor: Rufus Τ. F. (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
1 lesenswert
nicht lesenswert
Evert D. schrieb:
> Frage ist nun: Darf ein Eingang 5 Volt haben, wenn der Kontroller
> keine Versorgungsspannung hat.

Nein; sieh ins Datenblatt, da ist die maximale Eingangsspannung in 
Relation zur Versorgungsspannung angegeben.

Die Eingangsspannung darf üblicherweise maximal ein paar hundert mV über 
der Versorgungsspannung liegen.


Dein Problem aber ließe sich wesentlich einfacher lösen, wenn Du statt 
der  Warteschleife ein etwas anderes Softwarekonzept anwenden würdest.

Du könntest z.B. den Taster in der Warteschleife abfragen ...

Autor: Arduino Fanboy D. (ufuf)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Evert D. schrieb:
> habe
> ich eine eigentlich blöde Idee erfunden.

Ich stimme dir zu!

PIC sind mir fremd.
Aber blockierende Schleifen zu verwenden ist eine Dummheit, wenn man 
keine blockierende Schleife braucht, bzw. sie einem Vorhaben im Wege 
steht.

: Bearbeitet durch User
Autor: Test (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Evert D. schrieb:
> habe
> ich eine eigentlich blöde Idee erfunden.

Das ist eine ziemlich blöde Idee. Sorry.

> (Mit Interrupt geht es nicht, weil der dann nachher in denselben
> Warteschleife zurückspringt)

Ich denke du solltest dich mit Programmierung beschäftigen. Was du 
erreichen möchtest ist in Software zu machen. Ganz einfach.

Interrupt und Taster ist übrigens eher keine gute Idee.

Evert D. schrieb:
> Frage ist nun: Darf ein Eingang 5 Volt haben, wenn der Kontroller
> keine Versorgungsspannung hat.

Nein. Im Datenblatt in der I/O-Sektion steht sowas wie Vdd+0,25V. Wenn 
die Versorgungsspannung Vdd 0 ist, dann darfst du maximal 0,25V anlegen. 
Der Hintergrund sind integrierte Schutzdioden auf dem IC von I/O nach 
Vdd. Alternativ könntest du z.B. einen 100k Widerstand in Serie 
schalten, das begrenzt den Strom.

Aber wie gesagt - dein Problem ist ein (eigentlich triviales) 
Programmierproblem. Jetzt eine komplizierte Hardwarelösung hinzubauen 
bringt nichts. Wenn du mehr von deinem Schaltplan zeigst und konkret 
beschriebst was das Programm machen soll, können wir dir helfen.

Autor: Evert D. (evert)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke Rufus, für Dein Antwort.

(und auch alle anderen in der Zwischenzeit)

Nur, an das abfragen habe ich natürlich schon gedacht,
nur daß es um 16 Stunden handelt, und sollte schon innerhalb
5% liegen bleiben.
Insgesammt geht es um drei Tasten.

Es sollte dann aus drei verschiedene Routinen gewählt werden.

Und so ein gute Programmierer bin ich auch nicht.
Wenn es um interrupts geht, oder die Timern, bin ich schnell
überfragt.

Ich benutze Great Cow Basic.
Darin gibt es ein Befehl "WAIT  xx" gefolgt von us, ms, s, m, oder h.
So schön habe ich noch nie eine Timing Prozedur gesehen.

Aaaaber..... in der Praxis kommt da wohl wieder etwas dazwischen.


LG,

Evert

: Bearbeitet durch User
Autor: Sollfix (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Darfst Du.
Im Datenblatt wird ein maximaler Strom stehen, den die Schutzdioden am 
Eingang abkönnen. Und wenn Du den nicht überschreitest, darfst Du das.

Aber Du wirst ein anderes Problem bekommen:

Wenn Du am Eingang 5V anlegst und kein VCC, dann wird über die 
Eingangsdiode ein kleiner Strom fließen, und der wird dir Deinen PIC 
versorgen. PIC läuft dann mit ca. 4.3V. Es gibt dann vermutlich kein 
Reset.

Autor: Rufus Τ. F. (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Evert D. schrieb:
> Nur, an das abfragen habe ich natürlich schon gedacht,
> nur daß es um 16 Stunden handelt, und sollte schon innerhalb
> 5% liegen bleiben.

Und? Wo liegt das Problem?

Die Zeit Deiner "Warteschleife" solltest Du nicht mit stupidem 
Däumchendrehen und Zyklenzählen verbraten, sondern die 
Hardwareressourcen Deines µC dafür verwenden. Auch Dein PIC wird einen 
Hardwaretimer haben, den kannst Du so konfigurieren, daß er in einem 
festen und klar definierten Zeitraster einen Interrupt auslöst. Im 
Interrupthandler kannst Du beispielsweise eine Variable herunterzählen, 
mit der Du feststellen kannst, wann die Zeit abgelaufen ist.

Dabei dann noch den Taster abzufragen (und gegebenenfalls zu entprellen) 
ist nichts, was großartig Zeit verbraucht, und vor allem, es ist nichts, 
was das definierte Zeitraster des Timerinterrupts irgendwie beeinflussen 
würde.

Autor: Teo D. (teoderix)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mich würde mal interessieren, was hinter dieser "Blöden Idee" steckt. 
Was soll das für ein Problem lösen?
Mir erschließt sich einfach nicht, warum dem Pic, die Versorgung 
kurzfristig gekappt werden soll/muss.

Autor: Evert D. (evert)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
An Alle:

Nochmal vielen Dank.

Ich werde nochmal schauen ob es softwaremässig zu lösen ist.

Diese 16 Stunden sollten unterbrochen werden können, und
dabei dann eine Routine gewählt werden können, die der Ausgang
nur 30 Sekunden pro Stunde (oder so ähnlich) einschaltet.

Aber auch umgekehrt sollte auf die 16 Stunden geschaltet werden
können.

Autor: Evert D. (evert)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Teo D. schrieb:
> Mich würde mal interessieren, was hinter dieser "Blöden Idee" steckt.
> Was soll das für ein Problem lösen?
> Mir erschließt sich einfach nicht, warum dem Pic, die Versorgung
> kurzfristig gekappt werden soll/muss.


Damit der Kontroller von vorne anfängt,
und
die Eingänge abfragt, damit die richtige Routine gewählt wird.

Autor: Teo D. (teoderix)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Evert D. schrieb:
> Damit der Kontroller von vorne anfängt,

Meine Frage war. WARUM MUSS der µC von vorne beginnen, nur um was 
anders zu machen?

Autor: MaWin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Evert D. schrieb:
> Darf ein Eingang 5 Volt haben, wenn der Kontroller
> keine Versorgungsspannung hat

Unterschiedlich.

Normale Eingänge haben eine Diode vom Eingang in Richtung 
Versorgungsspannung.
Da läuft also der uC weiter mit 4.3V und entlädt deinen Kondensator 
schneller.

RESET/MCLR/PROG hat diese Diode nicht, sonst könnte man ihn nicht auf 
13V legen. Bei manchen PICs kann man den als I/O nutzen.

Aber: Deine 'Lösung' ist sicher grober Murks, das geht sicher in 
richtiger Software auch ohne solchen Murks.

Autor: John (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Teo D. schrieb:
> Meine Frage war. WARUM MUSS der µC von vorne beginnen, nur um was
> anders zu machen?

Das hat er doch geschrieben:
Der Basic Befehl "wait 16h" (warte 16 Stunden) lässt sich nicht 
vorzeitig per Software beenden.

Autor: Arduino Fanboy D. (ufuf)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
John schrieb:
> "wait 16h"
Gibts auch ein "wait 1ms"?

Weil:
16h bestehen aus vielen ms

: Bearbeitet durch User
Autor: John (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Arduino F. schrieb:
> Gibts auch ein "wait 1ms"?

Anscheinend:

Evert D. schrieb:
> Ich benutze Great Cow Basic.
> Darin gibt es ein Befehl "WAIT  xx" gefolgt von us, ms, s, m, oder h.

Autor: Teo D. (teoderix)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
John schrieb:
> Das hat er doch geschrieben:
> Der Basic Befehl "wait 16h"

OK, Sorry. Der Beitrag ist mir völlig entgangen.

Autor: Wolfgang (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Test schrieb:
> Alternativ könntest du z.B. einen 100k Widerstand in Serie
> schalten, das begrenzt den Strom.

Dafür braucht man nicht solche Geschütze aufzufahren. Selbst mit 4,7kΩ 
als Strombegrenzungswiderstand (zwischen Kondensator und DIO) wird man 
die Schutzdioden nicht überfordern.

Autor: Arduino Fanboy D. (ufuf)
Datum:

Bewertung
1 lesenswert
nicht lesenswert
Wolfgang schrieb:
> Selbst mit 4,7kΩ
> als Strombegrenzungswiderstand (zwischen Kondensator und DIO) wird man
> die Schutzdioden nicht überfordern.
Mit ein bisschen Pech reicht es dann sogar dafür, dass er weiter läuft.

Autor: Besucher (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Evert D. schrieb:
> (Mit Interrupt geht es nicht, weil der dann nachher in denselben
> Warteschleife zurückspringt)

Naja, an sich wäre das schon die Lösung. Mann muss halt in der ISR die 
Register sichern und den Stack entsprechend manipulieren damit er 
anschließend in die gewünschte Routine "zurückspringt". Ich kenne PICs 
und Cow Basic leider nicht, aber vielleicht gibt's dafür ja irgendein 
kleines OS/Scheduler welches du dafür verwenden kannst?

PS: Eine andere Softwarearchitektur wäre aber wahrscheinlich dennoch die 
bessere Lösung.

Autor: Teo D. (teoderix)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Benutze den Reset-Eingang und nimm ihm nicht die Versorgungsspannung.

Autor: Evert D. (evert)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Halllo Leute,


vielen nDank für die neue Ideeën.

Indertat, ein "RESET" wäre das schönste in diese blöde / komische Idee
von mir, um es trotzdem vernünftig aussehen zu lassen.
Aber, auch macht es Spaß, daß ein 10F20x nur etwa € 0,50 kostet  :-)

Ich habe nochmal die Umschreibung der Timern durchgelesen, aber
komme damit leider nicht weiter.
Es sei denn, jemand hat interesse in einen kleinen Urlaub, um es
mich bei zu bringen, damit mein Hirn, falls noch was übrig geblieben 
ist,
es noch verstehen kann.

Ooooder, ich suche mir einen PIC mit "RESET" eingang.
Außer RESET bräuchte ich noch 6 I/O.
TIPs willkommen.
Ja, stimmt, der 10F20x hat nur 4.
Kleiner Fehler, denn mit dem habe ich keine ausreichende I/O um LEDs
an zu steuern als Indikatoren um an zu geben in welcher Routine der 
Läuft.

LG,

Evert

Autor: Vka (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Evert D. schrieb:
> Ich habe nochmal die Umschreibung der Timern durchgelesen, aber
> komme damit leider nicht weiter.

Du brauchst einen "Systemtakt", wie er z.b. in der Arduino Welt "millis" 
heißt. Quasi eine Uhr die ständig weiter läuft, unabhängig von deinem 
Hauptprogramm.
Das geht mit einem Timer, der eine Variable hoch zählt.
Momentan sieht dein Hauptprogramm ja ca. so aus: If Modus=1 then wait 
16h, else wait 1h;
Aktion;

Mit dem Zeitgeber sähe das so aus:
var zeitpunkt;
Loop:
  If zeitpunkt = now then Aktion;
  If (tastendruck or keinZeitpunkt) and taste = on then
    zeitpunkt = now + 16h;
  If (tastendruck or keinZeitpunkt) and taste = off then
    zeitpunkt = now + 1h;
endloop;

Der Trick ist, nicht einfach zu warten ob 16 Stunden vorbei sind. 
Sondern währenddessen immer wieder zu schauen ob sich der Modus ändert. 
Dafür brauchst du eine Uhr/Timer, der im Hintergrund weiter läuft 
während zu prüfst was an den Eingängen passiert.

Autor: Teo D. (teoderix)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Evert D. schrieb:
> Ich habe nochmal die Umschreibung der Timern durchgelesen, aber
> komme damit leider nicht weiter.

Nun vielleicht noch ein bisschen über Interrupts, dann fällt der 
Groschen eventuell.

Auch wanns da nicht um Bascom geht, solltest du dir das mal anschauen.
http://www.sprut.de/electronic/pic/index.htm

Autor: Evert D. (evert)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Läude,


das Problem ist vorläufig gelöst.
Habe einen Kontroller gesucht mit 'Reset-Eingang'.

Gefunden: 16F54.

Und jetzt Lachen: HAHA.... davon habe ich schon etwa 10 herumliegen !
Korrektur: Es sind sogar 18 !

Nur.... Diese hat 18 Pins, und der 10F204 nur 8.
Das war der zweite Spaß, die Platine konnte so schön klein sein.
Jetzt muß die Platine vergrössert werden.
ok, es sind nur einige mm, aber zu hoffen ist jetzt, das auch diese
in die bereits vorhandene Gehäuschen passen.

Jedenfalls vielen Dank für's mitdenken.


LG,

Evert

: Bearbeitet durch User
Autor: Arduino Fanboy D. (ufuf)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Evert D. schrieb:
> Jedenfalls vielen Dank für's mitdenken.

Kein Problem...


Du baust also lieber die Platine um, als die Software auf Vordermann zu 
bringen.
Ist ok... ist deine Baustelle.
Muss ich ja nicht verstehen. ..

Autor: Evert D. (evert)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nein, besser nachdenken.....

Ich habe eine neue Kontroller genommen, einen mit RESET-Eingang.
Der hat 18 Pins, und die Platine war für eine 10F204, der hat
nur 8 Pins.

Das paßt nicht, deshalb eine neue Platine.


Tschau !

Evert

Autor: Teo D. (teoderix)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Arduino F. schrieb:
> Ist ok... ist deine Baustelle.
> Muss ich ja nicht verstehen. ..

Evert D. schrieb:
> Nein, besser nachdenken.....

Oje. Das ist wie den Vorwärts-Gang im Auto nicht zu finden und den 
Hinweis bekommen, 'Das Handbuch licht im Handschuhfach'. Sich aber dazu 
zu entscheiden, lieber einen größeren Rückspiegel einzubauen, auch wenn 
dafür die Windschutzscheibe geopfert werden muss.

Herauszufinden was es mit Timmern und Interrupts auf sich hat, ginge 
schneller als ne neue Platine hinzu pfuschen!

Autor: Rufus Τ. F. (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Um Dein Problem zu lösen, wäre weder ein Reset-Eingang noch ein anderer 
Controller, geschweige denn eine neue Platine nötig gewesen.

Aber wenn Du Dich dem so hartnäckig widersetzt, bitte, nur zu.

Beitrag #5421971 wurde vom Autor gelöscht.
Autor: Peter D. (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Evert D. schrieb:
> (Mit Interrupt geht es nicht, weil der dann nachher in denselben
> Warteschleife zurückspringt)

Geht zwar auch, macht man aber nicht.

Besser legt man eine Mainloop an, die z.B. 10ms wartet und dann eine 
Statemaschine aufruft. Die macht dann genau eine Aktion und kehrt wieder 
zurück. Mit einer 32Bit Zählvariable kannst Du dann in der Statemaschine 
bis >1 Jahr Aktionen ausführen.
Die Mainloop kann somit alle 10ms die Taste abfragen, entprellen, Flanke 
erkennen und eine andere Statemaschine neu starten.
Die 10ms warten macht man mit Timer oder mit Delay.

Autor: Arduino Fanboy D. (ufuf)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Peter D. schrieb:
> Die 10ms warten macht man mit Timer ..
Genau!

Da dieses Basic (sehe ich zum ersten mal) einen wenigstens halbherzigen 
Durchgriff zu den Timern erlaubt, und sich ISR etablieren lassen, sehe 
ich kein ernstes Problem, sowas wie einen Millis Counter zu bauen.

Nebenbei:
Bei 16h Wartezeit, bleibt genug Zeit, zum pollen dieses Counters und 
auch Tastenabfragen durch zu führen.

Das Problem dürfte nur in der Abstraktion liegen.
Dass man 3 endliche Automaten braucht.
Ein Automat um den Programmfluss zu verteilen,
Und eben für jede der beiden Hauptaufgaben einen eigenen Automaten 
welcher nicht blockiert.

"Wait" und seine Brüder sind dann in den Hauptautomaten natürlich 
verboten.

: Bearbeitet durch User
Autor: Gu. F. (mitleser)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Evert D. schrieb:
> Indertat

Was hat der Inder denn getan?

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.