Forum: Mikrocontroller und Digitale Elektronik Pumpensteuerung


von Kurt W. (surfer2000at)


Lesenswert?

Projektvorstellung eines µC - Anfängers

Gleich vorweg, am 02.01.2014 hielt ich zum erstenmal einen µC in der 
Hand.
Und von C/C++ wußte ich lediglich, dass es sich um eine 
Programmiersprache handelt. Allerdings habe ich einige 
Elektronik-Erfahrungen und kann auch mit OPV umgehen.

Nun zu meinem Projekt:

µC ATmega8-16PU, Programmiersprache C, ein STK500 ist bereits in 
Betrieb.

Geplant ist eine Steuer- und Regeleinheit für ein Schwimmbad mit Solar- 
und Zusatzheizung, einmal direkt und einmal über einen Wärmetauscher.

Die Umsetzung stelle ich mir folgendermaßen vor:

A 01)
Eine Schaltuhr mit 4 Ein- bzw. 4 Ausschaltzeitungen (einstellbar) für 
die Pumpenlaufzeiten. DCF Empfang ist nicht möglich! Ausgang PB1

A 02)
Differenztemperaturregelung. Die Becken- und die Kollektortemp. werden 
mit KTY Fühlern erfaßt und über OPV´s in Spannungen umgewandelt, welche 
dann an die ADC´s (PC4, PC5) des µC geführt werden. Ausgang PB2

A 03)
Temperaturregelung für Zusatzheizung, Ausgang PB2
Temp. einstellbar, Anforderung permanent ein oder permanent aus

A 04)
Ein LCD (EA W402B-NLW) dient als Temp- und Zeitanzeige.
Ein Menuführung soll realisiert werden.

A 05)
Bedient werden soll das Ganze mit insgesamt 6 Tasten :
  1) (PC0 5,0V) Aus - Ein -Automatik
  2) (PC0 2,5V) Setup
  3) (PC1 5,0V) Enter
  4) (PC1 2,5V) Info
  5) (PC2 5,0V) +
  6) (PC2 2,5V) -


Das Ganze werde ich in Teilprojekte unterteilen:
Timer, Schaltuhr - Menuführung, Wertübergabe - ADC-Auswertung o.dgl., 
diesbezüglich kann ich mit meinen derzeitigen Kenntnissen noch keine 
genauen Aussage treffen.

Das Motto lautet LEARNING by DOING

Ich hoffe auf Unterstützung und bitte um Nachsicht, wenn ich ab- und zu 
(am Anfang eher häufiger) vermeintlich unsinnige Fragen stelle.

Diesen Thread habe ich als Information für hilfsbereite User in diesem 
Forum gestellt, damit ich nicht jedesmal das ganze Projekt neu erklären 
muss.

mfG Kurt

von Reinhard #. (gruebler)


Angehängte Dateien:

Lesenswert?

Kurt W. schrieb:
> Gleich vorweg, am 02.01.2014 hielt ich zum erstenmal
> einen µC in der Hand.

Das Leben hält schon schöne Momente bereit :-)

Aber im Ernst.

Dein Projekt klingt intessant aber aufwändig.
Ausserdem nehme ich an, die Technik soll lange
und zuverlässig funktionieren.

Ich selbst habe sehr viel Erfahrung mit Mcs
und würde für diese Aufgabe eine der folgenden
LOGO!-Starterboxen kaufen.
(Inhalt siehe die Bilder)

SPS-Starterkit Siemens
LOGO! TD Starter Kit 0BA6
6ED1057-3BA10-0AA6
ca. 250€

SPS-Starterkit Siemens
LOGO! Starter Kit 12/24 0BA7 + KP300 Basic mono
6AV2132-0HA00-0AA0
ca. 400€

Stöhn nicht über den Preis.
Zieh erst mal die Kosten ab,
die du für deine Steuerung
incl. Gehäuse, Netzteil.... hast.

: Bearbeitet durch User
von Kurt W. (surfer2000at)


Lesenswert?

@ Reinhard

Ist mir schon klar, dass ich das auch anders lösen könnte, sowas gibts 
sogar in den verschiedensten Ausführungen und Preisklassen fix fertig 
... aber:

Auf diese Art werde ich nie die µ´s durchschauen und C werd ich auch 
nicht lernen. Und sorry, aber die Kosten sind in diesem Fall für mich 
zweitrangig.

lG Kurt

von Karl H. (kbuchegg)


Lesenswert?

Kurt W. schrieb:

> Auf diese Art werde ich nie die µ´s durchschauen und C werd ich auch
> nicht lernen.

Dieses Projekt ist dafür sowieso nicht geeignet.
Viel zu umfangreich, viel zu komplex.

Fang mit C am PC an, kauf dir einen Kernighan&Ritchie und arbeite da mal 
mindestens das erste Drittel durch. Danach kannst du auf den µC wechseln 
und dort mit dem AVR-gcc-Tutorial deine ersten Schritte machen.
Fang am µC mit Aufgabenstellungen an, die dort sinnvoll sind. Wie das 
berühmt berüchtigte LED-Blinken, Taster abfragen, mal ein Relais 
schalten, etc. Dann wird irgendwann mal ein LCD kommen und die Taster 
werden durch die Entprellung gehen. Dann kann man auch schon mal 
kleinere Projekte machen, in denen erste Ansätze zu einem Menü zu finden 
sind. Irgendwann nimmt man sich dann zb. schon auch mal den ADC vor. 
Vielleicht sogar im Zusammenhang mit einer PWM. Auf jeden Fall aber ist 
der sichere Umgang mit Timern auf einem µC schon mal Grundvoraussetzung.
Wenn du dann soweit bist (das kann, wenn du fleissig bist, bereits in ca 
1 Jahr sein), dann bist du auch soweit, dieses Projekt angehen zu können 
und hast ganz gute Chancen, dass das auch was wird.

: Bearbeitet durch User
von Kurt W. (surfer2000at)


Lesenswert?

@  Karl Heinz

Wenn ich 20 Jahre alt wäre würde ich Deinen Ratschlag befolgen. Bin ich 
aber (leider) nicht mehr. Du hast natürlich recht, dass eine fundierte 
Grundlage sicher der richtige Weg ist, eigenständig Programme zu 
erstellen. Aber das will ich gar nicht, ich habe nicht die Absicht, 
Programmierer zu werden.

Selbstverständlich habe ich mir parallel dazu einige "Lehrbücher" und 
Experimentierkästen gekauft, und das "gefürchtete LED blinken" Programm 
habe ich auch schon absolviert. Der Vergleich hinkt jetzt vorne und 
hinten, aber sieh es mal so: Um Autofahren zu lernen, muss niemand 
wissen, wie eine Pleuelstange gegossen oder ein Gummireifen hergestellt 
wird, aber jeder sollte wissen, wo der Ölstand oder der Luftdruck 
kontrolliert wird.

Es ist mir vollkommen klar, dass ich ohne Hilfe da nicht sehr weit 
kommen werde, aber genaugenommen habe ich schon ziemlich sämtliche 
Einzelteile zusammen, mein LCD zeigt bereits die "Uhrzeit" an 
(einstellen kann ich es noch nicht), ein ADC schaltet bereits tadellos 
(noch ohne Hysterese) usw.
Selbstverständlich gehören diese Codeschnipsel noch optimiert und 
angepasst, und als nächstes, und das ist vielleicht für mich der 
schwierigste Teil, zusammengeführt.

Anbei hänge ich noch den Code meines 4 x 20 LCD´s ( EA W204B-NLW )an. 
Diverse (Anfänger!) Kommentare habe ich hinzugefügt.

Also wie gesagt, ich ersuche um Nachsicht und bitte trotzdem um Hilfe 
...

von Uwe (de0508)


Lesenswert?

Gerade verstehe ich einen Satz nicht:
"ein ADC schaltet bereits tadellos (noch ohne Hysterese) usw."

Wie das, der lebt und hat eine eigene Meinung?

von Uwe (de0508)


Lesenswert?

Hallo,

nach lesen Deiner Ziele bezweifele ich, dass der ATmega8 dafür genügend 
Flashspeicher hat.

Gerade Menüs mit ihren Texten verschlingen sehr sehr viel davon.
Dabei ist es fast egal, ob man das Menü Funktional oder 
Tabellengesteuert programmiert.

von H.Joachim S. (crazyhorse)


Lesenswert?

bla blub
Natürlich reicht der Mega8. Die Applikation selbst braucht fast nichts.
Haste noch 6kB für Texte :-)

von Arsenico (Gast)


Lesenswert?

Software auf Pumpe.

von Kurt W. (surfer2000at)


Angehängte Dateien:

Lesenswert?

Sorry, ich vergaß, die Datei anzuhängen und hole dies hiermit nach.

@ Uwe:
Schön langsam fürchte ich das auch, aber einen größeren µC
einsetzten kann ich ja dann immer noch ...

und ja, er lebt, ggg ... und wenn er nicht gestorben ist, dann ....

PS:
Die angehängte Datei Main.c ist für das LCD W204B-NLW von EA in 
Verbinung mit einem ATmega8. Ebenfalls angehängt habe ich den 
derzeitigen Schaltplan sowie ein Foto des Versuchsaufbaus.

von Karl H. (kbuchegg)


Lesenswert?

Der Teil hier
1
/// Zeitanzeige ///
2
  
3
  tick = 0;
4
5
  lcd_setcursor(6, 3);    // 6te Spalte, 3te Zeile
6
  lcd_display_number(aktuell.hour);
7
  lcd_data(':');
8
  lcd_display_number(aktuell.minute);
9
  lcd_data(':');
10
  lcd_display_number(aktuell.second);

muss aus der ISR raus.

In einer ISR dauern Ausgaben zum einen viel zu lange.
Das ist das eine 'Problem', mit dem man eventuell sogar noch leben 
könnte. Das viel schwerwiegendere Problem ist aber
* wer sagt, dass die Uhrzeit immer und überall anzuzeigen ist? Kein 
Mensch sagt das. Gerade, wenn da ein Menü angezeigt wird, über welches 
zb irgendwelche Einstellungen gemacht werden, brauchst du den Menüplatz
* am schwerwiegensten ist aber: das wird nicht die einzige Stelle im 
Programm sein, an der Ausgaben gemacht werden. Hast du eine Idee, was 
passiert, wenn gerade im Hauptprogramm eine Ausgabe gemacht wird, 
währenddessen ein Timer-Interrupt kommt der nichts besseres zu tun hat, 
als selbst eine Ausgabe zu machen? Da kann dir alles mögliche passieren, 
angefangen von "einer normalen Textausgabe wird plötzlich der Cursor 
unter dem Hintern weggezogen" bis hin zu "das LCD hängt sich komplett 
auf, weil sich die Hardware-Ansteuerungen gegenseitig in die Haare 
kommen".

von Karl H. (kbuchegg)


Lesenswert?

1
A 05)
2
Bedient werden soll das Ganze mit insgesamt 6 Tasten :
3
1) (PC0 5,0V) Aus - Ein -Automatik
4
2) (PC0 2,5V) Setup
5
3) (PC1 5,0V) Enter
6
4) (PC1 2,5V) Info
7
5) (PC2 5,0V) +
8
6) (PC2 2,5V) -

Das bedeutet du willst die Tasten mit dem ADC abfragen?
Finde ich keine gute Idee.

Mach dir mal einen Überblick, welche Pins du eigentlich frei hast. Zur 
Not kommt man auch mit 3 Tasten durch (jeder Drehencoder hat im Prinzip 
nur 3 Tasten) und gerade bei Einstellungen will ich mir das eigentlich 
nicht antun, auf einen Autorepeat verzichten zu müssen. D.h. da kommt 
die PeDa Entprellung in die ISR mit dazu und du hast im Prinzip deine 
Tasten damit hardware-abfragemässig schon erledigt und bereit zur 
Verwendung.


Auf meiner Heitungssteiuerung hab ich das zb so gemacht:
3 Tasten (eigentlich ein Drehencoder mit Drucktaster, spielt aber keine 
Rolle. Für deine Zwecke sind das einfach nur 3 Tasten: '+', '-' und 
'Enter')


Es gibt einen 'Hauptbildschirm' (4-zeiliges LCD)
Auf dem werden die wichtigsten aktuellen Werte angezeigt.
Mit '+' bzw '-' kann ich zwischen den Operationsmodi wechseln. Bei dir 
ist das 'Steuerung ein', 'Steuerung aus', 'Steuerung automatic'.
Ein Druck auf 'Enter' bringt mich ins Menüsystem.
Da gibt es für die einzelnen Bereiche jeweils eigene Submenüs. MIttels 
'+' bzw '-' kann ich zwischen den Menüpunkten wechseln. Ein Druck auf 
'Enter' löst die jeweilige Operation aus. In jedem Menü gibt es einen 
Punkt 'Exit', der mich wieder eine Menüebene höher bringt bzw. dann 
wieder zurück zum Hauptbildschirm.
Einzelne Menüpunkte können auch so sein, dass sie nicht in ein Submenü 
weiter verzweigen, sondern in eine Einstellmaske um zb die Uhrzeit 
numerisch einzustellen. Die Tasten '+' bzw '-' dienen dann dazu, den 
jeweiligen numerischen Wert zu verändern, mittels 'Enter' geht es weiter 
zum nächsten Wert bzw. wenn das bereits der letzte Wert für diese 
Eingabe war, wieder zurück zum aufrufenden Menü.

PS: wenn dein LCD Code bereits korrekt funktioniert, dann lagere ihn aus 
in ein eigenes C-File, so dass du dir den Hauptcode möglichst kurz und 
übersichtlich hältst. Das hat ja auch keinen Sinn, wenn dein 
Programm-Text in ein einziges C-File gequetscht ist und das so lang ist, 
dass du dir einen Wolf scrollst, wenn du irgendwas suchst. Gerade 
Funktionalität wie LCD ist sauber in sich geschlossen, so dass man das 
gut in eine eigene C-Datei auslagern kann.

> @ Uwe: Schön langsam fürchte ich das auch

Keine Sorge. Bei deinen Anforderungen ist der Mega8 groß genug. So 
umfangreich ist das Programm auch wieder nicht. Da sind ja kaum Daten zu 
verarbeiten. Und mit 8Kb kommst du locker über die Runden.

Darüber
> Aber das will ich gar nicht, ich habe nicht die Absicht,
> Programmierer zu werden.
sag ich nicht viel. Denn ein gewisses Mindestmass an Wissen braucht man 
nun mal. Selbst wenn man kein professioneller Programmierer werden 
möchte. Wer Schach spielen will, muss nun mal die Möglichkeiten aller 
Figuren kennen und nicht nur wissen wie Bauer und Dame ziehen können. 
Das du die Feinheiten der sizilianischen Eröffnungen als Hobby-Spieler 
nicht kennen musst, ist schon ok. Aber ein gewisses Mindestmass braucht 
es eben. Sonst spielt man nicht Schach, sondern hampelt herum. In der 
Programmierung ist das nicht anders.
> Es ist mir vollkommen klar, dass ich ohne Hilfe da nicht sehr weit kommen werde
Das Problem ist nämlich: Wie soll man jemandem helfen, der bei jedem 
2-ten Wort ein 'Hä' gepaart mit einem Schulterzucken von sich gibt, weil 
er die Worte nicht versteht bzw. den Sinn von Sätzen nicht versteht, in 
denen der Helfer eine Grundidee skizziert und erwartet, dass der 
Hobbyprogrammierer in der Lage ist, diese Idee auch umzusetzen, weil das 
eigentlich eine Basistechnik ist.
Oder auf Deutsch: Wer in einem Installateurforum nachfrägt, wie man 
einen Dichtungssitz im Wasserhahn nachfräst, aber nicht mehr kann als 
mit dem Hammer auf Rohre einzudreschen, sollte besser die Finger davon 
lassen. Nur mit dem Unterschied, dass man das eine in einer halben 
STunde zeigen kann, während Basis-Programmierung lernen ein ganz klein 
wenig länger dauert.
Und da ist es mir auch wurscht, dass du keine 20 mehr bist.

: Bearbeitet durch User
von Kurt W. (surfer2000at)


Lesenswert?

@ Karl Heinz

Danke für die zahlreichen Hinweise.

Allerdings habe ich die 6 Tasten nicht grundlos gewählt. Ich sagte ja 
schon, dass es vergleichbare Lösungen bereits fix und fertig in diversen 
Preisklassen zu kaufen gibt. Ob ich nun die ADC´s für die Tasten 
verwende oder nicht, möchte ich mir vorläufig noch offen lassen. V

Ich möchte das Projekt jedoch so bedienerfreundlich wie möglich 
gestalten, so dass nicht nur ich es bedienen kann sondern dass es nahezu 
selbsterklärend ist. Derzeit habe ich einen (kommerziel hergestellten) 
Regler einer auch in diesem Forum bekannten Firma in Bertieb, ein wahres 
Wunderwerk an Technik und Einstellmöglichkeiten. Nur eine einfache 
Bedienung ist was anderes - wenn da irgendwie an der Anlage hantiert 
werden muss, wird einfach der Stecker gezogen ...

Deinem Vorschlag, bestimmte Programmteile auslagern, kann ich nur 
kommentarlos zustimmen, das ist sowieso geplant. Wie gesagt, die hier 
vorliegende Version ist der Anfang.

mfG Kurt

von Karl H. (kbuchegg)


Lesenswert?

Kurt W. schrieb:

> Allerdings habe ich die 6 Tasten nicht grundlos gewählt.

Drum sagte ich ja auch, erst mal einen Überblick verschaffen, welche I/O 
benötigt werden und unabdingbar sind. Wenn du 6 Tasten willst, dann 
benutz auch 6 I/O dafür (mit einer Matrix käme man noch auf 4 I/O 
runter, bringt also so gesehen nicht so wahnsinnig viel).

> Ich sagte ja
> schon, dass es vergleichbare Lösungen bereits fix und fertig in diversen
> Preisklassen zu kaufen gibt.

Das heisst ja nicht, dass man nicht seine eigene Lösung dafür machen 
darf. Die kann von der Benutzerfreundlichkeit genausogut sein, wie die 
gekaufte. Man muss sich nur trauen, die Benutzung auch mal anders zu 
machen.

> Ob ich nun die ADC´s für die Tasten
> verwende oder nicht, möchte ich mir vorläufig noch offen lassen. V

Das kannst du aber nicht. Mit der Vorgabe
1
1) (PC0 5,0V) Aus - Ein -Automatik
2
2) (PC0 2,5V) Setup
3
3) (PC1 5,0V) Enter
4
4) (PC1 2,5V) Info
5
5) (PC2 5,0V) +
6
6) (PC2 2,5V) -
ist durch die unterschiedlichen Spannungslevel (wenn ich die richtig 
interpretiere), der Einsatz des ADC ein muss. Anders kannst du nun mal 
5.0V nicht von 2.5V unterscheiden.

> Ich möchte das Projekt jedoch so bedienerfreundlich wie möglich
> gestalten, so dass nicht nur ich es bedienen kann sondern dass es nahezu
> selbsterklärend ist.

Ja. Das bedeutet aber noch lange nicht, dass man für jeden Pfurz eine 
eigene Taste braucht.


Die Kernaussage um die es mir geht lautet:
Wenn du die Sache mit den Spannungen bei den Tasten nur deswegen gemacht 
hast, weil du sonst zu wenige I/O hast, dann überleg dir mal, ob du 
nicht mit einer geänderten Bedienerführung und weniger Tasten auch über 
die Runden kommst. Es gibt Möglichkeiten dazu.
Wenn du aber sowieso genügend I/O Pins hast, so dass du deine Tasten 
alle direkt anschliessen kannst, dann ist das Thema sowieso gestorben.
Aber die Krücke mit unterschiedlichen Spannungen würde ich nicht 
akzeptieren. Dann schon lieber eine geänderte Bedienerführung.

von Kurt W. (surfer2000at)


Lesenswert?

> Aber die Krücke mit unterschiedlichen Spannungen würde ich nicht
> akzeptieren.

Ups .... das war jetzt eindeutig.

Eigentlich dachte ich, es wäre eine durchaus übliche Methode, mehrere 
Eingänge zu schaffen - ein Beitrag aus dem Forum hier brachte mich auf 
diese Idee.

Nun, es ist wie gesagt auch anders möglich, ich wollte mir nur als 
Reserve einige PIN´s freilassen. Im schlechtesten Fall wechsle ich dann 
halt auf einen anderen µC. Danke jedenfalls für den Hinweis.

mfG Kurt

: Bearbeitet durch User
von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Ich finds ja auch schön, das du das Rad neu erfinden willst, aber ich 
kann dir nur raten, für bekannte Komponenten wie z.B. das LCD, einfach 
auf gut funktionierende und verlässliche Bilbliotheken zurückzugreifen. 
Die LCD Behandlung hat Peter Fleury mit seiner Lib so gut erschlagen, 
das du die Funktionen einfach benutzen kannst...

http://homepage.hispeed.ch/peterfleury/

Du hast dann mehr Zeit, um dich auf die anderen Sachen zu konzentrieren, 
ich sage nur Zeitschaltuhr, Regler für Temperatur usw...
http://www.mikrocontroller.net/articles/AVR_-_Die_genaue_Sekunde_/_RTC

von H.Joachim S. (crazyhorse)


Lesenswert?

Von wegen Krücke mit Tasten an einem A/D-Eingang. Das ist durchaus 
gängige Praxis und unter Umständen  sehr effizient. Wenn man eh genug 
I/Os frei hat und sich Taster und MC auf einer Platine befinden, macht 
es wenig Sinn - sonst aber schon.
Beispiel Porsche-Lenkrad: 8 Tasten an einer Leitung (flexible Platine, 
die um die Lenksäule geht als Leitung zu Steuergerät. Funktioniert 
perfekt und mit minimalem Aufwand.

von Guest (Gast)


Lesenswert?

Immer diese Fundamentalisten :D
Habe C eigentlich erst auf dem µC intensiver verwendet. Am Rechner kommt 
man mit Java oder auch Perl viel schneller ans Ziel, daher bin ich da 
eigentlich nie richtig mit C in Berührung gekommen. Wenn du Verständnis 
für Elektronik mitbringst und dir binäre Operatoren vertraut sind 
(setzen/lesen von Registern, Bitshiften, etc.) dann ist C auf dem µC 
wirklich kein so großes Hexenwerk. Aufpassen muss man eben bei den 
Interrupts, da man sich da schnell Variablen verbiegen kann und am Ende 
nix sinnvolles mehr drin steht. Aber du brauchst auf alle Fälle nicht 
vorher Solitär in C nachprogrammieren, bevor du dich an nen µC wagst.

Für das Abfragen von vielen Tastern kann man das natürlich durchaus über 
einen ADC machen, zuverlässiger finde ich aber eher das Multiplexen. Für 
Taster braucht man da auch gar keine große Sample-Rate und ist mit 3 IOs 
auch recht "günstig" dabei.

Für das LCD würde ich dir wohl auch die Lib von Peter Fleury anraten. 
Überhaupt gibt es einen ganzen haufen nützlicher Bibliotheken im Netz...

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.