Forum: Mikrocontroller und Digitale Elektronik Regler in Assembler?


von Michael Zellweger (Gast)


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?

von Gralf (Gast)


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

von Michael Zellweger (Gast)


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!

von Bri (Gast)


Lesenswert?

Schau mal bei google nach PI-Regler. Die Differenzengleichungen sind
einfach in Assembler zu programmieren.

von Bri (Gast)


Angehängte Dateien:

Lesenswert?

Ich hab bei google ein schönes Script gefunden (siehe Anhang). Auf Seite
42/43 ist das für dich interessante.

von Carsten Steiner (Gast)


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ß

von Gralf (Gast)


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

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
Noch kein Account? Hier anmelden.