Hallo,
ich bin so langsam am verzweifeln.
Ich will per Atmega mehrer 10k NTC auslesen.
Warum gerade dieser Sensor, ich weiß 18B20 wäre einfacher.
Aber es kommen 3 dieser Sensoren rein:
https://www.aquatuning.de/wasserkueh...nde-g1/4?c=391
Da diese direkt in den Kreislauf können.
Aktuell Arbeite ich mit dem Atmega 328 wird aber später ein 256.
Da ich es erst mal irgendwie ans laufen bekommen will.
Testaufbau ist ein Arduino UNO mit DFF ROBOT LCD KEYPAD SHIELD.
ADC auslesen klappt schon mal wunderbar.
Nur wie bekomme ich eine Temperatur Wert da raus:
Aktuellen Code hab ich mal angehängt. Ich hab ihn so gut wie möglich Dokumentiert. Das man auch den momentane Aufbau der Schaltung nachverfolgen kann.
Ich hoffe Ihr könnt mir weiter Helfen.
Code:
'Programm zum Ansteuern des Arduino Uno mit DF ROBOT LCD Keypad Shield
'Erweitert um NTC 10 KOhm Sensor.
'---------- Atmega -----------------------------------------------------
'Controller: Original ATMega328
'Quarz: 16MHz
'---------- LCD -----------------------------------------------------
'Belegung LCD:
'Backlight - PB2
'DB4 - PD4
'DB5 - PD5
'DB6 - PD6
'DB7 - PD7
'RS - PB0
'E - PB1
'---------- Tastatur -----------------------------------------------------
'Belegung Tasten:
'Über Widerstandsnetzwerk an PC0 (ADC0)
'keine Taste gedrückt: 1023 - Abfrage auf ADC > 1000
'Select: 739 - Abfrage auf ADC < 790
'Links: 503 - Abfrage auf ADC < 555
'Unten: 327 - Abfrage auf ADC < 380
'Oben: 143 - Abfrage auf ADC < 195
'Rechtst: 0 - Abfrage auf ADC < 50
'---------- NTC -----------------------------------------------------
'Temperatur Messung:
'NTC 10K an PC1 (ADC1)
'NTC ueber 10K Wiederstand an VCC 5V
' VCC--10k---|-----NTC-----GND
' |
' PC1
'V_a Spannung am Messeingang
'T_0 Nenntemperatur des NTC-Widerstands in K
'R_0 Nennwiderstand des NTC-Sensors in Ohm
'B Materialkonstante B
'Rv Vorwiderstand in Ohm
'Rn Widerstand des NTC-Sensors temperaturabhängig
'---------- Konfiguration Atmega -----------------------------------------------------
$regfile = "m328pdef.dat"
$crystal = 16000000
$hwstack = 100
$swstack = 100
$framesize = 100
'---------- LCD -----------------------------------------------------
Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , _
Db7 = Portd.7 , E = Portb.1 , Rs = Portb.0
Config Lcd = 16 * 2
Cursor Off Noblink
Cls
'---------- ADC Port C --------------------------------------------------------
Config Adc = Single , Prescaler = Auto , Reference = Avcc
Start Adc
'---------- Beleuchtung LCD ---------------------------------------------------
Config Portb.2 = Output 'PinB.2 als Ausgang für das LCD Backlight
PortB.2 = 1
'---------- Variablen -----------------------------------------------------
Dim Wert_von_tastatur As Word 'aktueller ADC-Wert
Dim Wert_von_NTC As Word 'aktueller ADC-Wert
Dim Rn As Single , Merke_1 As Single , Temp As Single
'---------- Konstanten --------------------------------------------------------
Const Rv = 10000
Const R_0 = 10000
Const B = 3900 '3528
'---------- Hauptprogramm -----------------------------------------------------
do
Wert_von_NTC = Getadc(1) 'adc-Wert einlesen
Wert_von_tastatur = Getadc(0) 'adc-Wert einlesen
locate 1,1
lcd "ADC0"
locate 1,10
lcd "ADC1"
Gosub Berechnung
locate 2,10 'Ausgabe Wert ADC 1
lcd "" ; Temp
locate 2,1 'Ausgabe Wert ADC 0
lcd Wert_von_tastatur ;"
'locate 2,10 'Ausgabe Wert ADC 1
'lcd Wert_von_NTC ;"
waitms 600
locate 2,1
lcd " "
loop
end
'---------- Sub Berechnung -----------------------------------------------------
Berechnung:
Temp = Wert_von_NTC * Rv
Wert_von_NTC = 1024 - Wert_von_NTC
Temp = Temp / Wert_von_NTC
Temp = Temp / R_0
Temp = Log(temp)
Temp = Temp * 298
Temp = Temp + B
Temp = B / Temp
Temp = Temp * 298
Temp = Temp - 273
return
Aktueller Aufbau der Testschaltung:
Lesezeichen