Hallo,
ich bin eher ein blutiger Anfänger - also bitte habt etwas Nachsicht.
Ich möchte für meine Masterarbeit(Physik - bin also kein Elektroniker)
ein Gerät bauen das die Temperatur zw. 2 Werten (z.B. Wert A: 30°C Wert
B: 35°C)
wechselt.
Das Prinzip ist also:
-heize auf 35°C und halte die Temperatur x Sekunden
-schalte einen Lüfter an der über einen Kühlkörper das ganze wieder auf
30°C bringt und halte die Temperatur für y Sekunden
Ich habe bisher einen "Roboter" gebaut bei dem ein Mega8 ein L297-L298
Konstruckt betreibt. Mit diesem Roboter kann ich Objekte
Tauchbeschichten. Das hat mir schon mal sehr geholfen. siehe Anhang.
Das ganze sollte auch irgendwie an einem Rechner hängen.
Ich habe einen alten Laptop mit inpout32.dll drauf und mit einer
paralellen Schnittstelle (WinXP). Das ganze Funktioniert und ich kann
sowohl LED's ansteuern als auch einzelne "Beinchen" auslesen.
Wie fange ich am besten an? Ich brauche eine möglichst schnelle Methode,
da meine Zeit für die Masterarbeit leider sehr begrenzt ist :(
Vielen Dank
Rocco
Soll die Steuerung auf dem PC erfolgen, brauchst Du zwei Thermostaten
die bei 30 und 35 Grad mit kleiner Hysterese schalten. Die Kontakte
werden mit dem PC eingelesen und die Steuerung erfolgt auf dem PC.
Normalerweise macht die Steuerung ein Thermostat alleine. Einstellung 35
Grad mit 5 Grad Hysterese.
Dritte Möglichkeit Einsatz eine Controllers.
Was soll es werden?
Axel
>Das Prinzip ist also:>-heize auf 35°C und halte die Temperatur x Sekunden>-schalte einen Lüfter an der über einen Kühlkörper das ganze wieder auf>30°C bringt und halte die Temperatur für y Sekunden
Warum der Murks mit dem Lüfter? (Energieverschwendung)
Reduzier doch einfach die Heizleistung, wenn Du kühlen willst, bzw.
schalt den Heizstrom ganz ab.
Stichwort: Temperaturregelung (PI-Regler,...)
Wenn Du Dich eh schon mit AVRs ("Ich habe bisher einen "Roboter" gebaut
bei dem ein Mega8..."), dann sollte das doch größeres Problem für sein,
oder? ;-)
Hallo Düsendieb:
kannst du mir das mit dem Thermostaten etwas genauer erklähren - ich bin
wirklich ein richtiger Anfänger und z.Z. platzt mir fast der Kopf weil
ich im letzten Monat erst mit sowas angefangen habe.
Ein Thermostat zu lten sollte eigentlich gehen - auch mit Hysterese - so
was habe ich schon mal für einen Lüfterregler für mein Aquarium diskret
erledigt.
Das Problem ist das ich die beiden Temperaturen einfach und recht genau
ändern mkönnen muss. so das ich eher eine Lösung brauch wo ich entweder
den MegaX ständig neu programmieren - also die Temperaturwerte ändere -
oder irgend etwas über den PC.
Hallo Dünnbrettbohrer:
selbstverständlich möchte ich das sich die Heizung abschaltet bevor der
Lüfter angeht. Schon weil es zum Teil ein Umweltprojekt wird ;)
Nein im Ernst, ich möchte auf z.B. 35°C heizen und die Temperatur dann
aus schalten und erst dann kühlen bis auf z.B. 30° und diese Temperatur
dann wieder für eine bestimmte Zeit halten.
Leider ist das Programmieren ein echtes Problem für mich - ich habe mich
schon mit LM75, DS18S20 und natürlich mit PTY... auseinander gesetzt.
Ich schaffe es einfach nicht in der Zeit noch so ein Projekt aus dem
Boden zu stampfen. Ich müste noch so viel mehr lesen und so lange herum
probieren bis es klappt. Ich weis gar nicht wie lange ich gebraucht habe
um den "Roboter" zu bauen - aber es war eine Ewigkeit.
fG Rocco
z.B. UNIVERSAL THERMOSTAT UT 200 von Conrad für 39,95€
Da kann man die Ein und Ausschalttemp. einstellen.
An die Steckdose wird ein 230V Relais mit einem Öffner und einem
Schließer Kontakt angeschlossen.
Der Schließer schaltet die Heizung, der Öffner den Lüfter.
PS. Stelle eine weitere Frage besser im µc Forum, da gibt es wesendlich
mehr Antworten.
Axel
>Nein im Ernst, ich möchte auf z.B. 35°C heizen und die Temperatur dann>aus schalten und erst dann kühlen bis auf z.B. 30° und diese Temperatur>dann wieder für eine bestimmte Zeit halten.
Das hört sich für mich wie Zweipunkt-Regelung an:
Zuerst Volldampf, bis 35°C erreicht sind, dann abschalten und warten bis
30°C erreicht sind.
Wenn Du mit dem Auto einparkst, gibts Du ja auch nicht Vollgas, bis Du
in der Parklücke stehst und machst dann ne Vollbremsung ;-)
Du könntest den Heizstrom reduzieren schon bevor die 35°C erreicht sind
und intern schon die 30°C anfahren, da Deine Heizung noch "nachläuft",
also 35°C auch mit verminderter Heizleistung erreicht werden
(Wärmekapazität etc., müßtest Du halt experimentell ermitteln).
Schau mal bei Tante Gurgel vorbei und frag sie nach
"Temperaturregelung"...
ok, das Ding ist echt perfekt.
Hast Du noch eine Idee wie ich die beiden Temperaturen eine betimmte
Zeit halten kann?
Bisher kapiere ich es so:
Ausgangszustand: alls hat Raumtemperatur:
-Sonde mist Temp < 35°C daraus follgt das das Relais schließt und der
Heizer los legt bis eben 35°C erreicht sind
-Relais schaltet um so das der Öffner jetzt einen Stromkreis schließt
und damit den Lüfter anschmeißt bis 30°C erreicht sind
Richtig?
fG Rocco
Rocco schrieb:> Leider ist das Programmieren ein echtes Problem für mich - ich habe mich> schon mit LM75, DS18S20 und natürlich mit PTY... auseinander gesetzt.> Ich schaffe es einfach nicht in der Zeit noch so ein Projekt aus dem> Boden zu stampfen.
Das ist jetzt aber eine herbe Enttäuschung, dass du dir so wenig
zutraust.
Also du geschrieben hast, du hättest bereits einen Roboter gebaut hab
ich schon gedacht:
Wo ist das Problem? Noch ein Mega-8 Rechner. Den kennt er schon.
Da drann ein DS1820 als Temperatursensor (da gibts fertige Routinen in
der Codesammlung, man braucht sie nicht kalibrieren) und 2 Releais
ansteuern. Von mir aus die Zeitsteuerung mit _delays. Einstellen der
Werte über UART vom PC aus.
Alles in allem eine Sache auf 1 Nachmittag, wenn ein simpler 2-Punkt
Regler ausreicht. Selbst wenn man nur wenig Erfahrung hat.
Dünnbrettboherer schrieb:> Zuerst Volldampf, bis 35°C erreicht
Wenn Rocco erst bei 35 Grad abschaltet, entsteht bestimmt noch
eine Temperaturspitze >35 Grad durch thermische Trägheit der Heizung!
oszi40 schrieb:> Dünnbrettboherer schrieb:>> Zuerst Volldampf, bis 35°C erreicht>> Wenn Rocco erst bei 35 Grad abschaltet, entsteht bestimmt noch> eine Temperaturspitze >35 Grad durch thermische Trägheit der Heizung!
dann stellt er halt seine Abschaltung auf 34 Grad ein und erhöht erst
nach 1 Minute den Grenzwert auf 35 Grad.
Er hat ja noch gar nichts gesagt, wie genau seine Temperaturen sein
müssen.
Hallo Herr Buchegger,
ja ich weis das das alles nach Jammern und Klgen klingt.
Aber ich lese jetzt schon eine ganze weile etwas zu den
unterschiedlichen Methoden und suche noch die richtige für mich.
Das mit dem DS1820 gefällt mir wirklich richtig gut. Mega8 wäre auch
perfekt - weil ich den ja schon irgendwie kenne. Da ich wärend des
Experiments die Temp. nicht ändern will würde es sogar recht einfach
sein den Mega8 vorher mit neuen Temperaturen zu programmieren.
Wenn also irgend jemand einen Link hat, oder irgendwie so was schon
gemacht hat würde ich mich sehr über die Hilfe freuen.
Alle Temperaturen bewegen sich irgendwo zw. 25°C und 45°C.
Delta T ist zw 2 und 20°C geplant. Wenn 2°C aufgrund irgendwelcher
Harwarebeschränkungen nicht mgl. sind so geht auch ein Delta T ab 5°C.
Vielen vielen Dank für die Viele hilfe bis jetzt. Ich fühle mich schon
wieder viel besser.
fG Rocco
Karl heinz Buchegger schrieb:> lles in allem eine Sache auf 1 Nachmittag, wenn ein simpler 2-Punkt> Regler ausreicht.
Das wage ich zu bezweifeln. Ich denke Ihr redet gerade etwas aneinander
vorbei.
Er will zunächst das System auf 35° aufheizen, dann die Temperatur für
eine zeit T1 möglichst genau halten, dann mittels eines Ventilators auf
30° abkühlen und auch hier wieder die Temperatur halten.
Er braucht also -wenn ich ihn richtig verstanden habe- eine
Temperaturregelung, zumindest mit einem PI Regler dem man via Software
verschiedene Sollwerte vorgeben kann und der je nach Unter oder
Übertemperatur die Heizung oder den Lüfter anwirft und eine einfache
Ablaufsteuerung mit den Zeitkonstanten.
Nichts unlösbares wenn man mit einem µC halbwegs umgehen kann, aber es
scheint mir, daß er bei seinem ersten Projekt gebastelt und Code kopiert
hat ohne richtig zu verstehen was und wie er es gemacht hat.
Rocco schrieb:> Da ich wärend des> Experiments die Temp. nicht ändern will würde es sogar recht einfach> sein den Mega8 vorher mit neuen Temperaturen zu programmieren.
Ach so er braucht natürlich auch noch ein paar Tasten und ein Display um
die Parameter wie untere und obere Temperatur und die Zeitkonstanten
einzugeben.
Rocco schrieb:> Alle Temperaturen bewegen sich irgendwo zw. 25°C und 45°C.> Delta T ist zw 2 und 20°C geplant. Wenn 2°C aufgrund irgendwelcher> Harwarebeschränkungen nicht mgl. sind so geht auch ein Delta T ab 5°C.
Verzeih. Ich bin heut nicht besonders gut drauf.
Wie genau muss jede einzelne Temperatur eingehalten werden?
Wenn du also 35° einstellst, wie genau muüssen die 35° gehalten werden
und welches Heizelement steht dir überhaupt zur Vefügung? Welche Masse
willst du heizen? Wie lange muss die Temperatur gehalten werden?
Ich versuch abzuschätzen welchen Aufwand du in das halten der Temperatur
stecken musst. Dort liegt der Knackpunkt. Das umstellen der Temperatur
bzw. das Ein/Ausschalten von Heizung und Lüfter sind nicht das Problem.
U.R. Schmitt schrieb:> Karl heinz Buchegger schrieb:>> lles in allem eine Sache auf 1 Nachmittag, wenn ein simpler 2-Punkt>> Regler ausreicht.>> Das wage ich zu bezweifeln. Ich denke Ihr redet gerade etwas aneinander> vorbei.
Kann sein.
> Er braucht also -wenn ich ihn richtig verstanden habe- eine> Temperaturregelung, zumindest mit einem PI Regler dem man via Software> verschiedene Sollwerte vorgeben kann und der je nach Unter oder> Übertemperatur die Heizung oder den Lüfter anwirft
Kann auch sein.
Muss aber nicht. Mit ein bischen Glück ist seine Gesamtsystem so, dass
man mit der Vorgabe einer Solltemperatur auskommt. Liegt isttemp
kleiner, wird die Heizung eingeschaltet. Ist die Isttemp größer wird der
Lüfter eingeschaltet.
Kommt auf den kompletten Regelkreis an, ob das ausreicht oder nicht,
bzw. welche Abweichungen von der Solltemperatur erlaubt sind.
> und eine einfache> Ablaufsteuerung mit den Zeitkonstanten.
Die ist das geringste Problem. Geb ich dir völlig recht
> Nichts unlösbares wenn man mit einem µC halbwegs umgehen kann, aber es> scheint mir, daß er bei seinem ersten Projekt gebastelt und Code kopiert> hat ohne richtig zu verstehen was und wie er es gemacht hat.
Wenn er die Hardware alleine Aufbauen kann, sprechen wir ihn durch den
Rest auch noch durch :-)
Die DS Routinen gibts vom PeDa fertig in der Codesammlung. Der Rest
(wenns so einfach geht) ist eine einfache Logik, dazu noch eine "Uhr"
und er kann fürs erste weiterexperimentieren.
Display und Tasten wären schön, kommt drauf an wie wichtig das fürs
erste ist.
> Dünnbrettboherer schrieb:>> Zuerst Volldampf, bis 35°C erreicht>Wenn Rocco erst bei 35 Grad abschaltet, entsteht bestimmt noch>eine Temperaturspitze >35 Grad durch thermische Trägheit der Heizung!
Eben mit diesem Beispiel wollte ich ja die Notwendigkeit einer Regelung
erklären!
Ist mir schon klar, daß gerade im Bereich von Temperaturregelungen, die
thermische Trägheit, oder auch Wärmekapazität genannt, voll zuschlägt...
Hallo Herr Schmitt,
im Prinzip verstehen Sie das richtig. Es gibt 2 Temperaturen die über
eine gewisse Zeit gehalten werden müssen.
Knöpfe und display brauche ich nicht - ich programiere einfach den Mega8
vor dem nächsten experiment mit neuen Werten für Zeit und Temp.
Bisher finde ich die elektrischen Thermostate für
Heizkörper nicht mal schlecht. So wie ich es verstehe schraubt man diese
einfach an den Heizkörper und hat ein Zeitschaltuhr und eine Min und Max
Temperatur. Was haltet Ihr davon? Das könnte man doch bestimmt entspr.
umbasteln. Ich dachte den Stellmotor schaltet entspr. Schalter an und
aus.
Ich dachte da an den hier:
http://cgi.ebay.de/SPARPAKET-4-STUCK-ENERGIESPAR-THERMOSTAT-SPART-30-/350394646313?pt=Systemkomponenten_Heizung&hash=item519525ff29
Der ist sogar auf 0.5°C genau (ob das stimmt oder nicht weis ich
allerdings nicht)
Ich müsste noch den Thermofüler ausfindig machen und nach draus verlegen
und die Temp im Display mit einem geeichten Thermometer
vergleicht....oder?
Ansonsten finde ich ja auch das hier echt toll:
http://www.elv.de/Universal-Thermostat-UT-200,-Komplettbausatz/x.aspx/cid_74/detail_10/detail2_22053/refid_GoogleBase
- nur habe ich keine Idee wie ich das mit der Haltezeit (0 bis 10
Minuten) hinbekomen soll?!
was heißt Haltezeit? wie lange die Temperatur zwischen 30 und 35 bleibt,
hängt von der thermischen Kapazität des Heizgutes ab.
Ein Blatt Papier ist bestimmt schneller ausgekühlt als eine Bleiplatte
Hallo,
mal fix Zusammenfassen:
es wäre schon schön wenn die Temp. +- 0,5°C genau gehalten wird.
Heizen will ich einen Block aus Aluminium - etwa (bxtxh)20x20x5cm mit
ein 15 Bohrungen drin für die Probenaufnahme. aber auch da bin ich
eigentlich ungebunden. Die Proben sind in kleinen (Durchmesser 1,5cm,
Höhe 3cm) verschraubbaren Glasgefäßen. Also wäre auch ein wasserbad mit
Tauchsieder und Kupferspirale mit Kühlwasser mgl...
Womit ich heize und kühle ist also noch offen. Ihr könnt also vom
Aquariumheizer bis zum Tauchsieder gern alles vorschlagen. Ich bau auch
eine Wasserkühlung ein wenns sein muss.
Unsere Werksatt an der Uni ist recht gut ausgestattet ;)
fG Rocco
Haltezeit heißt wie lange entweder die 35 oder die 30°C gehalten werden
sollen. die aufheizzeit und abkühlzeit ist nicht wirklich wichtig,
wichtig ist nur das es recht schnell geht.
Karl heinz Buchegger schrieb:> Die DS Routinen gibts vom PeDa fertig in der Codesammlung. Der Rest> (wenns so einfach geht) ist eine einfache Logik, dazu noch eine "Uhr"> und er kann fürs erste weiterexperimentieren.
Wo finde ich das?
Rocco schrieb:> Karl heinz Buchegger schrieb:>> Die DS Routinen gibts vom PeDa fertig in der Codesammlung. Der Rest>> (wenns so einfach geht) ist eine einfache Logik, dazu noch eine "Uhr">> und er kann fürs erste weiterexperimentieren.>> Wo finde ich das?
In der "Codesammlung", Suchbegriff DS1820
Hi,
ich glaube diene Anforderungen würden fast genau einer Regelung für
einen Reflow-Ofen entsprechen. Diese Heizt auf einen Wert X hält diese
Temp für einige Minuten, usw. Meist kann man sie "frei" programmieren.
Ich weis nur nicht in wieweit die Sensoren dieser Regelungen für
Temperaturen unter 100°C ausgelegt sind. Du musst aber Aufpassen, die
fertigen billigen Geräte haben teilweise eine schlechte Regelung.
Gruß Simon
Ich würde3 zum Wasserbad tendieren.
Mit einem Sprudler drinnen (Motor mit Schiffschraube), kann man dafür
sorgen, dass die Wassertemperatur einigermassen homogen ist.
In einem Alublock hast du immer das Problem, dass ein Temperaturanstieg
immer erst mit einer Verzögerung bei den Proben ankommt. Da wirds dann
mit einer Regelung vermutlich schon schwerer und es führt kein Weg mehr
an einem PID Regler vorbei
wie sieht es mit einem Peltierelement aus? Zusammen mit einer H-Brücke
wäre das ein recht guter Heiz-Kühler...
die Probenflaschen sind ja nur etwa 1cm mit einer flüsigkeit gefüllt und
sollten sich, wenn das Peltier-Elemet z.B. an einer Aluplatte montiert
ist, schnel genug erwärmen und abkühlen - jedenfals für meine Zwecke.
Was haltet Ihr von dem Bild im Anhang?
Als Thermostate würde ich 2Stck von ELV nehmen wie ich sie oben schon
verlinkt habe.
Das Heizthermostat würde ich mit Tmin=34°C und Tmax=35°C einstellen.
Das Kühlthermostat würde ich mit Tmin=29°C und Tmax=30°C einstellen.
Danach würde das Heizthermostat und das Kühlthermostat jeweil ein Relais
die ganze Zeit schalten. Nun überbrückt eine Zeitschaltuhr, an die ein
Relais mit Schließer und Öffner angeschlossen ist, entweder den
Stromkreis vom Heizthermostat zum Peltierelement oder vom Kühlthermostat
zum Peltierelement.
Ich weis das in der "Haltezeit" nun auch die Aufheizzeit mit drin
steckt. aber diese Aufheizzeit könnte ich ja in einem Vorabexperiment
ermitteln und raus rechnen.
Damit müsste ich mir eigentlich nur noch einen Kopf über ein entspr.
Peltierelement und eine entspr. Zeitschaltuhr machen.
Die Zeitschaltuhr werde ich mit Sicherheit programmieren - schon weils
Spaß macht.
Die Ansteuerung eines Peltierelements ist wieder so eine Sache....
Hat damit schon jemand Erfahrungen?
fG Rocco
Rocco schrieb:> Was haltet Ihr von dem Bild im Anhang?> Als Thermostate würde ich 2Stck von ELV nehmen wie ich sie oben schon> verlinkt habe.> Das Heizthermostat würde ich mit Tmin=34°C und Tmax=35°C einstellen.> Das Kühlthermostat würde ich mit Tmin=29°C und Tmax=30°C einstellen.
ALso wenn dir der Ansatz mit derartigen Thermostaten zusagt, dann dürfte
eine simple 2-Punkt Regelung bei dir auch funktionieren und wir sollten
uns keine Sorgen um irgendwelche Regelungen machen :-)
So ungefähr:
> Die Zeitschaltuhr werde ich mit Sicherheit programmieren - schon weils> Spaß macht.
Dann kannst du den Rest auch gleich programmieren.
Was anderes machen deine Thermostaten auch nicht
würde ich wirklich gern machen wenn ich nicht zu blöd wäre so einen
Temperatursensor abzufragen. Ich lese da was von Registern auslesen und
verstehe leider Bahnhof :(
Ich habe mir das bischen was ich kann echt mühselig selber
zusammengedichtet. Und besonders Umfangreich ist mein Fachwissen über
Programieren in der kurzen Zeit nicht geworden.
Auch Dein Code muss ich Stück für Stück googlen.
C++ ist aber schon mal positiv, weil ich wenn überhaupt nur davon Ahnung
habe. Ich finde zwar öfter was vieleicht brauchbares, aber es ist leider
alles in Bascom oder in dieser prozessornahmen Sprache von der mir
gerade der Name nicht einfällt.
PS.: Ich habe ja auch noch den Laptop mit Druckerschnittstelle den ich
schon mal ein bischen programmiert habe. Das geht recht einfach mit:
outp(0x378,1)
outp(0x378,2)
outp(0x378,4)
outp(0x378,8)
outp(0x378,16)
outp(0x378,32)
outp(0x378,64)
outp(0x378,128)
und einlesen über:
in = inp(0x379);
Damit ist es wirklich einfach eine Bestimmte Zeit einen Pin und dannach
einen anderen ein- bzw auszuschalten - und die Uhr wäre fertig.
Aber wie ich damit den Tempsensor einlese bis die Temp in einer Variable
steht weis ich wirklich noch nicht.
Aber grundlegend würde ich mich schon für den Onewire Temperatursensor
entscheiden. Ich lese da noch was über den LM75 - ds ist ein twowire
Temp. Sensor - das ist mir echt zu hoch.
fg Rocco
fG Rocco
Karl heinz Buchegger schrieb:> ALso wenn dir der Ansatz mit derartigen Thermostaten zusagt, dann dürfte> eine simple 2-Punkt Regelung bei dir auch funktionieren und wir sollten> uns keine Sorgen um irgendwelche Regelungen machen :-)
ja, eine Regelung brauche ich nicht wirklich. Entschuldigung wenn ich
das geschrieben habe, aber ich kene mich nicht so gut mit den richtigen
Fachwörtern aus. Da passiert das manchmal das ich vom Auto rede und das
Moped meine.
Rocco schrieb:> würde ich wirklich gern machen wenn ich nicht zu blöd wäre so einen> Temperatursensor abzufragen. Ich lese da was von Registern auslesen und> verstehe leider Bahnhof :(
Wie schon gesagt: Codesammlung
(So wie es hier ein µC+Elektronik Forum gibt, gibt es auch eine
Codesammlung)
http://www.mikrocontroller.net/forum/codesammlung> Auch Dein Code muss ich Stück für Stück googlen.
Autsch
Dabei hab ich schon so primitiv das Programm angedeutet wie ich nur
konnte.
> C++ ist aber schon mal positiv, weil ich wenn überhaupt nur davon Ahnung> habe.
Eher nicht. Wenn ich deine vorherige Aussage für bare Münze nehme.
> Ich finde zwar öfter was vieleicht brauchbares, aber es ist leider> alles in Bascom
Dann machs in BASCOM.
Ist doch keine Schande. Du findest alle Elemente dort wieder.
Schleifen, Vergleiche, bischen Rechnen, ....
Sogar eine DS1820 Abfrage ist meines Wissens in BASCOM schon vorhanden.
> PS.: Ich habe ja auch noch den Laptop mit Druckerschnittstelle den ich> schon mal ein bischen programmiert habe. Das geht recht einfach mit:> outp(0x378,1)> outp(0x378,2)> outp(0x378,4)> outp(0x378,8)> outp(0x378,16)> outp(0x378,32)> outp(0x378,64)> outp(0x378,128)
Vergiss den Dreck.
Auf einem µC programmiert man anders.
> Damit ist es wirklich einfach eine Bestimmte Zeit einen Pin und dannach> einen anderen ein- bzw auszuschalten - und die Uhr wäre fertig.
Moment.
Ich geh immer noch davon aus, dass das Ganze ohne PC sondern mit einem
Mega8 realisiert werden soll. Sagtest du nicht, mit dem hättest du schon
mal was gemacht?
> Aber wie ich damit den Tempsensor einlese
Noch mal: Dafür gibts fertigen Code!
Ich geh jetzt raus.
Das ist mir jeztt ehrlich gesagt zu anstrengend. Für einen Diplomanden,
der in bälde in die Industrie geht und dort als Spezialist anhand seiner
Diplomarbeit eingestellt wird (die dann auch: Aufbau und Programmierung
einer Steuerung bzw. Regelung umfasst), ist mir das jetzt im Moment
etwas zu wenig, was ich da sehe.
Verschalte deine Thermostaten mit der Uhr. Wird sicher Eindruck machen
bei der Verteidigung deiner Masterarbeit. Was red ich da von Dplomand.
Master ist ja das Doktorat.
Ich habe mit Programmieren, Schalten, Steuern, Messen eigentlich nichts
am Hut!
Ich mache etwas mit pyroelektrischen Kristallen.
Es ist nur nahezu unmöglich diese Kristalle regelmäßig in Folge
bestimmten Umweltbedingungen auszusetzen.
Es kommt auch nicht darauf an mit der Schaltung irgendwie Eindruck zu
machen.
Das mit dem Laptop erwähne ich nur, fals es da einfacher für mich wäre
das ganze umzusetzen.
fG Rocco
Rocco schrieb:> Das mit dem Laptop erwähne ich nur, fals es da einfacher für mich wäre> das ganze umzusetzen.
Auf einem Pc ist die Ansteurung von externer Hardware niemals einfacher
als auf einem extra dafür abgestelltem µC. Es sei dann man hat eine
zugekaufte Schnittstellenkarte und der Hersteller hat sich um die
Details gekümmert.
Auf einem PC musst du immer mit dem Betriebssystem kämpfen, damit dieser
dich auf die Schnittstelle zugreifen lässt, wie du das gerne möchtest.
Denn genau das muss ein Betriebssystem normalerweise verhindern: Das
jedes dahergelaufene Programm sich einfach so an der Hardware zu
schaffen macht!
Auf einem µC hast du kein Betriebssystem. Da ist dein Programm
alleiniger Herr im Haus.
ja, stimmt, das mit dem PC ist ekine gute Idee - lese ich auch gerade
was ich so in der Codesammlung finde ist leider nicht besonders gut
nachvollziehbar.
ich suche eigentlich eher eine fertige Routine die ich mit include <>
einfüge, damit ich in der main nur noch den Sensor abfragen brauche.
Ich sitz bestimmt auf meinen augen - aber ich finde einfach keine
einfache Lösung die Anfängerfreundlich (=gut erklährt oder dokumentiert)
ist
Rocco schrieb:> was ich so in der Codesammlung finde ist leider nicht besonders gut> nachvollziehbar.
Es reicht doch, wenn sie funktioniert :-)
> ich suche eigentlich eher eine fertige Routine die ich mit include <>> einfüge
mit include fügt man sowieso keine Routinen ein.
Die werden extra kompiliert und dazugelinkt.
OK. Du hast recht, hab mir in der Codesammlung noch mal schnell ein paar
Projekte angesehen. Da ist kaum eines dabei, das nach dem simplen
Strickmuster
1
intmain()
2
{
3
4
init_ds1820();
5
6
while(1){
7
8
wert=read_from_ds1820();
9
10
machwasmitwert
11
}
12
}
geht. Das liegt daran, dass man prinzipiell mehrere Sensoren
gleichzeitig anhängen kann und die auseinanderhalten muss. Und dann
wirds ein klein wenig komplizierter.
Ich poste dir heute abend oder irgendwann am Wochenende ein
Beispielprojekt, das auf die simple Art funktioniert.
Rocco schrieb:> Ich habe mit Programmieren, Schalten, Steuern, Messen eigentlich nichts> am Hut!
Warum baust du es dann?
Oder besser gefragt: Warum nimmst du dir eine Diplomarbeit, bei der du
das musst?
(das werde ich nämlich nie verstehen, warum man sich bei einer seiner
wichtigsten Arbeiten, nämlich der Diplomarbeit, auf ein Gebiet wagt, von
dem man nicht den Hauch eines Schimmers hat. In der Industrie würde ich
dich wegen sowas feuern)
> Ich mache etwas mit pyroelektrischen Kristallen.> Es ist nur nahezu unmöglich diese Kristalle regelmäßig in Folge> bestimmten Umweltbedingungen auszusetzen.
Es gibt doch sicherlich auch fertige Klimaschränke
Herr Buchegger:
warum ich mir gerade das ausgesucht habe ist recht einfach - es klang
nicht weiter kompliziert und in der Zeit machbar. Es war allerdings
nicht klar das bestimte Geräte nicht da sind. Ich habe leider keinen
Thermocycler - oder etwas ähnliches auftreiben können. Und wenn dann
nicht für einen akzeptablen Preis ;)
Nun könnte ich wirklich alles immer im Wasserbad erwärmen, dabei stehen
und die Zeit und Temperatur messen, alles ins kalte Wasser, versuchen da
die Temp. kostant zu halten etc. Und dann das ganze etwa 10x pro Probe
wiederholen. Das ist wirklich nicht schaffbar, geschweige denn
einigermaßen vergleichbar.
Ich bin Ihnen wirklich für Ihre Geduld mit mir sehr dankbar. Und vielen
Dank für Ihre Hilfe. Ich bin freue mich schon sehr auf Ihren Code.
fG Rocco
Rocco schrieb:> Nun könnte ich wirklich alles immer im Wasserbad erwärmen, dabei stehen> und die Zeit und Temperatur messen, alles ins kalte Wasser, versuchen da> die Temp. kostant zu halten etc.
Mal ne Frage:
Würde das zum Erfolg führen, wenn man das händisch macht?
Ich versuch immer noch abzuschätzen, ob der Ansatz was taugt.
Denn eines ist klar. Das ist der simpelst mögliche Regler. Ein sog. 2
Punkt Regler. Wenn der bei einer Einstellung von 35 Grad exakt die 35
Grad halten kann, dann ist das ..... Zufall. Die Temperatur wird immer
etwas um diesen Wert (samt eingestellter Hysterese) schwanken. Wenn man
das verhindern will, dann reicht einfaches Ein/AUsschalten meistens
nicht mehr, sondern man muss die Wärmequelle feiner ansteuern und vor
allen Dingen einen komplizierteren Regler-Algorithmus nehmen. Zb einen
PID Regler.
Das ist aber wiederrum nicht so einfach, denn der Regler muss an die
Regelstrecke angepasst werden. Und genau da möchte ich dich eigentlich
nicht reinjagen, wenns nicht sein muss.
> Und dann das ganze etwa 10x pro Probe> wiederholen. Das ist wirklich nicht schaffbar, geschweige denn> einigermaßen vergleichbar.
Das ist schon klar.
> Dank für Ihre Hilfe. Ich bin freue mich schon sehr auf Ihren Code.
Kein Thema.
Hmm also wenn es schwankt (Hysterese) macht das nicht wirklich was. also
so ein Grad hoch und runter ist nicht schlimm, etwas mehr meinetwegen
auch.
Ich messe ja eh mit einem geeichten datenlogger mit (dafür hat das Geld
gerade noch gereicht ;))
Hallo,
bei Conrad um die Ecke ist der DS1821 verfügbar. Den würde ich ger
nehmen.
Ich hoffe man verzeiht mir wenn ich alles in die main packe.
Ich würde gern erklären wie ich das ganze hier verstehe und dann meine
Umstzung etwas später posten.
Ich möchte den DS1821 gern im 1SHOT Modus betreiben. Er soll auch nicht
als Thermostat dienen.
follgend Reihenfollge habe ich mir dabei gedacht:
Dabei ist der Transmitterpin in meinem Bsp. A0 und der Receiverpin B0.
1. Reset (A0 auf low für >480s danach wieder auf high)
2. B0 einlesen (Fals Ds1821 das Reset empfangen hat sendet er nach
15...60µs ein low für 60...240µs)
3. Read initialisieren (A0 low für min 1µs und anschließend wieder auf
high)
4.B0 einlesen und in einer Variablen speicher(direkt nachdem A0 wieder
auf high ist gibt der DS1821 seine Daten innerhalb von 15µs)
5.ich solte jetzt soetwas wie 00011001 in einer Variablen stehen haben.
Damit kann ich jetzt die Temp ausrechnen.
OK.
Ich hab dir was zusammengestellt.
Das ganze basiert auf den DS1820 Routinen, die PeDa in der Codesammlung
veröffentlicht hat. Ich habs so umgebaut, dass du zwar nur 1 DS1820
benutzen kannst, dafür hast du aber auch weniger Arbeit mit dem
drumherum. Um dir das Leben (vermeintlich) einfacher zu machen, habe ich
alles in 1 Source Code File zusammenkopiert. Lediglich die LCD-Routinen
fehlen. Ich hab das LCD aber nicht ausgebaut, damit du in der
Hautpschleife siehst, was du mit dem Wert machen kannst. Der Wert, den
du von den DS1820 Routinen bekommst ist nämlich das 16-fache der
Temperatur (dadurch hat man ein paar Kommastellen).
Das Programm ist getestet und funktioniert.
Am ANfang des Programms findest du ein paar #define, die angeben an
welchem Pin der DS1820 angeschlossen ist (W1_PIN et all)
Das main ist ganz unten und macht nichts anderes als den DS1820 im 1
Sekundentakt auszulesen und das Messergebnis auf dem LCD auszugeben.
Alle LCD Sachen sind mit einem #ifdef LCD_TEST gekapselt, so dass du sie
leicht entfernen kann.
F_CPU setzen nicht vergessen!
(Das Programm ist schnell zusammengestellt und ich hab nicht auf gute
Form geachtet)
wow, Sie sind echt großartig.
Vielen vielen Dank dafür.
Ich werde gelich anfangen das duchzuforsten.
Ich melde mich dann und berichte wie weit ich komme.
fG Rocco
Hallo,
ich habe versucht so viel wie möglich von dem Code zu verstehen - das
ist mir nicht überall gelungen.
Dazu habe ich den größten Teil bereits Kommentiert. Ich weis das es
unüblich ist jede Zeile zu kommentieren, aber es hilft mir sehr beim
Verstehen.
Ich würde mich freuen wenn Sie mich verbessern und ergänzen würden.
Vielen Dank dafür
Rocco
Rocco schrieb:> Ich würde mich freuen wenn Sie mich verbessern und ergänzen würden.
Zu den Fragen
Du versuchst das noch auf zu niedrigem Level zu verstehen.
Besorge das Datenblatt zum DS1820 und lies es. Insbesondere den
Abschnitt, wie man ihn programmiert.
In aller gebotener Kürze:
Man sagt dem IC, dass er eine Messung durchführen soll
(start_meas() macht das, und das Kommando, welches man zum IC
überträgt, heißt CONVERT_T)
und danach holt man sich das Ergebnis ab (indem man dem IC ein
READ Kommando schickt. Der IC reagiert gibt die zuletzt gemessene
Temperatur raus)
Der interessante Teil sind die Kommandos und wie der IC darauf reagiert
und nicht welches Bitgewackle dazu notwendig ist. Wie FAX funktioniert
kann man auch nicht verstehen, wenn man auf der Ebene Kupferkabel,
Verstärker und Übertragungsfrequenzen ansetzt.
uint8_t w1_reset( void );
// löst am DS1820 einen Reset aus
uint8_t w1_bit_io( uint8_t b );
// schreibt ein Bit in den IC, gleichzeitig wird ein Bit
// vom IC empfangen
uint8_t w1_byte_wr( uint8_t b );
// benutzt w1_bit_io um nacheinander 8 Bit zum IC zu schicken
// bzw. umgekehrt gleichzeitig 8 Bit vom IC zu holen
uint8_t w1_byte_rd( void );
// liest ein Byte vom DS1820
void w1_command( uint8_t command );
// übertragät ein Kommando zu IC
Die Abfrage
if( W1_IN & ( 1 << W1_PIN ) ) {
ist sowas wie eine kleine Fehlererkennung. Am I2C Bus muss extern ein
Pullup Widerstand angeschlossen werden. Ist der Pin daher auf Eingang
geschaltet, dann muss es nöglich sein, bei inaktivem Bus einen High
Pegel auszulesen. Das ist kein 100% Fehlerabfrage, aber es ist zumindest
ein bischen was. Wird der Pin als 0 gelesen, dann stimmt etwas in der
externen Verschaltung nicht und start_meas liefert dann FALSE zurück.
Leider funktioniert der Quellcode nicht 100%ig
An C0 des Mega8 hängt der DS18S20.
Ich habe am Port B 8 LED's angeschlossen über die ich die Temperatur
ausgeben möchte.
die ersten vier LED's haben die Werte
1°C 2°C 4°C 8°c
die zweiten vier LED's haben die Werte
10°C 20°C 40°C 80°C
Somit wollte ich die Temperatur immer, je nach dem welche LED's
leuchten, addieren um die aktuelle Temperatur zu wissen.
Die LED's verändern zwar ihre Konstelation wenn ich den DS18S20 anfasse,
aber ich werde nicht schlau daraus
z.Z. leuchten bei Raumtemp von etwa 21°C follgende LED's
B0, B1, B4, B5, B7
viele Grüße
Rocco
Mich wundert gerade, dass überhaupt LEDs leuchten ...
du liest die 16-Bit-Temperatur in die Variable tempDigital,
schreibst dann nur noch die unteren 8 Bit in tempLED,
um diese wieder in eine 16-Bit-Variable t zu pressen.
Daraus ergibt sich aber, dass die oberen 8 Bit von t immer 0 sind.
Somit bringt die Zeile
1
t=(t>>1)|(t&0xFF00);
nur den Shift um 1 nach rechts.
Du Teilst also das untere Byte der Temperatur durch 2, und gehst davon
aus, dass dies der Wert in Grad Celsius ist.
Karl Heinz Buchegger hat oben aber schon geschrieben, dass die Variable
das 16-fache der Temperatur enthält.
Zudem stimmt noch etwas an der Bitmaske p nicht. Diese sollte vor dem
if-Konstrukt auf 0 gesetzt werden, sonst werden alte LED-Zustände
beibehalten.
Oder um es mal kurz zu machen ( hier nur der teil in der
do-while-Schleife ):
1
// Kommando an den Sensor (Messung starten)
2
// >>Notiz>> Wir gehen einfach von einem Erfolg aus <<
also ich habe jetzt noch mal daran herum gefummelt und es schein nicht
durch 16 sondern durch 8 geteilt zu werden damit es funzt!
Im anhang der Code - vieleicht wirft ja trotzdem nochmal einer einen
Blick darauf?
fG Rocco
wird nach der Division durch 8 noch einmal durch den >> 1 durch 2
dividiert (*). In Summe also Division durch 16
Lass doch den Mist, wenn du ihn nicht brauchst! Wozu soll denn das
überhaupt gut sein? tC ist bei dir ein int8_t damit ist alles was du da
an den oberen 8 Bit rumfmmelst sowieso für die Katz!
Schreib Code so einfach wie du nur kannst (gilt auch für den Rest)
1
t=read_meas_fast();
2
t=t/16;
3
4
if(t<0)
5
t=-t;//Vorzeichen entfernen
und die Variable tC schmeisst du überhaupt raus. Die braucht in
Wirklichkeit kein Mensch!
(*) wobei dann bei negativen Zahlen sogar noch etwas Falsches raus
kommt. Schieben ist nicht immer äquivlent mit Dividieren. Wenn du
Dividieren willst dann schreib auch Dividieren und tricks dich nicht
selbst damit aus schlauer sein zu wollen als dein Compiler. Ob dein Code
jetzt 200 µs früher oder später an die Stelle kommt an der er 1 Sekunde
lang Däumchen dreht, ist auch schon egal.