-
LCDs hab ich schon angesteuert, Spannungen auch schon "gemessen"
ich hoffe, dass der NTC/PTC mehr als 500Ohm hat, sonst würde einiges an Strom fliesen. (sry, beim ersten kommt auch ein "T" rein, das heist "Negative Temperature irgendwas" bzw. "Positive Temperature irgendwas" , ich weis nicht mehr, für was das "C" stand..)
Ich würde nach dem Mittelwert schauen, den der Widerstand bei den zu erwartenden Temperaturen hat. Diesen Wert nimmst du etwa für den Festwiderstand. Dann hast du eine große mögliche Schwankung der Spannung und kannst genauer auswerten.
EDIT:
Am Display sind 6 Anschlüsse zum MC geführt, dann kann es per 4-Bit-Ansteuerung angesteuert werden (es wird immer ein halbes Byte übertragen). die Anschlüsse sind(nicht unbedingt nach der Reihenfolge):
- DB4 (Datenbit4)
- DB5 (Datenbit5)
- DB6
- DB7
- RS (Daten oder Anweisung)
- E (Enable)
so kann man bei Bascom (mit diesen Kürzeln und den zugehörigen Pins) das Display angeben, initialisieren lassen und dann einfach mittels
Code:
lcd "Temperatur" ; temp
anzeigen lassen (hier den Text "Temperatur" und den Wert der Variablen "temp")
-
nagut dann wert ich mich mal an der Programmierung versuchen... das wird bestimmt nicht einfach. :-k :-k
wert erst mal mit normalen text anfangen, und dann die werte versuchen Azeigen zulassen....
das bereitet mir jetzt schon schlaflose Nächte ](*,)
-
I wo.
im RN-Wiki steht alles drin, was du brauchst, keine Sorge!
Nur logisch denken musst du selber können, dann geht das.
gute Idee, das mit dem "erst klein anfangen". versuch erstmal ne LED zum Blinken zu bringen, dann "Hallo Welt!" oder anderes zu schreiben, dann mal n bisschen rechnen und dann mal die Ersten ADC-Sachen machen.
-
Hallo,
so hab mir jetzt mal 2 tempsensoren besorgt einer ist ein Öl Temp Sensor(NPC) betriebszustand 1,8kohm festwiderstand für spannungsteiler 1,8kohm
der andere für Abgas(PTC NiCr Sensor)
zum probieren hab ich den NPC genommen.
folgen code hab ich mir zusammen geschrieben
Code:
Config Adc = Single , Prescaler = Auto
Start Adc
Dim Temp1 As Word , Portc.5 As Byte
Portc.5 = 0
Do
Temp1 = Getadc(portc.5)
Print "ADC-Pin " ; Portc.5 ; ": Wert " ; Temp1
Incr Portc.5
If Portc.5 > 7 Then Portc.5 = 0
Waitms 300
Cls
Locate 1 , 1
Lcd "Temp" ; Temp1
Loop
End
auf der Anzeige sieht es schon mal gut aus, nur die werte sind total verrückt mal 358. 2258,0,245,18045
kann mir einer ein tip geben was ich ändern muß?
-
Du fragst ja alle ADC-Pins ab. und ADC-Pins, die mit nichs verbunden sind, spielen Antenne, sie nehmen mal dieses und mal jenes Potentieal an. frag mal NUR den ADC-Pin ab, an dem dein Temp-Sensor hängt!
(z.B. durch "Temp1 = getadc(0) " )
eventuell gibt es auch Probleme mit der Variablen "Portc.5".
nenn diese Variable sicherheitshalber mal "Pinnummer" oder "ADCkanal" o.Ä. , zumindest nicht so, wie eine Standartvariable für die Porteinstellung.
vor das erste Print würde ich auch ein "CLS" zu setzen. (zur Sicherheit)
-
ja hat gut geklappt... aber mit dem CLS hinter dem Print, hat nicht funktioniert da war das dislpay leer..
so der Wert der im LCD angezeigt wird steht so bei 632 verändert sich auch je nach temperatur unterschied...
wie kann ich jetzt den Wert kalibrieren. da gibt es doch bestimmt mehre möglichkeiten also den spannungsteiler den ich benutze hat ein festwiderstand von 1,8k Ohm und der Temp sensor bei raumtemperatur 1,8k Ohm. dann liegen am pin so um die 2,35V an also fast genau die hälfte von der batterie spannung 4,7... die Werte schwanken natürlich....
8-[ O:)
-
eeeh, ja bei dem CLS war ein Denkfehler.... :)
Zum Spannung variieren: da hilft ein Potentiometer statt dem Festwiderstand. Du sagtest, es wäre ain NTC, also sinkt der Widerstand, wenn die Temperatur steigt.
Kennst du die Werte von dem NTC, wenn er X Grad warm ist/ um wieviel Ohm sein Widerstand pro Grad mehr sinkt?
Dann könnte man berechnen, was für einen Widerstand du etwa benötigst.
Du kannst natürlich auch einfach das Poti nehmen und herumexperimentieren. Solange dein Vref gleich Vcc ist, besteht keine Gefahr.
-
ja das mit dem Poti hab ich mir schon gedacht..... gibt es auch noch eine möglichkeit die man ins programm schreiben kann?
als nächstes versuche ich den abgastemp sensor... 30 ohm und mit der temperatur nimmt widerstand zu......
hier nochmal mein code wollte den zweiten wert anzeigen lassen. bekomm immer ein fehler "LOOP expected"
100% hab ich den dreh mit dem schreiben noch nicht raus ](*,)
deine Hilfe ist echt super. danke echt nett
Code:
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , Db7 = Portd.7 , E = Portd.3 , Rs = Portd.2
Config Lcdbus = 4
Deflcdchar Print , 17 , 32 , 14 , 17 , 17 , 17 , 14 , 32 ' replace ? with number (0-7)
Cls
Config Adc = Single , Prescaler = Auto
Start Adc
Dim Temp1 As Word , Kanal1 As Byte
Kanal1 = 0
Do
Temp1 = Getadc(5)
Print "ADC-Pin " ; Kanal1 ; ": Wert " ; Temp1
Incr Kanal1
If Kanal1 > 7 Then Kanal1 = 0
Waitms 100
Cls
Locate 1 , 1
Lcd Chr(0) ; "L: " ; Temp1
Dim Temp2 As Word , Kanal2 As Byte
Kanal2 = 0
Do
Temp2 = Getadc(4)
Print "ADC-Pin " ; Kanal2 ; ": Wert " ; Temp2
Incr Kanal2
If Kanal2 > 7 Then Kanal2 = 0
Waitms 100
Cls
Locate 2 , 1
Lcd "Abgas: " ; Temp2
Loop
End
=D>
-
Du hast 2X "Do" drin, aber nur einmal "loop".
Außerdem müssen Variablen immer VOR dem eigentlichen Programm deklariert werden (zumindest afaik) (das ist das, was du mit "dim" machst)
Code:
...
Locate 1 , 1
Lcd Chr(0) ; "L: " ; Temp1
Dim Temp2 As Word , Kanal2 As Byte
Kanal2 = 0
Do
Temp2 = Getadc(4)
...
hier deklarierst du Temp2, nachdem schon Arbeitsanweisungen gegeben wurden.
dein 2. "Do" ist hier übrigens zu sehen.
warum zählst du zweimal die ADC-Pins durch???? das ist wirgendwie sinnlos.
probiere es damit (oder etwas ähnlichem):
Code:
Dim Temp as Word , Kanal as Byte
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , Db7 = Portd.7 , E = Portd.3 , Rs = Portd.2
Config Lcdbus = 4
Config Adc = Single , Prescaler = Auto
Start Adc
cls
Kanal = 0
Do
Temp = getadc(Kanal)
cls
locate 1 , 1
lcd "ADC-Pin: " ; Kanal ; "Wert: " ; Temp
wait 1
incr Kanal
if Kanal > 7 then
Kanal = 0
end if
loop
End
damit sollten alle ADC-Pins nacheinander im Sekundentakt abgefragt und die Werte angezeigt werden.
wenn du nur die Kanäle 0 bis X abfragen möchtest (z.B. nur bis Kanal 2), dann musst du nur bei
die 7 durch X (also Bspw 2) ersetzen)
-
Naja alle Funktionen kenne ich nocht nicht so ganz... wird aber langsam.
so hab dein Code probiert.... also da werden die werte nacheinander Angezeigt... ich wollte sie aber Gleichzeitig auf dem Display angezeigt bekommen.... das sich nur der wert Aktualisiert....