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.
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.
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..
Beitrag mit aussagekräftiger Visualisierung :-) Daumen hoch
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?
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.
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
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.
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 - ...
Das ist forumsweit das trivialste Problem nach dem je gefragt wurde. Und das dann mit Zeichnung, für die ganz Doofen. Der trollt doch.
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.
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.
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.
Monostabile Kippstufen kann man zum Beispiel gut mit dem CD4584B oder CD40106B aufbauen.
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.
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.
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.
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.
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
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.
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.
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.
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.
Enrico E. schrieb: > Der ATtiny kann das 40mA Relais nicht direkt schalten. Doch jann er. Einfach zwei Ausgänge parallel schalten.
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.
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 ;-)
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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?
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
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.
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.
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
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.
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? ;-)
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.
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.
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
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.
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
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"
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.
Das ist doch viel zu einfach, das muß in die Cloud mit Datenspeicherung über 100 Jahre, auf die ms genau.
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
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!
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.
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).
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.