So, jetzt passts endgültig :D
Wie findet ihr so etwas immer nur raus?
Also, danke alle noch einmal.
Druckbare Version
So, jetzt passts endgültig :D
Wie findet ihr so etwas immer nur raus?
Also, danke alle noch einmal.
Keine Ahnung, mir war so danach... Eingebung...Visionen....
Jetzt mal im Ernst, wenn du dir das Programm mal anschaust siehst du
das du eine Variable in einer Zeile (Z1=Z1 -786) total verwirrst. Stell dir das mal mit Zahlen vor : 5=5-786
Da wirst du dich immer im Kreis drehen, ohne was vernünftiges zu erreichen.
Allerdings ist mir schleierhaft warum Bascom das beim Compilieren angemeckert hat, und wie das vorher funktioniert hat.
Aber Egal, was zählt ist das Ergebnis.
MfG
Neutro
Was soll an so einer Programmzeile verwirrend sein?
Da steht eben nicht z.B. 5=5-786, sondern:
berechte Z1 minus 786 und speichere das Ergebnis in Z1.
Das ist ganz normaler Progammieralltag, wenn man z.B. eine Variable um 2 erhöhen will. Dann sieht das auch so aus:
X = X + 2
Es ist eben keine Gleichung, sondern eine Programmanweisung, den rechten Teil zu berechnen und das Ergebnis in die linke Variable zu schreiben.
Gruß MeckPommER
Da magst du Recht haben, aber warum geht es dann wenn er für die Berechnung eine andere Variable verwendet?
Das ist mir dann leider nicht einleuchtend, ich war immer davon ausgegangen das man eine Variable nicht 2x in einer Zeile einsetzen kann, weil Bascom das nicht kann.
Für eine Erklärung und das dazugehörige dazulernen wäre ich dankbar.
MfG
Neutro
Wenn du recht hättest, dürfte die Zeile
temp = temp + 25.7
eigentlich auch nicht funktionieren. Ich kann dir nicht sagen, warum es vorher nicht ging. Vielleicht Interpretierte Bascom die 786 als Integer und hat sich dann bei der Typenkonvertierung vertan, who knows ...
2x selbige Variable in einer Zeile ist kein Problem. Nur mehr als eine mathematische Funktion in einer Zeile geht nicht. Oft habe ich Fehler festgestellt, wenn Typenkonvertierung und eine mathematische Operation auseinandertreffen.
[Single] = [Word] * 4.2
sowas oder ähnliches führt manchmal zu den "lustigsten" Ergebnissen, wogegen
[Single] = [Word]
[Single] = [Single] * 4.2
dann wieder ganz brav und artig funktioniert.
Gruß MeckPommER
Hast Recht, war mir gar nicht aufgefallen.
Manchmal sind die Wege von Bascom wohl unergründlich....
Auch wenn es jetzt OT geht:
Welche Variablen Typen (Byte, Integer, Single, usw)
lassen sich eigentlich miteinander verarbeiten bei Mathematischen
Berechnungen?
Ja da hat man doch wieder etwas gelernt \:D/
Ich störe nur ungern, aber ich habe ein Problem ](*,)
Irgend wie liegt die Temperatur immer zwischen 28.23°C und 29.04°C, egal, welche innentemperatur herscht. Es ändert sich zwar linear zur realen Temperatur, aber der Bereich stimmt nicht.
Es wurde noch eine Tasterfunktion hinzugefügt.
Hier noch einmal der Code:
Code:$regfile "m48def.dat"
$crystal = 8000000
Config Pinc.4 = Input
Portc.4 = 0
Config Portb = Output
Config Portd = Output
Config Lcdpin = Pin , Db4 = Portd.6 , Db5 = Portd.5 , Db6 = Portb.7 , Db7 = Portb.6 , E = Portd.7 , Rs = Portb.0
Config Lcd = 16 * 2
Config Adc = Single , Prescaler = Auto
Config Portc.0 = Input
Deflcdchar 6 , 7 , 5 , 7 , 32 , 32 , 32 , 32 , 32 '°C
Dim W As Word
Dim Z1 As Single
Dim Z2 As Single
Dim Temp As Single
T Alias Pinc.4
L Alias Portb.1
Cursor Off
Do
If T = 1 Then
L = 1
W = Getadc(2)
Z1 = W
Z2 = Z1 - 714
Temp = Z2 * 0.035
Temp = Temp + 25.7
Cls
Locate 1 , 1
Lcd "Temp: " ; Fusing(temp , "##.##") ; Chr(6) ; "C"
Locate 2 , 1
Lcd ""
Waitms 1000
Else
Cls
L = 0
End If
Waitms 1
Loop
Kein Wunder ... in deiner Liste von Seite 1 hattest du Messwerte gezeigt die (über den Daumen) pro Grad ca. 4-5 Einheiten auseinanderliegen.
Bei deiner jetzigen Formel müssen die Messwerte schon knapp 30 Einheiten auseinanderliegen, damit ein Grad Temperaturunterschied angezeigt wird.
Über den Daumen würde ich den Faktor von 0.035 in 0.222 ändern und das Ergebnis dann in der Zeile darunter auf die tatsächlichen Werte anpassen.
Da deine Messwerte aber nicht sehr linear aussehen, glaube ich, das du große Messfehler in deiner Liste hast. Teilweise hast du nämlich auch 7-8 Einheiten pro Grad.
Mal ganz allgemein: die Funktion aus Messwert und der demnach festgestellten Temperatur sollte bei deinem Tempsensor eine Gerade sein. Kannst dir das ja mal aufzeichnen, ist enorm hilfreich.
Diese Funktion mußt du in deiner Anpassung abbilden. Der Faktor ist die Steigung der Geraten und die Addition eines festen Wertes sorgt für die stimmige Höhe der Geraden.
Mit irgendwelchen Werten herumprobieren bringt zumeist nicht viel. Das A und O sind brauchbare Messwerte.
Gruß MeckPommER
Wie finde ich diesen "tatsächlichen Wert" heraus?
P.S. Sehr sehr sehr geiler Hexabot haste da. Das hast du wirklich toll gemacht !
Siehe mein Edit ein Posting zuvor. Man könnte das Ganze auch theoretisch machen, da es aber immer Bauteiltolleranzen gibt, empfiehlt sich die Messmethode.
Thx, ich werde das Kompliment Marvin ausrichten ;-)