Sida 1 av 1
Billig och bra Fukt Sensor att använda till ATMEGA16
Postat: 3 juli 2007, 11:38:31
av lennie
Hej.
jag är ganska ny på avr och sensor hantering. Därför min fråga här.
Det jag letar efter är en Fukt sensor som fungerar bra ihop med ATMega16.
Efter många om och men lyckades jag få rätt på en DS18B20 Temp sensor med hjälp av er på detta forumet.
vill helst att fukt sensorn är lika enkel som den temp sensorn att hantera.
Några förslag på fukt sensor som jag kan använda? Och vad den kostar?
I framtiden skulle jag också behöva PH sensorer samt salt värde sensor.. så om ni känner till några bra sådana sensorer får ni gärna skriva vad dem heter till mig.
Tack på förhand.
Postat: 3 juli 2007, 14:30:22
av kimmi
Postat: 6 juli 2007, 23:09:48
av lennie
Hej
5 st SHT75 kom idag med schenker.
nu är det bara fram med labb kortet och börja leka lite.
Någon som har lite kod exempel till SHT75 sensorerna som man kan kolla lite på hur ni har pratat med dem. är som sagt väldigt ny på detta området...
Postat: 7 juli 2007, 00:13:24
av kimmi
Hi,
Du kan titta på denna link
mikroElektronika
Postat: 9 juli 2007, 09:50:51
av Nisse
5 st SHT75 kom idag med schenker.
Får man fråga varifrån du köpte dom och vad dom kostade?
Fick en offert från Stork Automation för någon månad sedan, har den inte här, men priset var runt 250:- + moms stycket.
Mvh
Nisse
Postat: 9 juli 2007, 12:23:51
av lennie
Jag beställde mina ifrån Stork Automation. Fick betala 203 kr plus moms för dem.
Dock så har jag lite problem med dem. Men det beror inte på själva sensorerna. Utan min kunskap att kunna prata rätt med dem ifrån AVR

Postat: 9 juli 2007, 12:44:00
av kimmi
Hi Lennie,
er det til ATMega16 ?
och lcd på Port ?
Xtal ?
then i make a hex file for you to test
i test on rs232 and it works ok'
here is my code i used but in BascomAVR :
Kod: Markera allt
$regfile = "m16def.dat"
$hwstack = 40
$swstack = 20
$framesize = 60
$baud = 38400
$crystal = 14745600
'Routine to read the SHT75 Humidity sensor chip
'Uses BascomAVR
'a .01 uf capacitor across VCC and Ground on the SHT75 really cleans up the data
'a pullup is required on "data" pin as shown in the data sheet
Dim Ctr As Byte
Dim Command As Byte
Dim Dis As String * 20
Dim Calc As Single
Dim Calc2 As Single
Dim Rhlinear As Single
Dim Rhlintemp As Single
Dim Tempc As Single
Dim Tempf As Single
dim Datavalue As Word
dim Databyte As Byte
dim i as byte
dim CRC as byte
dim acc as long
dim acc2 as long
dim T_Coeff1 as long
dim T_Coeff2 as long
dim RH_T_Coeff1 as long
dim RH_T_Coeff2 as long
dim C1_Long as long
dim C2_Long as long
dim RH_Temp as long
dim TC as integer
dim RH as integer
dim RH_T as integer
T_Coeff1 = -4000
T_Coeff2 = 1
C1_Long = 405
C2_Long = -28
Rh_t_coeff1 = 10 'not 1 because of check for round-off
RH_T_Coeff2 = 8
Const C1 = -4
Const C2 = 0.0405
Const C3 = -0.0000028
Const T1c = .01
Const T2 = .00008
Const T1f = .018
const WaitTime = 1
Sck Alias PortA.0
DataOut Alias PortA.1
DataIn Alias PinA.1
Declare Sub Getit()
declare sub Do_CRC(byval Add as byte)
PortA = 255 'pull up all lines
Config PinA.0 = Output 'sck
Config PinA.1 = Output 'datain
print "Begin SHT test"
wait 1
gosub ResetSHT
print "do reset"
'gosub Write_status
'print "do status"
Do 'continually read the tempfature and humidity
Command = &B00000011
Call Getit 'Get the temperature, puts result in "Datavalue" for us
'DataValue = 10000
'
'floating point
Tempf = T1f * Datavalue
Tempf = Tempf - 40
Tempc = T1c * Datavalue 'get celcius for later calculations and for "the rest of the world"
Tempc = Tempc - 40
'do integer arithmetic to get TC
acc = DataValue
acc = acc * T_Coeff2
acc = acc + T_Coeff1
acc2 = acc / 10 'find last digit
acc2 = acc2 * 10
acc2 = acc - acc2
acc = acc / 10
TC = acc
if acc2 > 4 then incr TC
Command = &B00000101
Call Getit 'get the humidity
DataValue = 1000
'floating point
Calc = C2 * Datavalue
Calc2 = Datavalue * Datavalue 'that "2" in the datasheet sure looked like a footnote for a couple days, nope it means "squared"!
Calc2 = C3 * Calc2
Calc = Calc + C1
Rhlinear = Calc + Calc2
'correct for T
Calc = T2 * Datavalue
Calc = Calc + T1c
Calc2 = Tempc - 25
Calc = Calc2 * Calc
Rhlintemp = Calc + Rhlinear
'do integer arithmetic to get RH
acc = DataValue
acc = acc * C1_Long 'first part
acc2 = DataValue
acc2 = acc2 * acc2
acc2 = acc2 / 1000
acc2 = acc2 * C2_Long 'second part
acc = acc + acc2
acc = acc / 100
Acc = Acc - 400 'subtract constant
acc2 = acc / 10 'find last digit
acc2 = acc2 * 10
Acc2 = Acc - Acc2 'first non-significant digit
Rh = Acc / 10 'RH not compensated for T
if acc2 > 4 then incr RH 'round up?
'correct RH for T
acc = DataValue
acc = acc * RH_T_Coeff2
acc = acc / 100
acc = acc + RH_T_Coeff1 'RH part
acc2 = TC
acc2 = acc2 * 10
acc2 = acc2 - 2500 'T part
acc2 = acc * acc2 'RH part*T part
acc2 = acc2 / 1000 'rescale
acc = RH * 10 'put in long
Acc = Acc + Acc2 'add T correction to RH
Rh_t = Acc / 10 'T-corrected RH (*10)
acc2 = acc / 10 'find last digit
acc2 = acc2 * 10
Acc2 = Acc - Acc2 'first non-significant digit
if acc2 > 4 then incr RH_T 'round up?
Dis = Fusing(tempc , "###.#")
Print Dis ; "C " ;
print " (" ; TC ; ")";
Dis = Fusing(Rhlinear , "##.#")
Print ", RH " ; Dis ; "%" ;
print " (" ; RH ; ")";
Dis = Fusing(rhlintemp , "##.#")
Print ", RH(T) " ; Dis ; "%" ;
print " (" ; RH_T ; ")";
Print " spacing " ; WaitTime ; " secs"
Wait WaitTime
Loop
Sub Getit()
gosub Start_Transmission
gosub Send_Byte
Do_CRC Command
gosub Read_Byte
Do_CRC DataByte
Datavalue = Databyte
Shift Datavalue , Left , 8
gosub Tick_Ack
gosub Read_Byte
Do_CRC DataByte
Datavalue = Datavalue + Databyte
gosub Tick_Ack
Shiftin Datain , Sck , Databyte , 3 'get CRC in reversed order (LSB first)
if CRC <> DataByte then print "BAD CRC " ; CRC ; " " ; DataByte ; " " ;
gosub End_Transmission
End Sub
ResetSHT:
Config PinA.0 = Output 'sck
Config PinA.1 = Output 'datain
'PortA.0 = 1 'set pull-up
'PortA.1 = 1 'set pull-up
Set Dataout
For Ctr = 1 To 12
Set Sck
Waitus 2
Reset Sck
Waitus 2
Next Ctr
return
Start_Transmission:
Set Sck
Config PinA.1 = Output
Reset Dataout
Reset Sck
Set Sck
Set Dataout
Reset Sck
CRC = 0
return
End_Transmission:
Config PinA.1 = Output
Set Dataout
Set Sck
Reset Sck
return
Send_Byte:
Config PinA.1 = Output
Shiftout Dataout , Sck , Command , 1
Set Sck 'check transmision OK
'click one more off
Reset Sck
for i = 1 to 255
if PinA.1 = 0 then exit for
waitms 1
next
return
Read_Byte:
Config PinA.1 = Input
Shiftin Datain , Sck , Databyte , 1 'get the MSB
return
Tick_Ack:
Reset Sck
Config PinA.1 = Output
Reset Dataout
Set Sck
Reset Sck
Set Dataout
return
Write_status:
gosub Start_Transmission
Command = &B00000110
' Do_CRC Command 'add to CRC
gosub Send_Byte
gosub Tick_Ack
Command = &B00000000 'Switch to 12 bit resolution
Do_CRC Command 'add to CRC
gosub Send_Byte
gosub Tick_Ack
' Command = CRC
' gosub Send_Byte 'send CRC
' gosub End_Transmission
return
sub Do_CRC(byval Add as byte)
for i = 7 to 0 step -1
if Add.i = CRC.7 then
shift CRC , left , 1
CRC.0 = 0
else
shift CRC , left , 1
CRC.0 = 1
CRC.4 = not CRC.4
CRC.5 = not CRC.5
end if
next
end sub
End
Postat: 9 juli 2007, 12:59:55
av Nisse
Jag har lyckats prata med min SHT11 från AVR. Dock är inte programmet det snyggaste. Jag gjorde ett quick´n dirty programm för att kolla att det funkade. Ska skriva om hela rasket och få med ordentlig kontroll av ACK-signaler osv.
Det jag bävar för sedan är att få till matematiken för att omvandla till grader celsius och %-RH i assembler.
Mvh
Nisse
Postat: 13 juli 2007, 19:13:11
av lennie
kimmi skrev:Hi Lennie,
er det til ATMega16 ?
och lcd på Port ?
Xtal ?
then i make a hex file for you to test
i test on rs232 and it works ok'
here is my code i used but in BascomAVR :
Hej.
Ursäkta att jag inte hört av mig på ett tag. den har varit mycket senaste tiden. åker på semester om en vecka och det är mycket som ska fixas på jobbet innan jag åker.
Men sambon jobbar hela helgen så den ska gå åt AVR saker för min del..
Jag använder en Glcd. och den sitter ansluten på.
PORTD, 2, 3, 4, 5, 7, 6, PORTA
den koden är tagen ifrån mikrobasic. vet inte riktigt hur det funkar med glcd i C
När det gäller SHT75 sensorn så är den kopplad. DATA PC6 & SCK PC7
Och det är en Atmega16 jag använder.
vad menar du med Xtal ?
Postat: 16 juli 2007, 15:39:11
av lennie
Någon som lever och vill hjälpa mig lite
Postat: 18 juli 2007, 04:41:05
av kimmi
Hej ,
Jag använder en Glcd. och den sitter ansluten på.
PORTD, 2, 3, 4, 5, 7, 6, PORTA
Ja fint , men jeg er inte på C Code ( ME BASIC )
så du får tala om lite mere om LCD pin & port på AVR
Hvilken type glcd KS0108 , T6963C , SED ? evt it link til datasheet
Oh ja Xtal = krystal in Mhz
Lite C Code
Jo det er til SHT11 men funkar oxå på SHT75 ..