Re: SO-Schnittstelle Stromzähler Kategorie: Sonstige Hardware (von André H. - 15.10.2006 17:24) | ||
Als Antwort auf Re: SO-Schnittstelle Stromzähler von Sascha - 13.10.2006 17:03 | ||
| ||
Hallo Sascha, > Entwarnung ! > Nach durchforsten meines Handbuchs fand ich heraus, da� die Ports P00-P04 wohl nicht > geeignet sind für eine Zählung.... > > Stimmt das, das die Ports nur als Ausgang funktionieren ??? Diese Ports hei�en PO.0 bis PO.4, nicht P0.0 bis P0.4. Nach dem P folgt der Buchstabe O, nicht die Ziffer Null. Das O steht für Out. Es sind Ausgänge der Schieberegister in der Station. Es sind keine Ports der CC2 selbst. Daher sind diese Port nur Ausgänge und könne nicht als Eingänge benutzt werden.. Das Zurücklesen der Portzustände über stports.get() dient nur dazu die aktuellen (Soll-)Schaltzustände zurückzulesen, welche in zwei Bytes gespeichert werden. Zum Erfassen von Impulsen brauchst Du die Counter-Ports welche an P1H liegen. Die 8 Ports von P1H sind bei der Station mit P0 bis P8 beschriftet. Angesteuert werden diese über ports.c2 als Port 8 bis 15. P1H.0 bis P1H.3 sind die Counterports. Die Auswertung erfolgt mit ports.getcount() mit Parameter 0 bis 3. Den S0-Ausgang des Zählers mu�t Du zwischen Port(+) und GND(-) anschlie�en. Bei der CC2-Station mu� Du zusätzlich Pull-Up-Widerstände(10k) an die 4 Counter-Ports anschlie�en, welche der Ersteller der Station vergessen hatte. Diese Pull-Up-Widerstände müssen immer an diese 4 Ports gesetzt werden, da ansonsten unkontrolliert Interrupts ausgelöst werden können, wenn diese Ports kein festes Potential besitzen. Das kann im Extremfall dazu führen, da� Programme deutlich langsamer ausgeführt werden. Zur Auswertung des Zählers kann ich Dir folgenden Thread geben: thread getL1 { long Impcnt; long Imp_old,Imp,Imp_prev,timer,timer2; Imp_old=0; var.W[0]=0; var.P[0]=0; Impcnt=0; Imp_old=0; loop { timer=system.timer(); do { Impcnt= Impcnt+ ports.getcount(0); if timer <= system.timer()-90000 var.P[0]=0; if (system.timer()-timer) > timer2 shl 1 { timer2=timer2+(system.timer()-timer); var.P[0]=Imp_prev * (3600000/timer2)/2; } } while Impcnt==Imp_old; var.W[0]=Impcnt*5; timer2=system.timer()-timer; Imp_prev=Impcnt-Imp_old; var.P[0]=(Imp_prev)* (3600000/timer2)/2; Imp_old=Impcnt; } } Es ist einer der Threads für die Zähler meines P�L-BHKWs. (Einzelerfassung der Phasen) var.W und var.P sind Longarrays für die Arbeit in 0,1Wh und für die Leistung in Watt. Meine Zähler geben 2000 Impulse pro kWh aus, also 0,5Wh pro Impuls. Die Routine berechnet nach jedem Impuls die aktuelle Leistung und die Arbeit. Die Routine beinhaltet auch eine Berechnung der vermutlich aktuellen Leistung, wenn nach mind. der zweifachen Zeit zweischen den beiden letzten Impulsen kein weiterer folgt. In der Routine wird nicht beachtet, da� der interne System-Timer einen Tick schneller läuft, als die Uhr, und somit u.U. eine zu geringe Leistung berechnet wird. Allerdings liegt dies im Promille-Bereich und kann vernachlässigt werden. MfG André H. Antworten bitte nur ins Forum! Fragen per EMail auf Forum-Postings werden nicht beantwortet! Das macht meine Heizung gerade | ||
Antwort schreiben Antworten: Re: SO-Schnittstelle Stromzähler (von Ralf Schroeder - 25.03.2009 22:40) |