Hierbij de source:
'****************************************************************
'* Name : 12f683.BAS *
'* Author : VoXiT-Pro *
'* Notice : Copyright (c) 2011 *
'* : All Rights Reserved *
'* Date : 29-7-2011 *
'* Version : 1.0 *
'* Notes : *
'* : *
'****************************************************************
Device = 12F683
Config MCLRE_ON, INTRC_OSC_NOCLKOUT, WDT_OFF, PWRTE_ON, BOD_ON
Xtal 4
ADCON0 = 0
CMCON0 = 7 ' comparators off
ANSEL = 0 ' all inputs digital
WPU = 0
OPTION_REG = %10000000 ' Pull-ups = off
GPIO = 000000 ' All outputs = 0 on boot
TRISIO = 111101 ' gpio.1 output rest input
INTCON = $90 ' Enable INTE interrupt (GPIO.2 pen5 = int)
OPTION_REG.6=0
Symbol zender = 1
Symbol ds1820 = GPIO.0
Symbol zendout = GPIO.1
Symbol startman = $55
Symbol dataman = $aa
Dim tempture As Word
Dim teller As Byte
Dim manchestin As Byte
Dim manchestout As Word
Dim tempdata As Bit
Dim manchesttl As Word
Dim manchestth As Word
Dim manchestck As Word
Dim manchestzd As Word
Dim checksum As Byte
Dim C_remain As Byte
Dim C_per_c As Byte
Dim Dum As Byte
manchestin = zender
Call manchesterdata
manchestzd = manchestout
On Interrupt GoTo Meting 'Enable interrupts
Main:
@sleep
GoTo Main
Disable ' Disable interrupts in the handler
' data omzetten naar manchester
' invoer een byte
' output een word
manchesterdata:
For teller = 0 To 7
tempdata = GetBit manchestin,teller
If tempdata = 0 Then
ClearBit manchestout,(teller*2)
SetBit manchestout,(teller*2+1)
Else
SetBit manchestout,(teller*2)
ClearBit manchestout,(teller*2+1)
EndIf
Next teller
Return
Meting:
OWrite ds1820, 1, [$CC, $44] ' Start temperature conversion
While ORead ds1820, 4 = 0 : Wend
OWrite ds1820, 1, [$CC, $BE] ' Read the temperature
ORead ds1820, 2, [tempture.LowByte, tempture.HighByte, Dum,Dum,Dum,Dum, C_remain, C_per_c]
tempture = (((tempture >> 1) * 100) - 25) + (((C_per_c - C_remain) * 100) / C_per_c)
manchestin = tempture.HighByte
Call manchesterdata
manchestth = manchestout
manchestin = tempture.LowByte
Call manchesterdata
manchesttl = manchestout
checksum = zender + tempture - 1
manchestin = checksum
Call manchesterdata
manchestck = manchestout
For teller = 0 To 1
SerOut zendout, 49965,[startman,startman,startman,startman,startman,startman,startman,startman,dataman,manchestzd.HighByte,manchestzd.LowByte,manchesttl.HighByte,manchesttl.LowByte,manchestth.HighByte,manchestth.LowByte]
SerOut zendout, 49965,[dataman,dataman,dataman,dataman,dataman,dataman,manchestck.HighByte,manchestck.LowByte]
DelayMS 70
Next
INTCON.1 = 0 ' Clear interrupt flag
Resume ' Return to main program
Enable ' Enable interrupts after the handler
Eenvoudige projecten voor de microchip microcontrollers geschreven in picbasic, proton+.
zaterdag 30 juli 2011
wireless temperatuur sensor
Hierbij een eenvoudige versie van de temperatuur sensor deze stuurt alleen de temperatuur door.
De sensor is ingebouwd in een een kastje van een oude sensor, ook de 433 mhz zender komt uit deze sensor.
De 4060 zorgt er voor dat de pic elke minuut ff wakker wordt.
De sensor is een onewire ds18b20 van maxim. In een volgende post zet ik de source.
De sensor is ingebouwd in een een kastje van een oude sensor, ook de 433 mhz zender komt uit deze sensor.
De 4060 zorgt er voor dat de pic elke minuut ff wakker wordt.
De sensor is een onewire ds18b20 van maxim. In een volgende post zet ik de source.
zaterdag 23 juli 2011
Nog meer sensors.
De test uitgebreid met nog meer sensors, dit zijn de tmp75 in 12 bits mode, de n75-5.0 alleen 9 bits mode,
doet eigenlijk dus niet echt mee, 9 bits mode is aflezen op een halve graad. En de sht11.
Op het display als achtereenvolgend de ds18s20, ds2438, tmp75,n75-5.0, sht11, ds1624, adt7410 en als laatste de lm92, zeer rustig zijn de ds18s20 en de tmp75 en de ds1624 hier zie je de temperatuur heel rustig stijgen of dalen. Ook de sht11 is zeer rustig alleen omdat de resolutie hoog is zie je de temperatuur relatief vaak veranderen.
De ds2438 en de lm92 en de adt7410 zie je het meest heen en weer schommelen. De tmp75 en sht11 zitten met de temperatuur het dichtst bij de sensors van maxim-ic.
doet eigenlijk dus niet echt mee, 9 bits mode is aflezen op een halve graad. En de sht11.
Op het display als achtereenvolgend de ds18s20, ds2438, tmp75,n75-5.0, sht11, ds1624, adt7410 en als laatste de lm92, zeer rustig zijn de ds18s20 en de tmp75 en de ds1624 hier zie je de temperatuur heel rustig stijgen of dalen. Ook de sht11 is zeer rustig alleen omdat de resolutie hoog is zie je de temperatuur relatief vaak veranderen.
De ds2438 en de lm92 en de adt7410 zie je het meest heen en weer schommelen. De tmp75 en sht11 zitten met de temperatuur het dichtst bij de sensors van maxim-ic.
woensdag 20 juli 2011
temperatuur sensor test
Voor de aardigheid een kleine test van diverse temperatuur sensors.
Op het lcd achtereen volgend de eerste 4 de ds18s20, waarvan de eerste twee uit een andere serie dan
de andere 2, daarnaast de ds2438 ,ds1624, adt7410 en als laatste de lm92, De maxim-ic's geven allemaal ongeveer hetzelfde aan, de adt7410 van analog devices zit daar weer boven en met een verschil een 1.5 graad geeft de lm92 van national semiconducters de hoogste temperatuur aan. De sensors staan wel continu aan de spanning en komen nooit in rust. Dus in hoeverre ze zichzelf opwarmen is hier geen rekening mee gehouden
Op het lcd achtereen volgend de eerste 4 de ds18s20, waarvan de eerste twee uit een andere serie dan
de andere 2, daarnaast de ds2438 ,ds1624, adt7410 en als laatste de lm92, De maxim-ic's geven allemaal ongeveer hetzelfde aan, de adt7410 van analog devices zit daar weer boven en met een verschil een 1.5 graad geeft de lm92 van national semiconducters de hoogste temperatuur aan. De sensors staan wel continu aan de spanning en komen nooit in rust. Dus in hoeverre ze zichzelf opwarmen is hier geen rekening mee gehouden
zaterdag 16 juli 2011
Draadloze sensor uitgebreid.
De draadloze sensor is uitgebreid met een HH10D van Hope voor het meten van de vochtigheid.
De HH10D levert een toontje uit waarvan de frequentie varieert afhankelijk van de vochtigheid.
Met behulp van het commando COUNTER kunnen we de frequentie meten als we COUNTER gedurende 1 seconde de pulsen laten tellen. De HH10D heeft een EEPROM waarin de calibratie waarden staan met wat rekenwerk kunnen we dan de vochtigheid bereken met 1 cijfer achter de komma. Verder heb ik voor de lichtsterkte een eenvoudige LDR gebruikt. Super is dit niet maar het werkt.
De HH10D levert een toontje uit waarvan de frequentie varieert afhankelijk van de vochtigheid.
Met behulp van het commando COUNTER kunnen we de frequentie meten als we COUNTER gedurende 1 seconde de pulsen laten tellen. De HH10D heeft een EEPROM waarin de calibratie waarden staan met wat rekenwerk kunnen we dan de vochtigheid bereken met 1 cijfer achter de komma. Verder heb ik voor de lichtsterkte een eenvoudige LDR gebruikt. Super is dit niet maar het werkt.
vrijdag 15 juli 2011
Ontvanger draadloze temperatuur sensor
De eerste stappen voor de ontvanger zijn gemaakt.
In de video kunnen we zien dat we manchester data op het display krijgen.
Nu moeten we nog het signaal weer decoderen.
In de video kunnen we zien dat we manchester data op het display krijgen.
Nu moeten we nog het signaal weer decoderen.
woensdag 13 juli 2011
Draadloze temperatuur sensor
Het volgende project is het maken van een draadloos weerstation, hier alvast een filmpje van de zender.
De zender bestaat uit een 16f88 en een ds1624 i2c temperatuur sensor. Ook nog een 4060 die elke minuut een interrupt genereert. In het filmpje iets vaker. De zender gaan we nog uitbreiden met een vochtigheidssensor en een lichtsterkte meting. Zodra ook de ontvanger klaar is zetten hier de schema's en source's neer.
De zender bestaat uit een 16f88 en een ds1624 i2c temperatuur sensor. Ook nog een 4060 die elke minuut een interrupt genereert. In het filmpje iets vaker. De zender gaan we nog uitbreiden met een vochtigheidssensor en een lichtsterkte meting. Zodra ook de ontvanger klaar is zetten hier de schema's en source's neer.
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:
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
Abonneren op:
Posts (Atom)