Hallo miteinander,
bin nicht sicher, ob ich im Elektronik oder Sensoren-Forum am besten aufgehoben bin...
Folgendes: Ich werte seit einiger Zeit meinen Stromzähler per Computer aus, indem ich einen CNY70 aufs Glas des Zählers geklebt habe und folgende Schaltung am Gameport angeschlossen habe.
Problem 1: Mit dem Poti lege ich die Schaltschwelle fest, der Poti scheint allerdings irgendwie zu driften, jedenfalls muss ich alle zwei Wochen nachregeln, was recht lästig, weil sehr empfindlich ist. (Die Differenz von roter Markierung der Zählerscheibe zur "Alu-Rändel") ist nur etwa 0,15V.
Problem 2: Die Schaltung hat so eine Art "Prellen" bei den Übergängen von Rot nach Alu und zurück. Das behandle ich zur Zeit per Software, die den Gameport auswertet.
Jetzt habe ich ein kleines Lernpaket "Mikrocontroller" mit einem ATTINY13 geschenkt bekommen und möchte umrüsten. Die Idee ist, dass der Controller stets einen PIN auf High setzt (und das am Gameport ausgewertet wird), wenn die Spannungsdifferenz am ADC um z.B. mehr als 10% nach oben oder unten schwankt und diese Pegelveränderung länger als X Millisekunden dauert. Damit sollte dann das lästige Kalibrieren und das SW-"Entprellen" entfallen.
Nun die eigentliche Frage: Ich habe (noch) keine Ahnung von AVRs und kein Gefühl dafür, ob mein Algorithmus in das 1KB Flash des ATTINY13 paßt.
Was meint ihr? Seht ihr noch Probleme, auf die ich als Anfänger stoßen könnte? Die Spannungsversorgung nehme ich vom Gameport, der sollte genug Strom liefern und die Spannung ist doch hinreichend stabil (wg. der Qualität der Meßergebnisse am ADC-Port).
Die 1 KB Flash sollten schon ausreichen. Wenn man allerdings mit Fließkommazahlen zu rechenen will wird das ziehmlichknapp. In ASM sollte man es schaffen unter 200 Bytes zu bleiben.
Das Problem mit der Drift könnte vom ziehmlich hohen LED-Strom für den Refelxkoppler kommen. Da scheint was zu altern. Es könnte natürlich auch der Klebstoff sein, der den Reflexkoppler in Position hält.
Du meinst nicht, dass es am Poti zusammen mit Luftfeuchte/Temperatur liegen könnte? Der Zähler steht im Keller, daneben stehen Waschmaschine und Trockner, so dass da schon ein paar Grad Unterschied entstehen können.
Den Klebstoff kann ich ausschliessen, die Position am Glas ist unverändert.
Mit ASM will ich mich eigentlich nicht auseinandersetzen (müssen), dachte da eher an Bascom oder C...
Mit den Fließkommazahlen versteh ich nicht, kannst Du das erklären?
In C wird das wahrscheinlich auch noch gehen, falls Du Fliesskommazahlen vermeidest. Da die AVRs von Haus aus nur Operationen mit 8Bit Integers unterstützen, ist alles, was Fliesskommazahlen beinhaltet (zB dividieren) sehr speicher- und rechenintensiv.
Bei deinem Problem kann ich es mir aber vorstellen, dass Du mit einem 16bit (U)Integervariable für Deine Berechnungen auskommen kannst. Man muss sich nur u.U über die Reihenfolge der Operationen nachdenken, damit man immer im Wertebereich der 16bit bleibt.
Was Du vielleicht in Betracht ziehen könntest, ist die Kommunikation zwischen AVR und PC per serielle Schnittstelle. Dabei könnte der Rechner die "komplizierteren" Rechnungen übernehmen (zB die Errechnung der Schaltschwellen), und diese dann an den AVR übermitteln.
Also: Taktzählen über Gameport, Kalibrierung in bestimmten Intervallen über serielle Schnittstelle.
Auf lange sicht sollte man den PC nicht die ganze zeit laufen lassen, damit der Stromzähler nicht so viel zu zählen hat. Die Lichtschrauke läßt sich leider kaum so sparsam kriegen, das man gut mit Akku oder Batteriebetreib auskommt.
hi, also ich habe eine ultrahelle LED und einen Fototransistor genommen. Dieser schaltet über einen Komperator 5 Volt zu meinem Mikrokontroller. Seit ungef, 5 Jahren läuft es auf einem C-control. Jetzt bin ich dabei auf einen AT 32 umzurüsten. Ich habe im C-Control die Uhrzeit abgefragt und alle sechs Minuten die gezählten Impulse aus Stromzähler mit Tag Stunde Minute abgespeichert. Da kommt man mit 8 Bit = 255 Pulse gut zurecht. Bei meiner Zählerkonstante sind das 34Kwh. Die Werte lese ich dann mit einem Terminalprogramm über RS232 aus und berechne Arbeit und Leistung in einem Tabellenkalkulationsprogramm. Die immer wieder mal fehlenden Impulse gleiche ich mit einem zusätzlichen Faktor aus den ich bei meiner wöchendlichen Zählerablesung ermittle und überwache. Nebenher messe ich den Regen, die Feuchte die Außentemperatur, den Luftdruck habe einen 32kb eeProm eingebaut und kann meine Daten ca 5 Tage speichern. Im AVR will ich dann noch versuchen I²C Temperatursensoren (LM75)einzusetzen. Ich hoffe es hilft dir weiter. Viel Erfolg noch mfg.uli
da kann eigentlich kaum etwas auf dich zukommen, was du nicht packst.
Welche Programmiersprache?
Der ADC ist bei einer Spannungsdifferenz von 0,15 V ebenfalls nicht einfach stabil zum laufen( ohne Fehler) zu bekommen.
Schau mal bei Juli( LED) da kannst du vielleicht den ADC umgehen, wenn nicht dann hast du ihn ja noch.
Das Entprellen fällt bei LED bestimmt weg und mit deinen ATTiny kannst du in Bascom das mit Debounce lösen.
Mich würde der BasicPlus Code für die C-Control von Juli interessieren!
Den Zähl-Impuls vom Zähler würde ich direkt vom Zähler bekommen, da dieser eine S0 Schnittstelle (Open Kollektor Ausgang) hat!
Da würde ich dann die 5V über einen Digital-Eingang nehmen!
Lesezeichen