Forum: Mikrocontroller und Digitale Elektronik 3fach Timer (einschaltverzögerung)


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.
von Michael H. (dicker721)


Lesenswert?

Hallo,
benötige für eine Schaltung eine Art Timer der mir einfach nach dem 
anlegen der Steuerspannung/Stromversorgung nacheinander 3 Relais 
ansteuern kann, also ohne Taster oder so was, einfach STromversorgung an 
und der Timer arbeitet vom Relais 1 bis  3 durch und weiter nichts.

Da die Geschichte mit herkömlicher Technick ausartet was Kosten und 
Teile angeht, suchte ich das Inet ab ohne einen passenden Denkanstoß zu 
finden wie ich so was mit einem Atmega/Attiny verwirklichen kann, da 
sich mit hilfe dieser Technologie die Bauteilemenge und die Kosten 
deutlich reduzieren würden.

Die einschalt/ausschaltverzögerung die richtung ist egal, sollte 
einfach:

Relais 1 nach 35 Sekunden

Relais 2 nach 1 Minute und 20 Sekunden

Relais 3 nach 2 Minuten und 30 Sekunden schalten

wie Programiert man so etwas oder wo finde ich ein Beispiel in dem 
einfach erklärt ist was wo ist oder hingehört.

Nen einfachen Timer mit nem LM311 hab ich schon gebaut aber der aufwand 
und die menge der Bauteile sowie die Größe lässt das ganze etwas extrem 
zu groß und aufwendig werden um das zu verwirklichen.

Vieleicht hat auch jemand von Euch mal so was ähnliches gebaut?

Der Timer soll nur einmal durchlaufen und danach einfach beim letzten 
Punkt stehen bleiben, also Relais 3 an.

Im vorraus schon mal vielen Dank und frohe Ostern euch.
LG
Michael

von Jannis C. (kabelwurm)


Lesenswert?

Hallo,
Denkanstoß:
Als erstes benötigst du den größten gemeinsamen Teiler der drei Zeiten. 
Also von 35s,80s und 150s. Der Wert, der dabei rauskommt, musst du dann 
mit einem Timerinterrupt erzeugen. In der ISR zählts du dann eine 
Variable hoch. Und dann brauchst du nur noch drei If-Abfragen in denen 
du schreibst:
1
 if (variable == x) {
2
        PORTy = (1<<PORTyz);
3
     }
x steht an dieser Stelle für die Anzahl von Interrupts, die du brauchst 
um die geforderte Zeit zu erreichen
y für den Port
z für den Portpin
Was mich noch interresieren würde, wofür braucht man so kurze Abstände?
Gruß Jannis

von Thomas E. (thomase)


Lesenswert?

Jannis C. schrieb:
> Denkanstoß:

Das ist ja vollkommen richtig, was du da schreibst. Und eigentlich macht 
man das ja auch so. Aber wenn das Ganze nichts anderes machen soll, als 
nacheinander 3 Relais einschalten, geht's viel einfacher und vor allen 
Dingen anfängerfreundlicher.

1.  Alle Relais AUS
2.  Delay 35 Sekunden
3.  Relais 1 EIN
4.  Delay 45 Sekunden
5.  Relais 2 EIN
6.  Delay 70 Sekunden
7.  Relais 3 EIN
8.  Warten auf Godot

Attiny25, 1x 100nF, 3x BC..., 3-5V für den µC, Spannung für die Relais

mfg.

von Jannis C. (kabelwurm)


Lesenswert?

Hallo,
deine Methode ist sicher Anfängerfreundlicher. Darauf habe ich ehrlich 
gesagt nicht geachtet. Der TO hat seine Frage jedoch ziemlich genau 
gestellt, was mich darauf schließen ließ, dass er mit der Materie 
vertraut ist.
>Timer arbeitet vom Relais 1 bis  3 durch
Langerede kurzer Sinn: Beide Methoden werden zuverlässig funktionieren
Gruß Jannis

von Michael H. (dicker721)


Lesenswert?

>@Jannis
>x steht an dieser Stelle für die Anzahl von Interrupts, die du brauchst
>um die geforderte Zeit zu erreichen
>y für den Port
>z für den Portpin

Ja also wieviel Interup's brauche ich um 35 bis 70 Sekunden zu warten?
sollte ja etwa dann so aussehen? :

Config PortD = Output
 if (variable == x) {
        PORTD = (1<<PORTD0);
     }
 if (variable == x) {
        PORTD = (1<<PORTD1);
     }
 if (variable == x) {
        PORTD = (1<<PORTD2);
     }
End

ist das Richtig?


Achso ich brauche das erste Relais für ne Testschaltung.
Relais 2 macht dann nen Überladung
Relais 3 schaltet in den Normalzustand, ab hier übernimmt ne 
Transistorregelung die Arbeit.

Eigentlich ein einfaches vorhaben, das halt in Transistortechnik sehr 
auswendig realisierbar ist, die Zeitsteuerung wäre mit nem Atmel 
deutlich kleiner und hätte viel weniger bauteile, vorallem die 
Zeitaufwendige abgleicherei mit Elkos und Poties wäre da nicht nötig!

Kann ja wenns fertig ist und super Funktioniert der Allgemeinheit 
mitsammt allen Schaltbildern und Photos zur verfügung stellen :-)
_____________

Thomas Eckmann schrieb:
> Jannis C. schrieb:
>> Denkanstoß:
>
> Das ist ja vollkommen richtig, was du da schreibst. Und eigentlich macht
> man das ja auch so. Aber wenn das Ganze nichts anderes machen soll, als
> nacheinander 3 Relais einschalten, geht's viel einfacher und vor allen
> Dingen anfängerfreundlicher.
>
> 1.  Alle Relais AUS
> 2.  Delay 35 Sekunden
> 3.  Relais 1 EIN
> 4.  Delay 45 Sekunden
> 5.  Relais 2 EIN
> 6.  Delay 70 Sekunden
> 7.  Relais 3 EIN
> 8.  Warten auf Godot
>
> Attiny25, 1x 100nF, 3x BC..., 3-5V für den µC, Spannung für die Relais
>
> mfg.



Hmmmm wie mach ich das?

Wie man Port's als Ein b.z.w. Ausgänge schaltet!
z.b.

Config Portd = Output

???

Denke ich das ich weiß wie das geht, aber wie weiter?
wie bring ich den Atmel dazu das er Punkt 1. bis 8. durchmacht und 
nichts weiter als nur die 3 Relais nacheinander anzuschalten?

von Thomas E. (thomase)


Lesenswert?


von Uwe (de0508)


Angehängte Dateien:

Lesenswert?

Hallo,

hier ist eine Version, die auf zwei Modulen von Peter Dannegger basiert:

der Task Scheduler und die Enprellenfunktionen.

Verwendet habe ich einen atTiny45/85 und alle Pins belegt.

PB0: Relais1
PB1: Relais2
PB2: Relais3
PB3: #Key ; Reset aller Relais.
PB4: LED# ; Zeigt durch 1sek blinken den Betriebszustand an.

Mehr im Bild und in den Programmdateien.

Ich finde diese Art zu programmieren sehr 'schön' und ich denke auch 
übersichtlich.

Man mache sich klar wie der Task: task_led, task_key und die Tasks: 
task_relais(N) funktionieren.

Die Definitionen der Makros stehen in |main.h|.

Der Task-Scheduler und die Entprellroutine läuft über timer0 im 25ms 
Zeitfenster.

Danke Peter.

von Michael H. (dicker721)


Lesenswert?

Cool Danke ich glaub das versuche ich gleich mal ;-)
noch frohe Ostern euch.
LG
Michael

von Michael H. (dicker721)


Lesenswert?

was soll ich sagen?
Hab so meine Probleme, mein USB AVR Programierer scheint hin zu sein.
Bekomme es auch nicht gebacken mit den mir zur verfügung stehenden 
Informationen oder Daten etwas anzufangen, fummle mit AVRStudio 4 und 5 
rum und Ponyprog zum Übertragen an den Atmel, hab noch ein Pollin 
Evulationsboard, und recht viele Tiny13 rumliegen, Google Leese Probiere 
und verzweifle, weil ich es auch durch die ganzen Tutorials und diversen 
anderen Hilfestellungen einfach nicht verstehe wie ich was machen kann, 
hatte mal so ein Rotary LED Programm hier im Forum runtergeladen, und 
damit rumexperementiert, mit einem Simulator, wollte das Lauflicht zum 
Testen und verstehen auf 16/24 Ports erweitern, naja im Simulator hab 
ich gesehen das die anderen Ports (b,c/b,c,d) alle Zeitgleich das selbe 
machen, und war nicht mal mit so etwas einfachem erfolgreich :-((( bin 
voll der Looser.

Den Timer bekomme ich ja eh nie hin denk ich mal!
Scheitere ja schon ein Funktionierendes Programm um nur ein paar Ports 
zu erweitern die das Programm auch durchlaufen soll???????????
Mir Brennt der  Kopf und ich macherstmal die ungelogen 34 Fenster wieder 
zu, da ich daraus nicht schlau werde!

Ps diese Gummitastatur ist ein grauß

von Michael H. (dicker721)


Angehängte Dateien:

Lesenswert?

Hallo,
hab mich etwas mit Bascom beschäftigt, da C und Assembler echt Spanisch 
für mich ist, ergebniss ist ein fertiger Timer auf einem ATTINY13 der 
genau das macht was er soll und nach Ablauf einfach stehen bleibt!

Im Anhang das Programm, das Ganze fertige Projekt werde ich auch noch 
mit Schaltbildern und Code Zusammen Posten wenn ich alles 
zusammengestellt habe, damit das Teil auch anderen nützen wird.

Aber hier schonmal den Code und ein Videolink, sind im Video halt alles 
nur rote LED's aber den ablauf kann trotzdem erkennen.

http://www.youtube.com/watch?v=-6eI_k2FihA

Das Programm habe ich als Rar gepackt damit mans einfacher Laden kann, 
es kann mit Ponyprog einfach auf den ATTINY übertragen werden,

Beschaltung und Programmablauf im Groben.
PortB ist Ausgang und davon:

Nr.0 nicht verwendet!
Nr.1 Relais und LED1. (Testschaltung)
Nr.2 Relais und LED2. (100% Leistung)
Nr.3 Relais und LED3. (Leichtes Überladen)
Nr.4 LED4.            (Programm Ende, und übergabe an
                       andere Steuerung(Normalbetrieb))
Nr.5 nicht verwendet!

Ausgänge schalten auf Positiv!

LG
Michael

von ... (Gast)


Lesenswert?

Könnte man nicht 3* NE555 nehmen...jedes geschaltete Relais macht über 
nen Fet den jeweiligen NE555 wieder aus?

von Harald Wilhelms (Gast)


Lesenswert?

... schrieb:
> Könnte man nicht 3* NE555 nehmen...jedes geschaltete Relais macht über
> nen Fet den jeweiligen NE555 wieder aus?

Zweieinhalb Minuten sinf für analoge Zeitgeberschaltungen schon ein
bisschen lang. Da wäre eine kleine Zählerschaltung mit ca. 3 ICs
schon angebracht.
Gruss
Harald

von Michael H. (dicker721)


Lesenswert?

... schrieb:
> Könnte man nicht 3* NE555 nehmen...jedes geschaltete Relais macht über
> nen Fet den jeweiligen NE555 wieder aus?

Danke hatte das mit dem im moment noch eingebauten einfach Timer 
gemacht, Relais flattern viel Geld viele Bauteile, Aufwendige 
abgleicherei (Feintuning) ich finde das mit dem Tiny viel besser 
vorallem viel Kompakter, und auch noch Zuverlässiger ohne 
Relaisflattern, und genauer und Billiger.
Was habt ihr alle immer mit eurem NE555 Zeugs wenn es um eine 
Zeitsteuerung geht, ist es etwa verwerflich wenn man ne Atmel dafür 
benutzt?

Vorallem schaut euch mal den Code an, wie winzig der für die Anwendung 
ist?
1
>$regfile = "attiny13.dat"          'definieren des verwendeten Chips
2
>
3
>Config Portb = Output
4
>
5
>Do
6
>
7
>Portb = 0
8
>Portb.1 = 1                                           'Generatotest ein
9
>Wait 22                                                     'Warten 250
10
>Portb.2 = 1                                       'Generator auf 100%
11
>Wait 16                                                     'Warten 120
12
>Portb.2 = 0                                     'Generator 100% aus
13
>Portb.3 = 1                        'Generator auf leichte Überladung
14
>Wait 25                                                     'Warten 300
15
>Portb.3 = 0
16
>Wait 4
17
>Portb = 0
18
>Portb.4 = 1                          'Generator Normalbetrieb
19
>End                                                         'end program
20
>
21
>Loop

hab die angaben hinten zwar nicht mehr Aktualisiert aber das Programm 
ist doch klein oder?

von Michael H. (dicker721)


Lesenswert?

1
$regfile = "attiny13.dat"        'definieren des verwendeten Chips
2
3
Config Portb = Output             'PortB als ausgang schalten
4
5
Do
6
7
Portb = 0                         'alle Pimd an Port B auf 0 also aus
8
Portb.1 = 1                       'Generatotest ein (kohlen
9
                                   testen Warmlaufphase)
10
Wait 22                           'Warten 22
11
Portb.2 = 1                       'Generator auf 100%
12
Wait 16                           'Warten 16
13
Portb.2 = 0                       'Generator 100% aus 
14
Portb.3 = 1                       'Generator auf leichte Überladung
15
Wait 25                           'Warten 25
16
Portb.3 = 0                       'Zurück zum Test für kurze Zeit
17
                                   Ladekontrolle signalisiert Ende vom 
18
                                   Programm für etwa 13 Sekunden
19
Wait 4                            'Warten 4
20
Portb = 0                         'alle Pins von Port B auf 0 (aus(
21
                                   Generator Normalbetrieb))
22
Portb.4 = 1                       'Status LED (später grün zeigt am Timer
23
                                   normalen Regelbetrieb und Programmende
24
                                   an
25
End                               'end program
26
27
Loop

Habe die Angaben nochmal für besseres Verständniss überarbeitet.
LG
Michael

von Harald Wilhelms (Gast)


Lesenswert?

Michael Haussmann schrieb:

>> Könnte man nicht 3* NE555 nehmen...

> Danke hatte das mit dem im moment noch eingebauten einfach Timer
> gemacht, Relais flattern viel Geld viele Bauteile,

Naja, wenn das Relais flattert, hast Du irgendwas falsch gemacht;
Das kann Dir bei Deinem uC dann auch passieren

> ich finde das mit dem Tiny viel besser vor allem viel Kompakter,

Das stimmt natürlich. Wenn Du sowas innerhalb einer Stunde
programmiert bekommst, ist es natürlich auch schneller.

> und auch noch Zuverlässiger ohne Relaisflattern,

Das stimmt nun wieder nicht. Bei der Entstörung einer uC Schaltung
muss man sich sicherlich etwas mehr Mühe geben.

> Was habt ihr alle immer mit eurem NE555 Zeugs wenn es um eine
> Zeitsteuerung geht, ist es etwa verwerflich wenn man ne Atmel dafür
> benutzt?

Nein, allerdings gibts nach wie vor eine Menge Leute, die so ein
Programm eben nicht in einer Stunde schnell schreiben können.
Dann bekommt man eine Lösung mit 4000er ICs schneller aufgebaut.
Gruss
Harald

von Michael H. (dicker721)


Lesenswert?

Schon gut Harald, hast recht, bin Stunden drann gehockt bis es ging un d 
dann der Feinschliff, aber wenn ich mir die einfache Timerschaltung 
vorstelle mit herkömmlicher Technik da hab ich noch ewig mit Stopuhr und 
Schraubendreher rumgeorgelt bis das Ding etwa das gemacht hatte, 
vorallem der selbe Aufwand wäre gleich 5 mal für das was nun dieser eine 
Tiny macht, aber halt viel Zeit aber dafür dann ganz fertig nur noch 
Transistoren drann Stromversorgung LED's alles auf ne Platine mit den 
Relais verbinden und es sollte fertig sein.

Im Grunde ist es nun echt abhängig vom eigenen Geschmack was man macht, 
die Zahlen im Programm weichen natürlich ab von dem was sie bedeuten, 
aber surch etwas mehr oder weniger hab ich es dann ganz gut hinbekommen, 
jedenfalls für den Zweck den das ganze erfüllen soll.

Und andere können das Bascom Programm ja auch noch benutzen und Zeit 
Sparen, einfach andere Zahlen verwenden, oder weniger Ports benutzen 
oder mehr gehen auch noch, z.b. 2 Relais oder LED's mehr, wie auch 
immer, das Spart dann denke ich Zeit, bei der Entwicklung und ist dann 
Hilfreich.

LG
MIchael

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.