Forum: Mikrocontroller und Digitale Elektronik PIC Terrariensteuerung


von Lukas J. (autonomy)


Lesenswert?

Hi Leute,

Ich habe vor mit einem PIC16F876 eine Terrariensterung zu entwerfen. Die 
Steuerung soll eine einstallbare Temperatur halten. Hierfür soll über 
ein SSR eine Heizung ein und ausgeschaltet werden. Soweit so gut.
Als Temepratursensor will ich einen KTY-81-110 nehmen. Den PIC will ich 
mit 10Mhz betreiben. Zudem soll es möglich sein eine Tag- und eine 
Nachttemperatur einzustellen. Hierfür brauche ich dannn natürlich eine 
Uhr. Dazu wohl noch  vier Taster um die Einstellungen vorzunehmen und 
ein LCD für die Ausgabe. So nun würde ich natürlich am liebsten alles 
nur mit dem PIC machen, habe aber die Sorge, dass das sehr schwierig 
wird. Die Uhr müsste ja über einen Timer zu realisieren sein, aber der 
PIC müsste ja außer den Timer zu zählen bzw auf Interrupts zu warten 
auchnoch die Temperatur messen und analysieren(abhängig von der 
Uhrzeit), die Knöpfe überwachen, damit Einstellungen getroffen werden 
können, und das Display ansteuern. Habe jetzt auchschon überlegt die 
Temperautr und/oder die Uhrzeit über I²C zu realisieren. Naja was meint 
ihr? Kann ich die Temperatur weiter messen und analysieren und 
gleichzeitig die Uhr laufen lassen und die Taster überwachen?

Gruß

Lukas

von K. J. (Gast)


Lesenswert?

hi, warum nimste nicht einen 32,xxx Quarz am pic für das bisschen messen 
+ Uhrzeit brauchst keine 10mhz nichtmal für des display ok es refrescht 
dann warscheinlich etwas langsam solte aber reichen zudem haste den nen 
stabielen takt für den timer

von Olaf (Gast)


Lesenswert?

> Kann ich die Temperatur weiter messen und analysieren und
> gleichzeitig die Uhr laufen lassen und die Taster überwachen?

Natuerlich kann man das machen. Ich wuerde sogar noch nichtmal sagen das 
dies besonders schwierig ist. Nervig bei solchen Sachen ist eher der 
Kalender, also Schaltjahre und sowas. Aber machbar ist das alles.

Probleme sehe ich eher darin das dein armes Tier mit deinen 
Programmierfehlern klarkommen muss.
Nutze also auf jedenfall einen Watchdog. .-)

Olaf

von Karl H. (kbuchegg)


Lesenswert?

Lukas Jünger schrieb:

> können, und das Display ansteuern. Habe jetzt auchschon überlegt die
> Temperautr und/oder die Uhrzeit über I²C zu realisieren. Naja was meint
> ihr? Kann ich die Temperatur weiter messen und analysieren und
> gleichzeitig die Uhr laufen lassen und die Taster überwachen?

Hmm. Willst du dass neben dem Prozessor auch noch andere Komponenten 
wegen chronischer Unterforderung Selbstmord begehen?

von Lukas J. (autonomy)


Lesenswert?

Olaf schrieb:
>> Kann ich die Temperatur weiter messen und analysieren und
>> gleichzeitig die Uhr laufen lassen und die Taster überwachen?
>
> Natuerlich kann man das machen. Ich wuerde sogar noch nichtmal sagen das
> dies besonders schwierig ist. Nervig bei solchen Sachen ist eher der
> Kalender, also Schaltjahre und sowas. Aber machbar ist das alles.
>
> Probleme sehe ich eher darin das dein armes Tier mit deinen
> Programmierfehlern klarkommen muss.
> Nutze also auf jedenfall einen Watchdog. .-)
>
> Olaf

Naja. Ich hab mir schon ein paar von den Sachen besorgt und werde das 
mal ausprobieren. Ich weiß nur noch nicht so ganz wie. ;-) Ich wollte 
nur mal wissen, ob es überhaupt geht. Kalender brauche ich nichtmal nur 
24h Uhr. Ich kann mir nurnicht so ganz vorstellen, wie ich die anderen 
Programmteile ausführe, ohne die Uhr zu unterbrechen. Bin noch Anfänger. 
Das mit dem uhrenquarz ist ne gute idee.

von Olaf (Gast)


Lesenswert?

> Ich weiß nur noch nicht so ganz wie. ;-)

Du taktest das Teil mit einem Quarz der sich gut runterteilen laesst um 
auf 1Sekunde zu kommen. Dafuer nimmst du keinen 32khz Quarz weil du 
sowieso eine Heizung baust und keinen Strom sparen musst. Du nimmst z.b 
einen 4.19xxMhz Quarz.
Damit erzeugst du dir einen TickerIRQ von 100Hz mit einem timer.

Im Interrupt zaehlst du erstmal bis 100 und jedesmal wenn 100 erreicht 
ist, dann erhoehst du einen Zaehler fuer Sekunden. So bekommst du 
erstmal eine genaue Zeit in Sekunden seit dem Tag X.
Des weiten rufst du ebenfalls einmal pro Sekunde deinen Regler auf.

Wenn dieser interne Zaehler bei 50 ist startest du den AD-Wandler fuer 
deinen Temperaturfuehler. So hat dein Regler jedesmal wenn er regeln 
soll bereits eine frische Temperatur.

Falls dein Controller, ich kenn den nicht, keinen PWM-Ausgang hat, so 
erzeugst du hier gleich noch die PWM fuer die Heizung.

In deinem Hauptprogramm laeuft nur das Bedieninterface mit dem Nutzer.

Ausserdem setzt du im IRQ ein Flag wenn der Regler gestartet wurde.

In deinem Hauptprogramm wird das ausgewertet und der Watchdog 
zurueckgesetzt. Ausserdem achtest du darauf das die Werte vom AD-Wandler 
plausibel sind. Wenn dein Tier sein Kabel durchnagt darf die nicht durch 
die Decke gehen

Olaf

von Granatapfel (Gast)


Lesenswert?

Olaf schrieb:
> Watchdog

was ist denn ein Watchdog?

von Lukas J. (autonomy)


Lesenswert?

Granatapfel schrieb:
> Olaf schrieb:
>> Watchdog
>
> was ist denn ein Watchdog?

Der Watchdog (alle PICs)
Auch ein PIC kann abstürzen. Damit das ohne schlimme Folgen bleibt, löst 
der Watchdog in so einem Fall automatisch ein Reset des PIC aus.

Der Watchdog ist ein kleiner Timer im PIC, der einen eigenen internen 
RC-Taktgeber besitzt, und somit von der Funktion des PIC unabhängig ist. 
Dieser Watchdogtimer (WDT) löst, wenn er eingeschaltet ist, alle 18 ms 
(Toleranzbereich: 7 ms ... 33 ms) ein Reset des PIC aus. Der Reset kann 
nur verhindert werden, wenn das im PIC laufende Programm den WDT immer 
wieder zurücksetzt, bevor er einen Reset auslösen kann. Dieses 
Rücksetzen erfolgt mit dem Befehl clrwdt (oder sleep).

von Granatapfel (Gast)


Lesenswert?

Ach so, also ein Reset ist praktisch ein "Neustart" des PIC,also dass er 
von vorne anfängt und nicht wegen eines Fehlers einfach irgendwo hängen 
bleibt?

von Karl H. (kbuchegg)


Lesenswert?

Granatapfel schrieb:
> Ach so, also ein Reset ist praktisch ein "Neustart" des PIC,also dass er
> von vorne anfängt und nicht wegen eines Fehlers einfach irgendwo hängen
> bleibt?

Ja.
Aber kümmere dich erst mal nicht um Watchdog.

Sieh zu, dass du Unterlagen bekommst, wie man den Timer deines PIC 
benutzt um damit den Basistakt zu bekommen.


Ich hab mir vor kurzem eine Heizungssteuerung gebaut. Als Taktisgnal hab 
ich die 230V-Netzfrequenz (natürlich nach dem Trafo runtergeteilt auf 
12V) benutzt. Damit bin ich nicht darauf angewiesen, meinen QUarz exakt 
auszumessen. Die Netzfrequenz wird von der Stromlobby sehr genau auf 
50Hz gehalten und auch aktiv nachgeregelt.

von Lukas J. (autonomy)


Lesenswert?

Ich wusste das mit dem Watchdog ja ;-)

Aber nochmal eine Frage. Versteh ich das jetzt richtig, dass das messen 
und analysieren einfach so wenig Zeit braucht, dass es dir Uhr sozusagen 
nich unterbricht. Weil das ist eigentlich das was ich mir am 
schwierigsten vorstellen kann. Dazu kämme ja noch das mit den Tasten, 
also die Einstellungen. Wenn ich eine Taste drücke muss der Controller 
darauf ja bestimmt reagieren, aber dabei muss die Uhr ja auch irgendwie 
"weiterlaufen". Dauert das Ausführen des Interrupts den nur so kurz, 
dass man das im laufenden Betrieb garnicht merkt?

Gruß

Lukas

Achja und DANKE!

von Karl H. (kbuchegg)


Lesenswert?

:-)

Dein Prozessor läuft mit, Hausnummer, 4Mhz, also 4 Millionen Takte in 
der Sekunde.
Beim PIc ist das glaub ich anders, aber bei einem AVR bedeutet das, dass 
der Prozessor ungefär 3.5 Millionen Befehle in der Sekunde ausführt. 
Möglich dass ich mich jetzt täusche, aber ein PIC benötigt mehrere Takte 
für einen Befehl. Es bleiben aber bei 4Mhz immer noch massige Befehle 
übrig (ich hab für PIC 4 Takte pro Befehl im Kopf, kann mich aber auch 
irren)

Eine Uhr, die einen regelmässigen Takt bekommt und aufgrund dieses 
Taktes Millisekunden, Sekunden, Minuten, Stunden hochzählen muss, 
braucht über den Daumen so um die 50 Befehle (und da bin ich schon 
großzügig). Kannst dir ja mal ausrechnen, wieviele Prozent der 
verfügbaren Rechenleistung von 4 Millione/Sekunden diese 50 Befehle, die 
nur jede Millisekunde (also 1000 mal in einer Sekunde) anfallen, 
ausmachen.


Du unterschätzt die Power eines µC gewaltig!

von stephan_ (Gast)


Lesenswert?

Wenns um Datum und Uhrzeit geht, würde ich einen RTC anhängen, z.B. 
MAX3231 - supergenau, Quarz ist schon intergriert - oder PCF8583 - 
billiger, aber nur so genau wie der externe Quarz. Damit schenkst Du Dir 
das ganze Kalender/Zeit-Gedöns.

von Lukas J. (autonomy)


Lesenswert?

Ok. Danke für eure Antworten! Ich denke,da ich ja wirklich nur ne Uhr 
brauche, werde ichs mit dem PIC veruschen. Poste dann meine Vortschritte 
hier. Ich habe vor das ganze hinterher kostenfrei und nachbaubar zur 
Verfügung zu stellen, da es ja einige Leute interessiert.

Danke und Gruß

Lukas

von Sven (Gast)


Lesenswert?

Der Trick liegt darin, dass der Timer parallel zu deinem Programm in der 
Hardware weiterläuft. Das heist, dass das interne Timerregister immer um 
eins erhöht wird, wenn die CPU einen Befehl abarbeitet. Der 
Timer-Interrupt wird aber erst ausgelößt, wenn der Timer überläuft. Wenn 
du nun z.B. den Timer 1 verwendest, dann würde er bei einem Vorteiler 
von 1:1 immer erst nach 65536 Befehlen einen Interrupt auslösen. In 
dieser Zeit kann natürlich dein Heuptprogramm alles mögliche andere 
machen. Mit ein wenig Rechnerrei und dem richtigen Quarz ist es durchaus 
möglich, dass du genau alle 10ms einen Interrupt bekommst, welcher auch 
stabil ist, solange du in deiner Software nicht die Timerregister neu 
lädst.

Und ja, es ist richtig, das die 16/18er PICs den Quarztakt immer erst 
durch 4 teilen um den Systemtakt zu bilden. Ein 16F mit 4MHz läuft also 
nur mit 1.000.000 Befehle pro Sekunde (und manche Befehle wie z.Bsp die 
Sprungbefehle) benötigen auch noch 2 solcher Systemtakte (also 8 
Quarztakte)).

Sven

von Lukas J. (autonomy)


Lesenswert?

Kann mir jemand sagen, ob ein SSR vom Typ S202S02 geeignet wäre, um die 
Heizung zu schalten?

von DirkF (Gast)


Angehängte Dateien:

Lesenswert?

Hi Lukas,
ich habe für mein Seewasseraquarium eine Steuerung mit dem 16F877 
gebaut.
Benutze ebenfalls die Netzfrequenz zur Steuerung der Uhrzeit.
Schaltplan kann ich Dir mal zumeilen.

Technische Daten

Verorgungsspannung :  230 V AC

Eingänge:  4 Digitaleingänge, 1 x PT100 zur Temperaturmessung

Ausgänge:  6 Relaisausgänge, 1x Triacausgang für Heizungsregelung, 1 x 
PWM 24 V für Mondlichtsteuerung, 1 Alarmpipser.

Interne Uhrzeit über Netzfrequenz synchronisiert. Kein Verlust der 
Uhrzeit bei Stromausfall.

RS232 Schnittstelle zur Programmierung,Überwachung und Paramerierung

von Lukas J. (autonomy)


Lesenswert?

Ja das wäre toll. Bitte an:

lukas.juenger[a]gmx.net

von Lukas J. (autonomy)


Lesenswert?

Ok. Ich werde nicht so ganz schlau aus den Plänen. Wie machst du das mit 
dem Ansteuern der Heizung? Wofür die Optokoppler?

von DirkF (Gast)


Lesenswert?

Hallo, ich messe die aktuelle Temperatur mit einem Pt100, 
Verstärkerschaltung auf 5 V und dann zum ADC des PIC.
Im Programm nur ein 2-Punkt Regler.
Wenn Temperatur zu neidrig, dannn Ausgang einschalten.
Optokoppler bekommt Spannung.
Triac Ausgang des Optokoppler steuert ein Triac an, das die 230 V der 
Heizung einschaltet.
Ich mache keinen Phasenanschnitt. Optokoppler nur, da ein Relais früher 
ausfallen würde, wegen der Kontaktabnutzung.

Die anderen Optokoppler sind nur für andere Eingänge, wie z.B 
Niveauschalter......

von Lukas J. (autonomy)


Lesenswert?

Achso gute Idee. Das Mit Triac und Optokoppler zu machen. Werde ich 
denke ich so übernehmen. Ich werde wohl nen KTY81-110 für die Temps 
nehmen. Besten Dank nochmals.

von Blackmore (Gast)


Lesenswert?

Karl heinz Buchegger schrieb:
> Ich hab mir vor kurzem eine Heizungssteuerung gebaut. Als Taktisgnal hab
> ich die 230V-Netzfrequenz (natürlich nach dem Trafo runtergeteilt auf
> 12V) benutzt. Damit bin ich nicht darauf angewiesen, meinen QUarz exakt
> auszumessen. Die Netzfrequenz wird von der Stromlobby sehr genau auf
> 50Hz gehalten und auch aktiv nachgeregelt.

bis zu dem Zeitpunkt, wo Anlagen ausfallen... dann kann die Netzfrequenz 
durchaus mal von 50 auf 48 Hz fallen... im Normalfall werden Frequenzen 
von 49,9 bis 50,1 gehalten...

von Lukas J. (autonomy)


Lesenswert?

Ja so präzise brauche ich die Uhrzeit nicht. Ich nehm so ein 4,xxxxx MHz 
Quarz. Was ist das den genau für ein Triac Dirk? kann das im Schaltplan 
nicht genau erkennen. Worfür ist dieser unendliche Wiederstand? Sorry, 
dass ich so viele Frage stelle. Ist JP ein Jumper?

von DirkF (Gast)


Lesenswert?

Triac = TIC225S
Der unendliche Widerstand kann weggelassen werden.
JP = Jumper:
1-2 gebrückt = Potentialfreier Kontakt
2-4  + 1-3 gebrückt : 230 V AC Ausgang.

Achtung: Wenn Du keiner Erfahrung hast, lass die Finger von 230 V 
Schaltungen ! Lebensgefährlich.

Gruß Dirk

von Lukas J. (autonomy)


Lesenswert?

Ja deswegen Frage ich ja nochmal nach. Der IL410 braucht ja nur nen sehr 
geringen Strom deswegen auch der 4kOhm, da kommt man dann ja auf ca 1mA. 
Der 1,5kOhm (R17) limitiert doch den Strom auf ca 150mA oder habe ich 
das falsch Verstanden? Ist das nicht zuviel Spannung für das Triac? Der 
Zündstrom von dem Triac ist mir noch nicht ganz klar. Finde das 
Datenblatt sehr verwirrend.

von DirkF (Gast)


Lesenswert?

Sobald der Triac gezündet hat, hat er nur noch einen Spannungsabfall von 
ca 1 V zur Versorgung der Ansteuerschaltung. Somit geht dann der Gate 
Strom direkt runter unter 1 mA.
Grundlage eines TRIAC.
Gruß Dirk

von Lukas J. (autonomy)


Lesenswert?

Ich muss ehrlich gestehen, dass Ich diese Triacschaltung mit dem 
Optokoppler nicht ganz verstehe. Also:

Der Optokoppler schaltet durch, wenn man mit dem PIC Strom anlegt. Da 
der PIC aber 20mA liefert limitiert man den Stromfluss mit dem 
Wiederstand 4,7kOhm, um die LED nicht kaputt zu machen.
So, nun hat der Optokoppler durchgeschaltet bzw. tut es immernoch. Es 
liegt dauerhaft Strom an, damit das Triac beim Nulldurchgang der 
Spannung nicht "ausgeht" oder?
Das "große" Triac wird mit dem durchgeschaltetem Strom gezündet. Hier 
wird der Stromfluss mit dem 1,5kOhm Wiederstand limitiert. Da dass alles 
in Phase liegt ist es ja auch nicht so schlimm, wenn der Nulldurchgang 
kommt, da ja sowieso nicht geleitet werden müsste, und wenn die Spannung 
wieder wächst wird ja wieder durchgeschaltet, weil die LED ja dauerhaft 
Leuchtet.
Ich verstehe nur das Datenblatt von dem TIC255S nicht so ganz. Da ist 
nämlich dauernd von 12V die Rede beim Trigger curent. Ist die Spannung 
den nicht zu groß mit den 220V? Gehen die Triacs den beim Nulldruchgang 
"aus"? Ich kann mich irgendwie mit der Idee nicht ganz anfreunden das 
große Triac mit Netzspannung anzusteuern. Das verstehe ich nicht so 
ganz.

von DirkF (Gast)


Lesenswert?

Hi Lukas:

Folgender Ablauf:
1. Optokoppler nicht angesteuert
2. Triac nicht leitend, 230 V AC fallen am Triac ab.
3. Optokoppler über PIC eingeschaltet, irgendwann während der Siuswelle.
4. Nullspannungsschalter im Optotriac erkennt das und macht erst mal 
nichts.
5. Nulldurchgang.
6. Der Optotriac schaltet seinen Ausgang durch.
7. 0 V über Vorwiderstand 1K2  = 0 mA Gate Strom.
8. Sinusspannung steigt langsam an, z.B.auf 10 V
9. 10 V / 1K2 = ca. 10 mA Gatestrom
10. Triac zündet.
11. Spannung bricht auf ca. 1 V ein, da der Triac patallel zum 
Optokoppler ist.
12 Gat Stom wird sehr klein, aber der Triac bleibt bis zum nächsten 
Nulldurchgang leitend !

von Lukas J. (autonomy)


Lesenswert?

Ahh! Tausend Dank. Hat mir sehr geholfen. Und das 1mA, dass durch den 
4,7kOhm durchgeht reicht ja um den IL419 zu zünden, aber muss dann die 
LED davor nicht nur sehr schwach leuchten.

Habe mir das so überlegt:

Die LED die ich nehmen will braucht so 15mA um zu leuchten. Also 15mA + 
2mA bei 5V um den IL410 zu zünden = 17mA. R=U/I also 
5V/0,017A=294,117... , also ca. 300Ohm anstatt von 4,7kOhm das komm mir 
nur so wenig vor.

von Lukas J. (autonomy)


Lesenswert?

Ach und müsste der 1kOhm Widerstand nicht auch recht viel vertragen? Was 
hast du da für nen Widerstand genommen mehr als 1W?

von DirkF (Gast)


Lesenswert?

Hallo, die LED ist eine low current LED, hat also schon bei 2 mA volle 
Leuchtkraft.
Es ist eine Reihenschaltung von LED und LED des Optokopplers.
Daher sind beide Ströme gleich 1 mA.

Der 1K Widerstand am Ausgang Optotriac tom Gate des Triac hat normale 
Leistung 0,6 w: das reicht, da nur kurzzeitig höhere Leistungen ansteht 
im Augenblick des zündens.
Gesperrt = 0 W
Gezündet = 0 W !

Gruß Dirk

von Bernd Rüter (Gast)


Lesenswert?

Wenn das mit dem Optokoppler und dem TRIAC (und dem Snubber) so 
aufwendig ist, kann ich nur wärmstens die SSRs von SHARP empfehlen !

Widerstand vor die LED und eine Type mit Zero-Cross und Snubberless 
auswählen... funktioniert.


Der Trick der Uhr:

Kein Quarz ist 100% genau! Spätestens die Schaltung versaut die Frequenz 
etwas. Es ist egal, ob der Quarz 32,xxx kHz oder 4,xxx MHz hat, er geht 
dann etwas daneben. Bei einer Uhr merkt man dann das typische Problem 
einer nicht-Funkuhr, sie geht im Monat ein paar Minten/Stunden vor/nach. 
Das kann man justieren mit einem Drehkondensator als "Ziehkondensator" - 
Viel Spaß beim Einstellen.

Wenn es eine UHR sein soll, dann würde ich eine fertige RTC mit 
integriertem Quarz nehmen, der im Werk abgestimmt wurde.

Benutzt Du im PIC einen Timer, so ist es recht einfach. Der Timer (ich 
nehme gerne eine Kombination aus Timer(1) und CCP(1) und Special-Event) 
erzeugt alle 1/x Sekunden einen Interrupt, der in der INT-Routine 
verarbeitet werden muß.
Bei mir zählt die INT-Routine die Events und meldet alle x Durchläufe in 
einem Bit im Speicher, daß die Sekunde um ist.
Das Hauptprogramm muß das dann merken und auswerten (Weiterzählen der 
Sekunden, Minuten, Stunden, Tage,...)...

Der Trick ist, daß ALLE Interrupt-Routinen immer sehr schnell gehalten 
werden, damit nicht 2 die gleichen INterrupts auftreten wenn nur einer 
zeitlich verarbeitet werden kann - und - die Hauptroutine die Meldungen 
der Int-Routinen abarbeitet. Das sollte dann so schnell geschehen, daß 
nicht schon wieder eine Meldung gesetzt wird, wenn die alte noch nicht 
bearbeitet wurde, aber man muß nicht sklavisch schnell auf alles 
reagieren. Eine ADC-Abfrage kann man bedenkenlos durchführen, sollte ein 
INT auftreten wird er abgearbeitet und die Hauptroutine wird es dann 
auch beizeiten merken und abarbeiten...

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.