Digitale Temperatur regelnde Lüftersteuerung mit einstellbaren Hysteresewerten

Hallo zusammen,

also wenn ich das so verfolge dann kommt mir das vor wie ...
"von hinten durch die Brust ins Auge" ;)

Du bekommst doch von deinem ADC eine Messung die in einem positiven
Zahlenbereich liegt. In deinem Bereich ja also anscheinend von 0..63.

Bei diesem Bereich mußt du erstmal sehen welchen Wert du bei 0°C bekommst.
Sagen wir mal der ADC liefert dir für 0°C den Wert 20. Dann mußt du also von
deinem Wert vom ADC diese 20 abziehen. Alle Werte unter 20 gehen dadurch
jetzt in den negativen Bereich und alle über 20 in den positiven Bereich.

Nun mußt du den gemessenen Wert auf deine Grad strecken oder stauchen.
Wenn der ADC also zB für 1°C Differenz 3 Werte hoch oder runtergeht dann
mußt du den Wert durch 3 teilen.

Damit bekommst du jetzt eine Formel ...

Grad = ( ADC - 20 ) / 3

Das ist jetzt mal ein grober Ansatz wie das geht. Da muß man nix mit AND,
NOT, OR, ... machen. Man muß nur Variablen nehmen die auch Vorzeichen
bekommen können und nicht Ganzzahlig sind. Also den richtigen Typ wählen.

Wenn man genauer messen möchte dann sollte man die Spannung, die man
vom Sensor bekommt vor dem ADC-Eingang erstmal mit einem OPAmp so
bearbeiten (Nullpunktverschiebung und Verstärkung) das man den interessanten
Bereich den man braucht auf den vollen Meßbereich des ADCs anpaßt.

Soviel erstmal dazu. Ich weiß nicht warum man alles so kompliziert lösen
muß ... :rolleyes:

Gruß
Dino
 
Soviel erstmal dazu. Ich weiß nicht warum man alles so kompliziert lösen
muß ... :rolleyes:


Hallo Dino!

Tja, dass frage ich mich inzwischen schon nicht mehr. ;)

Vielleicht solltest du einfach mal das alte Thema ab dem 14.02. im Microcontroller.net dazu lesen.... dann klärt sich einiges auf. ;)
Selbst dort wurde gleich zu Beginn schon darauf hingewiesen, dass der Sensor doch 10mV pro °C liefert. :rolleyes:

Egal.... :cool:


Gruß,
Cassio
 
Hallo,

Vielleicht solltest du einfach mal das alte Thema ab dem 14.02. im Microcontroller.net dazu lesen.... dann klärt sich einiges auf. ;)
Selbst dort wurde gleich zu Beginn schon darauf hingewiesen, dass der Sensor doch 10mV pro °C liefert. :rolleyes:
hab ich jetzt auf die schnelle nicht gefunden. Auch keinen Link darauf hier in
diesem Thread.

- Der LM135 arbeitet von -55°C bis +150°C.
- Pro °C (oder Kelvin) ändert sich die Ausgangsspannung um 10mV.
- Anscheinend sind bei 0°K (-273,15°C) 0V am Ausgang.

also sind bei 0°C ungefähr 2,7315V am LM135-Ausgang.

Was ist da jetzt so kompliziert dran ...
Eine Differenz von 50°C sind also 500mV und eine Differenz von 150°C
sind 1500mV. Es sollten also bei ...
-50°C etwa 2,2315V und bei
+150°C etwa 4,2315V am Ausgang des LM135 anliegen.
Entweder man mißt das jetzt direkt mit dem ADC-Eingang und hat dann etwas
weniger Genauigkeit oder man streckt den Bereich mit einem OPAmp so das
man bei -50°C auf 0V am ADC-Eingang (Wert 0000) und bei +150°C auf +5V
am ADC-Eingang (Wert 1023 bei 5V Referenz und 10Bit ADC) kommt. Dann
hat man die höchste Genauigkeit bei der Messung.

Was ist da jetzt eigentlich so kompliziert dran ... :confused: Warum muß man
da so viel mit logischen Operationen machen ?

Gruß
Dino
 
Hallo Dino!

Ist ja gut.....

Genau DAS wurde ja alles schon geschrieben!
Nun fang du nicht auch noch mal damit an! :cool:


Das ist genauso sinnlos darüber zu diskutieren, wie ein normales LCD bei der kleinen Anwendung im 8bit-Modus zu betreiben. :rolleyes:


Nimm die Fakten einfach bei der Aufgabe von Knut als Gegeben hin. ;)


Grüße,
Cassio
 
Nun mußt du den gemessenen Wert auf deine Grad strecken oder stauchen.
Wenn der ADC also zB für 1°C Differenz 3 Werte hoch oder runtergeht dann
mußt du den Wert durch 3 teilen.

Damit bekommst du jetzt eine Formel ...

Grad = ( ADC - 20 ) / 3
die Formel habe ich doch schon längst benutzt nur etwas anders

nur halt so
Code:
B = 206                                                   'Steigung 1° = 2,06 bit mehr und da man keine Kommastellen angeben kann * 100

  C = 56300                                                 'Offset wert bei 0° hat die Schaltung 563 Bit * 100 für die Rechnung

  Incr Curch

  If Curch > 1 Then Curch = 0

  Temp = Admux And &B11110000

  Admux = Temp Or Curch



  Lb1 = Adcl                                                'Abfrage des Lowbits

  Hb1 = Adch

  Waitms 20                                                 'Abfrage des Highbits

  Hb1 = Hb1 And &B00000011                                  'Highbit mit 3 und verknüpfen um eventuele Störsignale ich ein zu Beziehen

  Hb1 = Hb1 * 256                                           'High bit * 256 um  1023 bit zu bekommen

  A = Lb1 + Hb1

   Udr = A
                                                            'Variable A = Gesamt bit High- und Lowbit
  D = A * 100                                               'Umwandlung von A für die Berechnung der Temperatur

  Ye = D - C
                                                            'Bitwert der Temperatur - Offset
  Xe = Ye / B
Xe ist ein word da ich in der Adc Umrechnung den wert mal 100 genommen habe um eine Größere Genauigkeit zu bekommen da meine Steigung m oder b (im Programm) 2,06bit /°k beträgt und ich nicht wusste wie ich sonst die Genauigkeit hin bekomme habe ich das so gelöst

die Formel für einen Grafen y = mx+b kenne ich mittlerweile auch is ja nicht so das ich hier was frage warte bis jemand es postet und dann in mein Programm rein kopiere und einfach darauf warte das es irgendwie funktioniert.

so damit jetzt jeder weis was ich bei mikrocontroller net geschrieben habe

http://www.mikrocontroller.net/topic/208451#new

http://www.mikrocontroller.net/topic/208763#new

http://www.mikrocontroller.net/topic/206295#new

http://www.mikrocontroller.net/topic/209374#new

http://www.mikrocontroller.net/topic/207531#new

Also mein Adc gibt mir einen wert für 0 von 563 aus aber
bei der Formel
Y = mx+b
adc = Steigung *temperatur + Offset (der adc wert für 0)
auf X also Temperatur ändere bekomme ich

x = (y-b)/m
richtig ??
richtig
also bekomme ich bei - 20 ° C (2,5314V)= 521 Bit

also muss ich

X = (521bit-563bit)/2,06
X = -20 °c

soweit so gut das hab ich ja auch alles gemacht nur bildet der nur gibt der Controller bei - 2° C (2,711V 588bit ) den Wert +317 nach der Rechnung aus

also
256 128 64 32 16 8 4 2 1
1 0 0 1 1 1 1 0 1
Was ist da jetzt eigentlich so kompliziert dran ... Warum muß man
da so viel mit logischen Operationen machen ?
was habe ich also getan ich hab das Ergebnis invertiert da ich dachte das sei die einfachst lösung und dann brauche ich ja auch nur die letzten 8 Ziffern das hab ich so umgesetzt.
Code:
 Negativ:

 If Xe.8 = 1 Then

      Locate 1 , 14 : Lcd "-"

      Xe = Not Xe

      Xe = Xe And &B0000000000111111
     Else
     Locate 1 , 14 : Lcd " "
     End If
     Return

Um die LCD nicht zu überlasten und zum Flackern zu bringen habe ich dann noch eine Subroutine Negativ eingerichtet die immer nur im auf dem Standartbildschirm angesteuert wird.


Das ist genauso sinnlos darüber zu diskutieren, wie ein normales LCD bei der kleinen Anwendung im 8bit-Modus zu betreiben.

ist übrigens geändert worden habe es auf 4 Bit um gestellt .
 
ist übrigens geändert worden habe es auf 4 Bit um gestellt .


Hallo Knut!

Na, wahnsinn!
Also doch lernfähig und einsichtig.... oder brauchtest du einfach nur ein paar Pins am AVR mehr. ;)

Dann sollte dein Programm ja jetzt komlett sein, oder?

Grüße,
Cassio
 
Also doch lernfähig und einsichtig.... oder brauchtest du einfach nur ein paar Pins am AVR mehr. ;)

Ganz ehrlich war einfach zu faul beim aufbauen auf dem Neuen Veroboard alle 8 kontacte an zu schließen und da mir das keine Nach und vorteile bringt warum dann 8 bit modus

ja das Programmsteht soweit in der Roh Fassung halt ohne Komentare ander seite soll ich es online stellen ??
 
Hallo Knut!

Ob du dein Programm jetzt schon online stellen möchtest, musst du selbst entscheiden.
Schließlich ist es noch einige Zeit hin bis Juni und ich weiß nicht, ob du evtl. deinen "Mitschülern" bzw. "Mitlernenden" dein Programm hier als Vorlage liefern möchtest.

Wenn du damit kein Problem hast, oder es keine Probleme gibt, dann kommentiere es doch noch und stelle es anschließend hier rein.


Interessanter wäre es natürlich, wenn du zu deinem Programm nicht nur einfach den kommentierten Code hier einstellst, sondern gleich noch eine kleine Funktionsbeschreibung (unter Berücksichtung verschiedener Variablen) verfassen würdest.
Das wäre dann auch für dich noch eine "Stütze" und du kannst es hier jederzeit nachlesen. :)

Grüße,
Cassio
 
Moin
also da das Mein Abschlussprojekt ist also ein teil der Abschlussprüfung glaube ich nicht das es noch jemande gibt der gerade das selbe durch führt aber ich werd es hoch laden wenn ich es Komplett Fertig habe und danke für den Tipp mit der Funktionsbeschreibung

Gruß Knut
 
Hallo Knut,

Code:
                                                            'Bitwert der Temperatur - Offset
  Xe = Ye / B
Xe ist ein word da ich in der Adc Umrechnung den wert mal 100 genommen habe um eine Größere Genauigkeit zu bekommen da meine Steigung m oder b (im Programm) 2,06bit /°k beträgt und ich nicht wusste wie ich sonst die Genauigkeit hin bekomme habe ich das so gelöst

...
...

x = (y-b)/m
richtig ??
richtig
also bekomme ich bei - 20 ° C (2,5314V)= 521 Bit

also muss ich

X = (521bit-563bit)/2,06
X = -20 °c

soweit so gut das hab ich ja auch alles gemacht nur bildet der nur gibt der Controller bei - 2° C (2,711V 588bit ) den Wert +317 nach der Rechnung aus
Du weißt das WORD nur positive Integerzahlen aufnehmen kann ?
Also 0 bis 65535 und dann ist Ende. Ist jetzt nur mal ne Info.
Ich hab mir aus Zeitmangel jetzt nicht das Programm angesehen. Vor allem weil ich
mich dann auch noch in die ultrakurzen Variablennamen einarbeiten müßte.

Gruß
Dino
 
Hi Dino,

...Vor allem weil ich
mich dann auch noch in die ultrakurzen Variablennamen einarbeiten müßte.

hast Du's schon vergessen? GfABasic: i, j, k, x, y, z, x1, y1, z1.....find ich nach wie vor ok, wenn's nicht zuuu viele sind.:yes4:
 
Moin alle zusammen also bei mir gehts jetzt Grade in die Heiße Phase der Prüfungsvorbereitung di hab ich theoretische prüfung ich stelle mein Programm und die Durch arbeitung aber erst nach der Praxis online um eventuelle fragen der Urhebung zu verhindern naturlich werde ich diese Seite als Quelle angeben und ich danke euch allen noch ein mal für die Gedult und das Engagement mit der ihr mir geholfen habt ich werde dan nach meiner Prüfung das Ergebnis hier reinstellen und die Dokumentation in einem Neuen Thema veroffentlichen.

Danke Knut
 
Hallo Knut!

Dann wünsch ich dir mal alles Gute und drück dir die Daumen, dass alles in Ordnung geht.


Grüße,
Cassio
 

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)