http://www.rn-wissen.de/index.php/ADC_%28Avr%29
Gruß Richard
http://www.rn-wissen.de/index.php/ADC_%28Avr%29
Gruß Richard
dank Dir, Richard.
hätt ich das vor einem monat gehabt...!
jetzt hab ich den ADC ruhig (s.o.) und auch schon umgerechnet (ist es wirklich so kompliziert, dass man sich aus dem ADC (0-1023) erstens den widerstand (OHM sei dank) und daraus die temperatur (hier seien Steinhart&Hart lobend erwähnt) berechnen muss? und das in BASCOM??? ich habs gemacht, es funktioniert; aber da müsz ja einen direkteren weg geben?
noch was: ist der simulator mit LCD-code immer so gebremst?
aber eigentlich gehör ich da ja schon in ein anderes forum.
danke und lg
Marcel
Hast Du in simulations Code ganz oben en $SIM stehen? dann optimiert der Compiler für den Simulator.
Das muss vor dem Brennen natürlich wieder RAUS also noch einmal ohne $SIM neu kompilieren vor dem
"Brennen"!
Gruß Richard
nein, hab ich - noch - nicht. probier ich.
für Tobika:
hier jetzt einmal nur der code und die formel-links.Code:$regfile = "m32def.dat" $crystal = 8000000 $baud = 9600 $hwstack = 32 $swstack = 10 $framesize = 40 Config Lcd = 16 * 2 Config Lcdbus = 4 Config Lcdpin = Pin , Db4 = Portc.0 , Db5 = Portc.1 , Db6 = Portc.2 , Db7 = Portc.3 , E = Portc.6 , Rs = Portc.4 'Konfiguration entspricht der hardware vom evalboard Deltawave Atmega32 Dim W As Word 'ADC-wert, zwischen 0 und 1023 Dim Temp_ausgabe As Single Dim V_an_adc As Single 'Messbereich ca 10°-90° '=>kalibrierung für ca 40°, Spannungsteiler R1(NTC R25=5k)[20°]: 6.247k, R2: 2,18k, Const Prescale_value = 0.0048828 '5V/1024 Dim Formel As Single Dim A As Single 'A, B, C: parameter für steinhart-hart-gleichung Dim B As Single Dim C As Single Dim R As Single Dim Lnr3 As Single Dim Blnr3 As Single Dim Widerstand As Single Led1 Alias Portb.0 Led2 Alias Portb.1 Led3 Alias Portb.2 Led4 Alias Portb.3 Led5 Alias Portb.4 Led6 Alias Portb.5 Led7 Alias Portb.6 Led8 Alias Portb.7 Config Led1 = Output Config Led2 = Output Config Led3 = Output Config Led4 = Output Config Led5 = Output Config Led6 = Output Config Led7 = Output Config Led8 = Output A = 0.002946983 'ABC-werte für 50° müssen erst in einer gleichung für 3 var berechnet werden (EXCEL-datei von mir) B = 0.000250322 C = 0.000001374 Config Adc = Single , Prescaler = Auto , Reference = Avcc Start Adc Do 'Print "preScal = " ; Prescale_value W = Getadc(0) Locate 1 , 1 : Lcd "w =" ; W Print "w =" ; W V_an_adc = Prescale_value * W : Print "V_an_ADC= " ; V_an_adc 'Volt an ADC 'Spannungsteiler: Rx= R1*U / (U-U2) - R1 : Rx= 11 / (5 - U2) - 2,2 'wobei U=Uges, R1=2,18k, Rx gesucht, U2= w [aus Getadc(0)] Widerstand = 5 - V_an_adc Widerstand = 11 / Widerstand R = Widerstand - 2.18 : Print "Widerstand (R)= " ; R 'R1(NTC):R25=5k, R2 = 2,18k 'Rx= R = 1 /{a + B * Log(R) + C *[log(R)] ^ 3} steinhart-gleichung (wiki), siehe unten 'die ganzen prints waren kontrolle für UART Lnr3 = Log(r) : Print "log(R)= " ; Lnr3 Formel = Lnr3 ^ 3 : Print "(log(R))^3= " ; Formel Formel = Formel * C : Print "(log(R))^3 * C= " ; Formel Blnr3 = B * Lnr3 : Print "b*log(R)= " ; Blnr3 : Print "A, B, C= " ; A , B , C Formel = Formel + Blnr3 Formel = Formel + A : Print Formel Formel = 1 / Formel : Print Formel Temp_ausgabe = Formel - 273.15 'Formel = Formel - 273.15 'Formel = Formel * 10 'Formel = Round(formel) 'Temp_ausgabe = Formel / 10 Locate 2 , 1 : Lcd Temp_ausgabe ; "" If Temp_ausgabe > 10 Then Led1 = 1 '...etc weitere LEDs Loop End
bei bedarf EXCEL-berechnung für ABC-parameter (für andere widerstandswerte) anfordern.
danke Euch und liebe grüße
Marcel
http://home.arcor.de/fuenfundachtzig/thermo/thermo.htm
http://de.wikipedia.org/wiki/Hei%C3%9Fleiter
http://www.elexs.de/kap2_4.htm
Geändert von igelstein (20.03.2011 um 19:15 Uhr)
nachdem der code doch ziemlich flickwerk ist, hier das wesentliche. die formeln 1., 2., 3. sind aus den oben genannten quellen:
2. entsteht aus 1. durch umformen.
diese hab ich dann für meine zwecke eingerichtet: (4.)
3. ist die Steinhart-Hart-Gleichung, mit der man die (in meinem fall extrem) nicht-lineare kennlinie des NTC hinbiegt.
habs probiert: und DANKE!Hast Du in simulations Code ganz oben en $SIM stehen?
dafür verlangt Bascom jetzt für eine einfache log-datei die CONFIG_AVR-DOS.bas und die sprengt dann meinen SRAM. es ist zum ...
fürchte aber, dass das problem mit TurboPascal auch nicht geändert wird, denn die muss ja auch die unit "dos" hochladen?!. SRAM erweitern? anderen µC? zum installateur gehen?
jedenfalls dank ich Euch einmal.
lg
Marcel
Geändert von igelstein (22.03.2011 um 11:23 Uhr) Grund: rechtschreibung, ergänzung
servus,
"einfache" logdatei.Code:open "xy.log" for output as #1"
ja, der µC soll eine temperatur-log erstellen. und auf den open-befehl hat er die INCLUDE-datei verlangt, weil "Error 211: External routines not found". daraufhin hab ich diverse foren geblättert, und dort war eindeutig zu lesen: es muss diese DOS-bas includiert werden. hab ich gemacht, und die hat mein SRAM nicht derpackt.
ps: ich habs natürlich auch mit open-festplatten-pfadangabe versucht.
lg
Marcel
Geändert von igelstein (22.03.2011 um 15:05 Uhr) Grund: formatierung
Wie hast du das denn genau gemacht?(ist es wirklich so kompliziert, dass man sich aus dem ADC (0-1023) erstens den widerstand (OHM sei dank) und daraus die temperatur (hier seien Steinhart&Hart lobend erwähnt) berechnen muss? und das in BASCOM??? ich habs gemacht, es funktioniert; aber da müsz ja einen direkteren weg geben?
Ich finds aber immer wieder erstaunlich wie Bascom Programmierer reagieren, wenn sie doch mal was selbst machen müssen...
Das liegt daran das keiner weiß was z.B. "Print" auf derm µC wirklich macht, bei C ist das etwas aber nicht wirklich anders. Wer ernsthaft Beruflich oder als totaler freak programmieren will kommt zumindest um ASM Grundlagen nicht herum denn da schaufelt man die Bit's quasi von Hand in die entsprechenden Register. Aber das ist ein Steiniger Weg, vor allem wenn auch noch verschiedene µC programmiert werden sollen dessen Register unterschiedlich verteilt sind.
Gruß Richard
Ja da hast du aufjedenfall recht, nur wollte ich darauf noch nicht einmal hinaus.
Für meine jetztigen Projekte benutze ich .NET C# und das ist alles, nur nicht hardwarenah
Naja, aber ich bin was das angeht mal still, das wird sonst wieder ne lange Diskusion.
@igelstein
Wie sieht denn nun dein Code zum "umrechnen" aus?
Lesezeichen