Forum: Mikrocontroller und Digitale Elektronik Rolladensteuerung Denkanstoß


von Christian Miethaner (Gast)


Angehängte Dateien:

Lesenswert?

Hallo beisammen,

ich hab da so ein Problem.
Ich experimentiere mit einem Atmega8 und möchte daraus eine
Rolladensteuerung bauen. In einem Zimmer habe ich 5 Rolläden (gesteuert
über Pb0-4, Pb6 ist auf oder ab)welche jedoch unterschiedlich schnell
laufen. Mit meinem ersten Versuchen in Bascom habe ich den angehängten
Code zum testen erzeugt, hier funktioniert das rauf und runter schon
ganz gut, jedoch habe ich zwei Probleme.
1. Das mit dem Stopp unterbricht zwar das Programm, aber der Wait
befehl blockiert mir den Ablauf, d.h. ich muß warten bis die Zeit
abgelaufen ist befor ich wieder eine Taste drücken kann.

2. Die motoren laufen unterschiedlich schnell, jetzt suche ich nach
einer Lösung, wie ich zu jedem Motor eine eigene Zeiteingabe machen
kann. Die Sache nacheinander zu realisieren bekäme ich vielleicht noch
hin, aber ich möchte daß die Motoren gleichzeitig anlaufen und nach
unterschiedlichen Zeiten stehen bleiben.

Könnt Ihr mir behilflich sein den richtigen Weg zu finden.

von josef (Gast)


Lesenswert?

Mußt mal für jeden Rollladen einen eigenen Timer anlegen und jeden
nacheinnander abfragen (so eine Art Multitasking)


SG Josef

von Christian Miethaner (Gast)


Lesenswert?

Hallo Josef,

vielen Dank für Deine Antwort.
Beim Wort Timer läufts mir kalt den Rücken runter, so ganz habe ich die
Sache noch nicht gefressen, obwohl ich mich schon Stunden durch das Netz
gewühlt habe.
Wie ich einen einzelnen Timer aufrufe um zb. eine LED zum blinken zu
bringen krieg ich noch hin, aber mehrere Timer gleichzeitig ??
Hast Du evtl. ein paar Code schnipsel aus einem anderen Programm dazu,
vielleicht fällt der Groschen wenn ich mal ein Praxisbeispiel sehe.

Danke
Gruß Christian

von ...HanneS... (Gast)


Lesenswert?

Oder die Endlagenschalter der Rolladenantriebseinheiten korrekt
justieren. Dann laufen sie auch nicht über das Ziel hinaus.
Original-Rolladen-Schaltuhren schalten auch länger als der
Rolladenantrieb zum Erreichen der Endstellung braucht.

...

von josef (Gast)


Lesenswert?

Wait-Schleifen darf es keine mehr geben. Das ist kein guter
Programmierstil. Wo fangen wir also an ? Du brauchst unbedingt einen
Timer -Interrupt , der zB. alle sec aufgerufen wird. Dort
decrementierst du zb. 10 Timer1-10 (Softwaretimer- char-Variablen)
Diese lässt du maximal bis 0 herunterzählen. Toll wäre es, wenn du in C
programmieren würdest. In Basic ist das alles viel schwieriger.
Kannst du C ?


SG Josef

von Christian Miethaner (Gast)


Lesenswert?

Hallo zusammen,

zu Hannes,
das mit den endlagen Schalter ist klar, so läuft es ja momentan mit
meiner analogen Relaisplatine. Das mit dem Timing ist eigentlich nur
notwendig, weil ich verschiedene Programme haben will um automatisch zu
beschatten. Also viertelt, halb, oder dreiviertelt runter zu fahren. Die
Endpunkte sind Zeitlich unrelevant, da ja die internen Endschalter
greifen.

Zu Josef,
das mit den Wait Schleifen habe ich schon gedacht, ist halt so ein
Anfängerprogramm. C kann ich leider nicht, Basic war halt das die erste
Wahl weil es mir als Anfänger verständlich schien und mit Bascom
eigentlich einfach zu handhaben war.
Meinst Du ich sollte noch umsatteln auf C, jetzt gehts noch.
Aber wahrscheinlich gibt es dazu viele unterschiedliche Meinungen.

Gruß Christian

von josef (Gast)


Lesenswert?

C ist die Wahl der Profis. Basic ist eine gute Einsteigersprache.
Sicher die beste, die es gibt. Aber mach den Umstieg jetzt. Lade dir
Codevision herunter. Gibts eingeschr. als vollfunktionierende Demo.
Natürlich geht es in auch in Basic. Da gibt sicher ein paar Leute, die
dir da weiterhelfen. Für Codevision habe ich eine Menge an
Softwareschnipsel.

SG Josef

von josef (Gast)


Lesenswert?

Ziel muss es sein, alle 5 Antriebe gleichzeitig zu steuern, jeder mit
seiner zugewiesenen Zeit. Natürlich müßen auch alle Taster gleichzeitig
abgefragt werden (aus Sicherheitsgründen).
Überleg dir mal, wie das gehen könnte.

SG Josef

von ...HanneS... (Gast)


Lesenswert?

Ok, mit den Endschaltern hätte ja sein können.

Schon wieder Glaubensstreit der Programmiersprachen... Grins...

Um die Möglichkeiten und Grenzen des Controllers zu erkennen, sollte
man mit Assembler beginnen.
Im Gegensatz zum "Computer" programmiert man beim MC nicht unter
einem Betriebssystem, sondern direkt an der Hardware. Und da ist man
mit einer Hochsprache zu weit weg. Jeder, der wirklich richtig gut mit
C Mikrocontroller programmiert, wird bestätigen, dass man ein gewisses
Maß an ASM-Kenntnissen braucht. Anders ist es schwer, die gesamte
integrierte Peripherie (Timer, ADC, I/O, Ana-Comp, INT) zu verstehen.
In ASM sucht man sich die Features im Datenblatt zusammen, setzt
mittels I/O-Zugriff die richtigen Bits in den entsprechenden
I/O-Registern und schon funktioniert das. Man braucht sich nicht mit
irgendwelchen kryptischen Config's herumzuärgern.

Für dein Programm würde ich einen Timer zur Erzeugung eines Zeittaktes
nutzen und fast das gesamte Programm (Tasten entprellen, Sensoren
einlesen, Software-Timer verwalten, Aktionen auslösen, PWM erzeugen...)
im Timer-Int laufen lassen. Im Hauptprogramm wird der AVR dann schlafen
geschickt, das erhöht die Timer-Genauigkeit, da der Int-Aufruf immer im
gleichen definierten (Schlaf-) Zustand erfolgt. Sollten langwierige
Berechnungen erforderlich sein, so kann man diese flaggesteuert in der
Hauptschleife erledigen, dies ist aber selten der Fall. Warteschleifen
gibt es dann garnicht, was jetzt nicht gemacht werden kann, wird eben
beim nächsten Int. gemacht. Somit kann man auch LCDs so ansprechen.

...

von Christian Miethaner (Gast)


Lesenswert?

Hallo Josef,

habe mir gerade Codevision gesaugt um mir die Sache mal anzuschauen.
Wie weit komme ich mit der demo Soft (beim Mega8) oder ist es
unumgänglich früher oder später die Vollversion anzuschaffen.

gruß Christian

von josef (Gast)


Lesenswert?

Diese läuft bis ca. 1 Kbyte. Mehr als genug für dieses Projekt.


SG Josef

von thkais (Gast)


Lesenswert?

Ich habe bei mir etwas ähnliches laufen - nur mit mehr Rolläden und auch
einigen Lichtschaltern...
Ich habe mir einen - nun, ich nenne es mal so - Sequenzer programmiert.

Zeitbasis ist bei mir 1/10 Sekunde, das ist eine Auflösung, die für
alle meine Aufgaben ausreicht. Die Sequenzen bestehen aus eine
Anreihung von Befehlen und anschließenden Wartezeiten, ein
Befehlsinterpreter setzt die Kommandos um.
Das Hauptprogramm wartet eigentlich nur, bis der nächste 1/10-Sekunden
Impuls kommt, dann werden nacheinander alle Sequenzen abgefragt, ob sie
aktiv sind, welchen Wert der Timer hat und welcher Befehl momentan
ansteht. Natürlich muß man für jede Seqzenz einen eigenen Timer (man
kann es eher als Zähler sehen) anlegen.
Eine Sequenz kann z.B. so aussehen:

1, 15, 250
2, 15, 1
0, 0,  0

Die erste Zahl ist der Befehl. "1" bedeutet: Setze den Ausgang. "2"
= Lösche den Ausgang. Die zweite Zahl ist die Nummer des Ausgangs (bei
mir sind es momentan 64), die dritte Zahl die Zeit in 1/10 Sekunden,
bis der nächste Befehl ausgeführt werden soll.
Übersetzt heißt das also: Setze Ausgang 15, warte 25 Sekunden, lösche
Ausgang 15, warte 1/10 Sekunde, Ende der Sequenz.

Ich kann mit dieser Methode bis zu 64 Sequenzen unabhängig voneinander
ablaufen lassen, dies fängt bei der Rolladensteuerung an und hört
beispielsweise bei der Steuerung des Lüfters im Bad auf.
Neben diesem Sequenzer läuft noch ein weiterer Befehlsinterpreter, der
die Zuordnung der Eingänge zu den Ausgängen übernimmt (z.B. welcher
Lichtschalter schaltet welche Lampe, Dimmerfunktion, Wechselschalter
etc.)
Vielleicht ist das ja ein Denkanstoß.

von Christian Miethaner (Gast)


Lesenswert?

die Sache mit der Programmiersprache wurmt mich seit dem Tag an dem mir
der mega8 vom Briefträger übergeben wurde.
Womit soll ich Ihn füttern??
Ich habe mir das Assembler tutorial angeschaut, dann bascom.
Bei Bascom hatte ich aufgrund der verständlichen Sprache sofort kleine
Erfolge, die Sache mit Assembler ist mir immer noch etwas ungeheuer.
Nachdem ich jetzt aber ein gezieltes Projekt habe muß ich mich
entscheiden.  Wer übernimmt das für mich ...  :-)
Ich weis keiner.
Code vision habe ich mittlerweile installiert, sieht nicht schlecht
aus.
Die Sache mit Assembler habe ich ja mitlerweile xmal gelesen, daß das
als Grundlage nicht schlecht ist, aber jedesmal wenn ich so einen Code
sehe gehen mir die Augen über.
Für mich erscheint das sehr kompliziert und unübersichtlich,
wahrscheinlich denke ich da etwas kompliziert, weil ich die Sache noch
nicht verstehe.


Gruß Christian

von Christian Miethaner (Gast)


Lesenswert?

Hallo thkais,

mit welcher Sprache hast Du das umgesetzt ?

Gruß Christian

von josef (Gast)


Lesenswert?

So könnte die Motorensteuerung aussehen (in C):

//Jalousie 1

if (Timer_Rol1_auf  > 0 ){ Motor1_Auf = 0; Motor1_Ab  = 1;}
if (Timer_Rol1_ab  > 0 ) { Motor1_Ab  = 0; Motor1_Auf = 1;}

//Jalousie 2

if (Timer_Rol2_auf  > 0 ){ Motor2_Auf = 0; Motor2_Ab  = 1;}
if (Timer_Rol2_ab  > 0 ) { Motor2_Ab  = 0; Motor2_Auf = 1;}

//....

//Mit den Tastern kannst du den Timern beliebíge Zeiten zuweisen.zB:

if (PINB.0 ==0) Timer_Rol2_auf = 100;  //100 sec Jalousie 2 auf
if (PINB.1 ==0) Timer_Rol2_auf = 50;  //50 sec Jalousie 2 auf usw


SO kannst du x Motoren und Taster gleichzeitig steuern.


SG Josef

von josef (Gast)


Lesenswert?

Der Code soll natürlich nur das Prinzip aufzeigen. In der Praxis müssen
noch einige Sachen (Verriegelungen, Umschaltpausen, Tastenentprellung
usw. ) eingebaut werden.


SG Josef

von thkais (Gast)


Lesenswert?

@Christian:
Das Ganze läuft auf einem MCS-51 (80C535 mit 32K RAM) seit ca. 5 Jahren
24h / 7 Tage.
Geschrieben habe ich das damals in Assembler, das Ganze ist auf mehrere
Dateien verteilt und in zig Subroutinen verwoben... Erstaunlicherweise
verstehe ich auch nach 5 Jahren noch, was ich da getan habe...
Ich würde Dir empfehlen, mit Assembler anzufangen. Assembler ist die
einfachste und logischste Programmiersprache, und gerade beim Atmel ist
es sehr einfach, da es 32 fast gleichberechtigte Register gibt. Bei
anderen Prozessoren muß z.B. jede Rechenoperation über den Akku (ein
spezielles Register) gehen und man hat wesentlich weniger weitere
Register zur Verfügung - so müssen viele Speicherzugriffe gemacht
werden.
Ich stand vor einigen Wochen auch vor einem Problem, da ich ein
größeres Projekt angefangen habe, das in Assembler einfach zu
unübersichtlich werden würde. Ich muß dazu sagen, daß ich
eingefleischter Hardcore-Assembler-Fan bin....
Basom habe ich mir angeschaut und fand es eigentlich ganz in Ordnung,
Basic ist eine Sprache, die ich verstehe. Aber viele Dinge verschwinden
in einer Blackbox - es kam mir vor, als ob ich eine Tastatur mit
Bauhandschuhen bediene.
Also fiel die Wahl auf C, das für mich immer nur eine Ansammlung von
herumtanzenden Sonderzeichen war. Inzwischen fühle ich mich darin wohl,
man hat die Möglichkeit auf den Controller voll zuzugreifen und kann
trotzdem relativ gut nachvollziehbaren Code schreiben.
(Vor ein paar Wochen noch hätte ich mir lieber einen Finger abgehackt,
als etwas positives über C zu schreiben... ;) )

Wichtig ist: Nicht zuviel auf einmal wollen. Ich sehe immer wieder, daß
Newbies gleich als erstes Programm eine menügesteuerte eierlegende
Wollmilchsau programmieren wollen, am besten noch auf einem KS108
Grafik-Display. Da ist Frust vorprogrammiert.
Es ist wichtig, Schritt für Schritt vorzugehen, sowohl beim Schreiben
der Programme als auch beim Lernen von neuen Features. Erst mal ne LED
einschalten, blinken lassen (Stichwort Timer), dann mal eine serielle
Schnittstelle mit dem PC aufbauen usw.
Vor allem ist es wichtig, sich vorher Gedanken zu machen, was das
Programm können soll. Dann einen Ablaufplan (Struktogramm) aufmalen
oder aufschreiben, dann schreibt sich das Programm ganz von allein.

von Peter D. (peda)


Lesenswert?

@thkais

"(Vor ein paar Wochen noch hätte ich mir lieber einen Finger
abgehackt,
als etwas positives über C zu schreiben... ;) )"


Willkommen im Club.

Da muß jeder MC-Programmierer mal durch.


Peter

von Peter D. (peda)


Lesenswert?

"In einem Zimmer habe ich 5 Rolläden (gesteuert
über Pb0-4, Pb6 ist auf oder ab)welche jedoch unterschiedlich schnell
laufen."


Das schreit geradezu nach einem Scheduler (siehe Codesammlung).

Damit kann man eine fast beliebige Anzahl zeitabhängiger Prozesse quasi
parallel laufen lassen.

Allerdings muß ich zugeben, daß die Funktionen nicht gerade einfach zu
verstehen sind.

Man muß sie aber nicht unbedingt verstehen, sondern nur, wie man sie
aufrufen muß.

Das Beispielprogramm realisiert z.B. 2 voneiander unabhängige
Treppenlichtautomaten.


Peter

von thkais (Gast)


Lesenswert?

@Peter: Ja, ja so kanns gehen g

Was Du "Scheduler" nennst, deckt sich mit meinem "Sequenzer".
Scheduler ist aber der treffendere Begriff ;)
Wieder etwas gelernt.

von axeman (Gast)


Lesenswert?

Hi,
ich hatte eine ähnliche Idee, eine Rolladensteuerung aufzubauen, bin
aber als Maschinenbauer mit den Tiefen der angewandten Elektrotechnik
nicht so vertraut.
Daher meine Frage: Was benutze ich, um von den TTL-Ausgangssignale des
AVRs meine 230V-Spannung schalten zu können? Wo finde ich prinzipielle
Schaltungsbeispiele?

Gibt es irgendwo Lösungen / Anregungen, die eine einstellbare
Zeitschaltuhr integrieren?

Danke für Hilfe,
Gruß aus Berlin, Axel

von Christian Miethaner (Gast)


Lesenswert?

Hallo Axeman,

um den Laststromkreis der Rolläden zu steuern benutzte ich derzeit
Relais, am besten nimmst Du relais mit 2 umschaltern, dann kannst Du
die Versorgungspannungen der Antriebsmotoren gegeneinander
Laststromseitig verriegeln.
Durch die Verriegelung ist sichergestellt, daß der Motor auch bei einer
Fehlansteuerung beider Relais nicht gleichzeitig das Auf und Ab Signal
bekommt, denn das hätte kapputtmachende Auswirkungen.

Die Ansteuerung der Relais via TTL Pegel ist nicht schwierig, ein
Transistor, ein paar Widerstände und ne Diode, fertig.
Schau mal da, dann brauch ichs nicht aufzuzeichnen
www.franksteinberg.de/erel.htm

Die Steuerung des ganzen kannst Du mit einem AVR wunderbar realisieren,
dann gehts Dir aber genau wie mir.

Du must ASSEMBLER lernen.......

Die Ansteuerung meiner derzeitigen Relaiskarte beruht noch auf
Umschaltern (up stop down).
Aber vielleicht bekomm ich die Sache mit Hilfe dieses hervorragenden
Forums doch noch hin, und mein Mega8 darf das künftig machen.

Gruß Christian

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.