Sida 2 av 4
Postat: 17 januari 2007, 20:02:22
av squiz3r
Jag använder en BS2 för att mäta temp med hjälp av ett NTC motstånd, en resistor och enn kondensator, precitionen är utmärk för priset, och det är enkelt. dock har jag änsålänge inte kommit framtill någon formell som kan göra om det till *C... man kanske kunde sammanbeta? eller är det för simpel o dålig lösning för ditt ändamål?
//Daniel A
BS2 ?
Postat: 17 januari 2007, 21:22:16
av SvenPon
Jag använder en BS2 för att mäta temp med hjälp av ett NTC motstånd
Förlåt men jag vet inte vad BS2 är för något.
Gör så här stick ner din prob i ett glas med iskuber och vänta till det precis börjar smälta och övergå till isvatten eller packa in den i snö.
Berätta för oss vad du får för värde.
Postat: 17 januari 2007, 21:27:26
av squiz3r
BS2 är Basic Stamp 2, (som väldigt många här verkar hata, jag tycker den är bra, MEN DYR!!)
Postat: 17 januari 2007, 21:30:07
av bengt-re
varför inte köra nakna pic istället då

Postat: 17 januari 2007, 21:57:46
av FormerMazda
squiz3r: Din idé låter intressant! Berätta mer!
Kabellängd har diskuterats en del ser jag. I min kabe komet 280 lär inga kabellängder överskrida 3meter. Så det är inga problem för mig.
Och BS2:an är hur trevlig som helst. Dock dyr. Så snart ska man väl lära sig bygga o programmera med PIC. Men det tar vi i annan tråd.
Tack för all info hittils! Mata på med mer!
Postat: 17 januari 2007, 23:26:20
av Stuggi
Personligen skulle jag inte vilja jobba med en SMT160:a som första projekt, mycket enklare med en Dallas one-wire eller nån analog tempmätare från t.ex. national semi. t.ex. LM35 eller vad den nu hette (samma grej som LM34, fast i C istället för F) + en ADC... Mycket samplingsvänliga lösningar också...
Postat: 18 januari 2007, 22:20:16
av PHermansson
Ett NTC-motstånd är väl inte linjärt?
Själv har jag inte testat något enklare än en TC1047 kopplad till en A/D-ingång. Bara att läsa av A/D'n, värdet är linjärt och färdigt att använda.
Postat: 18 januari 2007, 22:34:06
av bengt-re
Nä, jisses - NTC måste kalibreras med lookup table för skaplig noggranhet - det finns flera analoga lijära givare - kolla på ELFA på tempgivare - finns flera som är riktigt användbara.
Postat: 19 januari 2007, 13:03:18
av FormerMazda
Dåså, summera lite efter vad jag läst.
NTP/PTC går bort pga. olinjäritet och svårighet med kalibrering.
SMT160 har jag ju lyckats "läsa" med BS2 och fått ett ganska stabilt värde. i decimal form får jag värde 71 i rummet. Ingen temp.referens än. Dock sjunker värdet med ökad temperatur? "Frekvensen" ökar ju från SMT160 med ökad temp, och därmed minskar ju tiden mellan topparna som jag läser av den nu. Och det är ju fel sätt vad jag läst mig till här. Känns inte som att jag har greppat SMT160 ännu, eller iallafall får jag inte BS2 till att läsa den som jag vill.
DS18S20 är nästa högst intressanta kandidat. En sån ska nog införskaffas och labbas med inom kort.
Vänd på mattematiken
Postat: 19 januari 2007, 13:21:44
av SvenPon
Du läser förmodligen porten inverterat.
grund formeln är
(AntalSamplingar/antalHöga - 0.32) / 0.0047
Du får vända på det
(antalHöga/AntalSamplingar -0.32) / 0.0047
Postat: 19 januari 2007, 15:21:52
av squiz3r
jag har kopplat NTC-motståndet parallelt med en konding (nuvarande 0,1uF), mellan input på bs2 och GND. sedan sätter man utgången hög o laddar upp kondingen, sen gör man om den till en input och mäter hur långtid det tar för den att ladda ur sig. då vet man vilken resistans den har. det finns även ett inbygt komando för detta som heter RC-TIME, så det är väldigt enkelt att använda med en bs2. jag använder den för att mäta temper mellan -4 till + 100, så där är det inte lika viktigt med nogranhet. men jag tror att det är mindre än 1*C som det kan variera...
Postat: 20 januari 2007, 13:24:42
av John
Tänk på att en DS18S20 kräver noggrann timing. Det ska helst gå ganska fort också. Vad jag kommer ihåg så är inte detta BS2ans bästa egenskaper. Titta gärna noga i DS18S20s datablad innan du skaffar en, så du vet vad som krävs för att kunna köra 1-wire buss. Jag tyckte att det var rätt knepigt att förstå hur det funkar. Anser i alla fall inte att det var jättelätt.
/John
Postat: 22 januari 2007, 21:33:30
av FormerMazda
Ok, efter att ha labbat o läst datablad tills ögona blöder så har jag nu som först hittat ett fel.
Det finns ett kommando till BS2 som heter PULSIN. Detta kommando tar tiden på en puls på en av pinnarna på BS2an. Och enligt databladet så är det alltså hela pulsen som mäts. Man kan bestämma om pulsen ska börja hög eller låg. Så, det är alltså PULSIN pin, hi/low, variabel. I mitt exempel PULSIN 0,0,temptid
Detta returnerar temptid = 69 vid rumstemp.
I databladet så är värdet en enhet där 1 = 2us. Alltså är 69 = 138us.
Men oavsett vilket o vad här så om jag fattat rätt så ska ju pulsen mätas från låg till efterföljande hög? Alltså egentligen bara halva pulser?
Kommando PULSIN är inte användbart då.
Provade att koda lite själv där han skulle vänta på att ben 0 blev låg, och då bara räkna I=I+1 tills ben 0 blev hög igen. Men I blev inte högre än 2 så det är inte snabbt nog. Hittar inget timer-kommando.
Nääe, nu ska det samplas 1-wire kretsar! Ge mig seriell data! NU!
Godnatt.
Postat: 22 januari 2007, 21:39:51
av bengt-re
Men varför ge upp så lätt?
Du mäter först hög låg och sedan låg hög - då har du duty! Visserligen inte på pulser som hör ihop, men det fungerar ändå - blir bara lite fladdrigare. I och med att den är en pwm signal så går det ju också sigma/delta omvandla för att få ut en vettig duty. Eller koppla in ett R/C filter och mäta analoga spänningen (om nu din uC hade A/D).
1-wire är inte jätteenkelt att få att fungera det heller om du inte vill skriva ASM eller har färdiga rutiner för det i din kompilator.
Postat: 23 januari 2007, 01:35:50
av John
Prova den här koden. Jag har ingen SMT160 hemma så jag vet inte om den funkar. Borde iaf ge dig en upplösning < 0.5 grad. Vet inte hur det är med felet.
Kod: Markera allt
'------------Variabler-------------
Thigh var word
Tlow var word
Tperiod var word
duty var word
temp var word
temp_decimal var byte
'SMT160 kopplad till I/O 0 på BS2
'------------Program-start---------------
loop:
PULSIN 0,1,Thigh 'Läser in den höga delen av pulsen
PULSIN 0,0,Tlow 'Läser in den låga delen av pulsen
Tperiod = Thigh + Tlow
Thigh = Thigh * 100 '*100 för att öka upplösningen
duty = Thigh / Tperiod 'Räknar fram pulskvoten*100
temp = duty - 32
temp = temp * 213 '1/0.0047
'Plockar fram decimalerna
temp_decimal = temp
temp = temp / 100 * 100
temp_decimal = temp_decimal - temp
temp = temp / 100
't = (D.C. - 0.0320)/0.00470
DEBUG dec temp,",",dec temp_decimal,CR 'Skickar resultatet till PCn
PAUSE 1000
goto loop 'Börja om
/John
EDIT: Koden klarar inte minusgrader, men det borde inte vara så svårt att fixa