PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : ADC-Werte von 535 bis 550. ist das normal??



igelstein
06.03.2011, 14:21
servus,
verzeiht die anfängerfrage. nachdem ich in div. foren gelesen hab, dass werteschwankungen um 1-2 punkte schon grund sind, nachzudenken, glaub ich halt, dass es NICHT normal ist.
hardware:
ATmega32
spannungsteiler zw. VCC und GND (NTC 5k und R 4,7 k) an Channel(0).
labornetzgerät 0-12V

programm:


$regfile = "m32def.dat"
$crystal = 8000000
$baud = 9600
$hwstack = 32
$swstack = 10
$framesize = 40

dim wert as Word
Config Adc = Single , Prescaler = Auto , Reference = Avcc
start adc

do
wert = getadc(0) 'liefert im ruhezustand bei ca 20° [NTC 5K + R 4.7K]
' werte für "Wert" von 535 bis 550.
'Volt gemessen zwischen Kanal(0) und GND: 2,30
'Volt gemessen zwischen Kanal(0) und VCC: 2,70

print "wert = " ; wert
wait 1
loop
end
[ergebnis:
wert = 547
wert = 535
wert = 549
wert = 534
wert = 550
wert = 535
wert = 548
wert = 535
wert = 545
wert = 535
wert = 541
wert = 535
wert = 538
wert = 537
wert = 537
wert = 541
wert = 537
wert = 544
wert = 537
wert = 546
wert = 536
wert = 549
wert = 536
wert = 549
wert = 535
wert = 550
wert = 535
wert = 550
wert = 535
wert = 550
wert = 536
wert = 549
wert = 535
wert = 546
wert = 535
wert = 543
wert = 535
wert = 541
wert = 535
wert = 539
wert = 537
wert = 537
wert = 541]

kann es daran liegen, dass die restlichen ADCs in der luft hängen?
schönen restfasching!

TobiKa
06.03.2011, 15:34
Das entspräche Schwankungen von rund 0,07V, dass könnte doch durchaus am NTC liegen. Und dein Multimeter muss das nicht unbedingt genau anzeigen, nur weil es zwei Nachkommastellen anzeigt.

Das bekommst für Werte wenn du eine geregelte, "saubere" Spannung (z.B. eine Batterie) an den ADC anschliesst?

hardware.bas
06.03.2011, 19:03
Wenn die interne Referenz genutzt wird, der Spannungsteiler jedoch von der
"rohen" Vcc versorgt wird, wäre dieser Effekt erklärbar . VG Micha

igelstein
06.03.2011, 21:36
ok,
also erstens: nachm fasching probier ichs einmal mit einer 9V-batterie- hab geglaubt, so "labor"-zeug ist verläßlich....
und zweitens: der NTC ist ein in 6mm Metallhülse eingepacktes ding, wieweit verläßlich, weiß der mond-
und drittens, das multimeter zeigt wirklich nur 2 stellen.
also offenbar: die werte sind nicht extrem abnormal... :-)
nocheinmal die schlußfrage:

kann es daran liegen, dass die restlichen ADCs in der luft hängen?

bis dahin seid gegrüßt,
Servus! - und danke vorerst!
lg
Marcel

igelstein
06.03.2011, 21:47
he hardware.bas- in Deiner (wie sagt man- subcutanmeldung - von vorschlaghammer und so) hast Du den feuerlöscher vergessen. ich bräuchte ihn täglich. die freiwillige feuerwehr ist dauergast und der rauchfangkehrermeister bittet mich um umzug. so schauz aus!
danke für Deine promte antwort. seh ich das richtig, dass ich probieren soll, nicht Vcc sondern Vref anzuhängen?
lg
Marcel

radbruch
06.03.2011, 22:07
kann es daran liegen, dass die restlichen ADCs in der luft hängen? Da sehe ich keinen Zusammenhang. Wie sind denn AVCC und AREF beschaltet? Irgendetwas stimmt da eh nicht:

5V*535/1024=2,61V
5V*550/1024=2.68V
(Das sind übrigends die von TobiKa erwähnten 0,07V Unterschied)

Du hast unerklärlicherweise 2,30V zwischen PA0 und GND gemessen?

igelstein
07.03.2011, 09:12
Wie sind denn AVCC und AREF beschaltet?

mit NICHTS.
muss ich mich jetzt schämen?

zw. VCC und ADC0 hab ich den NTC;
und zw. ADC0 und GND hängt der R 4,7k
sonst nur ein R2,7k an PC5 (RW) fürs LCD.
sonst NIX.
danke vorerst!
lg
Marcel

BMS
07.03.2011, 12:00
Keine gute Idee, die Pins Avcc und Aref offen zu lassen :roll:
Deinem Programm entnehme ich, dass du Avcc als Referenz nimmst. Und dann lässt du diesen Pin frei !?
Unbedingt einen 100nF Kondensator zwischen Aref und Masse.
Avcc hängst du an +5V, (besser wäre allerdings davor noch ein LC-Tiefpass aus z.B. 100µH und 100nF zu schalten).
Wenn deine Referenz schwankt, wie willst du dann genaue Ergebnisse erwarten? ;)

Wie lange ist die Leitung zum NTC? Wenn die länger sein sollte, lieber noch einen Kondensator zwischen ADC0 und GND einbauen.

Grüße, Bernhard

igelstein
07.03.2011, 12:38
dank Dir einmal herzlich.
ich nehme an, das ist eine ganz piepnormale "grundschaltung". wo kann ich sowas nachlesen (hab schon mächtig geguglt:-) AVR rauf und RN runter), um das forum nicht mit anfänger-nichtwissen zuzukleistern?
lg
Marcel

BMS
07.03.2011, 12:46
Hast du dir schon das Datenblatt vom Atmega32 runtergeladen?
Dort sind alle Funktionen des Controllers, Register und Außenbeschaltung beschrieben.
Ist dem entsprechend sehr ausführlich und halt in technischem Englisch verfasst.
Das mit dem LC-Filter steht dort auf Seite 208, das mit Aref usw. auf Seite 212.
Grüße, Bernhard

igelstein
07.03.2011, 14:08
ja, hab ich. allerdings nur zum bestaunen (bis jetzt).
auf Dein posting hin hab ich jetzt folgendes -nocheinmal- gefunden, diesmal scheinz mir doch wichtig zu sein:

"Wird AVCCals Referenzspannung ausgewählt, dann wird diese intern an AREF angelegt. Diese Spannung kann, zusätzlich zur obligatorischen Entstörung des AVCC-Pins, mit einem 100n Keramikkondensator von AREF (nicht AVCC) nach GND entstört werden." (http://halvar.at/elektronik/kleiner_bascom_avr_kurs/adc_mit_getadc/)

"obligatorischen Entstörung "heißt wohl, dass da ICH einen C hinhängen MUSS?!
übrigens danke für Dein "Keine gute Idee...": man häz auch anders sagen können.
dank und liebe grüße
Marcel

BMS
07.03.2011, 18:08
Hallo,

"obligatorischen Entstörung "heißt wohl, dass da ICH einen C hinhängen MUSS?!Den Kondensator baut man eben normalerweise dort ein, um eben die Referenzspannung zu stabilisieren und damit schöne Messwerte vom AD-Wandler zu erhalten. Also er hat durchaus seine Berechtigung. Bin ja mal gespannt wie sich deine Schaltung mit eingebautem Kondensator verhält ;)

übrigens danke für Dein "Keine gute Idee...": man häz auch anders sagen können.War jetzt nicht böse gemeint. Man weiß leider nie wie ein Satz beim anderen ankommt :roll:... sorry
Grüße, Bernhard

igelstein
07.03.2011, 18:27
sorry

oh nein, war genau 180° herum gemeint: wirklich DANKE, denn Du hättst ja auch (rolling eyes) sagen können: "haste nicht alle?"
kondensator und so: schön langsam komm ich weiter. die letzten stunden hab ich den drucker beschäftigt, bin auch sehr gespannt.
vielen dank nocheinmal, ich meld mich hier.
lg
Marcel
10.märz: ich warte auf eine waggon-ladung kondensatoren, und im fernseher find ich keinen 100nF...

igelstein
17.03.2011, 12:55
Keine gute Idee, die Pins Avcc und Aref offen zu lassen :roll:

hab mirs zu herzen genommen, und sieheda- alles happy! ADC verhält sich so wie er soll: ruhig.
die kondis kommen erst.
mit herzlichem dank und gruß aus NÖ
Marcel

Richard
18.03.2011, 16:21
dank Dir einmal herzlich.
ich nehme an, das ist eine ganz piepnormale "grundschaltung". wo kann ich sowas nachlesen (hab schon mächtig geguglt:-) AVR rauf und RN runter), um das forum nicht mit anfänger-nichtwissen zuzukleistern?
lg
Marcel

http://www.rn-wissen.de/index.php/ADC_%28Avr%29

Gruß Richard

igelstein
19.03.2011, 16:00
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

Richard
19.03.2011, 16:43
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

TobiKa
19.03.2011, 16:46
(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?
Wie hast du das denn genau gemacht?

Ich finds aber immer wieder erstaunlich wie Bascom Programmierer reagieren, wenn sie doch mal was selbst machen müssen...

Richard
19.03.2011, 17:21
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

TobiKa
19.03.2011, 17:27
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 :D

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?

igelstein
20.03.2011, 17:40
Hast Du in simulations Code ganz oben en $SIM stehen?Gruß Richard
nein, hab ich - noch - nicht. probier ich.
für Tobika:


$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

hier jetzt einmal nur der code und die formel-links.
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

igelstein
22.03.2011, 11:15
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.


Hast Du in simulations Code ganz oben en $SIM stehen?
habs probiert: und DANKE!
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

Richard
22.03.2011, 11:56
habs probiert: und DANKE!
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

????? Was verstehst Du unter "umfangreiche Log Datei"? Warum will AVR-DOS installiert werden? Soll der µC eine Log Datei erstellen? Oder hast Du irgendwo Hardware Debug eingestellt? RÄTSEL...so etwas hatte (ich) jedenfalls unter $SIM noch nie.

Gruß Richard

igelstein
22.03.2011, 15:03
servus,
"einfache" logdatei
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 (http://www.avrfreaks.net/index.php?name=PNphpBB2&file=viewtopic&t=100415&start=0&postdays=0&postorder=asc&highlight=&sid=517954a7188a6c1e23ae3e43a5d61732)". 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

Richard
22.03.2011, 15:47
servus,
"einfache" logdatei
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 (http://www.avrfreaks.net/index.php?name=PNphpBB2&file=viewtopic&t=100415&start=0&postdays=0&postorder=asc&highlight=&sid=517954a7188a6c1e23ae3e43a5d61732)". 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

Ich habe mir http://apple.clickandbuild.com/cnb/shop/ftdichip?op=catalogue-products-null&prodCategoryID=53&title=VDIP1

Geleistet, klappt super. :-) Den kann man einfach über Print Befehle ansprechen, den Rest macht der Controller on Board. Den ersten habe ich allerdings sofort geschreddert, das netzteil stand anstatt auf 5 auf +/- 5 V und 10 V war eindeutig zu viel. :-(

Lasse den open misst weg, starte hterm /save/ output/ datei.cvs und sende die LOG Werte mit (,) getrennt. Die Datei kannst du dann in z.B. Exel einfügen und auswerten.

Gruß Richard