Hallo, ich möchte gern den Ölverbrauch meiner Heizung anzeigen. Funktionieren soll es so. Die Laufzeit des Brenner soll gemessen werden und dann mit einen Faktor multipliziert werden. Der Faktor ist der Ölverbrauch pro Stunde. Bei mir wären das z.B. 1,76 Liter. Die Werte sollen auf einen LCD-Display angezeigt werden. Der Einschaltimpuls käme über ein Relais, das parallel zum Brenner geschaltet ist. Meine Frage ,wie kann ich das mit einen Atmega 8 realisieren? Bei mir reicht es jetzt grade mal um "Hallo World" auf`s Display zu bringen kurtel
Naja... du bringst irgendwie einen entsprechenden Impuls an den ATmega, wie man den dazu beschalten muss kommt ganz darauf an welche Spannungen am Relais anliegen. Was die Software angeht musst du eben auf den Impuls reagieren und so lange die Zeit mitzählen bis der Brenner wieder ausgeht. Dann multiplizieren und ausgeben. Wo genau liegt denn das Problem?
Die Laufzeit des Brenners reicht nicht, da es auf den genauen Durchmesser der Düse ankommt. Der Durchmesser ändert sich aber teilweise während des Betriebs (Abnutzung). Einfacher ist es, einen Heizölzähler (Rollenzählwerk) einzubauen. Ist es eine Ein- oder Zwei-Strangsystem (mit Rücklauf). Falls noch kein Zweistrangsystem, muss noch ein anderer Ölfilter eingebaut werden, hier ist mit geringer Geruchsbelästigung zu rechnen. Mit einem ATMega musst Du nur den Relais-Ausgang auf einen Eingang des Atmega bringen (Pegel beachten, 5V) und dann einen Timer alle 2ms nachschauen lassen, ob der Brenner läuft. Dieses Ergebnis dann auf dem LCD anzeigen. Anfangen kannst Du mit dem AVR-Tutorial hier auf der Seite (oben links im Menü).
Erstmal Danke für Eure Antworten. Ich hab zwar Zweistrangsystem, aber Rollenzähler ist ziemlich teuer 273,00€. Es soll ja nun auch nicht supergenau sein. Bei einen Verbrauch von ca.2500 Litern im Jahr kommt es auf ein paar Liter nicht drauf an. Mein Problem ist, das ich nicht viel Erfahrung mit Softwareerstellung habe. Aber ich werde mal versuchen einen Timer zum Laufen zu bringen und die Ausgabe auf LCD.Über das Relais kann ich ja 5 Volt auf den Eingang geben. Solange das Relais angezogen ist, müsste der Timer dann zählen. Mal sehen. kurtel
Pete K. schrieb: > ... dann einen Timer alle 2ms nachschauen lassen, ob der Brenner läuft Kann man bei dem Zeitintervall nicht leicht mal eine Brennphase verpassen?
Das sollte nicht allzuschwer sein. Wenn der Brenner laeuft, zaehlst Du alle 20,45 Sekunden eine Variable hoch und gibst deren Inhalt dann (durch 100 geteilt) mit 2 Stellen nach dem Komma aus. Der Inhalt der Variable sollte dann pro Stunde um 176 groesser werden und als 1,76 angezeigt werden. citb
Nur als kleine Zusatzinformation, die vielleicht etwas Sucherei erspart: Falls es ein "normaler" Ölbrenner mit einer Stufe und einem Stecker nach DIN 4791 (wenn richtig erinnert) ist, kann man den Zustand "Betrieb" für die Zeit zur Volumenberechnung am Kontakt B4 abgreifen (ist im Stecker beschriftet), der 230V führt, wenn das Magnetventil geöffnet ist und somit Öl durch die Düse strömt.
Gebraucht wird ein Timer mit z.B. 100 ms und ein Paar Variablen. Wenn Brennersignal kommt wir Timer freigegeben und eine Variable Laufzeit im 100 mS Takt hochgezählt. Diese Laufzeit wird in Sekunden, oder Minuten umgerechnet und zur bisherrigen Laufzeit aufsummiert. Entsprechend umgesetzt in Stunden oder Minuten mal entsprechenden Faktor ergibt den bisherigen Ölverbrauch. Wichtig für den Anfang sind Timerbedienung, Variablen deklarieren und dabei beachten welche Werte diese annehmen können, wenn die Zeit in kleinen Teileinheiten gezählt wird. Wäre nur eine Einstrangversorgung vorhanden könntest du mit einem kleinen Mengenmesser -gibts um die 30 Euro- und entsprechendem Program auf Atmega den tatsächlichen Verbrauch messen und anzeigen.
Es gibt Sensoren die zwischen Ölpumpe und Düse in die Druckleitung montiert werden können. Dann spielt Ein- oder Zweistrang keine Rolle, z.B. SOG960 von Satronic (BTW Umstellung auf Einstrang ist empfehlenswert und nicht sehr teuer). Da keine hohen Genauigkeit gefordert wird, ist die vom OP beabsichtigte Integration des ausgeliterten Nettovolumenstroms durch die Düse über die Zeit schon o.k., Fehlerquellen von Peter K. bereits angedeutet. Man muss etwas aufpassen, dass der "Verbrauch pro Stunde" auch tatsächlich aus Messungen bei geöffnetem Magnetventil ermittelt wird. Ansonsten gibt es auch noch ein halbweg brauchbares Näherungsverfahren, bei dem der Volumenstrom durch die Düse aus den Düsenkennwerten, dem Öldruck und evtl. vorhandenem Ölvorwärmer brechnet werden kann (Inspirationsquelle zur Parametrierung und zum Nachbau wäre z.B. GOK Z-BOX 1).
So, jetzt meld ich mal wieder. Danke für die vielen Tipps Hab nun dieses Programm erstellt. Der Timer läuft automatisch und zählt im Sekundentakt(stell ich noch genau ein)die Anzeige immer um 1 hoch. Er soll aber erst beim Anlegen von 5 Volt ( PortD4)laufen und ohne 5 Volt anhalten. Momentan habe ich nur 3 Stellen auf der Anzeige zum Laufen gebracht. Wenn ich .B. noch eine Tausenderstelle reinbastel, kommt beim compilieren der Fehler "Der angegebene Wert ist außerhalb des 8-bit Zahlenbereiches. 1000". Auch suche ich die Funktion, wie ich die auszugegebene Zahl mit Faktor x multipliziere, bevor sie ausgegeben wird. Könnt ihr mir da nochmal paar Tipps geben? Danke PS. Hab ausversehen den Code zweimal hochgeladen
Bernd S. schrieb: > Wenn ich .B. noch eine Tausenderstelle reinbastel, kommt beim > compilieren > der Fehler "Der angegebene Wert ist außerhalb des 8-bit Zahlenbereiches. > 1000". Hallo Bernd, eine unsigned 8-bit variable hat als max Wert 255. Um eine 1000 zu handeln, muss der Datentyp 16 bit lang sein. Grüße Michael
Bernd S. schrieb: > Hab nun dieses Programm erstellt. Der Timer läuft automatisch und zählt > im Sekundentakt(stell ich noch genau ein)die Anzeige immer um 1 hoch. > Er soll aber erst beim Anlegen von 5 Volt ( PortD4)laufen und ohne 5 > Volt anhalten. Das ist keine so gute Idee. Denn wenn dein Relais nicht duchgeschaltet hat, heisst das noch lange nicht, dass deswegen am Port-Eingang eine 0 zu messen ist. Einfacher ist es, wenn du es umgekehrt machst. Dauerzustand am Port-Eingang ist 1. Das kannst du nämlich ganz leicht mit dem internen Pullup Widerstand ewrreichen, den dein Programm nur einschalten muss. Und wenn das Relais schaltet, dann schaltet es den Portpin nach Masse durch und zieht so den Portpin auf 0. In völliger Analogie wie man einen Taster an einen Portpin anschaltet. Nur dass bei dir der Taster eben ein Relis ist. > Momentan habe ich nur 3 Stellen auf der Anzeige zum Laufen gebracht. > Wenn ich .B. noch eine Tausenderstelle reinbastel, kommt beim > compilieren > der Fehler "Der angegebene Wert ist außerhalb des 8-bit Zahlenbereiches. > 1000". > Auch suche ich die Funktion, wie ich die auszugegebene Zahl mit Faktor x > multipliziere, bevor sie ausgegeben wird. > Könnt ihr mir da nochmal paar Tipps geben? Einfach multiplizieren. Da deine Anwendung nicht zeitkritisch ist, würde ich gar nicht lange fackeln und bedenkenlos mit Floating Point multiplizieren. > PS. Hab ausversehen den Code zweimal hochgeladen Ist egal. Schauen sich sowieso die wenigsten an, solange du ein Word-File hochlädst. Was hindert dich daran, ganz einfach dein C File, so wie es ist, als Attachment anzuhängen? Das ist für dich am einfachsten und für uns auch.
Momentan hab ich auch den Taster mit internen Pullup Widerstand im Programm drin-PORTD,4. Wenn ich den drücke, kommen aber außer den 3 Zahlen daneben noch irgendwelche Hyroklyven. Sollte vielleicht erstmal dazu sagen, das ich mit "my AVR Workpad "arbeite. Das war zum myAVR Board MK2 dazu. Deshalb weiß ich auch nicht was für eine Datei ich hochladen soll, wahrscheinlich aber die s-Datei. werd es mal ausprobieren. Zwecks Multiplikation, was ist "Floating Point". Ich hab mal was von einen "mul" Befehl gelesen, wie das funktioniert????
Bernd S. schrieb: > Zwecks Multiplikation, was ist "Floating Point". Ui. vergiss was ich wegen des Rechnens gesagt habe. Du arbeitest in Assembler. Da musst du das alles selber machen. > Ich hab mal was von einen "mul" Befehl gelesen, wie das funktioniert???? Im Prinzip ja. Nur hast du mit einem einzelnen mul erst 8Bit mal 8Bit. Daraus musst du dir jetzt eine, ich würde mal schätzen mindestens 24 Bit Arithmetik zusammenbauen.
Bernd S. schrieb: > Zwecks Multiplikation, was ist "Floating Point". "Floating Point" ist, wenn man trotz begrenzter Auflösung und Dynamikbereich seiner Daten einen Teil der Bits einer Zahl für den Exponenten verschwendet ;-)
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.