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
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
> 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
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?
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.
> 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
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).
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?
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.
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!
:-) 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!
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.
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
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
Kann mir jemand sagen, ob ein SSR vom Typ S202S02 geeignet wäre, um die Heizung zu schalten?
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
Ok. Ich werde nicht so ganz schlau aus den Plänen. Wie machst du das mit dem Ansteuern der Heizung? Wofür die Optokoppler?
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......
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.
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...
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?
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
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.
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
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.
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 !
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.
Ach und müsste der 1kOhm Widerstand nicht auch recht viel vertragen? Was hast du da für nen Widerstand genommen mehr als 1W?
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.