Op ebay kun je voor rond de 5 euro een module kopen met de ad9850 dds van analog
Met deze module zou je een meetzender of een vfo voor een ontvanger kunnen maken.
De aansluitingen van de module zijn wel te vinden op internet.
Het lastige is het berekenen van de data wat de ad9850 in moet voor het zetten van de frequentie.
Volgens de datasheet,
freq_out = (data-dds * clockfreq) / 2^32
Het probleem om het in 1 keer te bereken is de 2^32, hier kunnen we in proton niks mee.
Dit zijn namelijk 33 bitjes. De oplossing is om het bit voor bit te doen.
Op de volgende manier:
dds = 0
calfreq = freq
For teller = 31 To 0 Step -1 ' 32 bits berekenen
calfreq = calfreq // clock << 1 ' restant *2
calbit = calfreq / clock ' volgende bit
If calbit = 1 Then SetBit dds,teller
Next teller
waarbij freq de gewenste freq is.
clock de klokfrequentie van de ad9850, Op de module zit een oscillator van 125mhz.
en in dds de output wat naar de ad9850 toemoet.
alle variabelen zijn 32 bits breed.
we kunnen nu dus op de hertz nauwkeurig de data voor de ad9850
berekenen.
Op de foto zien we het resultaat, we moeten wel 10mhz van de frequentie aftrekken.
dus de dds gaat draaien op 4.169 mhz. De kleinste stap word 10hz.
De bedoeling is om in eerste instantie de dds te laten draaien van 4.0 tot 4.35 mhz
voor mijn qrp transceiver voor de 20m, De taurus van sp5ddj.
waarbij een mf van 10mhz wordt gebruikt.Het nadeel van de dds is wel dat er
nog al wat rommel geproduceerd word. Een extra bandfilter achter de dds
zal zeker nodig zijn.
Nu nog de software verder afmaken en de module testen.
Eenvoudige projecten voor de microchip microcontrollers geschreven in picbasic, proton+.
vrijdag 20 juli 2012
zondag 8 juli 2012
DHT11
Op EBAY kun je voor rond de €1,50 de DHT11 aantreffen, deze sensor meet
de temperatuur en de luchtvochtigheid., temperatuur bereik 0-50 graden vochtigheid van 20-95% nauwkeurigheid +/-2 graden en +/- 5% vochtigheid. De sensor werkt min of meer zoals een onewire van dallas. De resolutie is 1, het vreemde is wel dat de decimalen wel mee worden verstuurd maar die zijn dus altijd 0. De luxere uitvoering is de DHT21 of DHT22 met een betere resolutie en bereik.
De datasheet is hier te vinden.
Op de foto heb ik naast de DHT11 ook een SHT11, de bovenste regel is de DHT11 de onderste
de SHT11
En hier de software voor de DHT11, aansluitingen voor het lcd en DHT11 vind je in de software,
De pic is in mijn geval een 18f2620, maar andere typen werken ook, alleen we maken gebruik van "pulsin"
dus de xtal freq moet 20mhz zijn. Anders dien je de waarden aan te passen.
De sensor is vrij traag en heeft een 1 seconde nodig om op te starten.
Is er een probleem met de sensor krijgen we een foutmelding,
Is er een bitje omgevallen van de 40 bits die worden ingelezen dan krijgen we een bit error.
Device 18F2620
Xtal 20
LCD_DTPin PORTC.0
LCD_ENPin PORTC.4
LCD_RSPin PORTC.5
All_Digital = On
Dim hygro As Byte
Dim hygrodec As Byte
Dim temp As Byte
Dim tempdec As Byte
Dim checksum As Byte
Dim dhtin As Byte
Dim teller As Byte
Dim checkchks As Byte
Dim dataout As Byte
DelayMS 100
Print $FE, $40, $08, $14, $08, $03, $04, $04, $03, $00 ' celcius
Print $FE, $48, $04, $0E, $0E, $1F, $1F, $1F, $0E, $00 ' drupje
Print $FE, $50, $1F, $0E, $04, $00, $04, $0E, $1F, $00 ' temp binnen
Start:
Cls
Print At 1,1,"DHT11"
DelayMS 1500
main:
checksum = 0
TRISB = 000000
PORTB.0 = 1
DelayMS 50
PORTB.0=0:DelayMS 20 'start data cycles min 18ms
PORTB.0=1:DelayUS 30 ' port weer hoog, min 20 us
dhtin = PulsIn PORTB.0,1
If dhtin < 20 Or dhtin > 60 Then GoTo senserror ' sensor error
GoSub datain
hygro = dataout
GoSub datain
hygrodec = dataout
GoSub datain
temp = dataout
GoSub datain
tempdec = dataout
GoSub datain
checksum = dataout
checkchks = (hygro + hygrodec + temp + tempdec)
If checkchks <> checksum Then
Print At 1,1, "Bit error"
Else
Print At 1,1,2," ",Dec2 temp,".",Dec1 tempdec,0," ",1," ",Dec2 hygro,".",Dec1 hygrodec,"%"
EndIf
DelayMS 1000
GoTo main
datain:
dhtin = 0
For teller = 7 To 0 Step -1
dhtin = PulsIn PORTB.0,1
If dhtin >30 Then
SetBit dataout,teller
Else
ClearBit dataout,teller
EndIf
Next teller
Return
senserror:
Print At 1,1,"Sensor error "
DelayMS 2000
GoTo Start
de temperatuur en de luchtvochtigheid., temperatuur bereik 0-50 graden vochtigheid van 20-95% nauwkeurigheid +/-2 graden en +/- 5% vochtigheid. De sensor werkt min of meer zoals een onewire van dallas. De resolutie is 1, het vreemde is wel dat de decimalen wel mee worden verstuurd maar die zijn dus altijd 0. De luxere uitvoering is de DHT21 of DHT22 met een betere resolutie en bereik.
De datasheet is hier te vinden.
Op de foto heb ik naast de DHT11 ook een SHT11, de bovenste regel is de DHT11 de onderste
de SHT11
En hier de software voor de DHT11, aansluitingen voor het lcd en DHT11 vind je in de software,
De pic is in mijn geval een 18f2620, maar andere typen werken ook, alleen we maken gebruik van "pulsin"
dus de xtal freq moet 20mhz zijn. Anders dien je de waarden aan te passen.
De sensor is vrij traag en heeft een 1 seconde nodig om op te starten.
Is er een probleem met de sensor krijgen we een foutmelding,
Is er een bitje omgevallen van de 40 bits die worden ingelezen dan krijgen we een bit error.
Device 18F2620
Xtal 20
LCD_DTPin PORTC.0
LCD_ENPin PORTC.4
LCD_RSPin PORTC.5
All_Digital = On
Dim hygro As Byte
Dim hygrodec As Byte
Dim temp As Byte
Dim tempdec As Byte
Dim checksum As Byte
Dim dhtin As Byte
Dim teller As Byte
Dim checkchks As Byte
Dim dataout As Byte
DelayMS 100
Print $FE, $40, $08, $14, $08, $03, $04, $04, $03, $00 ' celcius
Print $FE, $48, $04, $0E, $0E, $1F, $1F, $1F, $0E, $00 ' drupje
Print $FE, $50, $1F, $0E, $04, $00, $04, $0E, $1F, $00 ' temp binnen
Start:
Cls
Print At 1,1,"DHT11"
DelayMS 1500
main:
checksum = 0
TRISB = 000000
PORTB.0 = 1
DelayMS 50
PORTB.0=0:DelayMS 20 'start data cycles min 18ms
PORTB.0=1:DelayUS 30 ' port weer hoog, min 20 us
dhtin = PulsIn PORTB.0,1
If dhtin < 20 Or dhtin > 60 Then GoTo senserror ' sensor error
GoSub datain
hygro = dataout
GoSub datain
hygrodec = dataout
GoSub datain
temp = dataout
GoSub datain
tempdec = dataout
GoSub datain
checksum = dataout
checkchks = (hygro + hygrodec + temp + tempdec)
If checkchks <> checksum Then
Print At 1,1, "Bit error"
Else
Print At 1,1,2," ",Dec2 temp,".",Dec1 tempdec,0," ",1," ",Dec2 hygro,".",Dec1 hygrodec,"%"
EndIf
DelayMS 1000
GoTo main
datain:
dhtin = 0
For teller = 7 To 0 Step -1
dhtin = PulsIn PORTB.0,1
If dhtin >30 Then
SetBit dataout,teller
Else
ClearBit dataout,teller
EndIf
Next teller
Return
senserror:
Print At 1,1,"Sensor error "
DelayMS 2000
GoTo Start
Abonneren op:
Posts (Atom)