Hallo zusammen Ich entwickle mir einen Lichtregler mit einem Mikrokontroller PIC16F688, der eine bestimmte Beleuchtungsstärke konstant halten soll, auch wenn anderes Licht dazu kommt. Um die Lampe zu regulieren möchte ich nur mit den Befehlen heller oder dunkler arbeiten. Ich programmiere in Assembler. Wie ich die Befehle der Lampe senden muss ist mir klar. Aber ich weiss nicht mit welcher Routine ich das Resultat der AD-Wandlung bearbeiten muss, damit ich nacher weiss ob das Licht heller, dunkler oder gleich bleiben muss. Wie kann ich in Assembler, durch erhöhen oder verringern des Lichtes, den Wert der Wandlung immer konstant beibehalten? Hat vieleicht jemand eine Idee oder sowas schon selber gemacht?
?:-| hab ich irgendwie nicht ganz verstanden. Pic steuert EINE Lampe in Helligkeit. PIC mißt Helligkeit (z.B. über Fotowiderstand) mit ADC. Wo ist das Problem? Einfach gemessenen Wert mit konstante vergleichen. Ist Messung höher, dann Lampe so lange runter regeln, bis Messung wieder paßt. Und das ganze natürlich auch in die andere Richtung. Gralf
Mein Problem ist wie kann ich die Konstante mit dem AD-Wert vergleichen in Assembler. Ich kenne keinen Vergleichsbefehl mit dem ich zwei Werte vergleichen kann und dann danach entscheiden. Die Werte verhalten sich ja auch nicht linear. Wenn der Fotowiderstand die maximale Spannung anngibt muss ich ja immer runter regeln, aber wenn die kleinste Spannung anliegt ist es schon viel zu dunkel!
Schau mal bei google nach PI-Regler. Die Differenzengleichungen sind einfach in Assembler zu programmieren.
Ich hab bei google ein schönes Script gefunden (siehe Anhang). Auf Seite 42/43 ist das für dich interessante.
Hallo, subtrahiere einen konstanten Wert (der SOLL-Wert) von deinem A/D-Wert. Ist das Ergebnis 0, so hast du den Soll-Wert, wenn es nicht 0 ist, so gibt es zwei Möglichkeiten: 1. Carry-Flag gesetzt -> es gab einen Überlauf, also A/D-Wert zu klein 2. Carry-Flag nicht gesetzt -> kein Überlauf, also A/D-Wert zu groß
Hat der Sensor nicht die selbe Kennlinie, wie die Lampe, kannst Du auch vorher den einen an den anderen Wert angleichen. Würde ich z.B. über eine Look-up-Tabelle machen, desen Werte zuvor "manuell" errechnet sind. Ist schnell und von berechenbarer Dauer, wenn es um zeitkritsche Dinge geht. Im PIC-Assembler kenne ich mich nicht aus, aber beim AVR gibt es einen Vergleichsbefehl: cp für zwei Register bzw. cpi für Register und Konstante und cpc für 2 Register+carry. Danach kann man dann über div. Abfragen verzweigen. Ist technisch das selbe wie die Subtraktion, kommt aber dem menschlichen Denken des Programmflusses näher. Gralf
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.