zondag 10 juli 2011

Barometer

Hier de eerste schakeling een barometer met de 16f876a pic microcontroller.

Het schema


De Werking.
We gebruiken een Motorola druksensor in mijn geval de MPXH6115A, deze levert een analoge spanning die afhankelijk is van de druk. Echter het bereik van de sensor is veel groter dan nodig. De sensor kan meten van 150 Hpa tot 1150 Hpa. En het bereik van de AD omzetter is maar 10 bits. We zouden dan een uitlezing hebben van ongeveer 1 Hpa. Om dit te veranderen maken we gebruik van twee referentiespanningen. De AD convertor van de pic zal dan tussen deze twee waarden sampelen. Deze waarden worden aangeleverd door een I2C 8 bits DA omzetter de MAX518. De Vref- word 3.164v en de Vref+ word 4.688v. Nu kunnen we al een veel nauwkeuriger uitlezing krijgen. Maar we willen nog nauwkeuriger dit bereiken we dmv oversampling. Van 10 bits gaan we naar max 16 bits. We sampelen voor 14 bits bijvoorbeeld 256 keer en dit totaal delen we dan door 16. We krijgen dan een 14 bits waarde. De software is nog niet optimaal een correctie is nog niet ingebouwd. Naast de HPA geven op het display het voltage en de AD waarde weer.

Source:

'****************************************************************
'*  Name    : Barometer.BAS                                     *
'*  Author  : VoXiT-Pro                                         *
'*  Notice  : Copyright (c) 2010                                *
'*          : All Rights Reserved                               *
'*  Date    : 19-11-2010                                        *
'*  Version : 1.0                                               *
'*  Notes   : barometer                                         * 
'*          :                                                   *
'****************************************************************


Device 16F876A
 
Xtal 20    

SCL_Pin = PORTC.3   ' i2c
SDA_Pin = PORTC.4      
  
LCD_DTPin PORTB.0    'lcd 
LCD_ENPin PORTB.4
LCD_RSPin PORTB.5
  
Adin_Res = 10     ' 10-bit ADC 
Adin_Tad = frc         '  
Adin_Stime = 50              '


TRISA  = %11111111          '  PORTA allemaal input
ADCON1 = %10001111          '  PORTa.0 en vref-,vref+ gebruiken

Symbol max518      = %01011110

Dim ADvalue      As Word      ' global - the final A/D value
Dim ADCount      As Word      ' sample count
Dim ADDivisor    As Word      ' averaging divisor
Dim ADmax        As Word      ' max Advalue
Dim ADAccum      As Dword     ' 32-bit sample accumulator
Dim Volts        As Float
Dim Prcalc       As Float
Dim Pressure     As Float

Cls

DelayMS 100

Print $FE,$40,$08,$08,$08,$0E,$09,$09,$09,$00         ' H
Print $FE,$48,$00,$0C,$12,$12,$1E,$12,$12,$00         ' a


BusOut max518,$00,[$A2]      ' max518 uitgang 0 op 3.164v vref-
BusOut max518,$01,[$F0]      ' max518 uitgang 1 op 4.688v vref+

main:

GoSub GetADC                   ' Haal A/D value op

Volts = (1.524/ADmax)*ADvalue  ' volts out from mpx4115  
Volts = Volts + 3.164
Prcalc = (Volts/5)+ 0.095      ' (Vout/5)+0.095)
Pressure = (Prcalc/0.009)*10   ' convert to pa by *1000

'Pressure = Pressure + 2.1

Print At 1,1, Dec1 Pressure ,0,"P",1," ",Dec Volts,"v"
Print At 2,1, Dec5 ADvalue

DelayMS 1000
GoTo main


GetADC:      ' voor 12 bits waarde 16 x sampelen dan delen door 4              
             ' voor 14 bits waarde 256 x sampelen dan delen door 16
             ' voor 16 bits waarde 4096 x sampelen dan delen door 64
ADCount = 256
ADDivisor = 16
ADAccum = 0 
ADmax = 16368

AdLoop:
  ADvalue= ADIn 0                      ' 10-bit sample
  ADAccum = ADAccum + ADvalue      
  ADCount = ADCount - 1            
  If ADCount > 0 Then AdLoop       

  ADvalue = ADAccum / ADDivisor   ; get the average value 14 bits
Return

End





Geen opmerkingen:

Een reactie posten