Forum: Mikrocontroller und Digitale Elektronik Suche nach Schaltung für Signalverzögerung


von Kevin (iknight)


Angehängte Dateien:

Lesenswert?

Ich suche nach einer Schaltung für eine Signalverzögerung.

Ich habe ein kurzes Impuls Signal, welches ca. eine Sekunde später ein 
Relais kurz anziehen lassen soll.

von Rainer W. (rawi)


Lesenswert?

Kevin schrieb:
> Ich suche nach einer Schaltung für eine Signalverzögerung.

Muss der Ausgangspuls unbedingt genauso lang sein, wie der Eingangspuls?
Sonst könnte man einfach zwei Monoflops hintereinander schalten.
Oder du nimmst den kleinsten Mikrocontroller mit zwei frei nutzbaren 
IO-Pins, den du finden kannst.

von David K. (david_k464)


Lesenswert?

Such mal nach NE555 und Einschaltverzögerung

von Michael B. (laberkopp)


Lesenswert?

Kevin schrieb:
> kurz anziehen lassen soll.

Offenbar genau so kurz wie das Signal selbst war, und ein Digitalsignal.

Schieberegister mit Taktgeber. Taktfrequenz und Länge nach gewünschter 
Genauigkeit..

von Daniel D. (danielduese)


Lesenswert?

Beitrag mit aussagekräftiger Visualisierung :-) Daumen hoch

von Markus M. (Firma: EleLa - www.elela.de) (mmvisual)


Lesenswert?

Wenn innerhalb der Sekunde mehrere kurze Eingangs Pule kommen, muss die 
gleiche Pulsfolge eine Sekunde später auch wieder am Ausgang ausgegeben 
werden?

Wie lang ist minimal der Puls am Eingang?

von Kevin (iknight)


Lesenswert?

David K. schrieb:
> Such mal nach NE555 und Einschaltverzögerung

Das Problem dabei ist, dass das Eingangs Signal schon wieder aus ist 
wenn das Ausgangssignal angehen soll.

von Jörg R. (solar77)


Lesenswert?

Ideale Aufgabe für einen Attiny85 o.ä..

Daniel D. schrieb:
> Beitrag mit aussagekräftiger Visualisierung :-) Daumen hoch

Dazu in einem einzigen Satz die Aufgabe erklärt👍

: Bearbeitet durch User
von Kevin (iknight)


Lesenswert?

Markus M. schrieb:
> Wenn innerhalb der Sekunde mehrere kurze Eingangs Pule kommen, muss die
> gleiche Pulsfolge eine Sekunde später auch wieder am Ausgang ausgegeben
> werden?
>
> Wie lang ist minimal der Puls am Eingang?


Es kommt nur ein Steuerimpuls von ca einer halben bis einer Sekunde, 
danach kommt mehrere Sekunden nichts. Die genaue Zeit ist nicht so 
wichtig, da das Relais nur einen Taster simulieren soll.

von Dietrich L. (dietrichl)


Lesenswert?

Es wurden ja schon 3 Möglichkeiten angegeben:
- 2 Monoflpos
- Schieberegister
- µC
Welche Lösung am besten ist, hängt auch davon ab:
- wie genau muss es sein
- welche Versorgungsspannung hast du oder willst du verwenden
- kannst du oder willst du programmieren
- ...

von Joe (Gast)


Lesenswert?

Das ist forumsweit das trivialste Problem nach dem je gefragt wurde. Und 
das dann mit Zeichnung, für die ganz Doofen. Der trollt doch.

von Kevin (iknight)


Lesenswert?

Dietrich L. schrieb:
> Es wurden ja schon 3 Möglichkeiten angegeben:
> - 2 Monoflpos
> - Schieberegister
> - µC
> Welche Lösung am besten ist, hängt auch davon ab:
> - wie genau muss es sein
> - welche Versorgungsspannung hast du oder willst du verwenden
> - kannst du oder willst du programmieren
> - ...


Die Betriebsspannung ist 12V.
Ein µC ist denke ich ungeeignet, da die Schaltung wenn kein 
Eingangsimpuls kommt keinen Strom verbrauchen darf.

Ein Schieberegister ist denke ich zu viel Aufwand, da der Impuls nicht 
genau sein muss.

Ich dachte eher an eine Ausschaltverzögerung die eine 
Einschaltverzögerung ansteuert, habe aber keinen verwertbaren Schaltplan 
dafür gefunden.

von Steve van de Grens (roehrmond)


Lesenswert?

Kevin schrieb:
> Ein µC ist denke ich ungeeignet, da die Schaltung wenn kein
> Eingangsimpuls kommt keinen Strom verbrauchen darf.

Ist kein Hindernis, sofern du 10 µA noch durchgehen lässt.

Abgesehen davon, kennst du die Sache mit der Salami, die Scheibenweise 
serviert wird? Kommt hier gar nicht gut an.

> Ich dachte eher an eine Ausschaltverzögerung die eine
> Einschaltverzögerung ansteuert, habe aber keinen verwertbaren
> Schaltplan dafür gefunden.

Wie gesagt: zwei Monostabile Kippstufen. Mit Sicherheit findest du Pläne 
dafür, wenn du nur ernsthaft suchst. Zwei davon verketten ist dann die 
Glanzleistung, die du selbst erbringen musst.

: Bearbeitet durch User
von Jörg R. (solar77)


Lesenswert?

Kevin schrieb:
> Dietrich L. schrieb:
>> Es wurden ja schon 3 Möglichkeiten angegeben:
> ..
> Die Betriebsspannung ist 12V.
> Ein µC ist denke ich ungeeignet, da die Schaltung wenn kein
> Eingangsimpuls kommt keinen Strom verbrauchen darf.
>
> Ein Schieberegister ist denke ich zu viel Aufwand, da der Impuls nicht
> genau sein muss.

Das ist auch Elektronik, die braucht auch Strom.

von Steve van de Grens (roehrmond)


Lesenswert?

Monostabile Kippstufen kann man zum Beispiel gut mit dem CD4584B oder 
CD40106B aufbauen.

von Enrico E. (pussy_brauser)


Angehängte Dateien:

Lesenswert?

Kevin schrieb:
> Ich dachte eher an eine Ausschaltverzögerung die eine
> Einschaltverzögerung ansteuert, habe aber keinen verwertbaren Schaltplan
> dafür

Ja, genau das ist die berühmte 2 Transistorlösung. Der 
Darlington-Transistor BC517 sorgt für ein schlagartigeres Ausschalten. 
Mit diesen Werten ergibt sich die gewünschte 1 Sekunde Verzögerung.

Die rote LED im Relaiskreis kann natürlich entfallen.

von Manfred P. (pruckelfred)


Lesenswert?

Kevin schrieb:
> Die genaue Zeit ist nicht so wichtig,
> da das Relais nur einen Taster simulieren soll.

Kevin schrieb:
> Ich dachte eher an eine Ausschaltverzögerung die eine
> Einschaltverzögerung ansteuert, habe aber keinen verwertbaren Schaltplan
> dafür gefunden.

Fertige Bauanleitungen gibt es hier selten.

Das kann ein CD4538, zwei Monoflops (MF) mit Flankensteuerung. Der 
Eingangsimpuls startet MF1 mit einer Sekunde Ablaufzeit, dessen fallende 
Flanke dann MF2, welches den Taster simuliert.

Datenblatt angucken und selbst ist der Mann.

von Joe (Gast)


Lesenswert?

Unglaublich.

von Mi N. (msx)


Angehängte Dateien:

Lesenswert?

Dieses Monogefloppe würde ich vermeiden und das ganze in einen kleinen 
ATtiny packen.
Gesagt, getan und mit einem ATtiny25 ein 1000 Bit Schieberegister 
zusammengeklickt. Mit 1 MHz CPU Takt (8 MHz int. Oszillator und /8 
Vorteiler) ergibt sich eine Verzögerung von gut 1 s mit einer Auflösung 
von 1 ms. Das sollte reichen.
Nicht formvollendet elegant, aber ich wollte mal wieder etwas in 
Assembler machen.

von Harald W. (wilhelms)


Lesenswert?

Enrico E. schrieb:

> Ja, genau das ist die berühmte 2 Transistorlösung. Der
> Darlington-Transistor BC517 sorgt für ein schlagartigeres Ausschalten.
> Mit diesen Werten ergibt sich die gewünschte 1 Sekunde Verzögerung.

Seit man vor ca. 50 Jahren die Logikbausteinreihen entwickelt hat,
machen solche Lösungen mit Einzeltransistoren keinen Sinnn mehr.

von Enrico E. (pussy_brauser)


Lesenswert?

Harald W. schrieb:
> machen solche Lösungen mit Einzeltransistoren keinen Sinn mehr.

Der ATtiny kann das 40mA Relais nicht direkt schalten. Es wird also 
sowieso noch ein zusätzlicher Transistor benötigt.

Dann ist eine Schaltung mit insgesamt "nur" zwei Transistoren einfacher. 
Das Programmieren entfällt ebenfalls.

Aber du hast Recht, da wir hier in der Rubrik Mikrocontroller und 
Digitale Elektronik sind, ist ein uC, oder ein CD4538 hier sogar 
gewünscht.

: Bearbeitet durch User
von Michael B. (laberkopp)


Lesenswert?

Kevin schrieb:
> Die Betriebsspannung ist 12V.
> Ein µC ist denke ich ungeeignet, da die Schaltung wenn kein
> Eingangsimpuls kommt keinen Strom verbrauchen darf.

Salami.

Es gibt keine Schaltung  die noch ein Ausgangssignal produziert, wenn 
sie keinen Strom verbrauchen darf.

Weihnachten ist vorbei.

von Enrico E. (pussy_brauser)


Lesenswert?

Kevin schrieb:
> Die Betriebsspannung ist 12V.
> Ein µC ist denke ich ungeeignet, da die Schaltung wenn kein
> Eingangsimpuls kommt keinen Strom verbrauchen darf.

Die Schaltung mit den beiden Transistoren verbraucht, nachdem der Impuls 
bis zum Ende abgearbeitet wurde, tatsächlich keinen Strom mehr, weil 
beide Transistoren sperren.

von Rainer W. (rawi)


Lesenswert?

Enrico E. schrieb:
> Dann ist eine Schaltung mit insgesamt "nur" zwei Transistoren einfacher.
> Das Programmieren entfällt ebenfalls.

... und genauso der Spannungsregler für den µC.

von Mi N. (msx)


Lesenswert?

Enrico E. schrieb:
> Kevin schrieb:
>> Die Betriebsspannung ist 12V.
>> Ein µC ist denke ich ungeeignet, da die Schaltung wenn kein
>> Eingangsimpuls kommt keinen Strom verbrauchen darf.
>
> Die Schaltung mit den beiden Transistoren verbraucht, nachdem der Impuls
> bis zum Ende abgearbeitet wurde, tatsächlich keinen Strom mehr, weil
> beide Transistoren sperren.

Wenn man die Versorgungsspannung vom µC nur bei Tastendruck aktiviert, 
verbraucht dieser in Ruhe auch keinen Strom. Mal abgesehen von den 12 V 
kann ein ATtiny auch 40 mA als Ausgangsstrom liefern - notfalls zwei 
Ausgänge parallel.
Da würde ich eher noch CMOS Monoflopps nehmen als das Transistorgegurke.

Rainer W. schrieb:
> ... und genauso der Spannungsregler für den µC.

Ein µC braucht nur dann einen Spannungsregler, wenn die 
Versorgungsspanung als konstante Größe benötig wird. Für rein digitale 
Verwendung würde auch ein Spannungsteiler genügen. Das ist natürlich 
nichts für Profis hier:
"Das haben wir ja noch nie gemacht." oder "Das machen wir immer so!"
Soll sich der TO seine Lösung seinen Fähigkeiten entsprechend aussuchen.

von Steve van de Grens (roehrmond)


Lesenswert?

Enrico E. schrieb:
> Der ATtiny kann das 40mA Relais nicht direkt schalten.

Doch jann er. Einfach zwei Ausgänge parallel schalten.

von Michael B. (laberkopp)


Lesenswert?

Mi N. schrieb:
> Ein µC braucht nur dann einen Spannungsregler, wenn die
> Versorgungsspanung als konstante Größe benötig wird. Für rein digitale
> Verwendung würde auch ein Spannungsteiler genügen

Au weia, Michael Nowak wieder als vorsätzlich volksverdummender Troll 
unterwegs.

Damit ein uC (oft 5V) seine Versorgung aus 12V per Spannungsteiler 
erhalten kann, braucht es einen niederohmigen Spannungsteiler und einen 
grossen Elko, denn die Stromaufnahme eines uC ist wahrlich nicht 
konstant, liegt eher zwischen 0 und 10mA.

Mi N. schrieb:
> kann ein ATtiny auch 40 mA als Ausgangsstrom liefern - notfalls zwei
> Ausgänge parallel.

Wenn er auch noch 40mA liefern soll, und da er offensichtlich kein 12V 
Relais direkt ansteuern kann man also ein 5V Relais benötigt, muss der 
Spannungsteiler gar bei 40mA Belastung recht stabil bleiben, sagen wir 
10% Abweichung also 400mA Querstrom an 12V mithin 4.8 Watt dauerhaften 
Verlust.

Da die Schaltung wenn kein Eingangsimpuls kommt auch noch ohne 
Spannungsversorgung auskommen muss besonders idiotisch.

Das mit dem Spannungsteiler ist der abstruseste Vorschlag, der dieses 
Jahr kam.

Spannungsregler sind erfunden, kosten wenig, und würden eine nach dem 
Impuls von 12 auf 6V absinkende Elkospanning ausregeln.

von Mi N. (msx)


Lesenswert?

Michael B. schrieb:
> Das mit dem Spannungsteiler ist der abstruseste Vorschlag, der dieses
> Jahr kam.

Ha, ich hab gewonnen!!!

Michael B. schrieb:
> Wenn er auch noch 40mA liefern soll,

Positive Logik kann auch negativ sein: 'sink' statt 'source', und Deine 
ganze Rechnerei ist für die Tonne.
Aber immer wieder eine Freude, sich mit Dir zu unterhalten ;-)

von Michael B. (laberkopp)


Lesenswert?

Mi N. schrieb:
> Positive Logik kann auch negativ sein: 'sink' statt 'source'

Nein.

Da die Spannung am direkt das Relais schaltenden Ausgang nicht über 5V 
gehen darf, die uC haben ja keine open collector Ausgänge, kann da kein 
12V Relais nach Masse geschaltet werden, sondern der Relaisstrom muss 
aus den 5V kommen, und damit von deinem Spannungsteilerunsinn.

> und Deine
> ganze Rechnerei ist für die Tonne

Dein Verstand ist schon in der Tonne, was hast du nur mit ihm gemacht, 
so viel Blödheit passt doch gar nicht zwischen 2 Ohren. Dabei hab ich 
extra schon auf die Notwendigkeit von 5V für das Relais hingewiesen 
damit du nicht in die nächste Peinlichkeit stolperst.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Können wir die Beleidungen bitte einfach nur gedacht lassen? Passt dann 
auch.

Mir wäre meine Zeit für einen technischen Ansatz im Thread hier schon zu 
schade, denn bisher weiß ausser einem einzigen kein weiterer Mensch, 
welche Pegel diese Signale denn haben, ob man eine Versorgung für die 
Elektronik hat und was die brauchen darf.

Kevin schrieb:
> Es kommt nur ein Steuerimpuls von ca einer halben bis einer Sekunde
Woher kommt der Steuerimpuls? Ist dieser Steuerimpuls belastbar? Kann 
diesem Steuerimpuls Energie entnommen werden? Oder hast du sogar eine 
Stromversorgung für die Schaltung?
Oder ganz einfach: woher kommt das Signal und was soll damit angesteuert 
werden? Und zwar völlig abstrakt auf dem Niveau "aus einer Heizung" 
kommend soll "die Backofenleucht" angesteuert werden. Dann kann 
nötigenfalls mit Fragen detailliert weiter gegangen werden.

von Mi N. (msx)


Lesenswert?

Lothar M. schrieb:
> Mir wäre meine Zeit für einen technischen Ansatz im Thread hier schon zu
> schade, denn bisher weiß ausser einem einzigen kein weiterer Mensch,
> welche Pegel diese Signale denn haben, ob man eine Versorgung für die
> Elektronik hat und was die brauchen darf.

Jetzt hast Du ja doch noch ein wenig Zeit erübrigen können ;-)

So ist das eben, wenn hier jeder seine Glaskugel herauskramt. Lustig ist 
auch, daß der TO nie etwas von Relais oder 40 mA geschrieben hat, dieser 
Punkt aber dominierend gefordert wird.

Mich hat an der Sache wesentlich interessiert, wie ich es angehen würde, 
ein Bitmuster zeitverzögert wie ursprünglich erzeugt wiederzugeben. Da 
ist ein µC wohl eine sinnvolle, handhabbare Lösung, die diese Aufgabe 
erfüllen kann. (Es ist bekannt, Du nimmst getacktete Logik dafür.)
Ob der TO etwas damit anfangen oder umsetzen kann, bleibt bei seinen 
zurückhaltenen Beiträgen fragwürdig.
Egal.

von Enrico E. (pussy_brauser)


Lesenswert?

Mi N. schrieb:
> Lustig ist auch, daß der TO nie etwas von Relais oder 40 mA geschrieben
> hat

Doch, sofort als erstes im Eröffnungsbeitrag:

Kevin schrieb:
> eine Sekunde später ein Relais kurz anziehen lassen soll.

Von der Milliamperzahl hat er allerdings wirklich nix geschrieben.

von Mi N. (msx)


Lesenswert?

Enrico E. schrieb:
> Doch, sofort als erstes im Eröffnungsbeitrag:

Ja, ich sehe.
Auf der anderen Seite bedeutet das, daß die Versorgungsspannung mit 
einigen Milliampère belastet werden kann. Ein AVR mit obigem Programm 
braucht <= 1 mA, womit dessen Versorgung gesichert wäre.

Reduziert man die (von mir) angestrebte 0,1% Auflösung des Bitmusters 
auf 1% (10 ms Schritte), kann man 13 interne Register als 100 Bit 
Schieberegister verwenden und benötigt dafür 13 Takte. Rechnet man 20 
weitere Takte für die Eingabe, Verarbeitung und Ausgabe hinzu kommt man 
auf etwa 33 Takte, die binnen 10 ms ausgeführt werden müßten.
In Folge könnte der AVR im unteren kHz-Bereich getaktet werden und 
bräuchte dann deutlich unter 100 µA im aktiven Modus.
Dies nur als abschätzende Überlegung.

von Rainer W. (rawi)


Lesenswert?

Mi N. schrieb:
> ... und bräuchte dann deutlich unter 100 µA im aktiven Modus

Das ist immer noch unendlich mal mehr, als vom TO gefordert ;-)

Kevin schrieb:
> Ein µC ist denke ich ungeeignet, da die Schaltung wenn kein
> Eingangsimpuls kommt keinen Strom verbrauchen darf.

von Mi N. (msx)


Lesenswert?

Rainer W. schrieb:
> Mi N. schrieb:
>> ... und bräuchte dann deutlich unter 100 µA im aktiven Modus
>
> Das ist immer noch unendlich mal mehr, als vom TO gefordert ;-)

Im passiven Zustand kann der µC spannungs- und stromlos bleiben.
Nach Abschalten des Eingangsimpulses muß der µC nur noch 1 s aktiv 
bleiben, um diesen Pegel korrekt weiterzugeben.
Beispiel: Ein auf 5 V aufgeladener Kondensator versorgt den µC bis hinab 
auf 2 V. Bei 0,1 mA sollten 47 µF für 1 s reichen.

von Heinrich K. (minrich)


Lesenswert?

Wie er sich abstrampelt, fürchterlich...

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Mi N. schrieb:
> wollte mal wieder etwas in Assembler machen.
Meines Erachtens macht das Programm Käse, denn es liest eben nicht 
**jede ms** den Eingang ein und gibt ihn 1000 ms später wieder jede ms 
auf dem Ausgang aus.

Sondern es liest den Eingang ein, verzögert ihn mit viel Aufwand für 
geraume Zeit, gibt ihn dananach wieder aus, und liest erst dann wieder 
den Eingang ein. Der Eingang ist also nach jeder Abtastung für 1 s blind 
für Änderungen.

Schieberegister gehen anders: da wird mit jedem Takt ein Eingangswert 
eingelesen und ein verzögerter Ausgangswert ausgegeben.

Aber wie gesagt: dieser Thread ist genauso ein Salamischeiben-Thread mit 
genau dem selben Ende wie der 
Beitrag "Spannungsteiler mit "Untergrenze""

Wenn der TO vernünftig mittun würde, könnte man das Problem auf 
vermutlich 10 Wegen mehr oder weniger elegant lösen. Hier und dort.

von Karl B. (gustav)


Lesenswert?

Figure 15 ist was für den TO?
https://www.ti.com/lit/ds/symlink/cd4098b.pdf

ciao
gustav

von Enrico E. (pussy_brauser)


Angehängte Dateien:

Lesenswert?

Karl B. schrieb:
> Figure 15 ist was für den TO?

Das wäre genau die richtige Schaltung, wenn der Stromverbrauch am Ende 
der Impulsverarbeitung gleich Null ist.

von Gustl B. (gustl_b)


Lesenswert?

Wenn man das als Software oder so baut, dann als Ringspeicher.

Lese Wert an aktueller Adresse und gebe den am Ausgang aus.
Schreibe aktuell anliegenden Wert am Eingang an diese Adresse.
Erhöhe die Adresse um Eins.

von Manfred P. (pruckelfred)


Lesenswert?

Lothar M. schrieb:
>> wollte mal wieder etwas in Assembler machen.

Was niemand bebötigt:
Kevin schrieb:
> Die genaue Zeit ist nicht so wichtig,
> da das Relais nur einen Taster simulieren soll.

Lothar M. schrieb:
> Meines Erachtens macht das Programm Käse, denn es liest eben nicht
> **jede ms** den Eingang ein und gibt ihn 1000 ms später wieder jede ms
> auf dem Ausgang aus.

Mag so sein. Eagl, Hauptsache, der Taster wird erkannt und nach einer 
Sekunde weitergereicht.

> Sondern es liest den Eingang ein, verzögert ihn mit viel Aufwand für
> geraume Zeit, gibt ihn dananach wieder aus, und liest erst dann wieder
> den Eingang ein. Der Eingang ist also nach jeder Abtastung für 1 s blind
> für Änderungen.

Vermutlich unwichtig.

Enrico E. schrieb:
> Karl B. schrieb:
>> Figure 15 ist was für den TO?
> Das wäre genau die richtige Schaltung,

Das ist das, was ich in Worten beschrieb:
Manfred P. schrieb:
> Das kann ein CD4538, zwei Monoflops (MF) mit Flankensteuerung. Der
> Eingangsimpuls startet MF1 mit einer Sekunde Ablaufzeit, dessen fallende
> Flanke dann MF2, welches den Taster simuliert.

Enrico E. schrieb:
> wenn der Stromverbrauch am Ende
> der Impulsverarbeitung gleich Null ist.

Da muß der TO sich der Realität stellen, ein paar µA für den CMOS werden 
doch wohl zu ertragen sein.

Ob sich klein Kevin (iknight) nochmal meldet?

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Manfred P. schrieb:
> Lothar M. schrieb:
>>> wollte mal wieder etwas in Assembler machen.
> Was niemand bebötig
Du hast den Falschen zitiert, ich habe hier keine winzige Zeile in 
Assembler verfasst. Wenn ich da was verfasst hätte, dann wäre es 1. in C 
und 2. korrekt.

Manfred P. schrieb:
> Hauptsache, der Taster wird erkannt und nach einer Sekunde
> weitergereicht.
Nein, der Eingangspegel wird eben nur 1x pro Sekunde abgetastet und dann 
durchgereicht. Und wenn der Eingang kürzer als 1 Sekunde aktiv ist, dann 
wird er vielleicht "erkannt"  oder vielleicht auch nicht.

Das Programm sieht funktionell nämlich so aus:
1
loop:
2
  merker = Eingang;
3
  warte(1s);
4
  Ausgang = merker;
5
  goto loop;
Da wird nichts "erkannt und durchgegeben".

Und wenn der Eingang während warte(1s) auch 10x den Pegel wechselt: 
keiner davon wird erkannt.

> Vermutlich unwichtig.
Wie ich schrieb: Ratestunde mit Salamibrot.

> Ob sich klein Kevin (iknight) nochmal meldet?
Noch eine unbeantwortete Frage...

: Bearbeitet durch Moderator
von Mi N. (msx)


Lesenswert?

Lothar M. schrieb:
> Meines Erachtens macht das Programm Käse, denn es liest eben nicht
> **jede ms** den Eingang ein und gibt ihn 1000 ms später wieder jede ms
> auf dem Ausgang aus.
>
> Sondern es liest den Eingang ein, verzögert ihn mit viel Aufwand für
> geraume Zeit, gibt ihn dananach wieder aus, und liest erst dann wieder
> den Eingang ein. Der Eingang ist also nach jeder Abtastung für 1 s blind
> für Änderungen.

Oh, das hätte ich von Dir jetzt nicht erwartet :-(

Die Schleife 'durchlauf' dauert 1 ms und die Schleife 'shift' schiebt 
ein Bit in einem 1000 Bit langen Schieberegister (125 Byte à 8 Bit) um 
eine Stelle nach links.
Und das alles in einem kleinen 8-pol. IC ohne viel Löterei mit recht 
stabilem Timing.

von Ob S. (Firma: 1984now) (observer)


Lesenswert?

Mi N. schrieb:

> Die Schleife 'durchlauf' dauert 1 ms

Etwas mehr, aber egal, wenn man's exakt tunen will, kann man das ja 
immer noch tun.

> und die Schleife 'shift' schiebt
> ein Bit in einem 1000 Bit langen Schieberegister (125 Byte à 8 Bit) um
> eine Stelle nach links.

Ja. Sie benötigt dazu 8 Takte/Byte des SR, also 1000 (-1) insgesamt. Bei 
1MHz Systemtakt dauert also das eigentliche Schieben wirklich ca. 1ms.

Übrigens gibt es da noch einigen Verbesserungsbedarf beim Ein-und 
Ausfädeln der Bits in/aus dem SR. Einfädeln funktioniert derzeit nur 
zufällig, Ausfädeln fädelt das falsche Bit aus, das Gesamt-Delay ist 
(auch) deshalb nicht exakt.

Aber das sind Details. Das Gesamtkonzept passt. Mich wundert übrigens 
auch, das Lothar das so dermaßen falsch "erkannt" hat. Etwas mehr hätte 
ich ihm auch in Asm schon zugetraut.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Mi N. schrieb:
> Die Schleife 'durchlauf' dauert 1 ms
Also gut, passt. Die Durchlaufzeit wird durch den pfundigen 
Rechenaufwand definiert.

> Die Schleife 'durchlauf' dauert 1 ms und die Schleife 'shift' schiebt
> ein Bit in einem 1000 Bit langen Schieberegister (125 Byte à 8 Bit) um
> eine Stelle nach links.
Ich würde da kein einziges Bit irgendwo hin verschieben, sondern einfach 
einen Pointer durch den Speicher laufen lassen.

Und vor allem würde ich den Controller die meiste Zeit im Tiefschlaf 
lassen und nur mit dem Watchdog alle 15ms aufwecken. Wenn der 
WD-Interupt kommt, dann wird der älteste Wert ausgegeben und der neueste 
Wert eingelesen und dann gehts wieder ab zum Schlafen. Wegen des 
"groben" Rasters von 15ms reichen dann 70 Werte im Verzögerungsspeicher 
und ich muss keine Bitmanipulationen machen.

: Bearbeitet durch Moderator
von Ob S. (Firma: 1984now) (observer)


Lesenswert?

Lothar M. schrieb:

> Ich würde da kein einziges Bit irgendwo hin verschieben, sondern einfach
> einen Pointer durch den Speicher laufen lassen.

Auch er "läßt einen Pointer laufen". Allerdings nur über 125Bytes. Bei 
1000 Bytes würde es nämlich etwas arg eng werden in einem Tiny85, denn 
der hat derer nur 512...

Das passt nicht. Und die einzige Lösung ist halt: auf Bits ausweichen 
oder fettere Hardware mit mehr SRAM verwenden.

Übrigens wäre ein Tiny85 Perlen vor die Säue. Für diese Anwendung würde 
auch ein Tiny25 reichen. Aber nicht bei deinem Ansatz, da muss es dann 
schon ein Mega sein.

> Und vor allem würde ich den Controller die meiste Zeit im Tiefschlaf
> lassen und nur mit dem Watchdog alle 15ms aufwecken.

Nunja, damit reduzierst du natürlich die zeitliche Abbildungsgenauigkeit 
erheblich. Statt 1kS/s nur noch 67S/s. OK, wenn's reicht.

Wenn es aber reicht, geht natürlich auch in Asm noch einiges mit Pennen. 
Schon allein dadurch, dass dann natürlich auch bloß noch 67 Bits 
Speicher nötig sind und  keine 1000. Dann könnte das auch auf einem 
Tiny13 (oder noch kleiner) laufen und der könnte dann natürlich auch die 
meiste Zeit pennen, weil das SR nur noch aus 7 Bytes besteht, statt aus 
125. Das könnte dann komplett in Registern gehalten werden und die 
innere Schleife wäre dann so klein, dass man sie problemlos abwickeln 
könnte.

von Mi N. (msx)


Angehängte Dateien:

Lesenswert?

Ob S. schrieb:
> Aber das sind Details. Das Gesamtkonzept passt.

Das Timing genau abzugleichen ist bei 1% Genauigkeit und Drift des 
internen Oszillators nicht sinnvoll. Ich habe es einfach so gemacht, wie 
es in etwa passt. Interessant würde das Timing erst, wenn man einen 
quarzstabilen Takt verwendet.

Anbei noch eine Version in C, die das Schieben (für mich überraschend) 
so schnell erledigt, daß sogar noch leicht aber auch recht ungenau 
verzögert werden muß.

Lothar M. schrieb:
> Ich würde da kein einziges Bit irgendwo hin verschieben, sondern einfach
> einen Pointer durch den Speicher laufen lassen.
>
> Und vor allem würde ich den Controller die meiste Zeit im Tiefschlaf
> lassen und nur mit dem Watchdog alle 15ms aufwecken. Wenn der
> WD-Interupt kommt, dann wird der älteste Wert ausgegeben und der neueste
> Wert eingelesen und dann gehts wieder ab zum Schlafen. Wegen des
> "groben" Rasters von 15ms reichen dann 70 Werte im Verzögerungsspeicher
> und ich muss keine Bitmanipulationen machen.

DANN MACH ES DOCH und zeige die Lösung, anstatt hier einen Vorschlag mit 
abgemagerten Zielvorgaben schlecht zu reden!
Wie erwähnt, würde es sich für geringere zeitliche Auflösung anbieten, 
die Bits durch interne Register zu schieben. Dann kann die Taktfrequenz 
ein paar kHz betragen und man braucht überhaupt keinen Schlafmodus.

Interessant würde die Geschichte doch erst, wenn der AVR mit 20 MHz 
läuft und das Timing auf 50 ns exakt ausgeführt werden soll.

Ob S. schrieb:
> Für diese Anwendung würde
> auch ein Tiny25 reichen. Aber nicht bei deinem Ansatz, da muss es dann
> schon ein Mega sein.

Den ATtiny25 hatte ich vorgesehen und wenn man alles in Registern halten 
kann, reicht schon ein AT90S1200. Braucht noch jemand welche? ;-)

von Ob S. (Firma: 1984now) (observer)


Lesenswert?

Mi N. schrieb:

> Anbei noch eine Version in C, die das Schieben (für mich überraschend)
> so schnell erledigt, daß sogar noch leicht aber auch recht ungenau
> verzögert werden muß.

Überrascht mich nicht. Es geht ja nicht um nebenläufigen Code. Da ist C 
nach wie vor ziemlich Scheiße.

Innerhalb eines Codestrangs hingegen sind die Compiler heute doch recht 
gut und finden ziemlich häufig die optimale Lösung, vor allem dann, wenn 
es um triviale Probleme und registermäßig nicht besonders eng zugeht und 
sie sich deshalb nicht durch ihr eigenes ABI selber ausbremsen.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Angehängte Dateien:

Lesenswert?

Mi N. schrieb:
> DANN MACH ES DOCH und zeige die Lösung
Kein Problem, leider bin ich heute erst wieder an einen Rechner mit der 
Toolchain gekommen.

Hier die beiden Lösungen:
1. Lösung A mit dem Buffer in 70 Bytes und
2. Lösung B mit dem Buffer in 9*8 = 72 Bits.

Die Verzögerungszeit kann man leicht über die Bufferlänge anpassen, die 
Bufferverwaltung passt sich per sizeof() an die vorgegebene Länge an.

Der Watchdog hier ist eine Trantüte, der macht aus den 15 ms gute 20 ms. 
Da müsste man die Bufferlänge entsprechend justieren.

Das Oszi ist grausig angeschlossen, Zappeln allerorten, aber grün ist 
der Taster und rot der Ausgang.

Ich habe nur den Tiny85 hier, aber man sieht leicht, dass das auch in 
einen kleineren passen würde:
1
Lösung A mit 70 Bytes Array:
2
Program Memory Usage   :  224 bytes   2,7 % Full
3
Data Memory Usage      :  71 bytes   13,9 % Full
4
5
Lösung B mit Iteration über 72 Bits: 
6
Program Memory Usage   :  306 bytes   3,7 % Full
7
Data Memory Usage      :  12 bytes    2,3 % Full

: Bearbeitet durch Moderator
Beitrag #7572353 wurde vom Autor gelöscht.
von Mi N. (msx)


Angehängte Dateien:

Lesenswert?

Lothar M. schrieb:
>> DANN MACH ES DOCH und zeige die Lösung
> Kein Problem, leider bin ich heute erst wieder an einen Rechner mit der
> Toolchain gekommen.

Gut, dann bleib ich wieder ruhig.
Zwischendurch mußte ich noch die angesprochene Version mit den internen 
Registern zusammentippen. Siehe Anhang.
Dazu muß man den internen 128 kHz Oszillator aktivieren. Der interne 
Vorteiler teilt auf ca. 4 kHz Prozesortakt herunter. Anstatt auf einen 
Interrupt zu warten läuft die Schleife einfach durch. Mehr Strom wird 
dadurch auch nicht aufgenommen, da der WDT ebenfalls den 128 kHz Takt 
verwendet. Aus Jux habe ich auch noch die Timer, USI und ADC 
deaktiviert.

Wie Du schon geschrieben hast, sind die 128 kHz keineswegs genau. Laut 
Datenblatt liegt die Frequenz bei eher 120 kHz und wackelt schön mit 
Temperatur und Versorgungsspannung.

Es war überhaupt nicht das Ziel, den Speicher nicht zu nutzen. Daher nur 
als Vergleichswerte.
Programmspeicher: 114 Bytes
Datenspeicher:      0 Bytes

von Kevin (iknight)


Lesenswert?

Karl B. schrieb:
> Figure 15 ist was für den TO?
> https://www.ti.com/lit/ds/symlink/cd4098b.pdf
>
> ciao
> gustav

Das hört sich nicht schlecht an, schaue ich mir mal an.

Um kurz zusammenzufassen, der Eingangsimpuls steuert einen Stellmotor 
ist somit belastbar. Das Relais soll als „Signalrelais“ dienen und ca. 
eine Sekunde (ungefähr zwischen 700ms und 1300ms) nach aktivieren des 
Stellmotors 2 Pins von einem Steuergerät verbinden. Die Zeiten zwischen 
den Eingansimpulsen variieren zwischen 2 Sekunden und mehreren Tagen. Da 
das ganze System an einer Batterieversorgung hängt soll die Schaltung 
möglichst kein Stromverbrauch haben wenn über längere Zeit kein 
Eingangssignal kommt.

von Jörg R. (solar77)


Lesenswert?

Kevin schrieb:
> Karl B. schrieb:
>> Figure 15 ist was für den TO?
>> https://www.ti.com/lit/ds/symlink/cd4098b.pdf
>>
>> ciao
>> gustav
>
> Um kurz zusammenzufassen, der Eingangsimpuls steuert einen Stellmotor
> ist somit belastbar. Das Relais soll als „Signalrelais“ dienen und ca.
> eine Sekunde (ungefähr zwischen 700ms und 1300ms) nach aktivieren des
> Stellmotors 2 Pins von einem Steuergerät verbinden. Die Zeiten zwischen
> den Eingansimpulsen variieren zwischen 2 Sekunden und mehreren Tagen. Da
> das ganze System an einer Batterieversorgung hängt soll die Schaltung
> möglichst kein Stromverbrauch haben wenn über längere Zeit kein
> Eingangssignal kommt.

Eine Schaltung aus CD40xx, oder eine Schaltung mit einem uC der in den 
Pausen schlafen gelegt wird, kommt mit vermutlich <50uA hin. Das sind in 
einer Woche 8,4mAh. Das ist zu viel?

: Bearbeitet durch User
von Enrico E. (pussy_brauser)


Lesenswert?

Kevin schrieb:
> Da das ganze System an einer Batterieversorgung hängt, soll die Schaltung
> möglichst keinen Stromverbrauch haben, wenn über längere Zeit kein
> Eingangssignal kommt.

Diese Schaltung benötigt in den Pausen Null Milliampere:

Beitrag "Re: Suche nach Schaltung für Signalverzögerung"

von Mi N. (msx)


Lesenswert?

Jörg R. schrieb:
> Eine Schaltung aus CD40xx, oder eine Schaltung mit einem uC der in den
> Pausen schlafen gelegt wird, kommt mit vermutlich <50uA hin. Das sind in
> einer Woche 8,4mAh. Das ist zu viel?

Um das Thema meinerseits zu beenden, habe ich bei einem ATTiny85 noch 
die Stromaufnahme mit durchlaufendem Programm (sr_100_reg.asm) gemessen:
63 µA @ 5 V und 54 µA @ 3 V @ 20°C. Wie erwähnt, würde ein kleiner Elko 
für die temporäre Stromversorgung reichen.

Achtung: Zur Programmierung braucht man ein AVR-Programmiergerät, das 
mit < 1 kHz SCLK arbeiten kann.

von Hardy F. (hflor)


Lesenswert?

Das ist doch viel zu einfach, das muß in die Cloud mit Datenspeicherung 
über 100 Jahre, auf die ms genau.

von Mi N. (msx)


Angehängte Dateien:

Lesenswert?

Gut, für die schlichten Gemüter hier eine passende Schaltung.
C1 bestimmmt die Länge des Ausgangsimpulses und C2 die 
Einschaltverzögerung. R1 dient der Einschaltstrombegrenzung.
Die Bauteile können den harten Anforderungen des TO angepaßt werden.

: Bearbeitet durch User
von Enrico E. (pussy_brauser)


Lesenswert?

Mi N. schrieb:
> C1 bestimmmt die Länge des Ausgangsimpulses.

Der Ausgangsimpuls ist bei deiner Schaltung kein Ausgangsimpuls, er 
bleibt dauerhaft stehen und verbraucht zu allem Überfluss auch noch die 
ganze Zeit Strom.

Deine Schaltung besteht aus zwei hintereinander geschalteten Tiefpässen. 
Der Hochpass fehlt!

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Angehängte Dateien:

Lesenswert?

Kevin schrieb:
> Das Relais soll als „Signalrelais“ dienen und ca. eine Sekunde (ungefähr
> zwischen 700ms und 1300ms) nach aktivieren des Stellmotors 2 Pins von
> einem Steuergerät verbinden.
Wie lange muss dieser Kontakt geschlossen sein?

Mi N. schrieb:
> Gut, für die schlichten Gemüter hier eine passende Schaltung.
Ich würde den R1 durch einen Diode ersetzen, denn sonst entlädt dir der 
parallel geschaltete Stellmotor den C1.

Zudem wäre ein "steileres" Einschalten des Relais sinnvoll, denn je mehr 
der T1 leitet, um so mehr Strom fließt durch das Relais, schon lange vor 
es angezogen hat!

Ich hätte sowas wie im Anhang mit Mosfets ausprobiert. Aber auch diese 
Schaltung krankt wie deine daran, dass sie super funktioniert, solange 
der Kondensator C2 leer ist. Wenn der aber bei schnellen Pulsfolgen noch 
"halb" geladen ist, dann ist Essig mit dem Delay.

von Mi N. (msx)


Lesenswert?

Lothar M. schrieb:
> Zudem wäre ein "steileres" Einschalten des Relais sinnvoll, denn je mehr
> der T1 leitet, um so mehr Strom fließt durch das Relais, schon lange vor
> es angezogen hat!

Dann nimmt man für Q1 einen Thyristor und schaltet eine ZD10 davor.
Hilfsweise kann ein Schaltkontakt des Relais' C2 schnell entladen oder 
auch eine Diode oder, oder, oder, ...
Aber wir sind hier ja nicht im "Analogtechnik" Forum.

Enrico E. schrieb:
> Der Ausgangsimpuls ist bei deiner Schaltung kein Ausgangsimpuls,

Aber sicher doch. Irgendwann fehlt das Eingangssignal und dann schaltet 
auch das Relais ab. Für mich ist das alles "kurz" (und mittlerweile 
schnurz).

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

Ein Attiny402 kostet ungefahr 0.4-0.5 Euro.
Und das Ganze ist mit paar Zeilen Code fertiggekocht.
Etwa so:
Irgendeinen Pin als Ausgang konfigurieren.
Irgendeinen Pin als Eingang konfigurieren, PinChange_Int erlauben.
loop:
  Flag auf OFF setzen, uC legt sich schlafen.
  Wenn aufgeweckt durch PinChange_Int, WD auf 1 Sekunde einstellen,
  sich wieder schlafen legen.
  Wenn WD feuert, Ausgang einschalten, Flag auf ON setzen, WD auf 125ms,
  sich wieder schlafen legen.
  Wenn WD wieder feuert, Ausgang ausschalten, WD ausschalten.
GOTO loop.

Attiny schläft 99,99% der Zeit.

: Bearbeitet durch User
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.