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
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
@ 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
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
@ 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 ...
Gerade verstehe ich einen Satz nicht: "ein ADC schaltet bereits tadellos (noch ohne Hysterese) usw." Wie das, der lebt und hat eine eigene Meinung?
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.
bla blub Natürlich reicht der Mega8. Die Applikation selbst braucht fast nichts. Haste noch 6kB für Texte :-)
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.
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".
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
@ 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
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.
> 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
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 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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.