Regler in Assembler?

Gast #213036
Lesenswert?

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?
Gast #213037
Lesenswert?

?:-|

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
Gast #213038
Lesenswert?

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!
Gast #213041
Lesenswert?

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ß
Gast #213042
Lesenswert?

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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren