--- /dev/null
+\r
+Microsoft Visual Studio Solution File, Format Version 12.00\r
+# Atmel Studio Solution File, Format Version 11.00\r
+VisualStudioVersion = 14.0.25420.1\r
+MinimumVisualStudioVersion = 10.0.40219.1\r
+Project("{54F91283-7BC4-4236-8FF9-10F437C3AD48}") = "DS18B20_ADC", "DS18B20_ADC.cproj", "{7A5672FE-8226-4158-B931-E1F36B9A8858}"\r
+EndProject\r
+Global\r
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution\r
+ Debug|AVR = Debug|AVR\r
+ Release|AVR = Release|AVR\r
+ EndGlobalSection\r
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution\r
+ {7A5672FE-8226-4158-B931-E1F36B9A8858}.Debug|AVR.ActiveCfg = Debug|AVR\r
+ {7A5672FE-8226-4158-B931-E1F36B9A8858}.Debug|AVR.Build.0 = Debug|AVR\r
+ {7A5672FE-8226-4158-B931-E1F36B9A8858}.Release|AVR.ActiveCfg = Release|AVR\r
+ {7A5672FE-8226-4158-B931-E1F36B9A8858}.Release|AVR.Build.0 = Release|AVR\r
+ EndGlobalSection\r
+ GlobalSection(SolutionProperties) = preSolution\r
+ HideSolutionNode = FALSE\r
+ EndGlobalSection\r
+EndGlobal\r
--- /dev/null
+\r
+// Copyright (c) 2017, Tobias Mueller tm(at)tm3d.de\r
+// All rights reserved.\r
+//\r
+// Redistribution and use in source and binary forms, with or without\r
+// modification, are permitted provided that the following conditions are\r
+// met:\r
+//\r
+// * Redistributions of source code must retain the above copyright\r
+// notice, this list of conditions and the following disclaimer.\r
+// * Redistributions in binary form must reproduce the above copyright\r
+// notice, this list of conditions and the following disclaimer in the\r
+// documentation and/or other materials provided with the\r
+// distribution.\r
+// * All advertising materials mentioning features or use of this\r
+// software must display the following acknowledgement: This product\r
+// includes software developed by tm3d.de and its contributors.\r
+// * Neither the name of tm3d.de nor the names of its contributors may\r
+// be used to endorse or promote products derived from this software\r
+// without specific prior written permission.\r
+//\r
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\r
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\r
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\r
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\r
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\r
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\r
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\r
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\r
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+\r
+#define F_CPU 8000000UL\r
+#include <avr/io.h>\r
+#include <avr/interrupt.h>\r
+#include <util/delay.h>\r
+#include <avr/wdt.h>\r
+#include <avr/sleep.h>\r
+#include <avr/pgmspace.h>\r
+\r
+extern void OWINIT();\r
+extern void EXTERN_SLEEP();\r
+\r
+\r
+\r
+uint8_t owid[8]={0x28, 0xA2, 0xD9, 0x84, 0x00, 0x16, 0x02, 0xAC};/**/\r
+uint8_t config_info[26]={0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x02,6,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};\r
+ \r
+#if (owid>128) \r
+#error "Variable not correct"\r
+#endif\r
+\r
+extern uint8_t mode;\r
+extern uint8_t gcontrol;\r
+extern uint8_t reset_indicator;\r
+extern uint8_t alarmflag;\r
+\r
+\r
+volatile uint8_t wdcounter;\r
+\r
+\r
+typedef union {\r
+ volatile uint8_t bytes[8];\r
+ struct {\r
+ uint16_t temp; //0\r
+ uint8_t TH; //2\r
+ uint8_t TL; //3\r
+ uint8_t config; //4\r
+ uint8_t rrFF; //5\r
+ uint8_t rr00; //6\r
+ uint8_t rr10; //7\r
+ };\r
+} pack_t;\r
+volatile pack_t pack;\r
+\r
+\r
+\r
+\r
+#if defined(__AVR_ATtiny24__)||defined(__AVR_ATtiny44__) || defined(__AVR_ATtiny84__) || defined(__AVR_ATtiny24A__)||defined(__AVR_ATtiny44A__) || defined(__AVR_ATtiny84A__)\r
+ISR(WATCHDOG_vect) {\r
+#else\r
+ISR(WDT_vect) {\r
+#endif \r
+ //sleep_disable(); // Disable Sleep on Wakeup\r
+ wdcounter++;\r
+ if (reset_indicator==1) reset_indicator++;\r
+ else if (reset_indicator==2) mode=0;\r
+/* if (timeout==2) {\r
+ DIS_TIMER;\r
+ EN_OWINT;\r
+ mode=OWM_SLEEP;\r
+ }\r
+ timeout++;*/\r
+ //sleep_enable(); // Enable Sleep Mode\r
+\r
+}\r
+\r
+\r
+volatile double V,ktemp;\r
+\r
+uint16_t ADmess() {\r
+ ADMUX=0b00101100; //3V ADC2+ ADC1- 1x\r
+ ADCSRA|=(1<<ADSC);\r
+ while ((ADCSRA&(1<<ADSC)));\r
+ return ADC;\r
+}\r
+\r
+int main(void){\r
+ //PRR|=(1<<PRUSI)|(1<<PRADC); //Switch off usi and adc for save Power\r
+ pack.temp=0x0550;\r
+ pack.config=0x7F;\r
+ pack.TH=75;\r
+ pack.TL=70;\r
+ pack.rrFF=0xFF;\r
+ pack.rr00=0;\r
+ pack.rr10=0x10;\r
+ PORTA=0xFF-(1<<PINA1)-(1<<PINA2);\r
+ PORTB=0xFF;\r
+ OWINIT();\r
+\r
+ MCUCR &=~(1<<PUD); //All Pins Pullup...\r
+ MCUCR |=(1<<BODS);\r
+\r
+ WDTCSR |= ((1<<WDCE) ); // Enable the WD Change Bit//| (1<<WDE)\r
+ WDTCSR |= (1<<WDIE) | // Enable WDT Interrupt\r
+ (1<<WDP2) | (1<<WDP1); // Set Timeout to ~1 seconds\r
+ MCUSR=0;\r
+ sei();\r
+ ADCSRA=(1<<ADEN)|(1<<ADPS2)|(1<<ADPS1);//|(1<<ADPS0);\r
+ \r
+ \r
+ uint16_t ares[16],sum;\r
+ uint8_t par=0;\r
+ sum=0;\r
+ for(uint8_t i=0;i<16;i++) {\r
+ //sum+=ares[i];\r
+ sum+=ADmess();\r
+ }\r
+ par=0;\r
+ wdcounter=0;\r
+ gcontrol=1;\r
+\r
+ while(1) {\r
+ if (wdcounter>0) {\r
+// ares[par]=ADmess();\r
+ par++;\r
+ if (par>15) par=0;\r
+ wdcounter=0;\r
+ sum=0;\r
+ for(uint8_t i=0;i<16;i++) {\r
+ //sum+=ares[i];\r
+ sum+=ADmess();\r
+ }\r
+\r
+\r
+ }\r
+ if (gcontrol) {\r
+ PORTB|=(1<<PORTB0);\r
+ //V=sum/20.0/1024.0*1.12*1000.0/16.0;\r
+ //V=sum/20.0/1024.0*1.01*1000.0/16.0;\r
+ V=sum/1024.0*182-55*16-16;\r
+ if (V>125*16) V=125*16;\r
+ if (V<-55*16) V=-55*16;\r
+ \r
+ uint16_t htemp=V;\r
+ \r
+ uint8_t t8=pack.temp>>4;\r
+ uint8_t af=0;\r
+ if (t8>pack.TH) af=1;\r
+ if (t8<=pack.TL) af=1;\r
+ cli();\r
+ pack.temp=htemp;\r
+ alarmflag=af;\r
+ sei();\r
+ EXTERN_SLEEP();\r
+ PORTB&=~(1<<PORTB0);\r
+ }\r
+\r
+ \r
+#if defined(__AVR_ATtiny25__)||defined(__AVR_ATtiny45__) || defined(__AVR_ATtiny85__)\r
+ if (((TIMSK & (1<<TOIE0))==0)&& (mode==0))\r
+#endif \r
+#if defined(__AVR_ATtiny24__)||defined(__AVR_ATtiny44__) || defined(__AVR_ATtiny84__) ||defined(__AVR_ATtiny24A__)||defined(__AVR_ATtiny44A__) || defined(__AVR_ATtiny84A__)\r
+ if (((TIMSK0 & (1<<TOIE0))==0)&& (mode==0))\r
+#endif\r
+ {\r
+// CLKPR=(1<<CLKPCE);\r
+ // CLKPR=(1<<CLKPS2); /*0.5Mhz*/\r
+// PORTB&=~(1<<PINB1);\r
+ MCUCR|=(1<<SE)|(1<<SM1);\r
+ MCUCR&=~(1<<ISC01);\r
+ } else {\r
+ MCUCR|=(1<<SE);\r
+ MCUCR&=~(1<<SM1);\r
+ }\r
+ asm("SLEEP");\r
+ }\r
+\r
+\r
+}
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>\r
+<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
+ <PropertyGroup>\r
+ <SchemaVersion>2.0</SchemaVersion>\r
+ <ProjectVersion>7.0</ProjectVersion>\r
+ <ToolchainName>com.Atmel.AVRGCC8.C</ToolchainName>\r
+ <ProjectGuid>{7a5672fe-8226-4158-b931-e1f36b9a8858}</ProjectGuid>\r
+ <avrdevice>ATtiny84A</avrdevice>\r
+ <avrdeviceseries>none</avrdeviceseries>\r
+ <OutputType>Executable</OutputType>\r
+ <Language>C</Language>\r
+ <OutputFileName>$(MSBuildProjectName)</OutputFileName>\r
+ <OutputFileExtension>.elf</OutputFileExtension>\r
+ <OutputDirectory>$(MSBuildProjectDirectory)\$(Configuration)</OutputDirectory>\r
+ <AssemblyName>DS18B20_TC</AssemblyName>\r
+ <Name>DS18B20_ADC</Name>\r
+ <RootNamespace>DS18B20_TC</RootNamespace>\r
+ <ToolchainFlavour>Native</ToolchainFlavour>\r
+ <KeepTimersRunning>true</KeepTimersRunning>\r
+ <OverrideVtor>false</OverrideVtor>\r
+ <CacheFlash>true</CacheFlash>\r
+ <ProgFlashFromRam>true</ProgFlashFromRam>\r
+ <RamSnippetAddress>0x20000000</RamSnippetAddress>\r
+ <UncachedRange />\r
+ <preserveEEPROM>true</preserveEEPROM>\r
+ <OverrideVtorValue>exception_table</OverrideVtorValue>\r
+ <BootSegment>2</BootSegment>\r
+ <eraseonlaunchrule>1</eraseonlaunchrule>\r
+ <AsfFrameworkConfig>\r
+ <framework-data>\r
+ <options />\r
+ <configurations />\r
+ <files />\r
+ <documentation help="" />\r
+ <offline-documentation help="" />\r
+ <dependencies>\r
+ <content-extension eid="atmel.asf" uuidref="Atmel.ASF" version="3.28.1" />\r
+ </dependencies>\r
+ </framework-data>\r
+ </AsfFrameworkConfig>\r
+ <avrtool>com.atmel.avrdbg.tool.atmelice</avrtool>\r
+ <com_atmel_avrdbg_tool_atmelice>\r
+ <ToolOptions>\r
+ <InterfaceProperties>\r
+ </InterfaceProperties>\r
+ <InterfaceName>debugWIRE</InterfaceName>\r
+ </ToolOptions>\r
+ <ToolType>com.atmel.avrdbg.tool.atmelice</ToolType>\r
+ <ToolNumber>J41800000789</ToolNumber>\r
+ <ToolName>Atmel-ICE</ToolName>\r
+ </com_atmel_avrdbg_tool_atmelice>\r
+ <avrtoolinterface>debugWIRE</avrtoolinterface>\r
+ <ExternalProgrammingToolCommand />\r
+ <avrtoolserialnumber>J41800000789</avrtoolserialnumber>\r
+ <avrdeviceexpectedsignature>0x1E930C</avrdeviceexpectedsignature>\r
+ </PropertyGroup>\r
+ <PropertyGroup Condition=" '$(Configuration)' == 'Release' ">\r
+ <ToolchainSettings>\r
+ <AvrGcc>\r
+ <avrgcc.common.Device>-mmcu=attiny84a -B "%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.79\gcc\dev\attiny84a"</avrgcc.common.Device>\r
+ <avrgcc.common.outputfiles.hex>True</avrgcc.common.outputfiles.hex>\r
+ <avrgcc.common.outputfiles.lss>True</avrgcc.common.outputfiles.lss>\r
+ <avrgcc.common.outputfiles.eep>True</avrgcc.common.outputfiles.eep>\r
+ <avrgcc.common.outputfiles.srec>True</avrgcc.common.outputfiles.srec>\r
+ <avrgcc.common.outputfiles.usersignatures>False</avrgcc.common.outputfiles.usersignatures>\r
+ <avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>True</avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>\r
+ <avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>True</avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>\r
+ <avrgcc.compiler.symbols.DefSymbols>\r
+ <ListValues>\r
+ <Value>DEBUG</Value>\r
+ </ListValues>\r
+ </avrgcc.compiler.symbols.DefSymbols>\r
+ <avrgcc.compiler.directories.IncludePaths>\r
+ <ListValues>\r
+ <Value>%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.79\include</Value>\r
+ </ListValues>\r
+ </avrgcc.compiler.directories.IncludePaths>\r
+ <avrgcc.compiler.optimization.level>Optimize (-O1)</avrgcc.compiler.optimization.level>\r
+ <avrgcc.compiler.optimization.PackStructureMembers>True</avrgcc.compiler.optimization.PackStructureMembers>\r
+ <avrgcc.compiler.optimization.AllocateBytesNeededForEnum>True</avrgcc.compiler.optimization.AllocateBytesNeededForEnum>\r
+ <avrgcc.compiler.optimization.DebugLevel>Default (-g2)</avrgcc.compiler.optimization.DebugLevel>\r
+ <avrgcc.compiler.warnings.AllWarnings>True</avrgcc.compiler.warnings.AllWarnings>\r
+ <avrgcc.linker.libraries.Libraries>\r
+ <ListValues>\r
+ <Value>libm</Value>\r
+ </ListValues>\r
+ </avrgcc.linker.libraries.Libraries>\r
+ <avrgcc.assembler.general.IncludePaths>\r
+ <ListValues>\r
+ <Value>%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.79\include</Value>\r
+ </ListValues>\r
+ </avrgcc.assembler.general.IncludePaths>\r
+ <avrgcc.assembler.debugging.DebugLevel>Default (-Wa,-g)</avrgcc.assembler.debugging.DebugLevel>\r
+ </AvrGcc>\r
+ </ToolchainSettings>\r
+ </PropertyGroup>\r
+ <PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">\r
+ <ToolchainSettings>\r
+ <AvrGcc>\r
+ <avrgcc.common.Device>-mmcu=attiny84a -B "%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.79\gcc\dev\attiny84a"</avrgcc.common.Device>\r
+ <avrgcc.common.outputfiles.hex>True</avrgcc.common.outputfiles.hex>\r
+ <avrgcc.common.outputfiles.lss>True</avrgcc.common.outputfiles.lss>\r
+ <avrgcc.common.outputfiles.eep>True</avrgcc.common.outputfiles.eep>\r
+ <avrgcc.common.outputfiles.srec>True</avrgcc.common.outputfiles.srec>\r
+ <avrgcc.common.outputfiles.usersignatures>False</avrgcc.common.outputfiles.usersignatures>\r
+ <avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>True</avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>\r
+ <avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>True</avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>\r
+ <avrgcc.compiler.symbols.DefSymbols>\r
+ <ListValues>\r
+ <Value>DEBUG</Value>\r
+ </ListValues>\r
+ </avrgcc.compiler.symbols.DefSymbols>\r
+ <avrgcc.compiler.directories.IncludePaths>\r
+ <ListValues>\r
+ <Value>%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.79\include</Value>\r
+ </ListValues>\r
+ </avrgcc.compiler.directories.IncludePaths>\r
+ <avrgcc.compiler.optimization.level>Optimize (-O1)</avrgcc.compiler.optimization.level>\r
+ <avrgcc.compiler.optimization.PackStructureMembers>True</avrgcc.compiler.optimization.PackStructureMembers>\r
+ <avrgcc.compiler.optimization.AllocateBytesNeededForEnum>True</avrgcc.compiler.optimization.AllocateBytesNeededForEnum>\r
+ <avrgcc.compiler.optimization.DebugLevel>Default (-g2)</avrgcc.compiler.optimization.DebugLevel>\r
+ <avrgcc.compiler.warnings.AllWarnings>True</avrgcc.compiler.warnings.AllWarnings>\r
+ <avrgcc.linker.libraries.Libraries>\r
+ <ListValues>\r
+ <Value>libm</Value>\r
+ </ListValues>\r
+ </avrgcc.linker.libraries.Libraries>\r
+ <avrgcc.assembler.general.IncludePaths>\r
+ <ListValues>\r
+ <Value>%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.79\include</Value>\r
+ </ListValues>\r
+ </avrgcc.assembler.general.IncludePaths>\r
+ <avrgcc.assembler.debugging.DebugLevel>Default (-Wa,-g)</avrgcc.assembler.debugging.DebugLevel>\r
+ </AvrGcc>\r
+ </ToolchainSettings>\r
+ </PropertyGroup>\r
+ <ItemGroup>\r
+ <Compile Include="..\common\OWDS18B20.S">\r
+ <SubType>compile</SubType>\r
+ <Link>OWDS18B20.S</Link>\r
+ </Compile>\r
+ <Compile Include="DS18B20_ADC.c">\r
+ <SubType>compile</SubType>\r
+ </Compile>\r
+ </ItemGroup>\r
+ <Import Project="$(AVRSTUDIO_EXE_PATH)\\Vs\\Compiler.targets" />\r
+</Project>
\ No newline at end of file
#include <avr/pgmspace.h>\r
#include "../common/I2C/USI_TWI_Master.h"\r
#include "../common/I2C/BMP280.h"\r
+#include "../common/owSlave_tools.h"\r
\r
\r
-extern void OWINIT();\r
-extern void EXTERN_SLEEP();\r
+#define OWST_EXTERN_VARS\r
\r
\r
\r
#error "Variable not correct"\r
#endif\r
\r
-extern uint8_t mode;\r
-extern uint8_t gcontrol;\r
-extern uint8_t reset_indicator;\r
-extern uint8_t alarmflag;\r
+\r
\r
\r
\r
\r
\r
int main(void){\r
- PRR|=(1<<PRADC); // adc for save Power\r
+ OWST_INIT_USI_ON\r
+ \r
pack.temp=0x0550;\r
pack.config=0x7F;\r
pack.TH=75;\r
pack.rrFF=0xFF;\r
pack.rr00=0;\r
pack.rr10=0x10;\r
- PORTA=0xFF;\r
- PORTB=0xFF;\r
+ \r
OWINIT();\r
\r
- MCUCR &=~(1<<PUD); //All Pins Pullup...\r
- MCUCR |=(1<<BODS);\r
-\r
- MCUSR=0;\r
+ OWST_EN_PULLUP\r
USI_TWI_Master_Initialise();\r
+ _delay_ms(500);\r
+ bmp280Init();\r
+ _delay_ms(50);\r
bmp280Init();\r
//DDRB|=(1<<PINB1);\r
gcontrol=1;\r
//PORTB&=~(1<<PINB1);\r
}\r
\r
- \r
-#if defined(__AVR_ATtiny25__)||defined(__AVR_ATtiny45__) || defined(__AVR_ATtiny85__)\r
- if (((TIMSK & (1<<TOIE0))==0)&& (mode==0))\r
-#endif \r
-#if defined(__AVR_ATtiny24__)||defined(__AVR_ATtiny44__) || defined(__AVR_ATtiny84__) ||defined(__AVR_ATtiny24A__)||defined(__AVR_ATtiny44A__) || defined(__AVR_ATtiny84A__)\r
- if (((TIMSK0 & (1<<TOIE0))==0)&& (mode==0))\r
-#endif\r
- {\r
+ OWST_MAIN_END\r
\r
- MCUCR|=(1<<SE)|(1<<SM1);\r
- MCUCR&=~(1<<ISC01);\r
- } else {\r
- MCUCR|=(1<<SE);\r
- MCUCR&=~(1<<SM1);\r
- }\r
- //MCUCR&=~(1<<ISC01);\r
- asm("SLEEP");\r
}\r
\r
\r
<eraseonlaunchrule>1</eraseonlaunchrule>\r
<AsfFrameworkConfig>\r
<framework-data>\r
- <options />\r
- <configurations />\r
- <files />\r
- <documentation help="" />\r
- <offline-documentation help="" />\r
- <dependencies>\r
- <content-extension eid="atmel.asf" uuidref="Atmel.ASF" version="3.28.1" />\r
- </dependencies>\r
-</framework-data>\r
+ <options />\r
+ <configurations />\r
+ <files />\r
+ <documentation help="" />\r
+ <offline-documentation help="" />\r
+ <dependencies>\r
+ <content-extension eid="atmel.asf" uuidref="Atmel.ASF" version="3.28.1" />\r
+ </dependencies>\r
+ </framework-data>\r
</AsfFrameworkConfig>\r
- <avrtool>custom</avrtool>\r
+ <avrtool>com.atmel.avrdbg.tool.atmelice</avrtool>\r
<com_atmel_avrdbg_tool_atmelice>\r
<ToolOptions>\r
<InterfaceProperties>\r
<ToolName>Simulator</ToolName>\r
</com_atmel_avrdbg_tool_simulator>\r
<ExternalProgrammingToolCommand />\r
- <avrtoolserialnumber>\r
- </avrtoolserialnumber>\r
+ <avrtoolserialnumber>J41800000789</avrtoolserialnumber>\r
<avrdeviceexpectedsignature>0x1E930C</avrdeviceexpectedsignature>\r
<custom>\r
<ToolOptions xmlns="">\r
</ToolNumber>\r
<ToolName xmlns="">Custom Programming Tool</ToolName>\r
</custom>\r
+ <ResetRule>0</ResetRule>\r
+ <EraseKey />\r
</PropertyGroup>\r
<PropertyGroup Condition=" '$(Configuration)' == 'Release' ">\r
<ToolchainSettings>\r
</ToolchainSettings>\r
</PropertyGroup>\r
<ItemGroup>\r
- <Compile Include="..\common\I2C\SHT2x.c">\r
- <SubType>compile</SubType>\r
- <Link>SHT2x.c</Link>\r
- </Compile>\r
<Compile Include="..\common\calibr.c">\r
<SubType>compile</SubType>\r
<Link>calibr.c</Link>\r
<SubType>compile</SubType>\r
<Link>BMP280.c</Link>\r
</Compile>\r
- <Compile Include="..\common\I2C\USI_TWI_Master.c">\r
+ <Compile Include="..\common\I2C\SHT2xV2.c">\r
+ <SubType>compile</SubType>\r
+ <Link>SHT2xV2.c</Link>\r
+ </Compile>\r
+ <Compile Include="..\common\I2C\TWI_Master.c">\r
<SubType>compile</SubType>\r
- <Link>USI_TWI_Master.c</Link>\r
+ <Link>TWI_Master.c</Link>\r
</Compile>\r
<Compile Include="..\common\OWDS18B20_DS2438.S">\r
<SubType>compile</SubType>\r
#include <avr/wdt.h>\r
#include <avr/sleep.h>\r
#include <avr/pgmspace.h>\r
-#include "../common/I2C/USI_TWI_Master.h"\r
-#include "../common/I2C/SHT2x.h"\r
+#include "../common/I2C/TWI_Master.h"\r
+#include "../common/I2C/SHT2xV2.h"\r
#include "../common/I2C/BMP280.h"\r
#include "../common/calibr.h"\r
+#include "../common/owSlave_tools.h"\r
\r
-extern void OWINIT();\r
-extern void EXTERN_SLEEP();\r
+OWST_EXTERN_VARS\r
\r
\r
uint8_t owid1[8]={0x28, 0xA3, 0xD9, 0x84, 0x00, 0x16, 0x05, 0x18};/**/\r
uint8_t config_info2[26]={0x01,0x06, 0x05,0x08, 0x04,0x07, 0x00,0x00, 0x02,7,0x00,7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};\r
\r
\r
-#if (owid>128) \r
-#error "Variable not correct"\r
-#endif\r
-\r
-extern uint8_t mode;\r
-extern uint8_t gcontrol;\r
-extern uint8_t reset_indicator;\r
-extern uint8_t alarmflag;\r
-volatile uint8_t wdcounter=3;\r
-\r
-\r
-#if defined(__AVR_ATtiny24__)||defined(__AVR_ATtiny44__) || defined(__AVR_ATtiny84__) || defined(__AVR_ATtiny24A__)||defined(__AVR_ATtiny44A__) || defined(__AVR_ATtiny84A__)\r
-ISR(WATCHDOG_vect) {\r
- #else\r
- ISR(WDT_vect) {\r
- \r
-#endif \r
- //sleep_disable(); // Disable Sleep on Wakeup\r
- wdcounter++;\r
- if (reset_indicator==1) reset_indicator++;\r
- else if (reset_indicator==2) mode=0;\r
-/* if (timeout==2) {\r
- DIS_TIMER;\r
- EN_OWINT;\r
- mode=OWM_SLEEP;\r
- }\r
- timeout++;*/\r
- //sleep_enable(); // Enable Sleep Mode\r
-\r
-}\r
\r
+OWST_WDT_ISR\r
\r
typedef union {\r
volatile uint8_t bytes[8];\r
\r
\r
\r
-volatile int16_t am2302_temp;\r
-volatile uint16_t am2302_hum;\r
+volatile int16_t DS2438_2_TEMP;\r
+volatile uint16_t DS2438_2_VAD;\r
+volatile uint16_t DS2438_2_VDD=0x01F4;\r
\r
+OWST_TESTSW\r
\r
-int testSW(void) {\r
- uint8_t r;\r
- DDRB&=~(1<<PORTB0); //Eingang\r
- __asm__ __volatile__ ("nop");\r
- PORTB|=(1<<PORTB0); //Pullup\r
- __asm__ __volatile__ ("nop");\r
- __asm__ __volatile__ ("nop");\r
- __asm__ __volatile__ ("nop");\r
- __asm__ __volatile__ ("nop");\r
- __asm__ __volatile__ ("nop");\r
- r=PINB&(1<<PORTB0);\r
- __asm__ __volatile__ ("nop");\r
- PORTB&=~(1<<PORTB0);\r
- __asm__ __volatile__ ("nop");\r
- DDRB|=(1<<PORTB0); //Eingang\r
- return (r==0);\r
- \r
- \r
-}\r
\r
uint8_t userRegister[1];\r
int16_t sRH,sT;\r
-volatile double temperatureC,humidityRH;\r
+double temperatureC,humidityRH;\r
volatile double l;\r
uint32_t P;\r
int32_t t;\r
\r
int main(void){\r
- PRR|=(1<<PRADC); // adc for save Power\r
- PORTA=0xFF;\r
- PORTB=0xFF-(1<<PORTB0); //Schalter kann gegen Masse sein und zieht dann immer Strom\r
- DDRB|=(1<<PORTB0); //Als Ausgang und 0\r
- \r
+ OWST_INIT_USI_ON\r
+ \r
pack1.temp=0x0550;\r
pack1.config=0x7F;\r
pack1.TH=75;\r
PORTA=0xFF;\r
PORTB=0xFF;\r
OWINIT();\r
+ OWST_EN_PULLUP\r
\r
- ACSR|=(1<<ACD); //Disable Comparator\r
- ADCSRB|=(1<<ACME); //Disable Analog multiplexer\r
- MCUCR &=~(1<<PUD); //All Pins Pullup...\r
- //MCUCR &=~(1<<BODS);\r
-\r
+ OWST_WDR_CONFIG8\r
\r
- WDTCSR |= ((1<<WDCE) ); // Enable the WD Change Bit//| (1<<WDE)\r
- WDTCSR |= (1<<WDIE) | // Enable WDT Interrupt\r
- (1<<WDP3) | (1<<WDP0); // Set Timeout to ~8 seconds\r
if (testSW()) {\r
- config_info2[5]=8;\r
+ config_info2[5]=12;\r
}else{\r
config_info2[5]=7;\r
}\r
pack2.page3[0]=0xF1;\r
\r
MCUSR=0;\r
- USI_TWI_Master_Initialise();\r
+ TWI_Master_Initialise();\r
\r
- SHT2x_SoftReset();\r
- SHT2x_ReadUserRegister(userRegister);\r
- //(userRegister & ~SHT2x_RES_MASK) | SHT2x_RES_10_13BIT;\r
- SHT2x_WriteUserRegister(userRegister); //write changed user reg\r
- // --- measure humidity with "Hold Master Mode (HM)" ---\r
- //SHT2x_MeasurePoll(HUMIDITY, &sRH);\r
- // --- measure temperature with "Polling Mode" (no hold master) ---\r
- //SHT2x_MeasurePoll(TEMP, &sT);\r
- //-- calculate humidity and temperature --\r
- //temperatureC = SHT2x_CalcTemperatureC(sT);\r
- //humidityRH = SHT2x_CalcRH(sRH);\r
+ initSHT2x();\r
+ _delay_ms(10);\r
bmp280Init();\r
gcontrol=1;\r
sei();\r
while(1) {\r
+ \r
if (gcontrol) {\r
- wdcounter=3;\r
+ wdcounter=2;\r
\r
}\r
\r
if (wdcounter>2) {\r
- SHT2x_MeasurePoll(HUMIDITY, &sRH);\r
- // --- measure temperature with "Polling Mode" (no hold master) ---\r
- SHT2x_MeasurePoll(TEMP, &sT);\r
- //-- calculate humidity and temperature --\r
- temperatureC = SHT2x_CalcTemperatureC(sT);\r
- humidityRH = SHT2x_CalcRH(sRH);\r
- humidityRH=calibr_hum(temperatureC,-0.45,humidityRH)*10.0;\r
- temperatureC=temperatureC*10.0-4.5;\r
+ getSHT2xHumTemp(&temperatureC,&humidityRH);\r
+ double RH=calibr_hum(temperatureC,-0.2,humidityRH)*10.0;\r
+ double TC =temperatureC *10.0-2;\r
+\r
if (testSW()) {\r
- am2302_hum= humidityRH*10.0;\r
- am2302_temp=temperatureC*25.6;\r
+ DS2438_2_VAD=RH;\r
+ DS2438_2_TEMP=(double)TC*25.6;\r
//am2302_temp=am2302_temp-20;\r
- config_info2[5]=8;\r
+ config_info2[5]=12;\r
+ DS2438_2_VDD=0x01F4;\r
\r
}else{\r
\r
- double hhum=(1.0546-0.000216*temperatureC)*(humidityRH);\r
+ double hhum=(1.0546-0.000216*TC)*(RH);\r
//am2302_hum=0.318*hhum +76.0;\r
- am2302_hum=0.31*hhum +80;\r
- am2302_temp=temperatureC*25.6;\r
+ DS2438_2_VAD=0.31*hhum +80;\r
+ DS2438_2_TEMP=TC*25.6;\r
//am2302_temp=am2302_temp-20;\r
config_info2[5]=7;\r
+ DS2438_2_VDD=0x01F4;\r
}\r
wdcounter=0;\r
}\r
\r
}\r
\r
- \r
-#if defined(__AVR_ATtiny25__)||defined(__AVR_ATtiny45__) || defined(__AVR_ATtiny85__)\r
- if (((TIMSK & (1<<TOIE0))==0)&& (mode==0))\r
-#endif \r
-#if defined(__AVR_ATtiny24__)||defined(__AVR_ATtiny44__) || defined(__AVR_ATtiny84__) ||defined(__AVR_ATtiny24A__)||defined(__AVR_ATtiny44A__) || defined(__AVR_ATtiny84A__)\r
- if (((TIMSK0 & (1<<TOIE0))==0)&& (mode==0))\r
-#endif\r
- {\r
-\r
- MCUCR|=(1<<SE)|(1<<SM1);\r
- MCUCR&=~(1<<ISC01);\r
- } else {\r
- MCUCR|=(1<<SE);\r
- MCUCR&=~(1<<SM1);\r
- }\r
- //MCUCR&=~(1<<ISC01);\r
- asm("SLEEP");\r
+ OWST_MAIN_END \r
}\r
\r
\r
#include <avr/wdt.h>\r
#include <avr/sleep.h>\r
#include <avr/pgmspace.h>\r
+#include "../common/owSlave_tools.h"\r
#include "../common/I2C/USI_TWI_Master.h"\r
#include "../common/I2C/CDM7160.h"\r
\r
\r
-extern void OWINIT();\r
-\r
-extern void EXTERN_SLEEP();\r
-\r
+OWST_EXTERN_VARS\r
\r
uint8_t owid[8]={0x28, 0xA2, 0xD9, 0x84, 0x00, 0x16, 0x77, 0x6B};/**/\r
uint8_t config_info[26]={10,21, 0x00,0x00, 0x00,0x00, 0x00,0x00, 0x02,16,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};\r
\r
-#if (owid>128) \r
-#error "Variable not correct"\r
-#endif\r
-\r
-extern uint8_t mode;\r
-extern uint8_t gcontrol;\r
-extern uint8_t reset_indicator;\r
-extern uint8_t alarmflag;\r
-volatile uint8_t wdcounter=5;\r
-\r
-#if defined(__AVR_ATtiny24__)||defined(__AVR_ATtiny44__) || defined(__AVR_ATtiny84__) || defined(__AVR_ATtiny24A__)||defined(__AVR_ATtiny44A__) || defined(__AVR_ATtiny84A__)\r
-ISR(WATCHDOG_vect) {\r
-#else\r
-ISR(WDT_vect) {\r
-#endif \r
- wdcounter++;\r
- if (reset_indicator==1) reset_indicator++;\r
- else if (reset_indicator==2) mode=0;\r
\r
-\r
-}\r
-\r
-uint8_t max_adr=0;\r
+OWST_WDT_ISR\r
\r
typedef union {\r
volatile uint8_t bytes[8];\r
\r
\r
\r
-int main(void){\r
- PORTB&=~(1<<PINB1);\r
- DDRB|=(1<<PINB1);\r
- PRR|=(1<<PRADC); // adc for save Power\r
+int main(void) {\r
+ OWST_INIT_USI_ON\r
+\r
+\r
pack.temp=0x0550;\r
pack.config=0x7F;\r
pack.TH=75;\r
OWINIT();\r
PORTB&=~(1<<PINB1);\r
DDRB|=(1<<PINB1);\r
- \r
-\r
PORTA&=~(1<<PINA0);\r
\r
- MCUCR &=~(1<<PUD); //All Pins Pullup...\r
- MCUCR |=(1<<BODS);\r
-\r
- WDTCSR |= ((1<<WDCE) ); // Enable the WD Change Bit//| (1<<WDE)\r
- WDTCSR |= (1<<WDIE) | // Enable WDT Interrupt\r
- (1<<WDP3) | (1<<WDP0); // Set Timeout to ~8 seconds\r
+ OWST_EN_PULLUP\r
+ OWST_WDR_CONFIG8\r
\r
- MCUSR=0;\r
_delay_ms(100);\r
USI_TWI_Master_Initialise();\r
CDM7160softReset();\r
}\r
\r
\r
-#if defined(__AVR_ATtiny25__)||defined(__AVR_ATtiny45__) || defined(__AVR_ATtiny85__)\r
- if (((TIMSK & (1<<TOIE0))==0)&& (mode==0))\r
-#endif \r
-#if defined(__AVR_ATtiny24__)||defined(__AVR_ATtiny44__) || defined(__AVR_ATtiny84__) ||defined(__AVR_ATtiny24A__)||defined(__AVR_ATtiny44A__) || defined(__AVR_ATtiny84A__)\r
- if (((TIMSK0 & (1<<TOIE0))==0)&& (mode==0))\r
-#endif\r
- {\r
-\r
- MCUCR|=(1<<SE)|(1<<SM1);\r
- MCUCR&=~(1<<ISC01);\r
- } else {\r
- MCUCR|=(1<<SE);\r
- MCUCR&=~(1<<SM1);\r
- }\r
- //MCUCR&=~(1<<ISC01);\r
- asm("SLEEP");\r
+ OWST_MAIN_END\r
}\r
\r
\r
--- /dev/null
+\r
+Microsoft Visual Studio Solution File, Format Version 12.00\r
+# Atmel Studio Solution File, Format Version 11.00\r
+VisualStudioVersion = 14.0.25420.1\r
+MinimumVisualStudioVersion = 10.0.40219.1\r
+Project("{54F91283-7BC4-4236-8FF9-10F437C3AD48}") = "DS18B20_CDM7160_DS18B20_BMP280", "DS18B20_CDM7160_DS18B20_BMP280.cproj", "{7A5672FE-8226-4158-B931-E1F36B9A8858}"\r
+EndProject\r
+Global\r
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution\r
+ Debug|AVR = Debug|AVR\r
+ Release|AVR = Release|AVR\r
+ EndGlobalSection\r
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution\r
+ {7A5672FE-8226-4158-B931-E1F36B9A8858}.Debug|AVR.ActiveCfg = Debug|AVR\r
+ {7A5672FE-8226-4158-B931-E1F36B9A8858}.Debug|AVR.Build.0 = Debug|AVR\r
+ {7A5672FE-8226-4158-B931-E1F36B9A8858}.Release|AVR.ActiveCfg = Release|AVR\r
+ {7A5672FE-8226-4158-B931-E1F36B9A8858}.Release|AVR.Build.0 = Release|AVR\r
+ EndGlobalSection\r
+ GlobalSection(SolutionProperties) = preSolution\r
+ HideSolutionNode = FALSE\r
+ EndGlobalSection\r
+EndGlobal\r
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>\r
+<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
+ <PropertyGroup>\r
+ <SchemaVersion>2.0</SchemaVersion>\r
+ <ProjectVersion>7.0</ProjectVersion>\r
+ <ToolchainName>com.Atmel.AVRGCC8.C</ToolchainName>\r
+ <ProjectGuid>{7a5672fe-8226-4158-b931-e1f36b9a8858}</ProjectGuid>\r
+ <avrdevice>ATtiny84A</avrdevice>\r
+ <avrdeviceseries>none</avrdeviceseries>\r
+ <OutputType>Executable</OutputType>\r
+ <Language>C</Language>\r
+ <OutputFileName>$(MSBuildProjectName)</OutputFileName>\r
+ <OutputFileExtension>.elf</OutputFileExtension>\r
+ <OutputDirectory>$(MSBuildProjectDirectory)\$(Configuration)</OutputDirectory>\r
+ <AssemblyName>DS18B20_DS2438</AssemblyName>\r
+ <Name>DS18B20_CDM7160_DS18B20_BMP280</Name>\r
+ <RootNamespace>DS18B20_DS2438</RootNamespace>\r
+ <ToolchainFlavour>Native</ToolchainFlavour>\r
+ <KeepTimersRunning>true</KeepTimersRunning>\r
+ <OverrideVtor>false</OverrideVtor>\r
+ <CacheFlash>true</CacheFlash>\r
+ <ProgFlashFromRam>true</ProgFlashFromRam>\r
+ <RamSnippetAddress>0x20000000</RamSnippetAddress>\r
+ <UncachedRange />\r
+ <preserveEEPROM>true</preserveEEPROM>\r
+ <OverrideVtorValue>exception_table</OverrideVtorValue>\r
+ <BootSegment>2</BootSegment>\r
+ <eraseonlaunchrule>1</eraseonlaunchrule>\r
+ <AsfFrameworkConfig>\r
+ <framework-data>\r
+ <options />\r
+ <configurations />\r
+ <files />\r
+ <documentation help="" />\r
+ <offline-documentation help="" />\r
+ <dependencies>\r
+ <content-extension eid="atmel.asf" uuidref="Atmel.ASF" version="3.28.1" />\r
+ </dependencies>\r
+ </framework-data>\r
+ </AsfFrameworkConfig>\r
+ <avrtool>com.atmel.avrdbg.tool.atmelice</avrtool>\r
+ <com_atmel_avrdbg_tool_atmelice>\r
+ <ToolOptions>\r
+ <InterfaceProperties>\r
+ </InterfaceProperties>\r
+ <InterfaceName>debugWIRE</InterfaceName>\r
+ </ToolOptions>\r
+ <ToolType>com.atmel.avrdbg.tool.atmelice</ToolType>\r
+ <ToolNumber>J41800000789</ToolNumber>\r
+ <ToolName>Atmel-ICE</ToolName>\r
+ </com_atmel_avrdbg_tool_atmelice>\r
+ <avrtoolinterface>debugWIRE</avrtoolinterface>\r
+ <com_atmel_avrdbg_tool_simulator>\r
+ <ToolOptions>\r
+ <InterfaceProperties>\r
+ </InterfaceProperties>\r
+ <InterfaceName>debugWIRE</InterfaceName>\r
+ </ToolOptions>\r
+ <ToolType>com.atmel.avrdbg.tool.simulator</ToolType>\r
+ <ToolNumber>\r
+ </ToolNumber>\r
+ <ToolName>Simulator</ToolName>\r
+ </com_atmel_avrdbg_tool_simulator>\r
+ <ExternalProgrammingToolCommand />\r
+ <avrtoolserialnumber>J41800000789</avrtoolserialnumber>\r
+ <avrdeviceexpectedsignature>0x1E930C</avrdeviceexpectedsignature>\r
+ <custom>\r
+ <ToolOptions xmlns="">\r
+ <InterfaceProperties>\r
+ </InterfaceProperties>\r
+ <InterfaceName>debugWIRE</InterfaceName>\r
+ </ToolOptions>\r
+ <ToolType xmlns="">custom</ToolType>\r
+ <ToolNumber xmlns="">\r
+ </ToolNumber>\r
+ <ToolName xmlns="">Custom Programming Tool</ToolName>\r
+ </custom>\r
+ </PropertyGroup>\r
+ <PropertyGroup Condition=" '$(Configuration)' == 'Release' ">\r
+ <ToolchainSettings>\r
+ <AvrGcc>\r
+ <avrgcc.common.Device>-mmcu=attiny84a -B "%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.68\gcc\dev\attiny84a"</avrgcc.common.Device>\r
+ <avrgcc.common.outputfiles.hex>True</avrgcc.common.outputfiles.hex>\r
+ <avrgcc.common.outputfiles.lss>True</avrgcc.common.outputfiles.lss>\r
+ <avrgcc.common.outputfiles.eep>True</avrgcc.common.outputfiles.eep>\r
+ <avrgcc.common.outputfiles.srec>True</avrgcc.common.outputfiles.srec>\r
+ <avrgcc.common.outputfiles.usersignatures>False</avrgcc.common.outputfiles.usersignatures>\r
+ <avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>True</avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>\r
+ <avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>True</avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>\r
+ <avrgcc.compiler.symbols.DefSymbols>\r
+ <ListValues>\r
+ <Value>DEBUG</Value>\r
+ </ListValues>\r
+ </avrgcc.compiler.symbols.DefSymbols>\r
+ <avrgcc.compiler.directories.IncludePaths>\r
+ <ListValues>\r
+ <Value>%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.68\include</Value>\r
+ </ListValues>\r
+ </avrgcc.compiler.directories.IncludePaths>\r
+ <avrgcc.compiler.optimization.level>Optimize (-O1)</avrgcc.compiler.optimization.level>\r
+ <avrgcc.compiler.optimization.PackStructureMembers>True</avrgcc.compiler.optimization.PackStructureMembers>\r
+ <avrgcc.compiler.optimization.AllocateBytesNeededForEnum>True</avrgcc.compiler.optimization.AllocateBytesNeededForEnum>\r
+ <avrgcc.compiler.optimization.DebugLevel>Default (-g2)</avrgcc.compiler.optimization.DebugLevel>\r
+ <avrgcc.compiler.warnings.AllWarnings>True</avrgcc.compiler.warnings.AllWarnings>\r
+ <avrgcc.linker.libraries.Libraries>\r
+ <ListValues>\r
+ <Value>libm</Value>\r
+ </ListValues>\r
+ </avrgcc.linker.libraries.Libraries>\r
+ <avrgcc.assembler.debugging.DebugLevel>Default (-Wa,-g)</avrgcc.assembler.debugging.DebugLevel>\r
+ </AvrGcc>\r
+ </ToolchainSettings>\r
+ </PropertyGroup>\r
+ <PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">\r
+ <ToolchainSettings>\r
+ <AvrGcc>\r
+ <avrgcc.common.Device>-mmcu=attiny84a -B "%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.68\gcc\dev\attiny84a"</avrgcc.common.Device>\r
+ <avrgcc.common.outputfiles.hex>True</avrgcc.common.outputfiles.hex>\r
+ <avrgcc.common.outputfiles.lss>True</avrgcc.common.outputfiles.lss>\r
+ <avrgcc.common.outputfiles.eep>True</avrgcc.common.outputfiles.eep>\r
+ <avrgcc.common.outputfiles.srec>True</avrgcc.common.outputfiles.srec>\r
+ <avrgcc.common.outputfiles.usersignatures>False</avrgcc.common.outputfiles.usersignatures>\r
+ <avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>True</avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>\r
+ <avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>True</avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>\r
+ <avrgcc.compiler.symbols.DefSymbols>\r
+ <ListValues>\r
+ <Value>DEBUG</Value>\r
+ </ListValues>\r
+ </avrgcc.compiler.symbols.DefSymbols>\r
+ <avrgcc.compiler.directories.IncludePaths>\r
+ <ListValues>\r
+ <Value>%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.68\include</Value>\r
+ </ListValues>\r
+ </avrgcc.compiler.directories.IncludePaths>\r
+ <avrgcc.compiler.optimization.level>Optimize (-O1)</avrgcc.compiler.optimization.level>\r
+ <avrgcc.compiler.optimization.PackStructureMembers>True</avrgcc.compiler.optimization.PackStructureMembers>\r
+ <avrgcc.compiler.optimization.AllocateBytesNeededForEnum>True</avrgcc.compiler.optimization.AllocateBytesNeededForEnum>\r
+ <avrgcc.compiler.optimization.DebugLevel>Default (-g2)</avrgcc.compiler.optimization.DebugLevel>\r
+ <avrgcc.compiler.warnings.AllWarnings>True</avrgcc.compiler.warnings.AllWarnings>\r
+ <avrgcc.linker.libraries.Libraries>\r
+ <ListValues>\r
+ <Value>libm</Value>\r
+ </ListValues>\r
+ </avrgcc.linker.libraries.Libraries>\r
+ <avrgcc.assembler.debugging.DebugLevel>Default (-Wa,-g)</avrgcc.assembler.debugging.DebugLevel>\r
+ </AvrGcc>\r
+ </ToolchainSettings>\r
+ </PropertyGroup>\r
+ <ItemGroup>\r
+ <Compile Include="..\common\I2C\BMP280.c">\r
+ <SubType>compile</SubType>\r
+ <Link>BMP280.c</Link>\r
+ </Compile>\r
+ <Compile Include="..\common\I2C\CDM7160.c">\r
+ <SubType>compile</SubType>\r
+ <Link>CDM7160.c</Link>\r
+ </Compile>\r
+ <Compile Include="..\common\I2C\TWI_Master.c">\r
+ <SubType>compile</SubType>\r
+ <Link>TWI_Master.c</Link>\r
+ </Compile>\r
+ <Compile Include="..\common\OWDS18B20_DS18B20.S">\r
+ <SubType>compile</SubType>\r
+ <Link>OWDS18B20_DS18B20.S</Link>\r
+ </Compile>\r
+ <Compile Include="DS18B20_DS18B20.c">\r
+ <SubType>compile</SubType>\r
+ </Compile>\r
+ </ItemGroup>\r
+ <Import Project="$(AVRSTUDIO_EXE_PATH)\\Vs\\Compiler.targets" />\r
+</Project>
\ No newline at end of file
--- /dev/null
+// Copyright (c) 2017, Tobias Mueller tm(at)tm3d.de\r
+// All rights reserved.\r
+//\r
+// Redistribution and use in source and binary forms, with or without\r
+// modification, are permitted provided that the following conditions are\r
+// met:\r
+//\r
+// * Redistributions of source code must retain the above copyright\r
+// notice, this list of conditions and the following disclaimer.\r
+// * Redistributions in binary form must reproduce the above copyright\r
+// notice, this list of conditions and the following disclaimer in the\r
+// documentation and/or other materials provided with the\r
+// distribution.\r
+// * All advertising materials mentioning features or use of this\r
+// software must display the following acknowledgement: This product\r
+// includes software developed by tm3d.de and its contributors.\r
+// * Neither the name of tm3d.de nor the names of its contributors may\r
+// be used to endorse or promote products derived from this software\r
+// without specific prior written permission.\r
+//\r
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\r
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\r
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\r
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\r
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\r
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\r
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\r
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\r
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+\r
+#define F_CPU 8000000UL\r
+#include <avr/io.h>\r
+#include <avr/interrupt.h>\r
+#include <util/delay.h>\r
+#include <avr/wdt.h>\r
+#include <avr/sleep.h>\r
+#include <avr/pgmspace.h>\r
+#include "../common/I2C/TWI_Master.h"\r
+#include "../common/I2C/CDM7160.h"\r
+#include "../common/I2C/BMP280.h"\r
+#include "../common/owSlave_tools.h"\r
+\r
+OWST_EXTERN_VARS\r
+\r
+\r
+uint8_t owid1[8]={0x28, 0xA3, 0xD9, 0x84, 0x00, 0x26, 0x05, 0x35};/**/\r
+uint8_t owid2[8]={0x28, 0xA4, 0xD9, 0x84, 0x00, 0x26, 0x05, 0xB0};/**/\r
+\r
+uint8_t config_info1[26]={10,21,0x00,0x00, 0x00,0x00, 0x00,0x00, 0x02,16,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};\r
+uint8_t config_info2[26]={0x02,0x03,0x00,0x00, 0x00,0x00, 0x00,0x00, 0x02,14,0x00,0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};\r
+\r
+ \r
+\r
+OWST_WDT_ISR\r
+\r
+typedef union {\r
+ volatile uint8_t bytes[8];\r
+ struct {\r
+ uint16_t temp; //0\r
+ uint8_t TH; //2\r
+ uint8_t TL; //3\r
+ uint8_t config; //4\r
+ uint8_t rrFF; //5\r
+ uint8_t rr00; //6\r
+ uint8_t rr10; //7\r
+ };\r
+} pack1_t;\r
+volatile pack1_t pack1,pack2;\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+OWST_TESTSW\r
+\r
+\r
+uint8_t userRegister[1];\r
+uint16_t CO2,BMP;\r
+\r
+int main(void){\r
+ OWST_INIT_USI_ON\r
+ \r
+ pack1.temp=0x0550;\r
+ pack1.config=0x7F;\r
+ pack1.TH=75;\r
+ pack1.TL=70;\r
+ pack1.rrFF=0xFF;\r
+ pack1.rr00=0;\r
+ pack1.rr10=0x10;\r
+ PORTA=0xFF;\r
+ PORTB=0xFF;\r
+ OWINIT();\r
+ OWST_EN_PULLUP\r
+\r
+ OWST_WDR_CONFIG8\r
+ \r
+ if (testSW()) {\r
+ config_info2[5]=12;\r
+ }else{\r
+ config_info2[5]=7;\r
+ }\r
+\r
+ MCUSR=0;\r
+ TWI_Master_Initialise();\r
+ bmp280Init();\r
+ _delay_ms(50);\r
+ bmp280Init();\r
+\r
+ CDM7160softReset();\r
+ _delay_ms(200);\r
+ \r
+ CDM7160setMode(0); //Power Down Mode\r
+ _delay_ms(200);\r
+ CDM7160setAvCount(0x3F);\r
+ CDM7160setFMode(1);\r
+ CO2=CDM7160getCO2();\r
+ CDM7160setMode(1);\r
+ _delay_ms(200);\r
+ gcontrol=1;\r
+ _delay_ms(10);\r
+ gcontrol=1;\r
+ sei();\r
+ while(1) {\r
+ \r
+ if (gcontrol) {\r
+ wdcounter=3;\r
+ \r
+ }\r
+\r
+ if (wdcounter>2) {\r
+ volatile int16_t l=(int16_t)CDM7160getCO2()-1280;\r
+\r
+ uint16_t w1=l;\r
+ uint32_t P;\r
+ int32_t t;\r
+ bmp280ConvertInt(&t,&P,1);\r
+ P=P-70000;\r
+ P=P/20;\r
+ uint16_t w2=P;\r
+ uint8_t t81=w1>>4;\r
+ uint8_t af1=0;\r
+ if (t81>pack1.TH) af1=1;\r
+ if (t81<=pack1.TL) af1=1;\r
+\r
+ cli();\r
+ pack1.temp=w1;\r
+ //pack.temp++;\r
+ alarmflag=af1;\r
+ sei();\r
+\r
+\r
+ \r
+ cli();\r
+ pack2.temp=w2;\r
+ sei();\r
+ //pack.temp++;\r
+ gcontrol=0;\r
+\r
+ \r
+\r
+ wdcounter=0;\r
+ }\r
+ \r
+ if (gcontrol) {\r
+ gcontrol=0;\r
+ EXTERN_SLEEP();\r
+ \r
+ }\r
+\r
+ OWST_MAIN_END \r
+ }\r
+\r
+\r
+}
\ No newline at end of file
--- /dev/null
+\r
+Microsoft Visual Studio Solution File, Format Version 12.00\r
+# Atmel Studio Solution File, Format Version 11.00\r
+VisualStudioVersion = 14.0.23107.0\r
+MinimumVisualStudioVersion = 10.0.40219.1\r
+Project("{54F91283-7BC4-4236-8FF9-10F437C3AD48}") = "DS18B20_CDM7160_DS2438_HDC1080", "DS18B20_CDM7160_DS2438_HDC1080.cproj", "{7A5672FE-8226-4158-B931-E1F36B9A8858}"\r
+EndProject\r
+Global\r
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution\r
+ Debug|AVR = Debug|AVR\r
+ Release|AVR = Release|AVR\r
+ EndGlobalSection\r
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution\r
+ {7A5672FE-8226-4158-B931-E1F36B9A8858}.Debug|AVR.ActiveCfg = Debug|AVR\r
+ {7A5672FE-8226-4158-B931-E1F36B9A8858}.Debug|AVR.Build.0 = Debug|AVR\r
+ {7A5672FE-8226-4158-B931-E1F36B9A8858}.Release|AVR.ActiveCfg = Release|AVR\r
+ {7A5672FE-8226-4158-B931-E1F36B9A8858}.Release|AVR.Build.0 = Release|AVR\r
+ EndGlobalSection\r
+ GlobalSection(SolutionProperties) = preSolution\r
+ HideSolutionNode = FALSE\r
+ EndGlobalSection\r
+EndGlobal\r
--- /dev/null
+// Copyright (c) 2017, Tobias Mueller tm(at)tm3d.de\r
+// All rights reserved.\r
+//\r
+// Redistribution and use in source and binary forms, with or without\r
+// modification, are permitted provided that the following conditions are\r
+// met:\r
+//\r
+// * Redistributions of source code must retain the above copyright\r
+// notice, this list of conditions and the following disclaimer.\r
+// * Redistributions in binary form must reproduce the above copyright\r
+// notice, this list of conditions and the following disclaimer in the\r
+// documentation and/or other materials provided with the\r
+// distribution.\r
+// * All advertising materials mentioning features or use of this\r
+// software must display the following acknowledgement: This product\r
+// includes software developed by tm3d.de and its contributors.\r
+// * Neither the name of tm3d.de nor the names of its contributors may\r
+// be used to endorse or promote products derived from this software\r
+// without specific prior written permission.\r
+//\r
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\r
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\r
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\r
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\r
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\r
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\r
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\r
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\r
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+\r
+\r
+#define F_CPU 8000000UL\r
+#include <avr/io.h>\r
+#include <avr/interrupt.h>\r
+#include <util/delay.h>\r
+#include <avr/wdt.h>\r
+#include <avr/sleep.h>\r
+#include <avr/pgmspace.h>\r
+#include "../common/I2C/USI_TWI_Master.h"\r
+#include "../common/I2C/HDC1080.h"\r
+#include "../common/calibr.h"\r
+#include "../common/I2C/CDM7160.h"\r
+\r
+extern void OWINIT();\r
+extern void EXTERN_SLEEP();\r
+\r
+\r
+uint8_t owid1[8]={0x28, 0xA3, 0xD9, 0x84, 0x00, 0x17, 0x05, 0xDC};/**/\r
+uint8_t owid2[8]={0x26, 0xA3, 0xD9, 0x84, 0x00, 0x17, 0x05, 0xA3};/**/\r
+uint8_t config_info1[26]={10,13, 0x00,0x00, 0x00,0x00, 0x00,0x00, 0x02,16,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};\r
+uint8_t config_info2[26]={0x01,0x06, 0x05,0x08, 0x04,0x07, 0x00,0x00, 0x02,11,0x00,11,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};\r
+ \r
+\r
+extern uint8_t mode;\r
+extern uint8_t gcontrol;\r
+extern uint8_t reset_indicator;\r
+extern uint8_t alarmflag;\r
+\r
+volatile uint8_t wdcounter=5;\r
+\r
+typedef union {\r
+ volatile uint8_t bytes[8];\r
+ struct {\r
+ uint16_t temp; //0\r
+ uint8_t TH; //2\r
+ uint8_t TL; //3\r
+ uint8_t config; //4\r
+ uint8_t rrFF; //5\r
+ uint8_t rr00; //6\r
+ uint8_t rr10; //7\r
+ };\r
+} pack1_t;\r
+volatile pack1_t pack1;\r
+\r
+typedef union {\r
+\r
+ volatile uint8_t bytes[64];\r
+ struct {\r
+ uint8_t status; //1\r
+ int16_t temp; //2\r
+ uint16_t voltage; //4\r
+ uint16_t current; //6\r
+ uint8_t threshold; //8\r
+ \r
+ uint8_t page1[8]; //9\r
+ uint8_t page2[8]; //17\r
+ uint8_t page3[8]; //25\r
+ uint8_t page4[8]; //33\r
+ uint8_t page5[8]; //41\r
+ uint8_t page6[8]; //49\r
+ uint8_t page7[8]; //57\r
+ //uint8_t crc; //65\r
+ };\r
+} pack2_t;\r
+volatile pack2_t pack2;\r
+\r
+\r
+\r
+volatile int16_t am2302_temp;\r
+volatile uint16_t am2302_hum;\r
+\r
+uint8_t userRegister[1];\r
+int16_t sRH,sT;\r
+double temperatureC,humidityRH;\r
+volatile double l;\r
+\r
+#if defined(__AVR_ATtiny24__)||defined(__AVR_ATtiny44__) || defined(__AVR_ATtiny84__) || defined(__AVR_ATtiny24A__)||defined(__AVR_ATtiny44A__) || defined(__AVR_ATtiny84A__)\r
+ISR(WATCHDOG_vect) {\r
+#else\r
+ISR(WDT_vect) {\r
+#endif \r
+ wdcounter++;\r
+ if (reset_indicator==1) reset_indicator++;\r
+ else if (reset_indicator==2) mode=0;\r
+\r
+\r
+}\r
+\r
+int testSW(void) {\r
+ uint8_t r;\r
+ DDRB&=~(1<<PORTB0); //Eingang\r
+ __asm__ __volatile__ ("nop"); \r
+ PORTB|=(1<<PORTB0); //Pullup\r
+ __asm__ __volatile__ ("nop"); \r
+ __asm__ __volatile__ ("nop"); \r
+ __asm__ __volatile__ ("nop"); \r
+ __asm__ __volatile__ ("nop"); \r
+ __asm__ __volatile__ ("nop"); \r
+ r=PINB&(1<<PORTB0);\r
+ __asm__ __volatile__ ("nop"); \r
+ PORTB&=~(1<<PORTB0); \r
+ __asm__ __volatile__ ("nop"); \r
+ DDRB|=(1<<PORTB0); //Eingang\r
+ return (r==0);\r
+ \r
+ \r
+}\r
+\r
+int main(void){\r
+ PRR|=(1<<PRADC); // adc for save Power\r
+ PORTA=0xFF;\r
+ PORTB=0xFF-(1<<PORTB0); //Schalter kann gegen Masse sein und zieht dann immer Strom\r
+ DDRB|=(1<<PORTB0); //Als Ausgang und 0\r
+ \r
+ \r
+ OWINIT();\r
+\r
+ DDRB|=(1<<PINB1);\r
+ PORTB&=~(1<<PINB1);\r
+ PORTA&=~(1<<PINA0);\r
+\r
+ ACSR|=(1<<ACD); //Disable Comparator\r
+ ADCSRB|=(1<<ACME); //Disable Analog multiplexer\r
+ MCUCR &=~(1<<PUD); //All Pins Pullup...\r
+ MCUCR |=(1<<BODS);\r
+\r
+ \r
+ WDTCSR |= ((1<<WDCE) ); // Enable the WD Change Bit//| (1<<WDE)\r
+ WDTCSR |= (1<<WDIE) | // Enable WDT Interrupt\r
+ (1<<WDP3) | (1<<WDP0); // Set Timeout to ~8 seconds\r
+ if (testSW()) {\r
+ config_info2[5]=8;\r
+ }else{\r
+ config_info2[5]=7;\r
+ }\r
+ \r
+ uint8_t i;\r
+ for(i=0;i<64;i++) pack2.bytes[i]=0;\r
+ MCUSR=0;\r
+ USI_TWI_Master_Initialise();\r
+ HDC1080_Init();\r
+ HDC1080_Readf(&temperatureC,&humidityRH);\r
+ \r
+ CDM7160setMode(0); //Power Down Mode\r
+ CDM7160setAvCount(0x3F);\r
+ CDM7160setFMode(1);\r
+ pack1.temp=CDM7160getCO2();\r
+ CDM7160setMode(1);\r
+ gcontrol=1;\r
+ \r
+ sei();\r
+ \r
+ while(1) {\r
+ if (gcontrol) {\r
+ wdcounter=3;\r
+ //gcontrol=0;\r
+ }\r
+ if (wdcounter>2) {\r
+ //PORTB|=(1<<PINB1); //Dauer 440ms\r
+ HDC1080_Readf(&temperatureC,&humidityRH);\r
+\r
+ // humidityRH = calibr_hum(temperatureC,-0.2,humidityRH)*10.0;\r
+ // temperatureC-=0.2;\r
+ humidityRH*=10.0;\r
+ temperatureC*=10.0;\r
+ /* if (testSW()) {*/\r
+ am2302_hum= humidityRH;\r
+ am2302_temp=temperatureC*25.6;\r
+ //am2302_temp=am2302_temp-45;\r
+ config_info2[5]=12; \r
+ \r
+/* }else{*/\r
+ \r
+ /* double hhum=(1.0546-0.000216*temperatureC)*(humidityRH);\r
+ //am2302_hum=0.318*hhum +76.0;\r
+ am2302_hum=0.31*hhum +80;\r
+ am2302_temp=temperatureC*25.6;\r
+ //am2302_temp=am2302_temp-45;\r
+ config_info2[5]=7;*/\r
+ //}\r
+ //PORTB&=~(1<<PINB1);\r
+ wdcounter=0;\r
+ }\r
+\r
+ if ((gcontrol&1)==1) {\r
+ \r
+ volatile uint16_t l=CDM7160getCO2(); \r
+ uint16_t w=l;\r
+ uint8_t t8=w>>4;\r
+ uint8_t af=0;\r
+ if (t8>pack1.TH) af=1;\r
+ if (t8<=pack1.TL) af=1;\r
+ cli();\r
+ pack1.temp=w;\r
+ //pack.temp++;\r
+ alarmflag=af;\r
+ sei();\r
+ //CDM7160setMode(0);\r
+ //EXTERN_SLEEP();\r
+ }\r
+ if (gcontrol) {\r
+ gcontrol=0;\r
+ \r
+ }\r
+\r
+ if (((TIMSK0 & (1<<TOIE0))==0)&& (mode==0)) {\r
+ MCUCR|=(1<<SE)|(1<<SM1);\r
+ MCUCR&=~(1<<ISC01);\r
+ } else {\r
+ MCUCR|=(1<<SE);\r
+ MCUCR&=~(1<<SM1);\r
+ }\r
+ asm("SLEEP");\r
+ }\r
+\r
+\r
+}
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>\r
+<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
+ <PropertyGroup>\r
+ <SchemaVersion>2.0</SchemaVersion>\r
+ <ProjectVersion>7.0</ProjectVersion>\r
+ <ToolchainName>com.Atmel.AVRGCC8.C</ToolchainName>\r
+ <ProjectGuid>{7a5672fe-8226-4158-b931-e1f36b9a8858}</ProjectGuid>\r
+ <avrdevice>ATtiny84A</avrdevice>\r
+ <avrdeviceseries>none</avrdeviceseries>\r
+ <OutputType>Executable</OutputType>\r
+ <Language>C</Language>\r
+ <OutputFileName>$(MSBuildProjectName)</OutputFileName>\r
+ <OutputFileExtension>.elf</OutputFileExtension>\r
+ <OutputDirectory>$(MSBuildProjectDirectory)\$(Configuration)</OutputDirectory>\r
+ <AssemblyName>DS18B20_MAX44009</AssemblyName>\r
+ <Name>DS18B20_CDM7160_DS2438_HDC1080</Name>\r
+ <RootNamespace>DS18B20_MAX44009</RootNamespace>\r
+ <ToolchainFlavour>Native</ToolchainFlavour>\r
+ <KeepTimersRunning>true</KeepTimersRunning>\r
+ <OverrideVtor>false</OverrideVtor>\r
+ <CacheFlash>true</CacheFlash>\r
+ <ProgFlashFromRam>true</ProgFlashFromRam>\r
+ <RamSnippetAddress>0x20000000</RamSnippetAddress>\r
+ <UncachedRange />\r
+ <preserveEEPROM>true</preserveEEPROM>\r
+ <OverrideVtorValue>exception_table</OverrideVtorValue>\r
+ <BootSegment>2</BootSegment>\r
+ <eraseonlaunchrule>1</eraseonlaunchrule>\r
+ <AsfFrameworkConfig>\r
+ <framework-data>\r
+ <options />\r
+ <configurations />\r
+ <files />\r
+ <documentation help="" />\r
+ <offline-documentation help="" />\r
+ <dependencies>\r
+ <content-extension eid="atmel.asf" uuidref="Atmel.ASF" version="3.28.1" />\r
+ </dependencies>\r
+ </framework-data>\r
+ </AsfFrameworkConfig>\r
+ <avrtool>com.atmel.avrdbg.tool.atmelice</avrtool>\r
+ <com_atmel_avrdbg_tool_atmelice>\r
+ <ToolOptions>\r
+ <InterfaceProperties>\r
+ </InterfaceProperties>\r
+ <InterfaceName>debugWIRE</InterfaceName>\r
+ </ToolOptions>\r
+ <ToolType>com.atmel.avrdbg.tool.atmelice</ToolType>\r
+ <ToolNumber>J41800000789</ToolNumber>\r
+ <ToolName>Atmel-ICE</ToolName>\r
+ </com_atmel_avrdbg_tool_atmelice>\r
+ <avrtoolinterface>debugWIRE</avrtoolinterface>\r
+ <com_atmel_avrdbg_tool_simulator>\r
+ <ToolOptions>\r
+ <InterfaceProperties>\r
+ </InterfaceProperties>\r
+ <InterfaceName>\r
+ </InterfaceName>\r
+ </ToolOptions>\r
+ <ToolType>com.atmel.avrdbg.tool.simulator</ToolType>\r
+ <ToolNumber>\r
+ </ToolNumber>\r
+ <ToolName>Simulator</ToolName>\r
+ </com_atmel_avrdbg_tool_simulator>\r
+ <ExternalProgrammingToolCommand />\r
+ <avrtoolserialnumber>J41800000789</avrtoolserialnumber>\r
+ <avrdeviceexpectedsignature>0x1E930C</avrdeviceexpectedsignature>\r
+ </PropertyGroup>\r
+ <PropertyGroup Condition=" '$(Configuration)' == 'Release' ">\r
+ <ToolchainSettings>\r
+ <AvrGcc>\r
+ <avrgcc.common.Device>-mmcu=attiny84a -B "%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.79\gcc\dev\attiny84a"</avrgcc.common.Device>\r
+ <avrgcc.common.outputfiles.hex>True</avrgcc.common.outputfiles.hex>\r
+ <avrgcc.common.outputfiles.lss>True</avrgcc.common.outputfiles.lss>\r
+ <avrgcc.common.outputfiles.eep>True</avrgcc.common.outputfiles.eep>\r
+ <avrgcc.common.outputfiles.srec>True</avrgcc.common.outputfiles.srec>\r
+ <avrgcc.common.outputfiles.usersignatures>False</avrgcc.common.outputfiles.usersignatures>\r
+ <avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>True</avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>\r
+ <avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>True</avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>\r
+ <avrgcc.compiler.symbols.DefSymbols>\r
+ <ListValues>\r
+ <Value>DEBUG</Value>\r
+ </ListValues>\r
+ </avrgcc.compiler.symbols.DefSymbols>\r
+ <avrgcc.compiler.directories.IncludePaths>\r
+ <ListValues>\r
+ <Value>%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.79\include</Value>\r
+ </ListValues>\r
+ </avrgcc.compiler.directories.IncludePaths>\r
+ <avrgcc.compiler.optimization.level>Optimize (-O1)</avrgcc.compiler.optimization.level>\r
+ <avrgcc.compiler.optimization.PackStructureMembers>True</avrgcc.compiler.optimization.PackStructureMembers>\r
+ <avrgcc.compiler.optimization.AllocateBytesNeededForEnum>True</avrgcc.compiler.optimization.AllocateBytesNeededForEnum>\r
+ <avrgcc.compiler.optimization.DebugLevel>Default (-g2)</avrgcc.compiler.optimization.DebugLevel>\r
+ <avrgcc.compiler.warnings.AllWarnings>True</avrgcc.compiler.warnings.AllWarnings>\r
+ <avrgcc.linker.libraries.Libraries>\r
+ <ListValues>\r
+ <Value>libm</Value>\r
+ </ListValues>\r
+ </avrgcc.linker.libraries.Libraries>\r
+ <avrgcc.assembler.general.IncludePaths>\r
+ <ListValues>\r
+ <Value>%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.79\include</Value>\r
+ </ListValues>\r
+ </avrgcc.assembler.general.IncludePaths>\r
+ <avrgcc.assembler.debugging.DebugLevel>Default (-Wa,-g)</avrgcc.assembler.debugging.DebugLevel>\r
+ </AvrGcc>\r
+ </ToolchainSettings>\r
+ </PropertyGroup>\r
+ <PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">\r
+ <ToolchainSettings>\r
+ <AvrGcc>\r
+ <avrgcc.common.Device>-mmcu=attiny84a -B "%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.79\gcc\dev\attiny84a"</avrgcc.common.Device>\r
+ <avrgcc.common.outputfiles.hex>True</avrgcc.common.outputfiles.hex>\r
+ <avrgcc.common.outputfiles.lss>True</avrgcc.common.outputfiles.lss>\r
+ <avrgcc.common.outputfiles.eep>True</avrgcc.common.outputfiles.eep>\r
+ <avrgcc.common.outputfiles.srec>True</avrgcc.common.outputfiles.srec>\r
+ <avrgcc.common.outputfiles.usersignatures>False</avrgcc.common.outputfiles.usersignatures>\r
+ <avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>True</avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>\r
+ <avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>True</avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>\r
+ <avrgcc.compiler.symbols.DefSymbols>\r
+ <ListValues>\r
+ <Value>DEBUG</Value>\r
+ </ListValues>\r
+ </avrgcc.compiler.symbols.DefSymbols>\r
+ <avrgcc.compiler.directories.IncludePaths>\r
+ <ListValues>\r
+ <Value>%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.79\include</Value>\r
+ </ListValues>\r
+ </avrgcc.compiler.directories.IncludePaths>\r
+ <avrgcc.compiler.optimization.level>Optimize (-O1)</avrgcc.compiler.optimization.level>\r
+ <avrgcc.compiler.optimization.PackStructureMembers>True</avrgcc.compiler.optimization.PackStructureMembers>\r
+ <avrgcc.compiler.optimization.AllocateBytesNeededForEnum>True</avrgcc.compiler.optimization.AllocateBytesNeededForEnum>\r
+ <avrgcc.compiler.optimization.DebugLevel>Default (-g2)</avrgcc.compiler.optimization.DebugLevel>\r
+ <avrgcc.compiler.warnings.AllWarnings>True</avrgcc.compiler.warnings.AllWarnings>\r
+ <avrgcc.linker.libraries.Libraries>\r
+ <ListValues>\r
+ <Value>libm</Value>\r
+ </ListValues>\r
+ </avrgcc.linker.libraries.Libraries>\r
+ <avrgcc.assembler.general.IncludePaths>\r
+ <ListValues>\r
+ <Value>%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.79\include</Value>\r
+ </ListValues>\r
+ </avrgcc.assembler.general.IncludePaths>\r
+ <avrgcc.assembler.debugging.DebugLevel>Default (-Wa,-g)</avrgcc.assembler.debugging.DebugLevel>\r
+ </AvrGcc>\r
+ </ToolchainSettings>\r
+ </PropertyGroup>\r
+ <ItemGroup>\r
+ <Compile Include="..\common\calibr.c">\r
+ <SubType>compile</SubType>\r
+ <Link>calibr.c</Link>\r
+ </Compile>\r
+ <Compile Include="..\common\I2C\CDM7160.c">\r
+ <SubType>compile</SubType>\r
+ <Link>CDM7160.c</Link>\r
+ </Compile>\r
+ <Compile Include="..\common\I2C\HDC1080.c">\r
+ <SubType>compile</SubType>\r
+ <Link>HDC1080.c</Link>\r
+ </Compile>\r
+ <Compile Include="..\common\I2C\USI_TWI_Master.c">\r
+ <SubType>compile</SubType>\r
+ <Link>USI_TWI_Master.c</Link>\r
+ </Compile>\r
+ <Compile Include="..\common\OWDS18B20_DS2438.S">\r
+ <SubType>compile</SubType>\r
+ <Link>OWDS18B20_DS2438.S</Link>\r
+ </Compile>\r
+ <Compile Include="DS18B20_CDM7160_DS2438_HDC1080.c">\r
+ <SubType>compile</SubType>\r
+ </Compile>\r
+ </ItemGroup>\r
+ <Import Project="$(AVRSTUDIO_EXE_PATH)\\Vs\\Compiler.targets" />\r
+</Project>
\ No newline at end of file
--- /dev/null
+\r
+Microsoft Visual Studio Solution File, Format Version 12.00\r
+# Atmel Studio Solution File, Format Version 11.00\r
+VisualStudioVersion = 14.0.25420.1\r
+MinimumVisualStudioVersion = 10.0.40219.1\r
+Project("{54F91283-7BC4-4236-8FF9-10F437C3AD48}") = "DS18B20_DS2408", "DS18B20_DS2408.cproj", "{DCE6C7E3-EE26-4D79-826B-08594B9AD897}"\r
+EndProject\r
+Global\r
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution\r
+ Debug|AVR = Debug|AVR\r
+ Release|AVR = Release|AVR\r
+ EndGlobalSection\r
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution\r
+ {DCE6C7E3-EE26-4D79-826B-08594B9AD897}.Debug|AVR.ActiveCfg = Debug|AVR\r
+ {DCE6C7E3-EE26-4D79-826B-08594B9AD897}.Debug|AVR.Build.0 = Debug|AVR\r
+ {DCE6C7E3-EE26-4D79-826B-08594B9AD897}.Release|AVR.ActiveCfg = Release|AVR\r
+ {DCE6C7E3-EE26-4D79-826B-08594B9AD897}.Release|AVR.Build.0 = Release|AVR\r
+ EndGlobalSection\r
+ GlobalSection(SolutionProperties) = preSolution\r
+ HideSolutionNode = FALSE\r
+ EndGlobalSection\r
+EndGlobal\r
--- /dev/null
+\r
+// Copyright (c) 2018, Tobias Mueller tm(at)tm3d.de\r
+// All rights reserved.\r
+//\r
+// Redistribution and use in source and binary forms, with or without\r
+// modification, are permitted provided that the following conditions are\r
+// met:\r
+//\r
+// * Redistributions of source code must retain the above copyright\r
+// notice, this list of conditions and the following disclaimer.\r
+// * Redistributions in binary form must reproduce the above copyright\r
+// notice, this list of conditions and the following disclaimer in the\r
+// documentation and/or other materials provided with the\r
+// distribution.\r
+// * All advertising materials mentioning features or use of this\r
+// software must display the following acknowledgement: This product\r
+// includes software developed by tm3d.de and its contributors.\r
+// * Neither the name of tm3d.de nor the names of its contributors may\r
+// be used to endorse or promote products derived from this software\r
+// without specific prior written permission.\r
+//\r
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\r
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\r
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\r
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\r
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\r
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\r
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\r
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\r
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+\r
+#define F_CPU 8000000UL\r
+#include <avr/io.h>\r
+#include <avr/interrupt.h>\r
+#include <util/delay.h>\r
+#include <avr/wdt.h>\r
+#include <avr/sleep.h>\r
+#include <avr/pgmspace.h>\r
+#include "../common/I2C/TWI_Master.h"\r
+#include "../common/owSlave_tools.h"\r
+#include "../common/I2C/SHT3x.h"\r
+#include "../common/calibr.h"\r
+\r
+\r
+#include <math.h>\r
+\r
+extern void OWINIT();\r
+extern void EXTERN_SLEEP();\r
+extern uint8_t stat_to_sample;\r
+\r
+uint8_t owid1[8]={0x28, 0xA3, 0xD9, 0x84, 0x00, 0x16, 0x05, 0x18};/**/\r
+uint8_t owid2[8]={0x29, 0xA2, 0xD9, 0x84, 0x00, 0x16, 0x01, 0x73};/**/\r
+uint8_t config_info1[26]={0x01,0x01, 0x00,0x00, 0x00,0x00, 0x00,0x00, 0x02,29,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};\r
+uint8_t config_info2[26]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0,0,0,0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};\r
+\r
+OWST_EXTERN_VARS\r
+\r
+OWST_WDT_ISR\r
+\r
+\r
+\r
+typedef union {\r
+ volatile uint8_t bytes[8];\r
+ struct {\r
+ int16_t temp; //0\r
+ uint8_t TH; //2\r
+ uint8_t TL; //3\r
+ uint8_t config; //4\r
+ uint8_t rrFF; //5\r
+ uint8_t rr00; //6\r
+ uint8_t rr10; //7\r
+ };\r
+} pack1_t;\r
+volatile pack1_t pack1;\r
+\r
+typedef union {\r
+ volatile uint8_t bytes[0x20];\r
+ struct {\r
+ uint8_t PIO_Logic_State; // 0088h\r
+ uint8_t PIO_Output_Latch_State;\r
+ uint8_t PIO_Activity_Latch_State;\r
+ uint8_t Conditional_Search_Channel_Selection_Mask;\r
+ uint8_t Conditional_Search_Channel_Polarity_Selection;\r
+ uint8_t Status; //008D\r
+ uint8_t FF1;\r
+ uint8_t FF2;\r
+ \r
+ };\r
+} pack2_t;\r
+volatile pack2_t pack2;\r
+\r
+uint8_t values[10];\r
+uint8_t ap=1;\r
+\r
+uint8_t crc8_f() {\r
+ uint8_t lscrc=0x0;\r
+ for(uint8_t i=0;i<5;i++) {\r
+ uint8_t v=values[i];\r
+ //if (v==0) v=0xFF;\r
+ uint8_t bit=1;\r
+ uint8_t lb;\r
+ for(uint8_t j=0;j<8;j++) {\r
+ if ((v&bit)==bit) lb=1; else lb=0;\r
+ if ((lscrc&1)!=lb) lscrc=(lscrc>>1)^0x8c; else lscrc=(lscrc>>1);\r
+ bit=bit*2;\r
+ \r
+ \r
+ }\r
+ }\r
+ return lscrc;\r
+}\r
+\r
+\r
+//Umstellung\r
+\r
+//rh=(T-25)*(0,01+0,00008*x)-2,0468+0,0367*x-0,0000015955*x*x\r
+//d1 for 3V\r
+#define d1 -39.7 \r
+#define d2 0.01\r
+inline uint16_t calcSHT75_T(double real_t) {\r
+ return (real_t-d1)/d2;\r
+}\r
+\r
+inline uint16_t calcSHT75RH_lin(double real_RHlin) {\r
+ return 11501.1-0.280297*sqrt(1667284153.0-7977500.0*real_RHlin);\r
+}\r
+\r
+inline double calcSHT75H_tcorr(double real_t,double real_RHtrue) {\r
+ return real_RHtrue-(real_t-25)*(0.01+0.00008*calcSHT75RH_lin(real_RHtrue));\r
+\r
+}\r
+\r
+\r
+double T=20.0;\r
+double RH=60;\r
+\r
+int main(void){\r
+ OWST_INIT_USI_ON;\r
+ pack2.FF1=0xFF;\r
+ pack2.FF2=0xFF;\r
+ //0x0E 0x19 0x48 0x00\r
+ if (RH<8) RH=8;\r
+ uint16_t lt=calcSHT75_T(T);\r
+ double lfc=calcSHT75H_tcorr(T,RH);\r
+ uint16_t lf=calcSHT75RH_lin(lfc);\r
+ values[0]=0x00;\r
+ values[1]=lt&0xFF; if (values[1]==0) values[1]=1;\r
+ values[2]=lt>>8; if (values[2]==0) values[2]=1;\r
+ values[3]=lf&0xFF; if (values[3]==0) values[3]=1;\r
+ values[4]=lf>>8; if (values[4]==0) values[4]=1;\r
+ values[5]=0x5D; \r
+ values[6]=0x00;\r
+ values[7]=0x00;\r
+ values[5]=crc8_f(); \r
+ \r
+ OWINIT();\r
+\r
+ TWI_Master_Initialise();\r
+ initSHT3x(0);\r
+ _delay_ms(100);\r
+\r
+\r
+ getSHT3xHumTemp(0,&T,&RH);\r
+ OWST_WDR_CONFIG8;\r
+ sei();\r
+ stat_to_sample=0x55;\r
+ while (1) {\r
+ //stat_to_sample=0;\r
+ if (reset_indicator) {\r
+ // ap=0;\r
+ // stat_to_sample=0;\r
+ // reset_indicator=0;\r
+ }\r
+ if (wdcounter>3) {\r
+ \r
+ wdcounter=0;\r
+ RH=RH+0.2;\r
+ getSHT3xHumTemp(0,&T,&RH);\r
+ //pack1.temp=T*16.0;\r
+ lt=calcSHT75_T(T);\r
+ lfc=calcSHT75H_tcorr(T,RH);\r
+ lf=calcSHT75RH_lin(lfc);\r
+ values[0]=0x00;\r
+ values[1]=lt&0xFF; if (values[1]==0) values[1]=1;\r
+ values[2]=lt>>8; if (values[2]==0) values[2]=1;\r
+ values[3]=lf&0xFF; if (values[3]==0) values[3]=1;\r
+ values[4]=lf>>8; if (values[4]==0) values[4]=1;\r
+ values[5]=crc8_f();\r
+ if (values[5]==0) values[3]=values[3]+1; //CRC darf nicht 0 sein ... warum auch immer\r
+ values[5]=crc8_f();\r
+ }\r
+ pack2.Status|=0x80;\r
+ if (gcontrol&1) {\r
+ uint8_t bb=1;\r
+ for(uint8_t i=0;i<8;i++) {\r
+ if ((pack2.PIO_Logic_State&bb)!=(pack2.PIO_Output_Latch_State&bb)) pack2.PIO_Activity_Latch_State|=bb;\r
+ bb=bb*2;\r
+ }\r
+ pack2.PIO_Logic_State=pack2.PIO_Output_Latch_State;\r
+ gcontrol&=~0x01;\r
+ }\r
+ if (gcontrol&2) {\r
+ pack2.PIO_Activity_Latch_State=0;\r
+ gcontrol&=~0x02;\r
+ }\r
+ if (gcontrol&4) {\r
+ stat_to_sample=values[ap];\r
+ ap++; \r
+ if (ap>5) {\r
+ ap=0;\r
+ }\r
+ gcontrol&=~0x04;\r
+ } \r
+ if (gcontrol&8) {\r
+ ap=1;\r
+ stat_to_sample=values[ap];\r
+ ap++;\r
+ //if (ap>5) ap=1;\r
+ gcontrol&=~0x08;\r
+ } \r
+ if ((gcontrol&16)==16) {\r
+ \r
+ \r
+ uint16_t w=T*16.0;\r
+ uint8_t t8=w>>4;\r
+ uint8_t af=0;\r
+ if (t8>pack1.TH) af=1;\r
+ if (t8<=pack1.TL) af=1;\r
+ cli();\r
+ pack1.temp=w;\r
+ //pack.temp++;\r
+ alarmflag=af;\r
+ sei();\r
+ gcontrol=0;\r
+ EXTERN_SLEEP();\r
+ }\r
+\r
+ OWST_MAIN_END\r
+ }\r
+\r
+\r
+\r
+}\r
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>\r
+<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="14.0">\r
+ <PropertyGroup>\r
+ <SchemaVersion>2.0</SchemaVersion>\r
+ <ProjectVersion>7.0</ProjectVersion>\r
+ <ToolchainName>com.Atmel.AVRGCC8.C</ToolchainName>\r
+ <ProjectGuid>dce6c7e3-ee26-4d79-826b-08594b9ad897</ProjectGuid>\r
+ <avrdevice>ATtiny84A</avrdevice>\r
+ <avrdeviceseries>none</avrdeviceseries>\r
+ <OutputType>Executable</OutputType>\r
+ <Language>C</Language>\r
+ <OutputFileName>$(MSBuildProjectName)</OutputFileName>\r
+ <OutputFileExtension>.elf</OutputFileExtension>\r
+ <OutputDirectory>$(MSBuildProjectDirectory)\$(Configuration)</OutputDirectory>\r
+ <AssemblyName>DS2450</AssemblyName>\r
+ <Name>DS18B20_DS2408</Name>\r
+ <RootNamespace>DS2450</RootNamespace>\r
+ <ToolchainFlavour>Native</ToolchainFlavour>\r
+ <KeepTimersRunning>true</KeepTimersRunning>\r
+ <OverrideVtor>false</OverrideVtor>\r
+ <CacheFlash>true</CacheFlash>\r
+ <ProgFlashFromRam>true</ProgFlashFromRam>\r
+ <RamSnippetAddress>0x20000000</RamSnippetAddress>\r
+ <UncachedRange />\r
+ <preserveEEPROM>true</preserveEEPROM>\r
+ <OverrideVtorValue>exception_table</OverrideVtorValue>\r
+ <BootSegment>2</BootSegment>\r
+ <eraseonlaunchrule>1</eraseonlaunchrule>\r
+ <ExternalProgrammingToolCommand />\r
+ <AsfFrameworkConfig>\r
+ <framework-data>\r
+ <options />\r
+ <configurations />\r
+ <files />\r
+ <documentation help="" />\r
+ <offline-documentation help="" />\r
+ <dependencies>\r
+ <content-extension eid="atmel.asf" uuidref="Atmel.ASF" version="3.28.1" />\r
+ </dependencies>\r
+ </framework-data>\r
+ </AsfFrameworkConfig>\r
+ <avrtool>com.atmel.avrdbg.tool.atmelice</avrtool>\r
+ <avrtoolinterface>debugWIRE</avrtoolinterface>\r
+ <avrtoolserialnumber>J41800000789</avrtoolserialnumber>\r
+ <avrdeviceexpectedsignature>0x1E930C</avrdeviceexpectedsignature>\r
+ <com_atmel_avrdbg_tool_atmelice>\r
+ <ToolOptions>\r
+ <InterfaceProperties>\r
+ <IspClock>125000</IspClock>\r
+ </InterfaceProperties>\r
+ <InterfaceName>debugWIRE</InterfaceName>\r
+ </ToolOptions>\r
+ <ToolType>com.atmel.avrdbg.tool.atmelice</ToolType>\r
+ <ToolNumber>J41800000789</ToolNumber>\r
+ <ToolName>Atmel-ICE</ToolName>\r
+ </com_atmel_avrdbg_tool_atmelice>\r
+ <avrtoolinterfaceclock>125000</avrtoolinterfaceclock>\r
+ <ResetRule>0</ResetRule>\r
+ <EraseKey />\r
+ <com_atmel_avrdbg_tool_simulator>\r
+ <ToolOptions xmlns="">\r
+ <InterfaceProperties>\r
+ </InterfaceProperties>\r
+ <InterfaceName>ISP</InterfaceName>\r
+ </ToolOptions>\r
+ <ToolType xmlns="">com.atmel.avrdbg.tool.simulator</ToolType>\r
+ <ToolNumber xmlns="">\r
+ </ToolNumber>\r
+ <ToolName xmlns="">Simulator</ToolName>\r
+ </com_atmel_avrdbg_tool_simulator>\r
+ <custom>\r
+ <ToolOptions xmlns="">\r
+ <InterfaceProperties>\r
+ </InterfaceProperties>\r
+ <InterfaceName>ISP</InterfaceName>\r
+ </ToolOptions>\r
+ <ToolType xmlns="">custom</ToolType>\r
+ <ToolNumber xmlns="">\r
+ </ToolNumber>\r
+ <ToolName xmlns="">Custom Programming Tool</ToolName>\r
+ </custom>\r
+ </PropertyGroup>\r
+ <PropertyGroup Condition=" '$(Configuration)' == 'Release' ">\r
+ <ToolchainSettings>\r
+ <AvrGcc>\r
+ <avrgcc.common.Device>-mmcu=attiny84a -B "%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.79\gcc\dev\attiny84a"</avrgcc.common.Device>\r
+ <avrgcc.common.outputfiles.hex>True</avrgcc.common.outputfiles.hex>\r
+ <avrgcc.common.outputfiles.lss>True</avrgcc.common.outputfiles.lss>\r
+ <avrgcc.common.outputfiles.eep>True</avrgcc.common.outputfiles.eep>\r
+ <avrgcc.common.outputfiles.srec>True</avrgcc.common.outputfiles.srec>\r
+ <avrgcc.common.outputfiles.usersignatures>False</avrgcc.common.outputfiles.usersignatures>\r
+ <avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>True</avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>\r
+ <avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>True</avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>\r
+ <avrgcc.compiler.symbols.DefSymbols>\r
+ <ListValues>\r
+ <Value>NDEBUG</Value>\r
+ </ListValues>\r
+ </avrgcc.compiler.symbols.DefSymbols>\r
+ <avrgcc.compiler.directories.IncludePaths>\r
+ <ListValues>\r
+ <Value>%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.79\include</Value>\r
+ </ListValues>\r
+ </avrgcc.compiler.directories.IncludePaths>\r
+ <avrgcc.compiler.optimization.level>Optimize for size (-Os)</avrgcc.compiler.optimization.level>\r
+ <avrgcc.compiler.optimization.PackStructureMembers>True</avrgcc.compiler.optimization.PackStructureMembers>\r
+ <avrgcc.compiler.optimization.AllocateBytesNeededForEnum>True</avrgcc.compiler.optimization.AllocateBytesNeededForEnum>\r
+ <avrgcc.compiler.warnings.AllWarnings>True</avrgcc.compiler.warnings.AllWarnings>\r
+ <avrgcc.linker.libraries.Libraries>\r
+ <ListValues>\r
+ <Value>libm</Value>\r
+ </ListValues>\r
+ </avrgcc.linker.libraries.Libraries>\r
+ <avrgcc.assembler.general.IncludePaths>\r
+ <ListValues>\r
+ <Value>%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.79\include</Value>\r
+ </ListValues>\r
+ </avrgcc.assembler.general.IncludePaths>\r
+ </AvrGcc>\r
+ </ToolchainSettings>\r
+ </PropertyGroup>\r
+ <PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">\r
+ <ToolchainSettings>\r
+ <AvrGcc>\r
+ <avrgcc.common.Device>-mmcu=attiny84a -B "%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.79\gcc\dev\attiny84a"</avrgcc.common.Device>\r
+ <avrgcc.common.outputfiles.hex>True</avrgcc.common.outputfiles.hex>\r
+ <avrgcc.common.outputfiles.lss>True</avrgcc.common.outputfiles.lss>\r
+ <avrgcc.common.outputfiles.eep>True</avrgcc.common.outputfiles.eep>\r
+ <avrgcc.common.outputfiles.srec>True</avrgcc.common.outputfiles.srec>\r
+ <avrgcc.common.outputfiles.usersignatures>False</avrgcc.common.outputfiles.usersignatures>\r
+ <avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>True</avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>\r
+ <avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>True</avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>\r
+ <avrgcc.compiler.symbols.DefSymbols>\r
+ <ListValues>\r
+ <Value>DEBUG</Value>\r
+ </ListValues>\r
+ </avrgcc.compiler.symbols.DefSymbols>\r
+ <avrgcc.compiler.directories.IncludePaths>\r
+ <ListValues>\r
+ <Value>%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.79\include</Value>\r
+ </ListValues>\r
+ </avrgcc.compiler.directories.IncludePaths>\r
+ <avrgcc.compiler.optimization.level>Optimize (-O1)</avrgcc.compiler.optimization.level>\r
+ <avrgcc.compiler.optimization.PackStructureMembers>True</avrgcc.compiler.optimization.PackStructureMembers>\r
+ <avrgcc.compiler.optimization.AllocateBytesNeededForEnum>True</avrgcc.compiler.optimization.AllocateBytesNeededForEnum>\r
+ <avrgcc.compiler.optimization.DebugLevel>Default (-g2)</avrgcc.compiler.optimization.DebugLevel>\r
+ <avrgcc.compiler.warnings.AllWarnings>True</avrgcc.compiler.warnings.AllWarnings>\r
+ <avrgcc.linker.libraries.Libraries>\r
+ <ListValues>\r
+ <Value>libm</Value>\r
+ </ListValues>\r
+ </avrgcc.linker.libraries.Libraries>\r
+ <avrgcc.assembler.general.IncludePaths>\r
+ <ListValues>\r
+ <Value>%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.79\include</Value>\r
+ </ListValues>\r
+ </avrgcc.assembler.general.IncludePaths>\r
+ <avrgcc.assembler.debugging.DebugLevel>Default (-Wa,-g)</avrgcc.assembler.debugging.DebugLevel>\r
+ </AvrGcc>\r
+ </ToolchainSettings>\r
+ </PropertyGroup>\r
+ <ItemGroup>\r
+ <Compile Include="..\common\calibr.c">\r
+ <SubType>compile</SubType>\r
+ <Link>calibr.c</Link>\r
+ </Compile>\r
+ <Compile Include="..\common\I2C\SHT3x.c">\r
+ <SubType>compile</SubType>\r
+ <Link>SHT3x.c</Link>\r
+ </Compile>\r
+ <Compile Include="..\common\I2C\TWI_Master.c">\r
+ <SubType>compile</SubType>\r
+ <Link>TWI_Master.c</Link>\r
+ </Compile>\r
+ <Compile Include="..\common\OWDS18B20_DS2408.S">\r
+ <SubType>compile</SubType>\r
+ <Link>OWDS18B20_DS2408.S</Link>\r
+ </Compile>\r
+ <Compile Include="DS18B20_DS2408.c">\r
+ <SubType>compile</SubType>\r
+ </Compile>\r
+ </ItemGroup>\r
+ <Import Project="$(AVRSTUDIO_EXE_PATH)\\Vs\\Compiler.targets" />\r
+</Project>
\ No newline at end of file
--- /dev/null
+// Copyright (c) 2017, Tobias Mueller tm(at)tm3d.de\r
+// All rights reserved.\r
+//\r
+// Redistribution and use in source and binary forms, with or without\r
+// modification, are permitted provided that the following conditions are\r
+// met:\r
+//\r
+// * Redistributions of source code must retain the above copyright\r
+// notice, this list of conditions and the following disclaimer.\r
+// * Redistributions in binary form must reproduce the above copyright\r
+// notice, this list of conditions and the following disclaimer in the\r
+// documentation and/or other materials provided with the\r
+// distribution.\r
+// * All advertising materials mentioning features or use of this\r
+// software must display the following acknowledgement: This product\r
+// includes software developed by tm3d.de and its contributors.\r
+// * Neither the name of tm3d.de nor the names of its contributors may\r
+// be used to endorse or promote products derived from this software\r
+// without specific prior written permission.\r
+//\r
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\r
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\r
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\r
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\r
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\r
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\r
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\r
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\r
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+\r
+#define F_CPU 8000000UL\r
+#include <avr/io.h>\r
+#include <avr/interrupt.h>\r
+#include <util/delay.h>\r
+#include <avr/wdt.h>\r
+#include <avr/sleep.h>\r
+#include <avr/pgmspace.h>\r
+#include "../common/I2C/USI_TWI_Master.h"\r
+#include "../common/I2C/SHT2xV2.h"\r
+#include "../common/I2C/LPS225HB.h"\r
+#include "../common/calibr.h"\r
+#include "../common/owSlave_tools.h"\r
+\r
+OWST_EXTERN_VARS\r
+\r
+\r
+uint8_t owid1[8]={0x28, 0xA3, 0xD9, 0x84, 0x00, 0x16, 0x05, 0x18};/**/\r
+uint8_t owid2[8]={0x26, 0xA3, 0xD9, 0x84, 0x00, 0x16, 0x05, 0x67};/**/\r
+\r
+uint8_t config_info1[26]={0x02,0x03, 0x00,0x00, 0x00,0x00, 0x00,0x00, 0x02,29,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};\r
+uint8_t config_info2[26]={0x01,0x06, 0x05,0x08, 0x04,0x07, 0x00,0x00, 0x02,7,0x00,7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};\r
+\r
+ \r
+\r
+OWST_WDT_ISR\r
+\r
+typedef union {\r
+ volatile uint8_t bytes[8];\r
+ struct {\r
+ uint16_t temp; //0\r
+ uint8_t TH; //2\r
+ uint8_t TL; //3\r
+ uint8_t config; //4\r
+ uint8_t rrFF; //5\r
+ uint8_t rr00; //6\r
+ uint8_t rr10; //7\r
+ };\r
+} pack1_t;\r
+volatile pack1_t pack1;\r
+\r
+\r
+\r
+typedef union {\r
+ #if defined(__AVR_ATtiny25__)\r
+ volatile uint8_t bytes[16];\r
+ #else\r
+ volatile uint8_t bytes[64];\r
+ #endif\r
+ struct {\r
+ uint8_t status; //1\r
+ int16_t temp; //2\r
+ uint16_t voltage; //4\r
+ uint16_t current; //6\r
+ uint8_t threshold; //8\r
+ \r
+ uint8_t page1[8]; //9\r
+ #if defined(__AVR_ATtiny25__)\r
+ #else\r
+ uint8_t page2[8]; //17\r
+ uint8_t page3[8]; //25\r
+ uint8_t page4[8]; //33\r
+ uint8_t page5[8]; //41\r
+ uint8_t page6[8]; //49\r
+ uint8_t page7[8]; //57\r
+ //uint8_t crc; //65\r
+ #endif\r
+ };\r
+} pack2_t;\r
+volatile pack2_t pack2;\r
+\r
+\r
+\r
+\r
+volatile int16_t DS2438_2_TEMP;\r
+volatile uint16_t DS2438_2_VAD;\r
+volatile uint16_t DS2438_2_VDD=0x01F4;\r
+\r
+OWST_TESTSW\r
+\r
+\r
+uint8_t userRegister[1];\r
+int16_t sRH,sT;\r
+double temperatureC,humidityRH;\r
+volatile double l;\r
+ uint32_t P;\r
+ int16_t t;\r
+\r
+int main(void){\r
+ OWST_INIT_USI_ON\r
+ \r
+ pack1.temp=0x0550;\r
+ pack1.config=0x7F;\r
+ pack1.TH=75;\r
+ pack1.TL=70;\r
+ pack1.rrFF=0xFF;\r
+ pack1.rr00=0;\r
+ pack1.rr10=0x10;\r
+ PORTA=0xFF;\r
+ PORTB=0xFF;\r
+ OWINIT();\r
+ OWST_EN_PULLUP\r
+\r
+ OWST_WDR_CONFIG8\r
+ \r
+ if (testSW()) {\r
+ config_info2[5]=12;\r
+ }else{\r
+ config_info2[5]=7;\r
+ }\r
+ pack2.page3[0]=0xF1;\r
+\r
+ MCUSR=0;\r
+ USI_TWI_Master_Initialise();\r
+ \r
+ initSHT2x();\r
+ _delay_ms(10);\r
+ LPS225HB_Init();\r
+ gcontrol=1;\r
+ sei();\r
+ while(1) {\r
+ \r
+ if (gcontrol) {\r
+ wdcounter=3;\r
+ \r
+ }\r
+\r
+ if (wdcounter>2) {\r
+ getSHT2xHumTemp(&temperatureC,&humidityRH);\r
+ double RH=calibr_hum(temperatureC,-0.2,humidityRH)*10.0;\r
+ double TC =temperatureC *10.0-2;\r
+\r
+ if (testSW()) {\r
+ DS2438_2_VAD=RH;\r
+ DS2438_2_TEMP=(double)TC*25.6;\r
+ //am2302_temp=am2302_temp-20;\r
+ config_info2[5]=12;\r
+ \r
+ }else{\r
+ \r
+ double hhum=(1.0546-0.000216*TC)*(RH);\r
+ //am2302_hum=0.318*hhum +76.0;\r
+ DS2438_2_VAD=0.31*hhum +80;\r
+ DS2438_2_TEMP=TC*25.6;\r
+ //am2302_temp=am2302_temp-20;\r
+ config_info2[5]=7;\r
+ }\r
+ wdcounter=0;\r
+ }\r
+ \r
+ if ((gcontrol&1)==1) {\r
+ \r
+ LPS225HB_Readi(&t,&P);\r
+ P=P-(uint32_t)700*4096;\r
+ P=(double)P/819.2;\r
+ uint16_t w=P;\r
+ uint8_t t8=w>>4;\r
+ uint8_t af=0;\r
+ if (t8>pack1.TH) af=1;\r
+ if (t8<=pack1.TL) af=1;\r
+ cli();\r
+ pack1.temp=w;\r
+ //pack.temp++;\r
+ alarmflag=af;\r
+ sei();\r
+ gcontrol=0;\r
+ EXTERN_SLEEP(); \r
+ }\r
+ if (gcontrol) {\r
+ gcontrol=0;\r
+ \r
+ }\r
+\r
+ OWST_MAIN_END \r
+ }\r
+\r
+\r
+}
\ No newline at end of file
--- /dev/null
+\r
+Microsoft Visual Studio Solution File, Format Version 12.00\r
+# Atmel Studio Solution File, Format Version 11.00\r
+VisualStudioVersion = 14.0.23107.0\r
+MinimumVisualStudioVersion = 10.0.40219.1\r
+Project("{54F91283-7BC4-4236-8FF9-10F437C3AD48}") = "DS18B20_LPS225HB_DS2438_SHT", "DS18B20_LPS225HB_DS2438_SHT.cproj", "{7A5672FE-8226-4158-B931-E1F36B9A8858}"\r
+EndProject\r
+Global\r
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution\r
+ Debug|AVR = Debug|AVR\r
+ Release|AVR = Release|AVR\r
+ EndGlobalSection\r
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution\r
+ {7A5672FE-8226-4158-B931-E1F36B9A8858}.Debug|AVR.ActiveCfg = Debug|AVR\r
+ {7A5672FE-8226-4158-B931-E1F36B9A8858}.Debug|AVR.Build.0 = Debug|AVR\r
+ {7A5672FE-8226-4158-B931-E1F36B9A8858}.Release|AVR.ActiveCfg = Release|AVR\r
+ {7A5672FE-8226-4158-B931-E1F36B9A8858}.Release|AVR.Build.0 = Release|AVR\r
+ EndGlobalSection\r
+ GlobalSection(SolutionProperties) = preSolution\r
+ HideSolutionNode = FALSE\r
+ EndGlobalSection\r
+EndGlobal\r
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>\r
+<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
+ <PropertyGroup>\r
+ <SchemaVersion>2.0</SchemaVersion>\r
+ <ProjectVersion>7.0</ProjectVersion>\r
+ <ToolchainName>com.Atmel.AVRGCC8.C</ToolchainName>\r
+ <ProjectGuid>{7a5672fe-8226-4158-b931-e1f36b9a8858}</ProjectGuid>\r
+ <avrdevice>ATtiny84A</avrdevice>\r
+ <avrdeviceseries>none</avrdeviceseries>\r
+ <OutputType>Executable</OutputType>\r
+ <Language>C</Language>\r
+ <OutputFileName>$(MSBuildProjectName)</OutputFileName>\r
+ <OutputFileExtension>.elf</OutputFileExtension>\r
+ <OutputDirectory>$(MSBuildProjectDirectory)\$(Configuration)</OutputDirectory>\r
+ <AssemblyName>DS18B20_DS2438</AssemblyName>\r
+ <Name>DS18B20_LPS225HB_DS2438_SHT</Name>\r
+ <RootNamespace>DS18B20_DS2438</RootNamespace>\r
+ <ToolchainFlavour>Native</ToolchainFlavour>\r
+ <KeepTimersRunning>true</KeepTimersRunning>\r
+ <OverrideVtor>false</OverrideVtor>\r
+ <CacheFlash>true</CacheFlash>\r
+ <ProgFlashFromRam>true</ProgFlashFromRam>\r
+ <RamSnippetAddress>0x20000000</RamSnippetAddress>\r
+ <UncachedRange />\r
+ <preserveEEPROM>true</preserveEEPROM>\r
+ <OverrideVtorValue>exception_table</OverrideVtorValue>\r
+ <BootSegment>2</BootSegment>\r
+ <eraseonlaunchrule>1</eraseonlaunchrule>\r
+ <AsfFrameworkConfig>\r
+ <framework-data>\r
+ <options />\r
+ <configurations />\r
+ <files />\r
+ <documentation help="" />\r
+ <offline-documentation help="" />\r
+ <dependencies>\r
+ <content-extension eid="atmel.asf" uuidref="Atmel.ASF" version="3.28.1" />\r
+ </dependencies>\r
+ </framework-data>\r
+ </AsfFrameworkConfig>\r
+ <avrtool>com.atmel.avrdbg.tool.atmelice</avrtool>\r
+ <com_atmel_avrdbg_tool_atmelice>\r
+ <ToolOptions>\r
+ <InterfaceProperties>\r
+ </InterfaceProperties>\r
+ <InterfaceName>debugWIRE</InterfaceName>\r
+ </ToolOptions>\r
+ <ToolType>com.atmel.avrdbg.tool.atmelice</ToolType>\r
+ <ToolNumber>J41800000789</ToolNumber>\r
+ <ToolName>Atmel-ICE</ToolName>\r
+ </com_atmel_avrdbg_tool_atmelice>\r
+ <avrtoolinterface>debugWIRE</avrtoolinterface>\r
+ <com_atmel_avrdbg_tool_simulator>\r
+ <ToolOptions>\r
+ <InterfaceProperties>\r
+ </InterfaceProperties>\r
+ <InterfaceName>debugWIRE</InterfaceName>\r
+ </ToolOptions>\r
+ <ToolType>com.atmel.avrdbg.tool.simulator</ToolType>\r
+ <ToolNumber>\r
+ </ToolNumber>\r
+ <ToolName>Simulator</ToolName>\r
+ </com_atmel_avrdbg_tool_simulator>\r
+ <ExternalProgrammingToolCommand />\r
+ <avrtoolserialnumber>J41800000789</avrtoolserialnumber>\r
+ <avrdeviceexpectedsignature>0x1E930C</avrdeviceexpectedsignature>\r
+ <custom>\r
+ <ToolOptions xmlns="">\r
+ <InterfaceProperties>\r
+ </InterfaceProperties>\r
+ <InterfaceName>debugWIRE</InterfaceName>\r
+ </ToolOptions>\r
+ <ToolType xmlns="">custom</ToolType>\r
+ <ToolNumber xmlns="">\r
+ </ToolNumber>\r
+ <ToolName xmlns="">Custom Programming Tool</ToolName>\r
+ </custom>\r
+ </PropertyGroup>\r
+ <PropertyGroup Condition=" '$(Configuration)' == 'Release' ">\r
+ <ToolchainSettings>\r
+ <AvrGcc>\r
+ <avrgcc.common.Device>-mmcu=attiny84a -B "%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.68\gcc\dev\attiny84a"</avrgcc.common.Device>\r
+ <avrgcc.common.outputfiles.hex>True</avrgcc.common.outputfiles.hex>\r
+ <avrgcc.common.outputfiles.lss>True</avrgcc.common.outputfiles.lss>\r
+ <avrgcc.common.outputfiles.eep>True</avrgcc.common.outputfiles.eep>\r
+ <avrgcc.common.outputfiles.srec>True</avrgcc.common.outputfiles.srec>\r
+ <avrgcc.common.outputfiles.usersignatures>False</avrgcc.common.outputfiles.usersignatures>\r
+ <avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>True</avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>\r
+ <avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>True</avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>\r
+ <avrgcc.compiler.symbols.DefSymbols>\r
+ <ListValues>\r
+ <Value>DEBUG</Value>\r
+ </ListValues>\r
+ </avrgcc.compiler.symbols.DefSymbols>\r
+ <avrgcc.compiler.directories.IncludePaths>\r
+ <ListValues>\r
+ <Value>%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.68\include</Value>\r
+ </ListValues>\r
+ </avrgcc.compiler.directories.IncludePaths>\r
+ <avrgcc.compiler.optimization.level>Optimize (-O1)</avrgcc.compiler.optimization.level>\r
+ <avrgcc.compiler.optimization.PackStructureMembers>True</avrgcc.compiler.optimization.PackStructureMembers>\r
+ <avrgcc.compiler.optimization.AllocateBytesNeededForEnum>True</avrgcc.compiler.optimization.AllocateBytesNeededForEnum>\r
+ <avrgcc.compiler.optimization.DebugLevel>Default (-g2)</avrgcc.compiler.optimization.DebugLevel>\r
+ <avrgcc.compiler.warnings.AllWarnings>True</avrgcc.compiler.warnings.AllWarnings>\r
+ <avrgcc.linker.libraries.Libraries>\r
+ <ListValues>\r
+ <Value>libm</Value>\r
+ </ListValues>\r
+ </avrgcc.linker.libraries.Libraries>\r
+ <avrgcc.assembler.debugging.DebugLevel>Default (-Wa,-g)</avrgcc.assembler.debugging.DebugLevel>\r
+ </AvrGcc>\r
+ </ToolchainSettings>\r
+ </PropertyGroup>\r
+ <PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">\r
+ <ToolchainSettings>\r
+ <AvrGcc>\r
+ <avrgcc.common.Device>-mmcu=attiny84a -B "%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.68\gcc\dev\attiny84a"</avrgcc.common.Device>\r
+ <avrgcc.common.outputfiles.hex>True</avrgcc.common.outputfiles.hex>\r
+ <avrgcc.common.outputfiles.lss>True</avrgcc.common.outputfiles.lss>\r
+ <avrgcc.common.outputfiles.eep>True</avrgcc.common.outputfiles.eep>\r
+ <avrgcc.common.outputfiles.srec>True</avrgcc.common.outputfiles.srec>\r
+ <avrgcc.common.outputfiles.usersignatures>False</avrgcc.common.outputfiles.usersignatures>\r
+ <avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>True</avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>\r
+ <avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>True</avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>\r
+ <avrgcc.compiler.symbols.DefSymbols>\r
+ <ListValues>\r
+ <Value>DEBUG</Value>\r
+ </ListValues>\r
+ </avrgcc.compiler.symbols.DefSymbols>\r
+ <avrgcc.compiler.directories.IncludePaths>\r
+ <ListValues>\r
+ <Value>%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.68\include</Value>\r
+ </ListValues>\r
+ </avrgcc.compiler.directories.IncludePaths>\r
+ <avrgcc.compiler.optimization.level>Optimize (-O1)</avrgcc.compiler.optimization.level>\r
+ <avrgcc.compiler.optimization.PackStructureMembers>True</avrgcc.compiler.optimization.PackStructureMembers>\r
+ <avrgcc.compiler.optimization.AllocateBytesNeededForEnum>True</avrgcc.compiler.optimization.AllocateBytesNeededForEnum>\r
+ <avrgcc.compiler.optimization.DebugLevel>Default (-g2)</avrgcc.compiler.optimization.DebugLevel>\r
+ <avrgcc.compiler.warnings.AllWarnings>True</avrgcc.compiler.warnings.AllWarnings>\r
+ <avrgcc.linker.libraries.Libraries>\r
+ <ListValues>\r
+ <Value>libm</Value>\r
+ </ListValues>\r
+ </avrgcc.linker.libraries.Libraries>\r
+ <avrgcc.assembler.debugging.DebugLevel>Default (-Wa,-g)</avrgcc.assembler.debugging.DebugLevel>\r
+ </AvrGcc>\r
+ </ToolchainSettings>\r
+ </PropertyGroup>\r
+ <ItemGroup>\r
+ <Compile Include="..\common\calibr.c">\r
+ <SubType>compile</SubType>\r
+ <Link>calibr.c</Link>\r
+ </Compile>\r
+ <Compile Include="..\common\I2C\LPS225HB.c">\r
+ <SubType>compile</SubType>\r
+ <Link>LPS225HB.c</Link>\r
+ </Compile>\r
+ <Compile Include="..\common\I2C\SHT2xV2.c">\r
+ <SubType>compile</SubType>\r
+ <Link>SHT2xV2.c</Link>\r
+ </Compile>\r
+ <Compile Include="..\common\I2C\USI_TWI_Master.c">\r
+ <SubType>compile</SubType>\r
+ <Link>USI_TWI_Master.c</Link>\r
+ </Compile>\r
+ <Compile Include="..\common\OWDS18B20_DS2438.S">\r
+ <SubType>compile</SubType>\r
+ <Link>OWDS18B20_DS2438.S</Link>\r
+ </Compile>\r
+ <Compile Include="DS18B20_DS2438.c">\r
+ <SubType>compile</SubType>\r
+ </Compile>\r
+ </ItemGroup>\r
+ <Import Project="$(AVRSTUDIO_EXE_PATH)\\Vs\\Compiler.targets" />\r
+</Project>
\ No newline at end of file
#include <avr/pgmspace.h>\r
#include "../common/I2C/USI_TWI_Master.h"\r
#include "../common/I2C/MAX44009.h"\r
+#include "../common/owSlave_tools.h"\r
\r
-\r
-extern void OWINIT();\r
-\r
-extern void EXTERN_SLEEP();\r
-\r
-\r
+OWST_EXTERN_VARS\r
+//-D__4MHZ__\r
uint8_t owid[8]={0x28, 0xA2, 0xD9, 0x84, 0x00, 0x16, 0x77, 0x6B};/**/\r
uint8_t config_info[26]={0x03,0x04, 0x00,0x00, 0x00,0x00, 0x00,0x00, 0x02,15,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};\r
\r
-#if (owid>128) \r
-#error "Variable not correct"\r
-#endif\r
-\r
-extern uint8_t mode;\r
-extern uint8_t gcontrol;\r
-extern uint8_t reset_indicator;\r
-extern uint8_t alarmflag;\r
-\r
\r
uint8_t max_adr=0;\r
\r
\r
\r
int main(void){\r
- PRR|=(1<<PRADC); // adc for save Power\r
+ OWST_INIT_USI_ON\r
pack.temp=0x0550;\r
pack.config=0x7F;\r
pack.TH=75;\r
pack.rrFF=0xFF;\r
pack.rr00=0;\r
pack.rr10=0x10;\r
- PORTA=0xFF;\r
- PORTB=0xFF;\r
- OWINIT();\r
-\r
- MCUCR &=~(1<<PUD); //All Pins Pullup...\r
- MCUCR |=(1<<BODS);\r
\r
- MCUSR=0;\r
+ OWINIT();\r
+ OWST_EN_PULLUP\r
USI_TWI_Master_Initialise();\r
if (checkMAX44009(0)) max_adr=0; else max_adr=1 ;\r
\r
sei();\r
while(1) {\r
\r
- if (gcontrol) {\r
+ if ((gcontrol&1)==1) {\r
//PORTB|=(1<<PINB1); //Dauer 2.3ms\r
volatile double l=MAX44009getlux(max_adr); \r
if (l<0.030) l=0.030; //Darf nicht 0 sein. minimum -35°C Sensor minimum 0.045\r
//pack.temp++;\r
alarmflag=af;\r
sei(); \r
+ gcontrol=0;\r
EXTERN_SLEEP(); \r
//PORTB&=~(1<<PINB1);\r
}\r
\r
\r
-#if defined(__AVR_ATtiny25__)||defined(__AVR_ATtiny45__) || defined(__AVR_ATtiny85__)\r
- if (((TIMSK & (1<<TOIE0))==0)&& (mode==0))\r
-#endif \r
-#if defined(__AVR_ATtiny24__)||defined(__AVR_ATtiny44__) || defined(__AVR_ATtiny84__) ||defined(__AVR_ATtiny24A__)||defined(__AVR_ATtiny44A__) || defined(__AVR_ATtiny84A__)\r
- if (((TIMSK0 & (1<<TOIE0))==0)&& (mode==0))\r
-#endif\r
- {\r
-\r
- MCUCR|=(1<<SE)|(1<<SM1);\r
- MCUCR&=~(1<<ISC01);\r
- } else {\r
- MCUCR|=(1<<SE);\r
- MCUCR&=~(1<<SM1);\r
- }\r
- //MCUCR&=~(1<<ISC01);\r
- asm("SLEEP");\r
+ OWST_MAIN_END\r
}\r
\r
\r
<eraseonlaunchrule>1</eraseonlaunchrule>\r
<AsfFrameworkConfig>\r
<framework-data>\r
- <options />\r
- <configurations />\r
- <files />\r
- <documentation help="" />\r
- <offline-documentation help="" />\r
- <dependencies>\r
- <content-extension eid="atmel.asf" uuidref="Atmel.ASF" version="3.28.1" />\r
- </dependencies>\r
-</framework-data>\r
+ <options />\r
+ <configurations />\r
+ <files />\r
+ <documentation help="" />\r
+ <offline-documentation help="" />\r
+ <dependencies>\r
+ <content-extension eid="atmel.asf" uuidref="Atmel.ASF" version="3.28.1" />\r
+ </dependencies>\r
+ </framework-data>\r
</AsfFrameworkConfig>\r
<avrtool>com.atmel.avrdbg.tool.atmelice</avrtool>\r
<com_atmel_avrdbg_tool_atmelice>\r
<InterfaceName>debugWIRE</InterfaceName>\r
</ToolOptions>\r
<ToolType>com.atmel.avrdbg.tool.atmelice</ToolType>\r
- <ToolNumber>J41800000779</ToolNumber>\r
+ <ToolNumber>J41800000789</ToolNumber>\r
<ToolName>Atmel-ICE</ToolName>\r
</com_atmel_avrdbg_tool_atmelice>\r
<avrtoolinterface>debugWIRE</avrtoolinterface>\r
<ToolName>Simulator</ToolName>\r
</com_atmel_avrdbg_tool_simulator>\r
<ExternalProgrammingToolCommand />\r
+ <avrtoolserialnumber>J41800000789</avrtoolserialnumber>\r
+ <avrdeviceexpectedsignature>0x1E930C</avrdeviceexpectedsignature>\r
</PropertyGroup>\r
<PropertyGroup Condition=" '$(Configuration)' == 'Release' ">\r
<ToolchainSettings>\r
<AvrGcc>\r
- <avrgcc.common.Device>-mmcu=attiny84a -B "%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.79\gcc\dev\attiny84a"</avrgcc.common.Device>\r
- <avrgcc.common.outputfiles.hex>True</avrgcc.common.outputfiles.hex>\r
- <avrgcc.common.outputfiles.lss>True</avrgcc.common.outputfiles.lss>\r
- <avrgcc.common.outputfiles.eep>True</avrgcc.common.outputfiles.eep>\r
- <avrgcc.common.outputfiles.srec>True</avrgcc.common.outputfiles.srec>\r
- <avrgcc.common.outputfiles.usersignatures>False</avrgcc.common.outputfiles.usersignatures>\r
- <avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>True</avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>\r
- <avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>True</avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>\r
- <avrgcc.compiler.symbols.DefSymbols>\r
- <ListValues>\r
- <Value>DEBUG</Value>\r
- </ListValues>\r
- </avrgcc.compiler.symbols.DefSymbols>\r
- <avrgcc.compiler.directories.IncludePaths>\r
- <ListValues>\r
- <Value>%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.79\include</Value>\r
- </ListValues>\r
- </avrgcc.compiler.directories.IncludePaths>\r
- <avrgcc.compiler.optimization.level>Optimize (-O1)</avrgcc.compiler.optimization.level>\r
- <avrgcc.compiler.optimization.PackStructureMembers>True</avrgcc.compiler.optimization.PackStructureMembers>\r
- <avrgcc.compiler.optimization.AllocateBytesNeededForEnum>True</avrgcc.compiler.optimization.AllocateBytesNeededForEnum>\r
- <avrgcc.compiler.optimization.DebugLevel>Default (-g2)</avrgcc.compiler.optimization.DebugLevel>\r
- <avrgcc.compiler.warnings.AllWarnings>True</avrgcc.compiler.warnings.AllWarnings>\r
- <avrgcc.linker.libraries.Libraries>\r
- <ListValues>\r
- <Value>libm</Value>\r
- </ListValues>\r
- </avrgcc.linker.libraries.Libraries>\r
- <avrgcc.assembler.general.IncludePaths>\r
- <ListValues>\r
- <Value>%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.79\include</Value>\r
- </ListValues>\r
- </avrgcc.assembler.general.IncludePaths>\r
- <avrgcc.assembler.debugging.DebugLevel>Default (-Wa,-g)</avrgcc.assembler.debugging.DebugLevel>\r
- </AvrGcc>\r
+ <avrgcc.common.Device>-mmcu=attiny84a -B "%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.79\gcc\dev\attiny84a"</avrgcc.common.Device>\r
+ <avrgcc.common.outputfiles.hex>True</avrgcc.common.outputfiles.hex>\r
+ <avrgcc.common.outputfiles.lss>True</avrgcc.common.outputfiles.lss>\r
+ <avrgcc.common.outputfiles.eep>True</avrgcc.common.outputfiles.eep>\r
+ <avrgcc.common.outputfiles.srec>True</avrgcc.common.outputfiles.srec>\r
+ <avrgcc.common.outputfiles.usersignatures>False</avrgcc.common.outputfiles.usersignatures>\r
+ <avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>True</avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>\r
+ <avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>True</avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>\r
+ <avrgcc.compiler.symbols.DefSymbols>\r
+ <ListValues>\r
+ <Value>DEBUG</Value>\r
+ </ListValues>\r
+ </avrgcc.compiler.symbols.DefSymbols>\r
+ <avrgcc.compiler.directories.IncludePaths>\r
+ <ListValues>\r
+ <Value>%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.79\include</Value>\r
+ </ListValues>\r
+ </avrgcc.compiler.directories.IncludePaths>\r
+ <avrgcc.compiler.optimization.level>Optimize (-O1)</avrgcc.compiler.optimization.level>\r
+ <avrgcc.compiler.optimization.PackStructureMembers>True</avrgcc.compiler.optimization.PackStructureMembers>\r
+ <avrgcc.compiler.optimization.AllocateBytesNeededForEnum>True</avrgcc.compiler.optimization.AllocateBytesNeededForEnum>\r
+ <avrgcc.compiler.optimization.DebugLevel>Default (-g2)</avrgcc.compiler.optimization.DebugLevel>\r
+ <avrgcc.compiler.warnings.AllWarnings>True</avrgcc.compiler.warnings.AllWarnings>\r
+ <avrgcc.linker.libraries.Libraries>\r
+ <ListValues>\r
+ <Value>libm</Value>\r
+ </ListValues>\r
+ </avrgcc.linker.libraries.Libraries>\r
+ <avrgcc.assembler.general.IncludePaths>\r
+ <ListValues>\r
+ <Value>%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.79\include</Value>\r
+ </ListValues>\r
+ </avrgcc.assembler.general.IncludePaths>\r
+ <avrgcc.assembler.debugging.DebugLevel>Default (-Wa,-g)</avrgcc.assembler.debugging.DebugLevel>\r
+</AvrGcc>\r
</ToolchainSettings>\r
</PropertyGroup>\r
<PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">\r
#include <avr/pgmspace.h>\r
#include "../common/I2C/USI_TWI_Master.h"\r
#include "../common/I2C/MAX44009.h"\r
-#include "../common/I2C/SHT2x.h"\r
+#include "../common/I2C/SHT2xV2.h"\r
+#include "../common/calibr.h"\r
+#include "../common/owSlave_tools.h"\r
\r
\r
-extern void OWINIT();\r
-extern void EXTERN_SLEEP();\r
-\r
+OWST_EXTERN_VARS\r
\r
uint8_t owid1[8]={0x28, 0xA3, 0xD9, 0x84, 0x00, 0x16, 0x05, 0x18};/**/\r
uint8_t owid2[8]={0x26, 0xA3, 0xD9, 0x84, 0x00, 0x16, 0x05, 0x67};/**/\r
uint8_t config_info1[26]={0x03,0x04, 0x00,0x00, 0x00,0x00, 0x00,0x00, 0x02,15,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};\r
uint8_t config_info2[26]={0x01,0x06, 0x05,0x08, 0x04,0x07, 0x00,0x00, 0x02,7,0x00,7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};\r
\r
-\r
- \r
-#if (owid>128) \r
-#error "Variable not correct"\r
-#endif\r
-\r
-extern uint8_t mode;\r
-extern uint8_t gcontrol;\r
-extern uint8_t reset_indicator;\r
-extern uint8_t alarmflag;\r
-volatile uint8_t wdcounter=5;\r
-\r
-\r
-#if defined(__AVR_ATtiny24__)||defined(__AVR_ATtiny44__) || defined(__AVR_ATtiny84__) || defined(__AVR_ATtiny24A__)||defined(__AVR_ATtiny44A__) || defined(__AVR_ATtiny84A__)\r
-ISR(WATCHDOG_vect) {\r
-#else\r
-ISR(WDT_vect) {\r
-#endif \r
- //sleep_disable(); // Disable Sleep on Wakeup\r
- wdcounter++;\r
- if (reset_indicator==1) reset_indicator++;\r
- else if (reset_indicator==2) mode=0;\r
-/* if (timeout==2) {\r
- DIS_TIMER;\r
- EN_OWINT;\r
- mode=OWM_SLEEP;\r
- }\r
- timeout++;*/\r
- //sleep_enable(); // Enable Sleep Mode\r
-\r
-}\r
-\r
-int testSW(void) {\r
- uint8_t r;\r
- DDRB&=~(1<<PORTB0); //Eingang\r
- __asm__ __volatile__ ("nop");\r
- PORTB|=(1<<PORTB0); //Pullup\r
- __asm__ __volatile__ ("nop");\r
- __asm__ __volatile__ ("nop");\r
- __asm__ __volatile__ ("nop");\r
- __asm__ __volatile__ ("nop");\r
- __asm__ __volatile__ ("nop");\r
- r=PINB&(1<<PORTB0);\r
- __asm__ __volatile__ ("nop");\r
- PORTB&=~(1<<PORTB0);\r
- __asm__ __volatile__ ("nop");\r
- DDRB|=(1<<PORTB0); //Eingang\r
- return (r==0);\r
- \r
+OWST_WDT_ISR\r
\r
-}\r
+OWST_TESTSW\r
\r
\r
typedef union {\r
volatile pack2_t pack2;\r
\r
\r
+volatile int16_t DS2438_2_TEMP;\r
+volatile uint16_t DS2438_2_VAD;\r
+volatile uint16_t DS2438_2_VDD=0x01F4;\r
\r
-\r
-volatile int16_t am2302_temp;\r
-volatile uint16_t am2302_hum;\r
-\r
-\r
-uint8_t userRegister[1];\r
-int16_t sRH,sT;\r
-volatile double temperatureC,humidityRH;\r
-volatile double l;\r
+double temperatureC,humidityRH;\r
+double l;\r
\r
uint8_t max_adr=0;\r
\r
int main(void){\r
- PRR|=(1<<PRADC); // adc for save Power\r
+ OWST_INIT_USI_ON\r
pack1.temp=0x0550;\r
pack1.config=0x7F;\r
pack1.TH=75;\r
pack1.rrFF=0xFF;\r
pack1.rr00=0;\r
pack1.rr10=0x10;\r
- PORTA=0xFF;\r
- PORTB=0xFF;\r
OWINIT();\r
-\r
- MCUCR &=~(1<<PUD); //All Pins Pullup...\r
- MCUCR |=(1<<BODS);\r
-\r
- WDTCSR |= ((1<<WDCE) ); // Enable the WD Change Bit//| (1<<WDE)\r
- WDTCSR |= (1<<WDIE) | // Enable WDT Interrupt\r
- (1<<WDP3) | (1<<WDP0); // Set Timeout to ~8 seconds\r
+ OWST_EN_PULLUP\r
+ OWST_WDR_CONFIG8\r
if (testSW()) {\r
- config_info2[5]=8;\r
+ config_info2[5]=12;\r
}else{\r
config_info2[5]=7;\r
}\r
- MCUSR=0;\r
sei();\r
USI_TWI_Master_Initialise();\r
if (checkMAX44009(0)) max_adr=0; else max_adr=1 ;\r
- SHT2x_SoftReset();\r
- SHT2x_ReadUserRegister(userRegister);\r
- //(userRegister & ~SHT2x_RES_MASK) | SHT2x_RES_10_13BIT;\r
- SHT2x_WriteUserRegister(userRegister); //write changed user reg\r
- // --- measure humidity with "Hold Master Mode (HM)" ---\r
- SHT2x_MeasurePoll(HUMIDITY, &sRH);\r
- // --- measure temperature with "Polling Mode" (no hold master) ---\r
- SHT2x_MeasurePoll(TEMP, &sT);\r
- //-- calculate humidity and temperature --\r
- //temperatureC = SHT2x_CalcTemperatureC(sT);\r
- //humidityRH = SHT2x_CalcRH(sRH);\r
+ _delay_ms(10);\r
\r
+ initSHT2x();\r
gcontrol=1;\r
sei();\r
- //DDRB|=(1<<PINB1);\r
while(1) {\r
if ((gcontrol&2)==2){\r
wdcounter=3;\r
}\r
\r
if (wdcounter>2) {\r
- //PORTB|=(1<<PINB1); //Dauer 440ms\r
- SHT2x_MeasurePoll(HUMIDITY, &sRH);\r
- // --- measure temperature with "Polling Mode" (no hold master) ---\r
- SHT2x_MeasurePoll(TEMP, &sT);\r
- //-- calculate humidity and temperature --\r
- temperatureC = SHT2x_CalcTemperatureC(sT)*10.0-2;\r
- humidityRH = SHT2x_CalcRH(sRH)*10.0+5;\r
- if (humidityRH>1000) humidityRH=1000;\r
- if (testSW()) {\r
- am2302_hum= humidityRH*10.0;\r
- am2302_temp=temperatureC*25.6;\r
- //\r
- config_info2[5]=8;\r
- \r
- }else{\r
- \r
- double hhum=(1.0546-0.000216*temperatureC)*(humidityRH);\r
- //am2302_hum=0.318*hhum +76.0;\r
- am2302_hum=0.31*hhum +80;\r
- am2302_temp=temperatureC*25.6;\r
- //am2302_temp=am2302_temp-45;\r
- config_info2[5]=7;\r
+ getSHT2xHumTemp(&temperatureC,&humidityRH);\r
+ double RH=calibr_hum(temperatureC,-0.2,humidityRH)*10.0;\r
+ double TC =temperatureC *10.0-2;\r
+\r
+ if (testSW()) {\r
+ DS2438_2_VAD=RH;\r
+ DS2438_2_TEMP=TC*25.6;\r
+ //am2302_temp=am2302_temp-20;\r
+ config_info2[5]=12;\r
+ DS2438_2_VDD=0x01F4;\r
+ \r
+ }else{\r
+ \r
+ double hhum=(1.0546-0.000216*TC)*(RH);\r
+ //am2302_hum=0.318*hhum +76.0;\r
+ DS2438_2_VAD=0.31*hhum +80;\r
+ DS2438_2_TEMP=TC*25.6;\r
+ //am2302_temp=am2302_temp-20;\r
+ config_info2[5]=7;\r
+ DS2438_2_VDD=0x01F4;\r
}\r
wdcounter=0;\r
}\r
sei(); \r
EXTERN_SLEEP(); \r
}\r
- \r
-\r
- \r
-#if defined(__AVR_ATtiny25__)||defined(__AVR_ATtiny45__) || defined(__AVR_ATtiny85__)\r
- if (((TIMSK & (1<<TOIE0))==0)&& (mode==0))\r
-#endif \r
-#if defined(__AVR_ATtiny24__)||defined(__AVR_ATtiny44__) || defined(__AVR_ATtiny84__) ||defined(__AVR_ATtiny24A__)||defined(__AVR_ATtiny44A__) || defined(__AVR_ATtiny84A__)\r
- if (((TIMSK0 & (1<<TOIE0))==0)&& (mode==0))\r
-#endif\r
- {\r
-\r
- MCUCR|=(1<<SE)|(1<<SM1);\r
- MCUCR&=~(1<<ISC01);\r
- } else {\r
- MCUCR|=(1<<SE);\r
- MCUCR&=~(1<<SM1);\r
- }\r
- asm("SLEEP");\r
+ OWST_MAIN_END\r
}\r
\r
\r
</ToolchainSettings>\r
</PropertyGroup>\r
<ItemGroup>\r
- <Compile Include="..\common\I2C\SHT2x.c">\r
+ <Compile Include="..\common\calibr.c">\r
<SubType>compile</SubType>\r
- <Link>SHT2x.c</Link>\r
+ <Link>calibr.c</Link>\r
</Compile>\r
<Compile Include="..\common\I2C\MAX44009.c">\r
<SubType>compile</SubType>\r
<Link>MAX44009.c</Link>\r
</Compile>\r
+ <Compile Include="..\common\I2C\SHT2xV2.c">\r
+ <SubType>compile</SubType>\r
+ <Link>SHT2xV2.c</Link>\r
+ </Compile>\r
<Compile Include="..\common\I2C\USI_TWI_Master.c">\r
<SubType>compile</SubType>\r
<Link>USI_TWI_Master.c</Link>\r
--- /dev/null
+// Copyright (c) 2017, Tobias Mueller tm(at)tm3d.de\r
+// All rights reserved.\r
+//\r
+// Redistribution and use in source and binary forms, with or without\r
+// modification, are permitted provided that the following conditions are\r
+// met:\r
+//\r
+// * Redistributions of source code must retain the above copyright\r
+// notice, this list of conditions and the following disclaimer.\r
+// * Redistributions in binary form must reproduce the above copyright\r
+// notice, this list of conditions and the following disclaimer in the\r
+// documentation and/or other materials provided with the\r
+// distribution.\r
+// * All advertising materials mentioning features or use of this\r
+// software must display the following acknowledgement: This product\r
+// includes software developed by tm3d.de and its contributors.\r
+// * Neither the name of tm3d.de nor the names of its contributors may\r
+// be used to endorse or promote products derived from this software\r
+// without specific prior written permission.\r
+//\r
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\r
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\r
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\r
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\r
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\r
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\r
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\r
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\r
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+\r
+#define F_CPU 8000000UL\r
+#include <avr/io.h>\r
+#include <avr/interrupt.h>\r
+#include <util/delay.h>\r
+#include <avr/wdt.h>\r
+#include <avr/sleep.h>\r
+#include <avr/pgmspace.h>\r
+#include "../common/I2C/USI_TWI_Master.h"\r
+#include "../common/I2C/SHT2xV2.h"\r
+#include "../common/I2C/BMP280.h"\r
+#include "../common/calibr.h"\r
+#include "../common/owSlave_tools.h"\r
+\r
+OWST_EXTERN_VARS\r
+\r
+\r
+uint8_t owid1[8]={0x28, 0xA3, 0xD9, 0x84, 0x00, 0x26, 0x05, 0x35};/**/\r
+uint8_t owid2[8]={0x28, 0xA4, 0xD9, 0x84, 0x00, 0x26, 0x05, 0xB0};/**/\r
+\r
+uint8_t config_info1[26]={0x01,0x01, 0x00,0x00, 0x00,0x00, 0x00,0x00, 0x02,7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};\r
+uint8_t config_info2[26]={0x04,0x01, 0x00,0x00, 0x00,0x00, 0x00,0x00, 0x02,7,0x00,0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};\r
+\r
+ \r
+\r
+OWST_WDT_ISR\r
+\r
+typedef union {\r
+ volatile uint8_t bytes[8];\r
+ struct {\r
+ uint16_t temp; //0\r
+ uint8_t TH; //2\r
+ uint8_t TL; //3\r
+ uint8_t config; //4\r
+ uint8_t rrFF; //5\r
+ uint8_t rr00; //6\r
+ uint8_t rr10; //7\r
+ };\r
+} pack1_t;\r
+volatile pack1_t pack1,pack2;\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+OWST_TESTSW\r
+\r
+\r
+uint8_t userRegister[1];\r
+int16_t sRH,sT;\r
+double temperatureC,humidityRH;\r
+volatile double l;\r
+ uint32_t P;\r
+ int32_t t;\r
+\r
+int main(void){\r
+ OWST_INIT_USI_ON\r
+ \r
+ pack1.temp=0x0550;\r
+ pack1.config=0x7F;\r
+ pack1.TH=75;\r
+ pack1.TL=70;\r
+ pack1.rrFF=0xFF;\r
+ pack1.rr00=0;\r
+ pack1.rr10=0x10;\r
+ PORTA=0xFF;\r
+ PORTB=0xFF;\r
+ OWINIT();\r
+ OWST_EN_PULLUP\r
+\r
+ OWST_WDR_CONFIG8\r
+ \r
+ if (testSW()) {\r
+ config_info2[5]=12;\r
+ }else{\r
+ config_info2[5]=7;\r
+ }\r
+\r
+ MCUSR=0;\r
+ USI_TWI_Master_Initialise();\r
+ \r
+ initSHT2x();\r
+ _delay_ms(10);\r
+ gcontrol=1;\r
+ sei();\r
+ while(1) {\r
+ \r
+ if (gcontrol) {\r
+ wdcounter=3;\r
+ \r
+ }\r
+\r
+ if (wdcounter>2) {\r
+ getSHT2xHumTemp(&temperatureC,&humidityRH);\r
+ double RH=calibr_hum(temperatureC,-0.2,humidityRH)*16.0;\r
+ double TC =(temperatureC+0.2) *16.0;\r
+ uint16_t w1=TC;\r
+ uint8_t t81=w1>>4;\r
+ uint8_t af1=0;\r
+ if (t81>pack1.TH) af1=1;\r
+ if (t81<=pack1.TL) af1=1;\r
+\r
+ cli();\r
+ pack1.temp=w1;\r
+ //pack.temp++;\r
+ alarmflag=af1;\r
+ sei();\r
+\r
+\r
+ uint16_t w2=RH;\r
+ \r
+ cli();\r
+ pack2.temp=w2;\r
+ sei();\r
+ //pack.temp++;\r
+ gcontrol=0;\r
+\r
+ \r
+\r
+ wdcounter=0;\r
+ }\r
+ \r
+ if (gcontrol) {\r
+ gcontrol=0;\r
+ EXTERN_SLEEP();\r
+ \r
+ }\r
+\r
+ OWST_MAIN_END \r
+ }\r
+\r
+\r
+}
\ No newline at end of file
--- /dev/null
+\r
+Microsoft Visual Studio Solution File, Format Version 12.00\r
+# Atmel Studio Solution File, Format Version 11.00\r
+VisualStudioVersion = 14.0.23107.0\r
+MinimumVisualStudioVersion = 10.0.40219.1\r
+Project("{54F91283-7BC4-4236-8FF9-10F437C3AD48}") = "DS18B20_SHT_DS18B20_SHT", "DS18B20_SHT_DS18B20_SHT.cproj", "{7A5672FE-8226-4158-B931-E1F36B9A8858}"\r
+EndProject\r
+Global\r
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution\r
+ Debug|AVR = Debug|AVR\r
+ Release|AVR = Release|AVR\r
+ EndGlobalSection\r
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution\r
+ {7A5672FE-8226-4158-B931-E1F36B9A8858}.Debug|AVR.ActiveCfg = Debug|AVR\r
+ {7A5672FE-8226-4158-B931-E1F36B9A8858}.Debug|AVR.Build.0 = Debug|AVR\r
+ {7A5672FE-8226-4158-B931-E1F36B9A8858}.Release|AVR.ActiveCfg = Release|AVR\r
+ {7A5672FE-8226-4158-B931-E1F36B9A8858}.Release|AVR.Build.0 = Release|AVR\r
+ EndGlobalSection\r
+ GlobalSection(SolutionProperties) = preSolution\r
+ HideSolutionNode = FALSE\r
+ EndGlobalSection\r
+EndGlobal\r
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>\r
+<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
+ <PropertyGroup>\r
+ <SchemaVersion>2.0</SchemaVersion>\r
+ <ProjectVersion>7.0</ProjectVersion>\r
+ <ToolchainName>com.Atmel.AVRGCC8.C</ToolchainName>\r
+ <ProjectGuid>{7a5672fe-8226-4158-b931-e1f36b9a8858}</ProjectGuid>\r
+ <avrdevice>ATtiny84A</avrdevice>\r
+ <avrdeviceseries>none</avrdeviceseries>\r
+ <OutputType>Executable</OutputType>\r
+ <Language>C</Language>\r
+ <OutputFileName>$(MSBuildProjectName)</OutputFileName>\r
+ <OutputFileExtension>.elf</OutputFileExtension>\r
+ <OutputDirectory>$(MSBuildProjectDirectory)\$(Configuration)</OutputDirectory>\r
+ <AssemblyName>DS18B20_DS2438</AssemblyName>\r
+ <Name>DS18B20_SHT_DS18B20_SHT</Name>\r
+ <RootNamespace>DS18B20_DS2438</RootNamespace>\r
+ <ToolchainFlavour>Native</ToolchainFlavour>\r
+ <KeepTimersRunning>true</KeepTimersRunning>\r
+ <OverrideVtor>false</OverrideVtor>\r
+ <CacheFlash>true</CacheFlash>\r
+ <ProgFlashFromRam>true</ProgFlashFromRam>\r
+ <RamSnippetAddress>0x20000000</RamSnippetAddress>\r
+ <UncachedRange />\r
+ <preserveEEPROM>true</preserveEEPROM>\r
+ <OverrideVtorValue>exception_table</OverrideVtorValue>\r
+ <BootSegment>2</BootSegment>\r
+ <eraseonlaunchrule>1</eraseonlaunchrule>\r
+ <AsfFrameworkConfig>\r
+ <framework-data>\r
+ <options />\r
+ <configurations />\r
+ <files />\r
+ <documentation help="" />\r
+ <offline-documentation help="" />\r
+ <dependencies>\r
+ <content-extension eid="atmel.asf" uuidref="Atmel.ASF" version="3.28.1" />\r
+ </dependencies>\r
+ </framework-data>\r
+ </AsfFrameworkConfig>\r
+ <avrtool>com.atmel.avrdbg.tool.atmelice</avrtool>\r
+ <com_atmel_avrdbg_tool_atmelice>\r
+ <ToolOptions>\r
+ <InterfaceProperties>\r
+ </InterfaceProperties>\r
+ <InterfaceName>debugWIRE</InterfaceName>\r
+ </ToolOptions>\r
+ <ToolType>com.atmel.avrdbg.tool.atmelice</ToolType>\r
+ <ToolNumber>J41800000789</ToolNumber>\r
+ <ToolName>Atmel-ICE</ToolName>\r
+ </com_atmel_avrdbg_tool_atmelice>\r
+ <avrtoolinterface>debugWIRE</avrtoolinterface>\r
+ <com_atmel_avrdbg_tool_simulator>\r
+ <ToolOptions>\r
+ <InterfaceProperties>\r
+ </InterfaceProperties>\r
+ <InterfaceName>debugWIRE</InterfaceName>\r
+ </ToolOptions>\r
+ <ToolType>com.atmel.avrdbg.tool.simulator</ToolType>\r
+ <ToolNumber>\r
+ </ToolNumber>\r
+ <ToolName>Simulator</ToolName>\r
+ </com_atmel_avrdbg_tool_simulator>\r
+ <ExternalProgrammingToolCommand />\r
+ <avrtoolserialnumber>J41800000789</avrtoolserialnumber>\r
+ <avrdeviceexpectedsignature>0x1E930C</avrdeviceexpectedsignature>\r
+ <custom>\r
+ <ToolOptions xmlns="">\r
+ <InterfaceProperties>\r
+ </InterfaceProperties>\r
+ <InterfaceName>debugWIRE</InterfaceName>\r
+ </ToolOptions>\r
+ <ToolType xmlns="">custom</ToolType>\r
+ <ToolNumber xmlns="">\r
+ </ToolNumber>\r
+ <ToolName xmlns="">Custom Programming Tool</ToolName>\r
+ </custom>\r
+ </PropertyGroup>\r
+ <PropertyGroup Condition=" '$(Configuration)' == 'Release' ">\r
+ <ToolchainSettings>\r
+ <AvrGcc>\r
+ <avrgcc.common.Device>-mmcu=attiny84a -B "%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.68\gcc\dev\attiny84a"</avrgcc.common.Device>\r
+ <avrgcc.common.outputfiles.hex>True</avrgcc.common.outputfiles.hex>\r
+ <avrgcc.common.outputfiles.lss>True</avrgcc.common.outputfiles.lss>\r
+ <avrgcc.common.outputfiles.eep>True</avrgcc.common.outputfiles.eep>\r
+ <avrgcc.common.outputfiles.srec>True</avrgcc.common.outputfiles.srec>\r
+ <avrgcc.common.outputfiles.usersignatures>False</avrgcc.common.outputfiles.usersignatures>\r
+ <avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>True</avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>\r
+ <avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>True</avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>\r
+ <avrgcc.compiler.symbols.DefSymbols>\r
+ <ListValues>\r
+ <Value>DEBUG</Value>\r
+ </ListValues>\r
+ </avrgcc.compiler.symbols.DefSymbols>\r
+ <avrgcc.compiler.directories.IncludePaths>\r
+ <ListValues>\r
+ <Value>%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.68\include</Value>\r
+ </ListValues>\r
+ </avrgcc.compiler.directories.IncludePaths>\r
+ <avrgcc.compiler.optimization.level>Optimize (-O1)</avrgcc.compiler.optimization.level>\r
+ <avrgcc.compiler.optimization.PackStructureMembers>True</avrgcc.compiler.optimization.PackStructureMembers>\r
+ <avrgcc.compiler.optimization.AllocateBytesNeededForEnum>True</avrgcc.compiler.optimization.AllocateBytesNeededForEnum>\r
+ <avrgcc.compiler.optimization.DebugLevel>Default (-g2)</avrgcc.compiler.optimization.DebugLevel>\r
+ <avrgcc.compiler.warnings.AllWarnings>True</avrgcc.compiler.warnings.AllWarnings>\r
+ <avrgcc.linker.libraries.Libraries>\r
+ <ListValues>\r
+ <Value>libm</Value>\r
+ </ListValues>\r
+ </avrgcc.linker.libraries.Libraries>\r
+ <avrgcc.assembler.debugging.DebugLevel>Default (-Wa,-g)</avrgcc.assembler.debugging.DebugLevel>\r
+ </AvrGcc>\r
+ </ToolchainSettings>\r
+ </PropertyGroup>\r
+ <PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">\r
+ <ToolchainSettings>\r
+ <AvrGcc>\r
+ <avrgcc.common.Device>-mmcu=attiny84a -B "%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.68\gcc\dev\attiny84a"</avrgcc.common.Device>\r
+ <avrgcc.common.outputfiles.hex>True</avrgcc.common.outputfiles.hex>\r
+ <avrgcc.common.outputfiles.lss>True</avrgcc.common.outputfiles.lss>\r
+ <avrgcc.common.outputfiles.eep>True</avrgcc.common.outputfiles.eep>\r
+ <avrgcc.common.outputfiles.srec>True</avrgcc.common.outputfiles.srec>\r
+ <avrgcc.common.outputfiles.usersignatures>False</avrgcc.common.outputfiles.usersignatures>\r
+ <avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>True</avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>\r
+ <avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>True</avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>\r
+ <avrgcc.compiler.symbols.DefSymbols>\r
+ <ListValues>\r
+ <Value>DEBUG</Value>\r
+ </ListValues>\r
+ </avrgcc.compiler.symbols.DefSymbols>\r
+ <avrgcc.compiler.directories.IncludePaths>\r
+ <ListValues>\r
+ <Value>%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.68\include</Value>\r
+ </ListValues>\r
+ </avrgcc.compiler.directories.IncludePaths>\r
+ <avrgcc.compiler.optimization.level>Optimize (-O1)</avrgcc.compiler.optimization.level>\r
+ <avrgcc.compiler.optimization.PackStructureMembers>True</avrgcc.compiler.optimization.PackStructureMembers>\r
+ <avrgcc.compiler.optimization.AllocateBytesNeededForEnum>True</avrgcc.compiler.optimization.AllocateBytesNeededForEnum>\r
+ <avrgcc.compiler.optimization.DebugLevel>Default (-g2)</avrgcc.compiler.optimization.DebugLevel>\r
+ <avrgcc.compiler.warnings.AllWarnings>True</avrgcc.compiler.warnings.AllWarnings>\r
+ <avrgcc.linker.libraries.Libraries>\r
+ <ListValues>\r
+ <Value>libm</Value>\r
+ </ListValues>\r
+ </avrgcc.linker.libraries.Libraries>\r
+ <avrgcc.assembler.debugging.DebugLevel>Default (-Wa,-g)</avrgcc.assembler.debugging.DebugLevel>\r
+ </AvrGcc>\r
+ </ToolchainSettings>\r
+ </PropertyGroup>\r
+ <ItemGroup>\r
+ <Compile Include="..\common\calibr.c">\r
+ <SubType>compile</SubType>\r
+ <Link>calibr.c</Link>\r
+ </Compile>\r
+ <Compile Include="..\common\I2C\SHT2xV2.c">\r
+ <SubType>compile</SubType>\r
+ <Link>SHT2xV2.c</Link>\r
+ </Compile>\r
+ <Compile Include="..\common\I2C\USI_TWI_Master.c">\r
+ <SubType>compile</SubType>\r
+ <Link>USI_TWI_Master.c</Link>\r
+ </Compile>\r
+ <Compile Include="..\common\OWDS18B20_DS18B20.S">\r
+ <SubType>compile</SubType>\r
+ <Link>OWDS18B20_DS18B20.S</Link>\r
+ </Compile>\r
+ <Compile Include="DS18B20_DS18B20.c">\r
+ <SubType>compile</SubType>\r
+ </Compile>\r
+ </ItemGroup>\r
+ <Import Project="$(AVRSTUDIO_EXE_PATH)\\Vs\\Compiler.targets" />\r
+</Project>
\ No newline at end of file
--- /dev/null
+// Copyright (c) 2017, Tobias Mueller tm(at)tm3d.de\r
+// All rights reserved.\r
+//\r
+// Redistribution and use in source and binary forms, with or without\r
+// modification, are permitted provided that the following conditions are\r
+// met:\r
+//\r
+// * Redistributions of source code must retain the above copyright\r
+// notice, this list of conditions and the following disclaimer.\r
+// * Redistributions in binary form must reproduce the above copyright\r
+// notice, this list of conditions and the following disclaimer in the\r
+// documentation and/or other materials provided with the\r
+// distribution.\r
+// * All advertising materials mentioning features or use of this\r
+// software must display the following acknowledgement: This product\r
+// includes software developed by tm3d.de and its contributors.\r
+// * Neither the name of tm3d.de nor the names of its contributors may\r
+// be used to endorse or promote products derived from this software\r
+// without specific prior written permission.\r
+//\r
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\r
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\r
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\r
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\r
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\r
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\r
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\r
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\r
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+\r
+#define F_CPU 8000000UL\r
+#include <avr/io.h>\r
+#include <avr/interrupt.h>\r
+#include <util/delay.h>\r
+#include <avr/wdt.h>\r
+#include <avr/sleep.h>\r
+#include <avr/pgmspace.h>\r
+#include "../common/I2C/USI_TWI_Master.h"\r
+#include "../common/I2C/SHT3x.h"\r
+#include "../common/calibr.h"\r
+#include "../common/owSlave_tools.h"\r
+\r
+OWST_EXTERN_VARS\r
+\r
+\r
+uint8_t owid1[8]={0x28, 0xA3, 0xD9, 0x84, 0x00, 0x26, 0x05, 0x35};/**/\r
+uint8_t owid2[8]={0x28, 0xA4, 0xD9, 0x84, 0x00, 0x26, 0x05, 0xB0};/**/\r
+\r
+uint8_t config_info1[26]={0x01,0x01, 0x00,0x00, 0x00,0x00, 0x00,0x00, 0x02,7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};\r
+uint8_t config_info2[26]={0x04,0x01, 0x00,0x00, 0x00,0x00, 0x00,0x00, 0x02,7,0x00,0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};\r
+\r
+ \r
+\r
+OWST_WDT_ISR\r
+\r
+typedef union {\r
+ volatile uint8_t bytes[8];\r
+ struct {\r
+ uint16_t temp; //0\r
+ uint8_t TH; //2\r
+ uint8_t TL; //3\r
+ uint8_t config; //4\r
+ uint8_t rrFF; //5\r
+ uint8_t rr00; //6\r
+ uint8_t rr10; //7\r
+ };\r
+} pack1_t;\r
+volatile pack1_t pack1,pack2;\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+OWST_TESTSW\r
+\r
+\r
+uint8_t userRegister[1];\r
+int16_t sRH,sT;\r
+double temperatureC,humidityRH;\r
+volatile double l;\r
+ uint32_t P;\r
+ int32_t t;\r
+\r
+int main(void){\r
+ OWST_INIT_USI_ON\r
+ \r
+ pack1.temp=0x0550;\r
+ pack1.config=0x7F;\r
+ pack1.TH=75;\r
+ pack1.TL=70;\r
+ pack1.rrFF=0xFF;\r
+ pack1.rr00=0;\r
+ pack1.rr10=0x10;\r
+ PORTA=0xFF;\r
+ PORTB=0xFF;\r
+ OWINIT();\r
+ OWST_EN_PULLUP\r
+\r
+ OWST_WDR_CONFIG8\r
+ \r
+ if (testSW()) {\r
+ config_info2[5]=12;\r
+ }else{\r
+ config_info2[5]=7;\r
+ }\r
+\r
+ MCUSR=0;\r
+ USI_TWI_Master_Initialise();\r
+ \r
+ initSHT3x(0);\r
+ _delay_ms(10);\r
+ gcontrol=1;\r
+ sei();\r
+ while(1) {\r
+ \r
+ if (gcontrol) {\r
+ wdcounter=3;\r
+ \r
+ }\r
+\r
+ if (wdcounter>2) {\r
+ getSHT3xHumTemp(0,&temperatureC,&humidityRH);\r
+ double RH=calibr_hum(temperatureC,-0.2,humidityRH)*16.0;\r
+ double TC =(temperatureC+0.2) *16.0;\r
+ uint16_t w1=TC;\r
+ uint8_t t81=w1>>4;\r
+ uint8_t af1=0;\r
+ if (t81>pack1.TH) af1=1;\r
+ if (t81<=pack1.TL) af1=1;\r
+\r
+ cli();\r
+ pack1.temp=w1;\r
+ //pack.temp++;\r
+ alarmflag=af1;\r
+ sei();\r
+\r
+\r
+ uint16_t w2=RH;\r
+ \r
+ cli();\r
+ pack2.temp=w2;\r
+ sei();\r
+ //pack.temp++;\r
+ gcontrol=0;\r
+\r
+ \r
+\r
+ wdcounter=0;\r
+ }\r
+ \r
+ if (gcontrol) {\r
+ gcontrol=0;\r
+ EXTERN_SLEEP();\r
+ \r
+ }\r
+\r
+ OWST_MAIN_END \r
+ }\r
+\r
+\r
+}
\ No newline at end of file
--- /dev/null
+\r
+Microsoft Visual Studio Solution File, Format Version 12.00\r
+# Atmel Studio Solution File, Format Version 11.00\r
+VisualStudioVersion = 14.0.23107.0\r
+MinimumVisualStudioVersion = 10.0.40219.1\r
+Project("{54F91283-7BC4-4236-8FF9-10F437C3AD48}") = "DS18B20_SHT_DS18B20_SHT", "DS18B20_SHT_DS18B20_SHT.cproj", "{7A5672FE-8226-4158-B931-E1F36B9A8858}"\r
+EndProject\r
+Global\r
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution\r
+ Debug|AVR = Debug|AVR\r
+ Release|AVR = Release|AVR\r
+ EndGlobalSection\r
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution\r
+ {7A5672FE-8226-4158-B931-E1F36B9A8858}.Debug|AVR.ActiveCfg = Debug|AVR\r
+ {7A5672FE-8226-4158-B931-E1F36B9A8858}.Debug|AVR.Build.0 = Debug|AVR\r
+ {7A5672FE-8226-4158-B931-E1F36B9A8858}.Release|AVR.ActiveCfg = Release|AVR\r
+ {7A5672FE-8226-4158-B931-E1F36B9A8858}.Release|AVR.Build.0 = Release|AVR\r
+ EndGlobalSection\r
+ GlobalSection(SolutionProperties) = preSolution\r
+ HideSolutionNode = FALSE\r
+ EndGlobalSection\r
+EndGlobal\r
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>\r
+<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
+ <PropertyGroup>\r
+ <SchemaVersion>2.0</SchemaVersion>\r
+ <ProjectVersion>7.0</ProjectVersion>\r
+ <ToolchainName>com.Atmel.AVRGCC8.C</ToolchainName>\r
+ <ProjectGuid>{7a5672fe-8226-4158-b931-e1f36b9a8858}</ProjectGuid>\r
+ <avrdevice>ATtiny84A</avrdevice>\r
+ <avrdeviceseries>none</avrdeviceseries>\r
+ <OutputType>Executable</OutputType>\r
+ <Language>C</Language>\r
+ <OutputFileName>$(MSBuildProjectName)</OutputFileName>\r
+ <OutputFileExtension>.elf</OutputFileExtension>\r
+ <OutputDirectory>$(MSBuildProjectDirectory)\$(Configuration)</OutputDirectory>\r
+ <AssemblyName>DS18B20_DS2438</AssemblyName>\r
+ <Name>DS18B20_SHT_DS18B20_SHT</Name>\r
+ <RootNamespace>DS18B20_DS2438</RootNamespace>\r
+ <ToolchainFlavour>Native</ToolchainFlavour>\r
+ <KeepTimersRunning>true</KeepTimersRunning>\r
+ <OverrideVtor>false</OverrideVtor>\r
+ <CacheFlash>true</CacheFlash>\r
+ <ProgFlashFromRam>true</ProgFlashFromRam>\r
+ <RamSnippetAddress>0x20000000</RamSnippetAddress>\r
+ <UncachedRange />\r
+ <preserveEEPROM>true</preserveEEPROM>\r
+ <OverrideVtorValue>exception_table</OverrideVtorValue>\r
+ <BootSegment>2</BootSegment>\r
+ <eraseonlaunchrule>1</eraseonlaunchrule>\r
+ <AsfFrameworkConfig>\r
+ <framework-data>\r
+ <options />\r
+ <configurations />\r
+ <files />\r
+ <documentation help="" />\r
+ <offline-documentation help="" />\r
+ <dependencies>\r
+ <content-extension eid="atmel.asf" uuidref="Atmel.ASF" version="3.28.1" />\r
+ </dependencies>\r
+ </framework-data>\r
+ </AsfFrameworkConfig>\r
+ <avrtool>com.atmel.avrdbg.tool.atmelice</avrtool>\r
+ <com_atmel_avrdbg_tool_atmelice>\r
+ <ToolOptions>\r
+ <InterfaceProperties>\r
+ </InterfaceProperties>\r
+ <InterfaceName>debugWIRE</InterfaceName>\r
+ </ToolOptions>\r
+ <ToolType>com.atmel.avrdbg.tool.atmelice</ToolType>\r
+ <ToolNumber>J41800000789</ToolNumber>\r
+ <ToolName>Atmel-ICE</ToolName>\r
+ </com_atmel_avrdbg_tool_atmelice>\r
+ <avrtoolinterface>debugWIRE</avrtoolinterface>\r
+ <com_atmel_avrdbg_tool_simulator>\r
+ <ToolOptions>\r
+ <InterfaceProperties>\r
+ </InterfaceProperties>\r
+ <InterfaceName>debugWIRE</InterfaceName>\r
+ </ToolOptions>\r
+ <ToolType>com.atmel.avrdbg.tool.simulator</ToolType>\r
+ <ToolNumber>\r
+ </ToolNumber>\r
+ <ToolName>Simulator</ToolName>\r
+ </com_atmel_avrdbg_tool_simulator>\r
+ <ExternalProgrammingToolCommand />\r
+ <avrtoolserialnumber>J41800000789</avrtoolserialnumber>\r
+ <avrdeviceexpectedsignature>0x1E930C</avrdeviceexpectedsignature>\r
+ <custom>\r
+ <ToolOptions xmlns="">\r
+ <InterfaceProperties>\r
+ </InterfaceProperties>\r
+ <InterfaceName>debugWIRE</InterfaceName>\r
+ </ToolOptions>\r
+ <ToolType xmlns="">custom</ToolType>\r
+ <ToolNumber xmlns="">\r
+ </ToolNumber>\r
+ <ToolName xmlns="">Custom Programming Tool</ToolName>\r
+ </custom>\r
+ </PropertyGroup>\r
+ <PropertyGroup Condition=" '$(Configuration)' == 'Release' ">\r
+ <ToolchainSettings>\r
+ <AvrGcc>\r
+ <avrgcc.common.Device>-mmcu=attiny84a -B "%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.68\gcc\dev\attiny84a"</avrgcc.common.Device>\r
+ <avrgcc.common.outputfiles.hex>True</avrgcc.common.outputfiles.hex>\r
+ <avrgcc.common.outputfiles.lss>True</avrgcc.common.outputfiles.lss>\r
+ <avrgcc.common.outputfiles.eep>True</avrgcc.common.outputfiles.eep>\r
+ <avrgcc.common.outputfiles.srec>True</avrgcc.common.outputfiles.srec>\r
+ <avrgcc.common.outputfiles.usersignatures>False</avrgcc.common.outputfiles.usersignatures>\r
+ <avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>True</avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>\r
+ <avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>True</avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>\r
+ <avrgcc.compiler.symbols.DefSymbols>\r
+ <ListValues>\r
+ <Value>DEBUG</Value>\r
+ </ListValues>\r
+ </avrgcc.compiler.symbols.DefSymbols>\r
+ <avrgcc.compiler.directories.IncludePaths>\r
+ <ListValues>\r
+ <Value>%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.68\include</Value>\r
+ </ListValues>\r
+ </avrgcc.compiler.directories.IncludePaths>\r
+ <avrgcc.compiler.optimization.level>Optimize (-O1)</avrgcc.compiler.optimization.level>\r
+ <avrgcc.compiler.optimization.PackStructureMembers>True</avrgcc.compiler.optimization.PackStructureMembers>\r
+ <avrgcc.compiler.optimization.AllocateBytesNeededForEnum>True</avrgcc.compiler.optimization.AllocateBytesNeededForEnum>\r
+ <avrgcc.compiler.optimization.DebugLevel>Default (-g2)</avrgcc.compiler.optimization.DebugLevel>\r
+ <avrgcc.compiler.warnings.AllWarnings>True</avrgcc.compiler.warnings.AllWarnings>\r
+ <avrgcc.linker.libraries.Libraries>\r
+ <ListValues>\r
+ <Value>libm</Value>\r
+ </ListValues>\r
+ </avrgcc.linker.libraries.Libraries>\r
+ <avrgcc.assembler.debugging.DebugLevel>Default (-Wa,-g)</avrgcc.assembler.debugging.DebugLevel>\r
+ </AvrGcc>\r
+ </ToolchainSettings>\r
+ </PropertyGroup>\r
+ <PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">\r
+ <ToolchainSettings>\r
+ <AvrGcc>\r
+ <avrgcc.common.Device>-mmcu=attiny84a -B "%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.68\gcc\dev\attiny84a"</avrgcc.common.Device>\r
+ <avrgcc.common.outputfiles.hex>True</avrgcc.common.outputfiles.hex>\r
+ <avrgcc.common.outputfiles.lss>True</avrgcc.common.outputfiles.lss>\r
+ <avrgcc.common.outputfiles.eep>True</avrgcc.common.outputfiles.eep>\r
+ <avrgcc.common.outputfiles.srec>True</avrgcc.common.outputfiles.srec>\r
+ <avrgcc.common.outputfiles.usersignatures>False</avrgcc.common.outputfiles.usersignatures>\r
+ <avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>True</avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>\r
+ <avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>True</avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>\r
+ <avrgcc.compiler.symbols.DefSymbols>\r
+ <ListValues>\r
+ <Value>DEBUG</Value>\r
+ </ListValues>\r
+ </avrgcc.compiler.symbols.DefSymbols>\r
+ <avrgcc.compiler.directories.IncludePaths>\r
+ <ListValues>\r
+ <Value>%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.68\include</Value>\r
+ </ListValues>\r
+ </avrgcc.compiler.directories.IncludePaths>\r
+ <avrgcc.compiler.optimization.level>Optimize (-O1)</avrgcc.compiler.optimization.level>\r
+ <avrgcc.compiler.optimization.PackStructureMembers>True</avrgcc.compiler.optimization.PackStructureMembers>\r
+ <avrgcc.compiler.optimization.AllocateBytesNeededForEnum>True</avrgcc.compiler.optimization.AllocateBytesNeededForEnum>\r
+ <avrgcc.compiler.optimization.DebugLevel>Default (-g2)</avrgcc.compiler.optimization.DebugLevel>\r
+ <avrgcc.compiler.warnings.AllWarnings>True</avrgcc.compiler.warnings.AllWarnings>\r
+ <avrgcc.linker.libraries.Libraries>\r
+ <ListValues>\r
+ <Value>libm</Value>\r
+ </ListValues>\r
+ </avrgcc.linker.libraries.Libraries>\r
+ <avrgcc.assembler.debugging.DebugLevel>Default (-Wa,-g)</avrgcc.assembler.debugging.DebugLevel>\r
+ </AvrGcc>\r
+ </ToolchainSettings>\r
+ </PropertyGroup>\r
+ <ItemGroup>\r
+ <Compile Include="..\common\calibr.c">\r
+ <SubType>compile</SubType>\r
+ <Link>calibr.c</Link>\r
+ </Compile>\r
+ <Compile Include="..\common\I2C\SHT3x.c">\r
+ <SubType>compile</SubType>\r
+ <Link>SHT3x.c</Link>\r
+ </Compile>\r
+ <Compile Include="..\common\I2C\USI_TWI_Master.c">\r
+ <SubType>compile</SubType>\r
+ <Link>USI_TWI_Master.c</Link>\r
+ </Compile>\r
+ <Compile Include="..\common\OWDS18B20_DS18B20.S">\r
+ <SubType>compile</SubType>\r
+ <Link>OWDS18B20_DS18B20.S</Link>\r
+ </Compile>\r
+ <Compile Include="DS18B20_DS18B20.c">\r
+ <SubType>compile</SubType>\r
+ </Compile>\r
+ </ItemGroup>\r
+ <Import Project="$(AVRSTUDIO_EXE_PATH)\\Vs\\Compiler.targets" />\r
+</Project>
\ No newline at end of file
<documentation help="" />\r
<offline-documentation help="" />\r
<dependencies>\r
- <content-extension eid="atmel.asf" uuidref="Atmel.ASF" version="3.22.0" />\r
+ <content-extension eid="atmel.asf" uuidref="Atmel.ASF" version="3.28.1" />\r
</dependencies>\r
</framework-data>\r
</AsfFrameworkConfig>\r
<InterfaceName>debugWIRE</InterfaceName>\r
</ToolOptions>\r
<ToolType>com.atmel.avrdbg.tool.atmelice</ToolType>\r
- <ToolNumber>J41800000779</ToolNumber>\r
+ <ToolNumber>J41800000789</ToolNumber>\r
<ToolName>Atmel-ICE</ToolName>\r
</com_atmel_avrdbg_tool_atmelice>\r
<avrtoolinterface>debugWIRE</avrtoolinterface>\r
<ExternalProgrammingToolCommand />\r
+ <avrtoolserialnumber>J41800000789</avrtoolserialnumber>\r
+ <avrdeviceexpectedsignature>0x1E930C</avrdeviceexpectedsignature>\r
</PropertyGroup>\r
<PropertyGroup Condition=" '$(Configuration)' == 'Release' ">\r
<ToolchainSettings>\r
<AvrGcc>\r
- <avrgcc.common.Device>-mmcu=attiny84a -B "%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.79\gcc\dev\attiny84a"</avrgcc.common.Device>\r
- <avrgcc.common.outputfiles.hex>True</avrgcc.common.outputfiles.hex>\r
- <avrgcc.common.outputfiles.lss>True</avrgcc.common.outputfiles.lss>\r
- <avrgcc.common.outputfiles.eep>True</avrgcc.common.outputfiles.eep>\r
- <avrgcc.common.outputfiles.srec>True</avrgcc.common.outputfiles.srec>\r
- <avrgcc.common.outputfiles.usersignatures>False</avrgcc.common.outputfiles.usersignatures>\r
- <avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>True</avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>\r
- <avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>True</avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>\r
- <avrgcc.compiler.symbols.DefSymbols>\r
- <ListValues>\r
- <Value>DEBUG</Value>\r
- </ListValues>\r
- </avrgcc.compiler.symbols.DefSymbols>\r
- <avrgcc.compiler.directories.IncludePaths>\r
- <ListValues>\r
- <Value>%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.79\include</Value>\r
- </ListValues>\r
- </avrgcc.compiler.directories.IncludePaths>\r
- <avrgcc.compiler.optimization.level>Optimize (-O1)</avrgcc.compiler.optimization.level>\r
- <avrgcc.compiler.optimization.PackStructureMembers>True</avrgcc.compiler.optimization.PackStructureMembers>\r
- <avrgcc.compiler.optimization.AllocateBytesNeededForEnum>True</avrgcc.compiler.optimization.AllocateBytesNeededForEnum>\r
- <avrgcc.compiler.optimization.DebugLevel>Default (-g2)</avrgcc.compiler.optimization.DebugLevel>\r
- <avrgcc.compiler.warnings.AllWarnings>True</avrgcc.compiler.warnings.AllWarnings>\r
- <avrgcc.linker.libraries.Libraries>\r
- <ListValues>\r
- <Value>libm</Value>\r
- </ListValues>\r
- </avrgcc.linker.libraries.Libraries>\r
- <avrgcc.assembler.general.IncludePaths>\r
- <ListValues>\r
- <Value>%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.79\include</Value>\r
- </ListValues>\r
- </avrgcc.assembler.general.IncludePaths>\r
- <avrgcc.assembler.debugging.DebugLevel>Default (-Wa,-g)</avrgcc.assembler.debugging.DebugLevel>\r
-</AvrGcc>\r
+ <avrgcc.common.Device>-mmcu=attiny84a -B "%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.79\gcc\dev\attiny84a"</avrgcc.common.Device>\r
+ <avrgcc.common.outputfiles.hex>True</avrgcc.common.outputfiles.hex>\r
+ <avrgcc.common.outputfiles.lss>True</avrgcc.common.outputfiles.lss>\r
+ <avrgcc.common.outputfiles.eep>True</avrgcc.common.outputfiles.eep>\r
+ <avrgcc.common.outputfiles.srec>True</avrgcc.common.outputfiles.srec>\r
+ <avrgcc.common.outputfiles.usersignatures>False</avrgcc.common.outputfiles.usersignatures>\r
+ <avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>True</avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>\r
+ <avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>True</avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>\r
+ <avrgcc.compiler.symbols.DefSymbols>\r
+ <ListValues>\r
+ <Value>DEBUG</Value>\r
+ </ListValues>\r
+ </avrgcc.compiler.symbols.DefSymbols>\r
+ <avrgcc.compiler.directories.IncludePaths>\r
+ <ListValues>\r
+ <Value>%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.79\include</Value>\r
+ </ListValues>\r
+ </avrgcc.compiler.directories.IncludePaths>\r
+ <avrgcc.compiler.optimization.level>Optimize (-O1)</avrgcc.compiler.optimization.level>\r
+ <avrgcc.compiler.optimization.PackStructureMembers>True</avrgcc.compiler.optimization.PackStructureMembers>\r
+ <avrgcc.compiler.optimization.AllocateBytesNeededForEnum>True</avrgcc.compiler.optimization.AllocateBytesNeededForEnum>\r
+ <avrgcc.compiler.optimization.DebugLevel>Default (-g2)</avrgcc.compiler.optimization.DebugLevel>\r
+ <avrgcc.compiler.warnings.AllWarnings>True</avrgcc.compiler.warnings.AllWarnings>\r
+ <avrgcc.linker.libraries.Libraries>\r
+ <ListValues>\r
+ <Value>libm</Value>\r
+ </ListValues>\r
+ </avrgcc.linker.libraries.Libraries>\r
+ <avrgcc.assembler.general.IncludePaths>\r
+ <ListValues>\r
+ <Value>%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.79\include</Value>\r
+ </ListValues>\r
+ </avrgcc.assembler.general.IncludePaths>\r
+ <avrgcc.assembler.debugging.DebugLevel>Default (-Wa,-g)</avrgcc.assembler.debugging.DebugLevel>\r
+ </AvrGcc>\r
</ToolchainSettings>\r
</PropertyGroup>\r
<PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">\r
<ToolchainSettings>\r
<AvrGcc>\r
- <avrgcc.common.Device>-mmcu=attiny84a -B "%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.79\gcc\dev\attiny84a"</avrgcc.common.Device>\r
- <avrgcc.common.outputfiles.hex>True</avrgcc.common.outputfiles.hex>\r
- <avrgcc.common.outputfiles.lss>True</avrgcc.common.outputfiles.lss>\r
- <avrgcc.common.outputfiles.eep>True</avrgcc.common.outputfiles.eep>\r
- <avrgcc.common.outputfiles.srec>True</avrgcc.common.outputfiles.srec>\r
- <avrgcc.common.outputfiles.usersignatures>False</avrgcc.common.outputfiles.usersignatures>\r
- <avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>True</avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>\r
- <avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>True</avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>\r
- <avrgcc.compiler.symbols.DefSymbols>\r
- <ListValues>\r
- <Value>DEBUG</Value>\r
- </ListValues>\r
- </avrgcc.compiler.symbols.DefSymbols>\r
- <avrgcc.compiler.directories.IncludePaths>\r
- <ListValues>\r
- <Value>%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.79\include</Value>\r
- </ListValues>\r
- </avrgcc.compiler.directories.IncludePaths>\r
- <avrgcc.compiler.optimization.level>Optimize (-O1)</avrgcc.compiler.optimization.level>\r
- <avrgcc.compiler.optimization.PackStructureMembers>True</avrgcc.compiler.optimization.PackStructureMembers>\r
- <avrgcc.compiler.optimization.AllocateBytesNeededForEnum>True</avrgcc.compiler.optimization.AllocateBytesNeededForEnum>\r
- <avrgcc.compiler.optimization.DebugLevel>Default (-g2)</avrgcc.compiler.optimization.DebugLevel>\r
- <avrgcc.compiler.warnings.AllWarnings>True</avrgcc.compiler.warnings.AllWarnings>\r
- <avrgcc.linker.libraries.Libraries>\r
- <ListValues>\r
- <Value>libm</Value>\r
- </ListValues>\r
- </avrgcc.linker.libraries.Libraries>\r
- <avrgcc.assembler.general.IncludePaths>\r
- <ListValues>\r
- <Value>%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.79\include</Value>\r
- </ListValues>\r
- </avrgcc.assembler.general.IncludePaths>\r
- <avrgcc.assembler.debugging.DebugLevel>Default (-Wa,-g)</avrgcc.assembler.debugging.DebugLevel>\r
-</AvrGcc>\r
+ <avrgcc.common.Device>-mmcu=attiny84a -B "%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.79\gcc\dev\attiny84a"</avrgcc.common.Device>\r
+ <avrgcc.common.outputfiles.hex>True</avrgcc.common.outputfiles.hex>\r
+ <avrgcc.common.outputfiles.lss>True</avrgcc.common.outputfiles.lss>\r
+ <avrgcc.common.outputfiles.eep>True</avrgcc.common.outputfiles.eep>\r
+ <avrgcc.common.outputfiles.srec>True</avrgcc.common.outputfiles.srec>\r
+ <avrgcc.common.outputfiles.usersignatures>False</avrgcc.common.outputfiles.usersignatures>\r
+ <avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>True</avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>\r
+ <avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>True</avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>\r
+ <avrgcc.compiler.symbols.DefSymbols>\r
+ <ListValues>\r
+ <Value>DEBUG</Value>\r
+ </ListValues>\r
+ </avrgcc.compiler.symbols.DefSymbols>\r
+ <avrgcc.compiler.directories.IncludePaths>\r
+ <ListValues>\r
+ <Value>%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.79\include</Value>\r
+ </ListValues>\r
+ </avrgcc.compiler.directories.IncludePaths>\r
+ <avrgcc.compiler.optimization.level>Optimize (-O1)</avrgcc.compiler.optimization.level>\r
+ <avrgcc.compiler.optimization.PackStructureMembers>True</avrgcc.compiler.optimization.PackStructureMembers>\r
+ <avrgcc.compiler.optimization.AllocateBytesNeededForEnum>True</avrgcc.compiler.optimization.AllocateBytesNeededForEnum>\r
+ <avrgcc.compiler.optimization.DebugLevel>Default (-g2)</avrgcc.compiler.optimization.DebugLevel>\r
+ <avrgcc.compiler.warnings.AllWarnings>True</avrgcc.compiler.warnings.AllWarnings>\r
+ <avrgcc.linker.libraries.Libraries>\r
+ <ListValues>\r
+ <Value>libm</Value>\r
+ </ListValues>\r
+ </avrgcc.linker.libraries.Libraries>\r
+ <avrgcc.assembler.general.IncludePaths>\r
+ <ListValues>\r
+ <Value>%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.79\include</Value>\r
+ </ListValues>\r
+ </avrgcc.assembler.general.IncludePaths>\r
+ <avrgcc.assembler.debugging.DebugLevel>Default (-Wa,-g)</avrgcc.assembler.debugging.DebugLevel>\r
+ </AvrGcc>\r
</ToolchainSettings>\r
</PropertyGroup>\r
<ItemGroup>\r
#include <avr/sleep.h>\r
#include <avr/pgmspace.h>\r
#include "../common/I2C/USI_TWI_Master.h"\r
-#include "../common/I2C/SHT2x.h"\r
+#include "../common/I2C/SHT2xV2.h"\r
+#include "../common/owSlave_tools.h"\r
\r
+OWST_EXTERN_VARS\r
\r
-extern void OWINIT();\r
-extern void EXTERN_SLEEP();\r
+//#define K_Type\r
+#define J_Type\r
\r
+#ifdef K_Type\r
//const float k_rs[54] PROGMEM ={0.000000,24.125000,48.585366,72.731707,96.829268,121.097561,145.700000,170.600000,195.650000,220.625000,245.365854,269.853659,294.119048,318.195122,342.166667,366.000000,389.761905,413.428571,437.023810,460.558140,484.047619,507.511628,530.976190,554.418605,577.883721,601.395349,624.952381,648.571429,672.285714,696.073171,719.976190,744.000000,768.146341,792.439024,816.853659,841.414634,866.125000,890.975000,916.000000,941.179487,966.525000,992.025641,1017.717949,1043.589744,1069.657895,1095.945946,1122.432432,1149.184211,1176.189189,1203.472222,1231.083333,1259.000000,1287.285714,1315.941176};\r
const float k_rs[61] PROGMEM ={ -212.538462, -166.260870, -124.892857, -97.562500, -66.888889, -34.157895, 0.000000, 24.125000, 48.585366, 72.731707, 96.829268, 121.097561, 145.700000, 170.600000, 195.650000, 220.625000, 245.365854, 269.853659, 294.119048, 318.192771, 342.166667, 366.000000, 389.761905, 413.428571, 437.023810, 460.558140, 484.047619, 507.511628, 530.976190, 554.418605, 577.883721, 601.395349, 624.952381, 648.571429, 672.285714, 696.073171, 719.976190, 744.000000, 768.146341, 792.439024, 816.853659, 841.414634, 866.125000, 890.975000, 916.000000, 941.179487, 966.525000, 992.025641, 1017.717949, 1043.589744, 1069.657895, 1095.945946, 1122.432432, 1149.173333, 1176.189189, 1203.472222, 1231.083333, 1259.000000, 1287.285714, 1315.941176, 1344.941176};\r
#define k_ofs 6\r
+#endif\r
+#ifdef J_Type\r
+#define k_ofs 0\r
+//J-Type\r
+const float k_rs[70] PROGMEM ={0, 18.302913, 34.830476, 50.783019, 70.653704, 90.505455, 110.341818, 130.165455, 149.163636, 160.791071, 180.596364, 200.398214, 220.200000, 240.000000, 250.882883, 270.603636, 290.409091, 310.216364, 330.025455, 342.472727, 360.649091, 380.461818, 400.275000, 420.087273, 435.275676, 450.703636, 470.503636, 490.298214, 510.082456, 523.486726, 540.621053, 560.370175, 580.105172, 591.979487, 610.527119, 630.213559, 644.601653, 660.534426, 680.168852, 690.787097, 710.391935, 729.123810, 740.559375, 760.126562, 770.684615, 790.235385, 800.782812, 820.331250, 834.681250, 850.446032, 870.017460, 880.600000, 900.196774, 911.099187, 930.432787, 950.073333, 960.728333, 980.396667, 1000.078333, 1010.772881, 1030.475862, 1050.187931, 1065.717241, 1080.631034, 1100.358621, 1120.089655, 1131.840000,1150.556897, 1170.294737, 1190.035088};\r
+#endif\r
\r
-//const float j_rs[70] PROGMEM ={0, 18.302913, 34.830476, 50.783019, 70.653704, 90.505455, 110.341818, 130.165455, 149.163636, 160.791071, 180.596364, 200.398214, 220.200000, 240.000000, 250.882883, 270.603636, 290.409091, 310.216364, 330.025455, 342.472727, 360.649091, 380.461818, 400.275000, 420.087273, 435.275676, 450.703636, 470.503636, 490.298214, 510.082456, 523.486726, 540.621053, 560.370175, 580.105172, 591.979487, 610.527119, 630.213559, 644.601653, 660.534426, 680.168852, 690.787097, 710.391935, 729.123810, 740.559375, 760.126562, 770.684615, 790.235385, 800.782812, 820.331250, 834.681250, 850.446032, 870.017460, 880.600000, 900.196774, 911.099187, 930.432787, 950.073333, 960.728333, 980.396667, 1000.078333, 1010.772881, 1030.475862, 1050.187931, 1065.717241, 1080.631034, 1100.358621, 1120.089655, 1131.840000,1150.556897, 1170.294737, 1190.035088};\r
double gettemp_rs(double V) {\r
uint8_t iv=(uint8_t)(V+k_ofs);\r
float t0=pgm_read_float(&(k_rs[iv]));\r
uint8_t config_info1[26]={0x01,0x02 ,0x00,0x00, 0x00,0x00, 0x00,0x00, 0x02,6,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; \r
uint8_t config_info2[26]={0x01,0x06, 0x05,0x08, 0x04,0x07, 0x00,0x00, 0x02,7,0x00,7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; \r
\r
-#if (owid>128) \r
-#error "Variable not correct"\r
-#endif\r
-\r
-extern uint8_t mode;\r
-extern uint8_t gcontrol;\r
-extern uint8_t reset_indicator;\r
-extern uint8_t alarmflag;\r
-volatile uint8_t wdcounter=5;\r
-\r
-\r
-#if defined(__AVR_ATtiny24__)||defined(__AVR_ATtiny44__) || defined(__AVR_ATtiny84__) || defined(__AVR_ATtiny24A__)||defined(__AVR_ATtiny44A__) || defined(__AVR_ATtiny84A__)\r
-ISR(WATCHDOG_vect) {\r
-#else\r
-ISR(WDT_vect) {\r
-#endif \r
- //sleep_disable(); // Disable Sleep on Wakeup\r
- wdcounter++;\r
- if (reset_indicator==1) reset_indicator++;\r
- else if (reset_indicator==2) mode=0;\r
-/* if (timeout==2) {\r
- DIS_TIMER;\r
- EN_OWINT;\r
- mode=OWM_SLEEP;\r
- }\r
- timeout++;*/\r
- //sleep_enable(); // Enable Sleep Mode\r
-\r
-}\r
-\r
-int testSW(void) {\r
- uint8_t r;\r
- DDRB&=~(1<<PORTB0); //Eingang\r
- __asm__ __volatile__ ("nop");\r
- PORTB|=(1<<PORTB0); //Pullup\r
- __asm__ __volatile__ ("nop");\r
- __asm__ __volatile__ ("nop");\r
- __asm__ __volatile__ ("nop");\r
- __asm__ __volatile__ ("nop");\r
- __asm__ __volatile__ ("nop");\r
- r=PINB&(1<<PORTB0);\r
- __asm__ __volatile__ ("nop");\r
- PORTB&=~(1<<PORTB0);\r
- __asm__ __volatile__ ("nop");\r
- DDRB|=(1<<PORTB0); //Eingang\r
- return (r==0);\r
- \r
- \r
-}\r
+OWST_WDT_ISR\r
+OWST_TESTSW\r
\r
\r
typedef union {\r
return (double)ADC;\r
}\r
\r
-volatile int16_t am2302_temp;\r
-volatile uint16_t am2302_hum;\r
+volatile int16_t DS2438_2_TEMP;\r
+volatile uint16_t DS2438_2_VAD;\r
+volatile uint16_t DS2438_2_VDD=0x01F4;\r
\r
\r
-uint8_t userRegister[1];\r
-int16_t sRH,sT;\r
-volatile double temperatureC,humidityRH;\r
-volatile double l;\r
\r
-uint8_t max_adr=0;\r
+double temperatureC,humidityRH;\r
+double TC;\r
+double l;\r
\r
int main(void){\r
- //PRR|=(1<<PRADC); // adc for save Power\r
- pack1.temp=0x0550;\r
+ OWST_INIT_ALL_ON\r
+ pack1.temp=0x0550;\r
pack1.config=0x7F;\r
pack1.TH=75;\r
pack1.TL=70;\r
pack1.rr00=0;\r
pack1.rr10=0x10;\r
PORTA=0xFF-(1<<PINA1)-(1<<PINA2);\r
- PORTB=0xFF;\r
OWINIT();\r
\r
- MCUCR &=~(1<<PUD); //All Pins Pullup...\r
- MCUCR |=(1<<BODS);\r
+ OWST_EN_PULLUP\r
+ OWST_WDR_CONFIG1 \r
\r
- WDTCSR |= ((1<<WDCE) ); // Enable the WD Change Bit//| (1<<WDE)\r
- WDTCSR |= (1<<WDIE) | // Enable WDT Interrupt\r
- (1<<WDP2) | (1<<WDP1); // Set Timeout to ~1 seconds\r
if (testSW()) {\r
- config_info2[5]=8;\r
+ config_info2[5]=12;\r
}else{\r
config_info2[5]=7;\r
}\r
- MCUSR=0;\r
USI_TWI_Master_Initialise();\r
- SHT2x_SoftReset();\r
- SHT2x_ReadUserRegister(userRegister);\r
- //(userRegister & ~SHT2x_RES_MASK) | SHT2x_RES_10_13BIT;\r
- SHT2x_WriteUserRegister(userRegister); //write changed user reg\r
- // --- measure humidity with "Hold Master Mode (HM)" ---\r
- SHT2x_MeasurePoll(HUMIDITY, &sRH);\r
- // --- measure temperature with "Polling Mode" (no hold master) ---\r
- SHT2x_MeasurePoll(TEMP, &sT);\r
- //-- calculate humidity and temperature --\r
- //temperatureC = SHT2x_CalcTemperatureC(sT);\r
- //humidityRH = SHT2x_CalcRH(sRH);\r
- \r
+ initSHT2x();\r
+ \r
gcontrol=1;\r
+ for(uint8_t i=0;i<8;i++) pack2.page6[i]=owid1[i];\r
+ pack2.page3[0]=0xF1;\r
sei();\r
ADCSRA=(1<<ADEN)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0);\r
//DDRB|=(1<<PINB1);\r
\r
if (wdcounter>0) {\r
if (par==0) {\r
- //PORTB|=(1<<PINB1); //Dauer 440ms\r
- SHT2x_MeasurePoll(HUMIDITY, &sRH);\r
- // --- measure temperature with "Polling Mode" (no hold master) ---\r
- SHT2x_MeasurePoll(TEMP, &sT);\r
- //-- calculate humidity and temperature --\r
- temperatureC = SHT2x_CalcTemperatureC(sT)*10.0-2;\r
- humidityRH = SHT2x_CalcRH(sRH)*10.0+5;\r
- if (humidityRH>1000) humidityRH=1000;\r
+ getSHT2xHumTemp(&temperatureC,&humidityRH);\r
+ double RH=humidityRH*10.0;\r
+ TC =temperatureC *10.0;\r
+\r
if (testSW()) {\r
- am2302_hum= humidityRH*10.0;\r
- am2302_temp=temperatureC*25.6;\r
- //\r
- config_info2[5]=8;\r
- }else{\r
- double hhum=(1.0546-0.000216*temperatureC)*(humidityRH);\r
- //am2302_hum=0.318*hhum +76.0;\r
- am2302_hum=0.31*hhum +80;\r
- am2302_temp=temperatureC*25.6;\r
- //am2302_temp=am2302_temp-45;\r
+ DS2438_2_VAD=RH;\r
+ DS2438_2_TEMP=TC*25.6;\r
+ \r
+ config_info2[5]=12;\r
+ \r
+ }else{\r
+ \r
+ double hhum=(1.0546-0.000216*TC)*(RH);\r
+ DS2438_2_VAD=0.31*hhum +80;\r
+ DS2438_2_TEMP=TC*25.6;\r
config_info2[5]=7;\r
}\r
}\r
+ DS2438_2_VDD=0x01F4;\r
ares[par]=ADmess();\r
par++;\r
if (par>15) par=0;\r
wdcounter=0;\r
}\r
\r
- if (gcontrol==1) {\r
+ if ((gcontrol&1)==1) {\r
gcontrol=0;\r
sum=0;\r
for(uint8_t i=0;i<16;i++) {\r
sum+=ares[i];\r
}\r
- V=sum/20.0/1024.0*1.12*1000.0/16.0;//Spannung in mV\r
+ V=sum/20.0/1024.0*1.18*1000.0/16.0;//Spannung in mV\r
//V=sum/20.0/1024.0*1.01*1000.0/16.0;\r
int16_t htemp;\r
ktemp=gettemp_rs(V);\r
//htemp=(ktemp*16)/10;\r
- htemp=(ktemp*16+temperatureC*1.6)/10;\r
+ htemp=(ktemp*16+TC*1.6)/10;\r
\r
int16_t w=htemp;\r
int8_t t8=w>>4;\r
-
-Microsoft Visual Studio Solution File, Format Version 12.00
-# Atmel Studio Solution File, Format Version 11.00
-VisualStudioVersion = 14.0.23107.0
-MinimumVisualStudioVersion = 10.0.40219.1
-Project("{54F91283-7BC4-4236-8FF9-10F437C3AD48}") = "DS18B20_Thermocouble_DS2438_SHT", "DS18B20_Thermocouble_DS2438_SHT.cproj", "{7A5672FE-8226-4158-B931-E1F36B9A8858}"
-EndProject
-Global
- GlobalSection(SolutionConfigurationPlatforms) = preSolution
- Debug|AVR = Debug|AVR
- Release|AVR = Release|AVR
- EndGlobalSection
- GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {7A5672FE-8226-4158-B931-E1F36B9A8858}.Debug|AVR.ActiveCfg = Debug|AVR
- {7A5672FE-8226-4158-B931-E1F36B9A8858}.Debug|AVR.Build.0 = Debug|AVR
- {7A5672FE-8226-4158-B931-E1F36B9A8858}.Release|AVR.ActiveCfg = Release|AVR
- {7A5672FE-8226-4158-B931-E1F36B9A8858}.Release|AVR.Build.0 = Release|AVR
- EndGlobalSection
- GlobalSection(SolutionProperties) = preSolution
- HideSolutionNode = FALSE
- EndGlobalSection
-EndGlobal
+\r
+Microsoft Visual Studio Solution File, Format Version 12.00\r
+# Atmel Studio Solution File, Format Version 11.00\r
+VisualStudioVersion = 14.0.23107.0\r
+MinimumVisualStudioVersion = 10.0.40219.1\r
+Project("{54F91283-7BC4-4236-8FF9-10F437C3AD48}") = "DS18B20_Thermocouble_DS2438_SHT", "DS18B20_Thermocouble_DS2438_SHT.cproj", "{7A5672FE-8226-4158-B931-E1F36B9A8858}"\r
+EndProject\r
+Global\r
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution\r
+ Debug|AVR = Debug|AVR\r
+ Release|AVR = Release|AVR\r
+ EndGlobalSection\r
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution\r
+ {7A5672FE-8226-4158-B931-E1F36B9A8858}.Debug|AVR.ActiveCfg = Debug|AVR\r
+ {7A5672FE-8226-4158-B931-E1F36B9A8858}.Debug|AVR.Build.0 = Debug|AVR\r
+ {7A5672FE-8226-4158-B931-E1F36B9A8858}.Release|AVR.ActiveCfg = Release|AVR\r
+ {7A5672FE-8226-4158-B931-E1F36B9A8858}.Release|AVR.Build.0 = Release|AVR\r
+ EndGlobalSection\r
+ GlobalSection(SolutionProperties) = preSolution\r
+ HideSolutionNode = FALSE\r
+ EndGlobalSection\r
+EndGlobal\r
<documentation help="" />\r
<offline-documentation help="" />\r
<dependencies>\r
- <content-extension eid="atmel.asf" uuidref="Atmel.ASF" version="3.28.1" />\r
+ <content-extension eid="atmel.asf" uuidref="Atmel.ASF" version="3.34.1" />\r
</dependencies>\r
</framework-data>\r
</AsfFrameworkConfig>\r
<ToolName>Simulator</ToolName>\r
</com_atmel_avrdbg_tool_simulator>\r
<ExternalProgrammingToolCommand />\r
+ <ResetRule>0</ResetRule>\r
+ <EraseKey />\r
</PropertyGroup>\r
<PropertyGroup Condition=" '$(Configuration)' == 'Release' ">\r
<ToolchainSettings>\r
</ToolchainSettings>\r
</PropertyGroup>\r
<ItemGroup>\r
- <Compile Include="..\common\I2C\SHT2x.c">\r
+ <Compile Include="..\common\I2C\SHT2xV2.c">\r
<SubType>compile</SubType>\r
- <Link>SHT2x.c</Link>\r
+ <Link>SHT2xV2.c</Link>\r
</Compile>\r
<Compile Include="..\common\I2C\USI_TWI_Master.c">\r
<SubType>compile</SubType>\r
#include "../common/I2C/USI_TWI_Master.h"\r
#include "../common/I2C/SHT2xV2.h"\r
#include "../common/calibr.h"\r
+#include "../common/owSlave_tools.h"\r
\r
-extern void OWINIT(void);\r
-extern void EXTERN_SLEEP(void);\r
+OWST_EXTERN_VARS\r
\r
\r
\r
#error "Variable not correct"\r
#endif\r
\r
-extern uint8_t mode;\r
-extern uint8_t gcontrol;\r
-extern uint8_t reset_indicator;\r
-extern uint8_t alarmflag;\r
-volatile uint8_t wdcounter=1;\r
extern uint8_t cpsp;\r
\r
+OWST_WDT_ISR\r
\r
-#if defined(__AVR_ATtiny24__)||defined(__AVR_ATtiny44__) || defined(__AVR_ATtiny84__) || defined(__AVR_ATtiny24A__)||defined(__AVR_ATtiny44A__) || defined(__AVR_ATtiny84A__)\r
-ISR(WATCHDOG_vect) {\r
- #else\r
- ISR(WDT_vect) {\r
- #endif\r
- wdcounter++;\r
- if (reset_indicator==1) reset_indicator++;\r
- else if (reset_indicator==2) mode=0;\r
\r
-}\r
\r
\r
typedef union {\r
\r
\r
\r
- volatile int16_t am2302_temp;\r
- volatile uint16_t am2302_hum;\r
+ volatile int16_t DS2438_2_TEMP;\r
+ volatile uint16_t DS2438_2_VAD;\r
+ volatile uint16_t DS2438_2_VDD=0x01F4;\r
+\r
+ OWST_TESTSW\r
\r
\r
- uint8_t userRegister[1];\r
- int16_t sRH,sT;\r
double temperatureC,humidityRH,hhum;\r
volatile double l;\r
\r
double la[4];\r
uint8_t lainit=1;\r
\r
- int testSW(void) {\r
- uint8_t r;\r
- DDRB&=~(1<<PORTB0); //Eingang\r
- __asm__ __volatile__ ("nop");\r
- PORTB|=(1<<PORTB0); //Pullup\r
- __asm__ __volatile__ ("nop");\r
- __asm__ __volatile__ ("nop");\r
- __asm__ __volatile__ ("nop");\r
- __asm__ __volatile__ ("nop");\r
- __asm__ __volatile__ ("nop");\r
- r=PINB&(1<<PORTB0);\r
- __asm__ __volatile__ ("nop");\r
- PORTB&=~(1<<PORTB0);\r
- __asm__ __volatile__ ("nop");\r
- DDRB|=(1<<PORTB0); //Eingang\r
- return (r==0); //Offen mal HIH4030\r
- \r
- \r
- }\r
\r
\r
#define EEPROM_R0 0\r
weekmaxarr[i]=pack2.r_week_max;\r
}\r
\r
-\r
+ for(uint8_t i=0;i<8;i++) pack2.page6[i]=owid1[i];\r
if (testSW()) {\r
config_info2[5]=12;\r
}else{\r
gcontrol=1;\r
sei();\r
while(1) {\r
- /*if (pack1.config==0x1F) { //Reset R0\r
- pack1.config=0x7F;\r
- R0=1;\r
- pack2.R0=0;\r
- writeEEPROM(EEPROM_R0,0);\r
- }\r
- if (pack1.config==0x05) { //Reset all Data\r
- pack1.config=0x7F;\r
- pack2.r_day_max=1;\r
- pack2.r_week_max=1;\r
- pack2.tol_d=0;\r
- pack2.tol_s8=0; //Tag faengt mit Einschalten an\r
- R0=1;\r
- writeEEPROM(EEPROM_R0,0xFF);\r
- writeEEPROM(EEPROM_R0d,0xFF); //Maximum des Tages\r
- writeEEPROM(EEPROM_R0w,0xFF); //Maximum der Letzten 7 Tage\r
- writeEEPROM(EEPROM_dol,0xFF); //Anzahl der Betriebstage\r
- for(uint8_t i=0;i<7;i++) {\r
- weekmaxarr[i]=1;\r
- }\r
- }*/\r
+ \r
if ((cpsp&0x80)!=0) {\r
if ((cpsp&0x0F)==5) {\r
if (pack2.reset_code==0x01) {\r
\r
\r
if (testSW()) {\r
- am2302_hum=RH;\r
- am2302_temp=TC*25.6;\r
+ DS2438_2_VAD=RH;\r
+ DS2438_2_TEMP=TC*25.6;\r
config_info2[5]=12; //10V = 100%\r
}else{\r
hhum=(1.0546-0.000216*TC)*(RH);\r
- //am2302_hum=0.318*hhum +76.0;\r
- am2302_hum=0.31*hhum +80;\r
- am2302_temp=TC*25.6;\r
+ DS2438_2_VAD=0.31*hhum +80;\r
+ DS2438_2_TEMP=TC*25.6;\r
config_info2[5]=7;\r
}\r
mr=0;\r
\r
}\r
\r
- if (gcontrol==1) {\r
+ if ((gcontrol&1)==1) {\r
uint16_t w=l;\r
uint8_t t8=w>>4;\r
uint8_t af=0;\r
sei();\r
EXTERN_SLEEP();\r
}\r
- if ((gcontrol==2)||(gcontrol==3)) {\r
+ if (gcontrol) {\r
gcontrol=0;\r
\r
}\r
\r
\r
- #if defined(__AVR_ATtiny25__)||defined(__AVR_ATtiny45__) || defined(__AVR_ATtiny85__)\r
- if (((TIMSK & (1<<TOIE0))==0)&& (mode==0))\r
- #endif\r
- #if defined(__AVR_ATtiny24__)||defined(__AVR_ATtiny44__) || defined(__AVR_ATtiny84__) ||defined(__AVR_ATtiny24A__)||defined(__AVR_ATtiny44A__) || defined(__AVR_ATtiny84A__)\r
- if (((TIMSK0 & (1<<TOIE0))==0)&& (mode==0))\r
- #endif\r
- {\r
-\r
- MCUCR|=(1<<SE)|(1<<SM1);\r
- MCUCR&=~(1<<ISC01);\r
- } else {\r
- MCUCR|=(1<<SE);\r
- MCUCR&=~(1<<SM1);\r
- }\r
- asm("SLEEP");\r
+ OWST_MAIN_END\r
}\r
\r
\r
--- /dev/null
+\r
+Microsoft Visual Studio Solution File, Format Version 12.00\r
+# Atmel Studio Solution File, Format Version 11.00\r
+VisualStudioVersion = 14.0.23107.0\r
+MinimumVisualStudioVersion = 10.0.40219.1\r
+Project("{54F91283-7BC4-4236-8FF9-10F437C3AD48}") = "DS18B20_VOC_DS2438_SHT", "DS18B20_VOC_DS2438_SHT.cproj", "{7A5672FE-8226-4158-B931-E1F36B9A8858}"\r
+EndProject\r
+Global\r
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution\r
+ Debug|AVR = Debug|AVR\r
+ Release|AVR = Release|AVR\r
+ EndGlobalSection\r
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution\r
+ {7A5672FE-8226-4158-B931-E1F36B9A8858}.Debug|AVR.ActiveCfg = Debug|AVR\r
+ {7A5672FE-8226-4158-B931-E1F36B9A8858}.Debug|AVR.Build.0 = Debug|AVR\r
+ {7A5672FE-8226-4158-B931-E1F36B9A8858}.Release|AVR.ActiveCfg = Release|AVR\r
+ {7A5672FE-8226-4158-B931-E1F36B9A8858}.Release|AVR.Build.0 = Release|AVR\r
+ EndGlobalSection\r
+ GlobalSection(SolutionProperties) = preSolution\r
+ HideSolutionNode = FALSE\r
+ EndGlobalSection\r
+EndGlobal\r
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>\r
+<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
+ <PropertyGroup>\r
+ <SchemaVersion>2.0</SchemaVersion>\r
+ <ProjectVersion>7.0</ProjectVersion>\r
+ <ToolchainName>com.Atmel.AVRGCC8.C</ToolchainName>\r
+ <ProjectGuid>{7a5672fe-8226-4158-b931-e1f36b9a8858}</ProjectGuid>\r
+ <avrdevice>ATtiny84A</avrdevice>\r
+ <avrdeviceseries>none</avrdeviceseries>\r
+ <OutputType>Executable</OutputType>\r
+ <Language>C</Language>\r
+ <OutputFileName>$(MSBuildProjectName)</OutputFileName>\r
+ <OutputFileExtension>.elf</OutputFileExtension>\r
+ <OutputDirectory>$(MSBuildProjectDirectory)\$(Configuration)</OutputDirectory>\r
+ <AssemblyName>DS18B20_DS2438</AssemblyName>\r
+ <Name>DS18B20_VOC_DS2438_SHT</Name>\r
+ <RootNamespace>DS18B20_DS2438</RootNamespace>\r
+ <ToolchainFlavour>Native</ToolchainFlavour>\r
+ <KeepTimersRunning>true</KeepTimersRunning>\r
+ <OverrideVtor>false</OverrideVtor>\r
+ <CacheFlash>true</CacheFlash>\r
+ <ProgFlashFromRam>true</ProgFlashFromRam>\r
+ <RamSnippetAddress>0x20000000</RamSnippetAddress>\r
+ <UncachedRange />\r
+ <preserveEEPROM>true</preserveEEPROM>\r
+ <OverrideVtorValue>exception_table</OverrideVtorValue>\r
+ <BootSegment>2</BootSegment>\r
+ <eraseonlaunchrule>1</eraseonlaunchrule>\r
+ <AsfFrameworkConfig>\r
+ <framework-data>\r
+ <options />\r
+ <configurations />\r
+ <files />\r
+ <documentation help="" />\r
+ <offline-documentation help="" />\r
+ <dependencies>\r
+ <content-extension eid="atmel.asf" uuidref="Atmel.ASF" version="3.28.1" />\r
+ </dependencies>\r
+ </framework-data>\r
+ </AsfFrameworkConfig>\r
+ <avrtool>com.atmel.avrdbg.tool.atmelice</avrtool>\r
+ <com_atmel_avrdbg_tool_atmelice>\r
+ <ToolOptions>\r
+ <InterfaceProperties>\r
+ </InterfaceProperties>\r
+ <InterfaceName>debugWIRE</InterfaceName>\r
+ </ToolOptions>\r
+ <ToolType>com.atmel.avrdbg.tool.atmelice</ToolType>\r
+ <ToolNumber>J41800000789</ToolNumber>\r
+ <ToolName>Atmel-ICE</ToolName>\r
+ </com_atmel_avrdbg_tool_atmelice>\r
+ <avrtoolinterface>debugWIRE</avrtoolinterface>\r
+ <com_atmel_avrdbg_tool_simulator>\r
+ <ToolOptions>\r
+ <InterfaceProperties>\r
+ </InterfaceProperties>\r
+ <InterfaceName>\r
+ </InterfaceName>\r
+ </ToolOptions>\r
+ <ToolType>com.atmel.avrdbg.tool.simulator</ToolType>\r
+ <ToolNumber>\r
+ </ToolNumber>\r
+ <ToolName>Simulator</ToolName>\r
+ </com_atmel_avrdbg_tool_simulator>\r
+ <ExternalProgrammingToolCommand />\r
+ <avrtoolserialnumber>J41800000789</avrtoolserialnumber>\r
+ <avrdeviceexpectedsignature>0x1E930C</avrdeviceexpectedsignature>\r
+ <ResetRule>0</ResetRule>\r
+ <EraseKey />\r
+ </PropertyGroup>\r
+ <PropertyGroup Condition=" '$(Configuration)' == 'Release' ">\r
+ <ToolchainSettings>\r
+ <AvrGcc>\r
+ <avrgcc.common.Device>-mmcu=attiny84a -B "%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.68\gcc\dev\attiny84a"</avrgcc.common.Device>\r
+ <avrgcc.common.outputfiles.hex>True</avrgcc.common.outputfiles.hex>\r
+ <avrgcc.common.outputfiles.lss>True</avrgcc.common.outputfiles.lss>\r
+ <avrgcc.common.outputfiles.eep>True</avrgcc.common.outputfiles.eep>\r
+ <avrgcc.common.outputfiles.srec>True</avrgcc.common.outputfiles.srec>\r
+ <avrgcc.common.outputfiles.usersignatures>False</avrgcc.common.outputfiles.usersignatures>\r
+ <avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>True</avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>\r
+ <avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>True</avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>\r
+ <avrgcc.compiler.directories.IncludePaths>\r
+ <ListValues>\r
+ <Value>%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.68\include</Value>\r
+ </ListValues>\r
+ </avrgcc.compiler.directories.IncludePaths>\r
+ <avrgcc.compiler.optimization.level>Optimize (-O1)</avrgcc.compiler.optimization.level>\r
+ <avrgcc.compiler.optimization.PackStructureMembers>True</avrgcc.compiler.optimization.PackStructureMembers>\r
+ <avrgcc.compiler.optimization.AllocateBytesNeededForEnum>True</avrgcc.compiler.optimization.AllocateBytesNeededForEnum>\r
+ <avrgcc.compiler.warnings.AllWarnings>True</avrgcc.compiler.warnings.AllWarnings>\r
+ <avrgcc.linker.libraries.Libraries>\r
+ <ListValues>\r
+ <Value>libm</Value>\r
+ </ListValues>\r
+ </avrgcc.linker.libraries.Libraries>\r
+ <avrgcc.assembler.debugging.DebugLevel>Default (-Wa,-g)</avrgcc.assembler.debugging.DebugLevel>\r
+ </AvrGcc>\r
+ </ToolchainSettings>\r
+ </PropertyGroup>\r
+ <PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">\r
+ <ToolchainSettings>\r
+ <AvrGcc>\r
+ <avrgcc.common.Device>-mmcu=attiny84a -B "%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.68\gcc\dev\attiny84a"</avrgcc.common.Device>\r
+ <avrgcc.common.outputfiles.hex>True</avrgcc.common.outputfiles.hex>\r
+ <avrgcc.common.outputfiles.lss>True</avrgcc.common.outputfiles.lss>\r
+ <avrgcc.common.outputfiles.eep>True</avrgcc.common.outputfiles.eep>\r
+ <avrgcc.common.outputfiles.srec>True</avrgcc.common.outputfiles.srec>\r
+ <avrgcc.common.outputfiles.usersignatures>False</avrgcc.common.outputfiles.usersignatures>\r
+ <avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>True</avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>\r
+ <avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>True</avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>\r
+ <avrgcc.compiler.symbols.DefSymbols>\r
+ <ListValues>\r
+ <Value>DEBUG</Value>\r
+ </ListValues>\r
+ </avrgcc.compiler.symbols.DefSymbols>\r
+ <avrgcc.compiler.directories.IncludePaths>\r
+ <ListValues>\r
+ <Value>%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.68\include</Value>\r
+ </ListValues>\r
+ </avrgcc.compiler.directories.IncludePaths>\r
+ <avrgcc.compiler.optimization.level>Optimize (-O1)</avrgcc.compiler.optimization.level>\r
+ <avrgcc.compiler.optimization.PackStructureMembers>True</avrgcc.compiler.optimization.PackStructureMembers>\r
+ <avrgcc.compiler.optimization.AllocateBytesNeededForEnum>True</avrgcc.compiler.optimization.AllocateBytesNeededForEnum>\r
+ <avrgcc.compiler.optimization.DebugLevel>Default (-g2)</avrgcc.compiler.optimization.DebugLevel>\r
+ <avrgcc.compiler.warnings.AllWarnings>True</avrgcc.compiler.warnings.AllWarnings>\r
+ <avrgcc.linker.libraries.Libraries>\r
+ <ListValues>\r
+ <Value>libm</Value>\r
+ </ListValues>\r
+ </avrgcc.linker.libraries.Libraries>\r
+ <avrgcc.assembler.debugging.DebugLevel>Default (-Wa,-g)</avrgcc.assembler.debugging.DebugLevel>\r
+ </AvrGcc>\r
+ </ToolchainSettings>\r
+ </PropertyGroup>\r
+ <ItemGroup>\r
+ <Compile Include="..\common\calibr.c">\r
+ <SubType>compile</SubType>\r
+ <Link>calibr.c</Link>\r
+ </Compile>\r
+ <Compile Include="..\common\I2C\SHT2xV2.c">\r
+ <SubType>compile</SubType>\r
+ <Link>SHT2xV2.c</Link>\r
+ </Compile>\r
+ <Compile Include="..\common\I2C\USI_TWI_Master.c">\r
+ <SubType>compile</SubType>\r
+ <Link>USI_TWI_Master.c</Link>\r
+ </Compile>\r
+ <Compile Include="..\common\OWDS18B20_DS2438.S">\r
+ <SubType>compile</SubType>\r
+ <Link>OWDS18B20_DS2438.S</Link>\r
+ </Compile>\r
+ <Compile Include="DS18B20_DS2438.c">\r
+ <SubType>compile</SubType>\r
+ </Compile>\r
+ </ItemGroup>\r
+ <Import Project="$(AVRSTUDIO_EXE_PATH)\\Vs\\Compiler.targets" />\r
+</Project>
\ No newline at end of file
\r
}\r
\r
- if (gcontrol==1) {\r
+ if ((gcontrol&1)==1) {\r
uint16_t w=l;\r
uint8_t t8=w>>4;\r
uint8_t af=0;\r
--- /dev/null
+\r
+Microsoft Visual Studio Solution File, Format Version 12.00\r
+# Atmel Studio Solution File, Format Version 11.00\r
+VisualStudioVersion = 14.0.23107.0\r
+MinimumVisualStudioVersion = 10.0.40219.1\r
+Project("{54F91283-7BC4-4236-8FF9-10F437C3AD48}") = "DS2408", "DS2408.cproj", "{DCE6C7E3-EE26-4D79-826B-08594B9AD897}"\r
+EndProject\r
+Global\r
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution\r
+ Debug|AVR = Debug|AVR\r
+ Release|AVR = Release|AVR\r
+ EndGlobalSection\r
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution\r
+ {DCE6C7E3-EE26-4D79-826B-08594B9AD897}.Debug|AVR.ActiveCfg = Debug|AVR\r
+ {DCE6C7E3-EE26-4D79-826B-08594B9AD897}.Debug|AVR.Build.0 = Debug|AVR\r
+ {DCE6C7E3-EE26-4D79-826B-08594B9AD897}.Release|AVR.ActiveCfg = Release|AVR\r
+ {DCE6C7E3-EE26-4D79-826B-08594B9AD897}.Release|AVR.Build.0 = Release|AVR\r
+ EndGlobalSection\r
+ GlobalSection(SolutionProperties) = preSolution\r
+ HideSolutionNode = FALSE\r
+ EndGlobalSection\r
+EndGlobal\r
--- /dev/null
+\r
+// Copyright (c) 2018, Tobias Mueller tm(at)tm3d.de\r
+// All rights reserved.\r
+//\r
+// Redistribution and use in source and binary forms, with or without\r
+// modification, are permitted provided that the following conditions are\r
+// met:\r
+//\r
+// * Redistributions of source code must retain the above copyright\r
+// notice, this list of conditions and the following disclaimer.\r
+// * Redistributions in binary form must reproduce the above copyright\r
+// notice, this list of conditions and the following disclaimer in the\r
+// documentation and/or other materials provided with the\r
+// distribution.\r
+// * All advertising materials mentioning features or use of this\r
+// software must display the following acknowledgement: This product\r
+// includes software developed by tm3d.de and its contributors.\r
+// * Neither the name of tm3d.de nor the names of its contributors may\r
+// be used to endorse or promote products derived from this software\r
+// without specific prior written permission.\r
+//\r
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\r
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\r
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\r
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\r
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\r
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\r
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\r
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\r
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+\r
+#define F_CPU 8000000UL\r
+#include <avr/io.h>\r
+#include <avr/interrupt.h>\r
+#include <util/delay.h>\r
+#include <avr/wdt.h>\r
+#include <avr/sleep.h>\r
+#include <avr/pgmspace.h>\r
+#include "../common/I2C/TWI_Master.h"\r
+#include "../common/owSlave_tools.h"\r
+#include "../common/I2C/SHT3x.h"\r
+#include "../common/calibr.h"\r
+\r
+\r
+#include <math.h>\r
+\r
+extern void OWINIT();\r
+extern void EXTERN_SLEEP();\r
+extern uint8_t stat_to_sample;\r
+\r
+uint8_t owid[8]={0x29, 0xA2, 0xD9, 0x84, 0x00, 0x16, 0x01, 0x73};/**/\r
+uint8_t config_info[26]={0x06,0x09,0x06,0x09,0x06,0x09,0x06,0x09,0x02,20,20,20,20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};\r
+\r
+OWST_EXTERN_VARS\r
+\r
+OWST_WDT_ISR\r
+\r
+typedef union {\r
+ volatile uint8_t bytes[0x20];\r
+ struct {\r
+ uint8_t PIO_Logic_State; // 0088h\r
+ uint8_t PIO_Output_Latch_State;\r
+ uint8_t PIO_Activity_Latch_State;\r
+ uint8_t Conditional_Search_Channel_Selection_Mask;\r
+ uint8_t Conditional_Search_Channel_Polarity_Selection;\r
+ uint8_t Status; //008D\r
+ uint8_t FF1;\r
+ uint8_t FF2;\r
+ \r
+ };\r
+} pack_t;\r
+volatile pack_t pack;\r
+\r
+uint8_t values[10];\r
+uint8_t ap=1;\r
+\r
+uint8_t crc8() {\r
+ uint8_t lscrc=0x0;\r
+ for(uint8_t i=0;i<5;i++) {\r
+ uint8_t v=values[i];\r
+ //if (v==0) v=0xFF;\r
+ uint8_t bit=1;\r
+ uint8_t lb;\r
+ for(uint8_t j=0;j<8;j++) {\r
+ if ((v&bit)==bit) lb=1; else lb=0;\r
+ if ((lscrc&1)!=lb) lscrc=(lscrc>>1)^0x8c; else lscrc=(lscrc>>1);\r
+ bit=bit*2;\r
+ \r
+ \r
+ }\r
+ }\r
+ return lscrc;\r
+}\r
+\r
+//Umstellung\r
+\r
+//rh=(T-25)*(0,01+0,00008*x)-2,0468+0,0367*x-0,0000015955*x*x\r
+//d1 for 3V\r
+#define d1 -39.7 \r
+#define d2 0.01\r
+inline uint16_t calcSHT75_T(double real_t) {\r
+ return (real_t-d1)/d2;\r
+}\r
+\r
+inline uint16_t calcSHT75RH_lin(double real_RHlin) {\r
+ return 11501.1-0.280297*sqrt(1667284153.0-7977500.0*real_RHlin);\r
+}\r
+\r
+inline double calcSHT75H_tcorr(double real_t,double real_RHtrue) {\r
+ return real_RHtrue-(real_t-25)*(0.01+0.00008*calcSHT75RH_lin(real_RHtrue));\r
+\r
+}\r
+\r
+\r
+double T=20.0;\r
+double RH=60;\r
+\r
+int main(void){\r
+ OWST_INIT_USI_ON;\r
+ pack.FF1=0xFF;\r
+ pack.FF2=0xFF;\r
+ //0x0E 0x19 0x48 0x00\r
+ if (RH<8) RH=8;\r
+ uint16_t lt=calcSHT75_T(T);\r
+ double lfc=calcSHT75H_tcorr(T,RH);\r
+ uint16_t lf=calcSHT75RH_lin(lfc);\r
+ values[0]=0x00;\r
+ values[1]=lt&0xFF; if (values[1]==0) values[1]=1;\r
+ values[2]=lt>>8; if (values[2]==0) values[2]=1;\r
+ values[3]=lf&0xFF; if (values[3]==0) values[3]=1;\r
+ values[4]=lf>>8; if (values[4]==0) values[4]=1;\r
+ values[5]=0x5D; \r
+ values[1]=8;\r
+ values[2]=26;\r
+ values[3]=0;\r
+ values[4]=5;\r
+ values[5]=0x5D;\r
+ values[6]=0x00;\r
+ values[7]=0x00;\r
+ values[5]=crc8(); \r
+ OWINIT();\r
+\r
+ TWI_Master_Initialise();\r
+ initSHT3x(0);\r
+ _delay_ms(100);\r
+\r
+\r
+ getSHT3xHumTemp(0,&T,&RH);\r
+ OWST_WDR_CONFIG8;\r
+ sei();\r
+ stat_to_sample=0x55;\r
+ while (1) {\r
+ //stat_to_sample=0;\r
+ if (reset_indicator) {\r
+ // ap=0;\r
+ // stat_to_sample=0;\r
+ // reset_indicator=0;\r
+ }\r
+ if (wdcounter>3) {\r
+ \r
+ wdcounter=0;\r
+ RH=RH+0.2;\r
+ getSHT3xHumTemp(0,&T,&RH);\r
+ lt=calcSHT75_T(T);\r
+ lfc=calcSHT75H_tcorr(T,RH);\r
+ lf=calcSHT75RH_lin(lfc);\r
+ values[0]=0x00;\r
+ values[1]=lt&0xFF; if (values[1]==0) values[1]=1;\r
+ values[2]=lt>>8; if (values[2]==0) values[2]=1;\r
+ values[3]=lf&0xFF; if (values[3]==0) values[3]=1;\r
+ values[4]=lf>>8; if (values[4]==0) values[4]=1;\r
+ values[1]=8;\r
+ values[2]=26;\r
+ values[3]=0;\r
+ values[4]=5;\r
+ values[5]=0x5D;\r
+ values[5]=crc8();\r
+ }\r
+ pack.Status|=0x80;\r
+ if (gcontrol&1) {\r
+ uint8_t bb=1;\r
+ for(uint8_t i=0;i<8;i++) {\r
+ if ((pack.PIO_Logic_State&bb)!=(pack.PIO_Output_Latch_State&bb)) pack.PIO_Activity_Latch_State|=bb;\r
+ bb=bb*2;\r
+ }\r
+ pack.PIO_Logic_State=pack.PIO_Output_Latch_State;\r
+ gcontrol&=~0x01;\r
+ }\r
+ if (gcontrol&2) {\r
+ pack.PIO_Activity_Latch_State=0;\r
+ gcontrol&=~0x02;\r
+ }\r
+ if (gcontrol&4) {\r
+ stat_to_sample=values[ap];\r
+ ap++; \r
+ if (ap>5) {\r
+ ap=0;\r
+ }\r
+ gcontrol&=~0x04;\r
+ } \r
+ if (gcontrol&8) {\r
+ ap=1;\r
+ stat_to_sample=values[ap];\r
+ ap++;\r
+ //if (ap>5) ap=1;\r
+ gcontrol&=~0x08;\r
+ } \r
+\r
+ OWST_MAIN_END\r
+ }\r
+\r
+\r
+\r
+}\r
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>\r
+<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="14.0">\r
+ <PropertyGroup>\r
+ <SchemaVersion>2.0</SchemaVersion>\r
+ <ProjectVersion>7.0</ProjectVersion>\r
+ <ToolchainName>com.Atmel.AVRGCC8.C</ToolchainName>\r
+ <ProjectGuid>dce6c7e3-ee26-4d79-826b-08594b9ad897</ProjectGuid>\r
+ <avrdevice>ATtiny84A</avrdevice>\r
+ <avrdeviceseries>none</avrdeviceseries>\r
+ <OutputType>Executable</OutputType>\r
+ <Language>C</Language>\r
+ <OutputFileName>$(MSBuildProjectName)</OutputFileName>\r
+ <OutputFileExtension>.elf</OutputFileExtension>\r
+ <OutputDirectory>$(MSBuildProjectDirectory)\$(Configuration)</OutputDirectory>\r
+ <AssemblyName>DS2450</AssemblyName>\r
+ <Name>DS2408</Name>\r
+ <RootNamespace>DS2450</RootNamespace>\r
+ <ToolchainFlavour>Native</ToolchainFlavour>\r
+ <KeepTimersRunning>true</KeepTimersRunning>\r
+ <OverrideVtor>false</OverrideVtor>\r
+ <CacheFlash>true</CacheFlash>\r
+ <ProgFlashFromRam>true</ProgFlashFromRam>\r
+ <RamSnippetAddress>0x20000000</RamSnippetAddress>\r
+ <UncachedRange />\r
+ <preserveEEPROM>true</preserveEEPROM>\r
+ <OverrideVtorValue>exception_table</OverrideVtorValue>\r
+ <BootSegment>2</BootSegment>\r
+ <eraseonlaunchrule>1</eraseonlaunchrule>\r
+ <ExternalProgrammingToolCommand />\r
+ <AsfFrameworkConfig>\r
+ <framework-data>\r
+ <options />\r
+ <configurations />\r
+ <files />\r
+ <documentation help="" />\r
+ <offline-documentation help="" />\r
+ <dependencies>\r
+ <content-extension eid="atmel.asf" uuidref="Atmel.ASF" version="3.28.1" />\r
+ </dependencies>\r
+ </framework-data>\r
+ </AsfFrameworkConfig>\r
+ <avrtool>com.atmel.avrdbg.tool.atmelice</avrtool>\r
+ <avrtoolinterface>debugWIRE</avrtoolinterface>\r
+ <avrtoolserialnumber>J41800000789</avrtoolserialnumber>\r
+ <avrdeviceexpectedsignature>0x1E930C</avrdeviceexpectedsignature>\r
+ <com_atmel_avrdbg_tool_atmelice>\r
+ <ToolOptions>\r
+ <InterfaceProperties>\r
+ <IspClock>125000</IspClock>\r
+ </InterfaceProperties>\r
+ <InterfaceName>debugWIRE</InterfaceName>\r
+ </ToolOptions>\r
+ <ToolType>com.atmel.avrdbg.tool.atmelice</ToolType>\r
+ <ToolNumber>J41800000789</ToolNumber>\r
+ <ToolName>Atmel-ICE</ToolName>\r
+ </com_atmel_avrdbg_tool_atmelice>\r
+ <avrtoolinterfaceclock>125000</avrtoolinterfaceclock>\r
+ <ResetRule>0</ResetRule>\r
+ <EraseKey />\r
+ <com_atmel_avrdbg_tool_simulator>\r
+ <ToolOptions xmlns="">\r
+ <InterfaceProperties>\r
+ </InterfaceProperties>\r
+ <InterfaceName>ISP</InterfaceName>\r
+ </ToolOptions>\r
+ <ToolType xmlns="">com.atmel.avrdbg.tool.simulator</ToolType>\r
+ <ToolNumber xmlns="">\r
+ </ToolNumber>\r
+ <ToolName xmlns="">Simulator</ToolName>\r
+ </com_atmel_avrdbg_tool_simulator>\r
+ <custom>\r
+ <ToolOptions xmlns="">\r
+ <InterfaceProperties>\r
+ </InterfaceProperties>\r
+ <InterfaceName>ISP</InterfaceName>\r
+ </ToolOptions>\r
+ <ToolType xmlns="">custom</ToolType>\r
+ <ToolNumber xmlns="">\r
+ </ToolNumber>\r
+ <ToolName xmlns="">Custom Programming Tool</ToolName>\r
+ </custom>\r
+ </PropertyGroup>\r
+ <PropertyGroup Condition=" '$(Configuration)' == 'Release' ">\r
+ <ToolchainSettings>\r
+ <AvrGcc>\r
+ <avrgcc.common.Device>-mmcu=attiny84a -B "%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.79\gcc\dev\attiny84a"</avrgcc.common.Device>\r
+ <avrgcc.common.outputfiles.hex>True</avrgcc.common.outputfiles.hex>\r
+ <avrgcc.common.outputfiles.lss>True</avrgcc.common.outputfiles.lss>\r
+ <avrgcc.common.outputfiles.eep>True</avrgcc.common.outputfiles.eep>\r
+ <avrgcc.common.outputfiles.srec>True</avrgcc.common.outputfiles.srec>\r
+ <avrgcc.common.outputfiles.usersignatures>False</avrgcc.common.outputfiles.usersignatures>\r
+ <avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>True</avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>\r
+ <avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>True</avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>\r
+ <avrgcc.compiler.symbols.DefSymbols>\r
+ <ListValues>\r
+ <Value>NDEBUG</Value>\r
+ </ListValues>\r
+ </avrgcc.compiler.symbols.DefSymbols>\r
+ <avrgcc.compiler.directories.IncludePaths>\r
+ <ListValues>\r
+ <Value>%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.79\include</Value>\r
+ </ListValues>\r
+ </avrgcc.compiler.directories.IncludePaths>\r
+ <avrgcc.compiler.optimization.level>Optimize for size (-Os)</avrgcc.compiler.optimization.level>\r
+ <avrgcc.compiler.optimization.PackStructureMembers>True</avrgcc.compiler.optimization.PackStructureMembers>\r
+ <avrgcc.compiler.optimization.AllocateBytesNeededForEnum>True</avrgcc.compiler.optimization.AllocateBytesNeededForEnum>\r
+ <avrgcc.compiler.warnings.AllWarnings>True</avrgcc.compiler.warnings.AllWarnings>\r
+ <avrgcc.linker.libraries.Libraries>\r
+ <ListValues>\r
+ <Value>libm</Value>\r
+ </ListValues>\r
+ </avrgcc.linker.libraries.Libraries>\r
+ <avrgcc.assembler.general.IncludePaths>\r
+ <ListValues>\r
+ <Value>%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.79\include</Value>\r
+ </ListValues>\r
+ </avrgcc.assembler.general.IncludePaths>\r
+ </AvrGcc>\r
+ </ToolchainSettings>\r
+ </PropertyGroup>\r
+ <PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">\r
+ <ToolchainSettings>\r
+ <AvrGcc>\r
+ <avrgcc.common.Device>-mmcu=attiny84a -B "%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.79\gcc\dev\attiny84a"</avrgcc.common.Device>\r
+ <avrgcc.common.outputfiles.hex>True</avrgcc.common.outputfiles.hex>\r
+ <avrgcc.common.outputfiles.lss>True</avrgcc.common.outputfiles.lss>\r
+ <avrgcc.common.outputfiles.eep>True</avrgcc.common.outputfiles.eep>\r
+ <avrgcc.common.outputfiles.srec>True</avrgcc.common.outputfiles.srec>\r
+ <avrgcc.common.outputfiles.usersignatures>False</avrgcc.common.outputfiles.usersignatures>\r
+ <avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>True</avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>\r
+ <avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>True</avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>\r
+ <avrgcc.compiler.symbols.DefSymbols>\r
+ <ListValues>\r
+ <Value>DEBUG</Value>\r
+ </ListValues>\r
+ </avrgcc.compiler.symbols.DefSymbols>\r
+ <avrgcc.compiler.directories.IncludePaths>\r
+ <ListValues>\r
+ <Value>%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.79\include</Value>\r
+ </ListValues>\r
+ </avrgcc.compiler.directories.IncludePaths>\r
+ <avrgcc.compiler.optimization.level>Optimize (-O1)</avrgcc.compiler.optimization.level>\r
+ <avrgcc.compiler.optimization.PackStructureMembers>True</avrgcc.compiler.optimization.PackStructureMembers>\r
+ <avrgcc.compiler.optimization.AllocateBytesNeededForEnum>True</avrgcc.compiler.optimization.AllocateBytesNeededForEnum>\r
+ <avrgcc.compiler.optimization.DebugLevel>Default (-g2)</avrgcc.compiler.optimization.DebugLevel>\r
+ <avrgcc.compiler.warnings.AllWarnings>True</avrgcc.compiler.warnings.AllWarnings>\r
+ <avrgcc.linker.libraries.Libraries>\r
+ <ListValues>\r
+ <Value>libm</Value>\r
+ </ListValues>\r
+ </avrgcc.linker.libraries.Libraries>\r
+ <avrgcc.assembler.general.IncludePaths>\r
+ <ListValues>\r
+ <Value>%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.79\include</Value>\r
+ </ListValues>\r
+ </avrgcc.assembler.general.IncludePaths>\r
+ <avrgcc.assembler.debugging.DebugLevel>Default (-Wa,-g)</avrgcc.assembler.debugging.DebugLevel>\r
+ </AvrGcc>\r
+ </ToolchainSettings>\r
+ </PropertyGroup>\r
+ <ItemGroup>\r
+ <Compile Include="..\common\calibr.c">\r
+ <SubType>compile</SubType>\r
+ <Link>calibr.c</Link>\r
+ </Compile>\r
+ <Compile Include="..\common\I2C\SHT3x.c">\r
+ <SubType>compile</SubType>\r
+ <Link>SHT3x.c</Link>\r
+ </Compile>\r
+ <Compile Include="..\common\I2C\TWI_Master.c">\r
+ <SubType>compile</SubType>\r
+ <Link>TWI_Master.c</Link>\r
+ </Compile>\r
+ <Compile Include="..\common\OWDS2408.S">\r
+ <SubType>compile</SubType>\r
+ <Link>OWDS2408.S</Link>\r
+ </Compile>\r
+ <Compile Include="DS2408.c">\r
+ <SubType>compile</SubType>\r
+ </Compile>\r
+ </ItemGroup>\r
+ <Import Project="$(AVRSTUDIO_EXE_PATH)\\Vs\\Compiler.targets" />\r
+</Project>
\ No newline at end of file
--- /dev/null
+\r
+Microsoft Visual Studio Solution File, Format Version 12.00\r
+# Atmel Studio Solution File, Format Version 11.00\r
+VisualStudioVersion = 14.0.23107.0\r
+MinimumVisualStudioVersion = 10.0.40219.1\r
+Project("{54F91283-7BC4-4236-8FF9-10F437C3AD48}") = "DS2413_DS2413", "DS2413_DS2413.cproj", "{7A5672FE-8226-4158-B931-E1F36B9A8858}"\r
+EndProject\r
+Global\r
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution\r
+ Debug|AVR = Debug|AVR\r
+ Release|AVR = Release|AVR\r
+ EndGlobalSection\r
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution\r
+ {7A5672FE-8226-4158-B931-E1F36B9A8858}.Debug|AVR.ActiveCfg = Debug|AVR\r
+ {7A5672FE-8226-4158-B931-E1F36B9A8858}.Debug|AVR.Build.0 = Debug|AVR\r
+ {7A5672FE-8226-4158-B931-E1F36B9A8858}.Release|AVR.ActiveCfg = Release|AVR\r
+ {7A5672FE-8226-4158-B931-E1F36B9A8858}.Release|AVR.Build.0 = Release|AVR\r
+ EndGlobalSection\r
+ GlobalSection(SolutionProperties) = preSolution\r
+ HideSolutionNode = FALSE\r
+ EndGlobalSection\r
+EndGlobal\r
--- /dev/null
+// Copyright (c) 2017, Tobias Mueller tm(at)tm3d.de\r
+// All rights reserved.\r
+//\r
+// Redistribution and use in source and binary forms, with or without\r
+// modification, are permitted provided that the following conditions are\r
+// met:\r
+//\r
+// * Redistributions of source code must retain the above copyright\r
+// notice, this list of conditions and the following disclaimer.\r
+// * Redistributions in binary form must reproduce the above copyright\r
+// notice, this list of conditions and the following disclaimer in the\r
+// documentation and/or other materials provided with the\r
+// distribution.\r
+// * All advertising materials mentioning features or use of this\r
+// software must display the following acknowledgement: This product\r
+// includes software developed by tm3d.de and its contributors.\r
+// * Neither the name of tm3d.de nor the names of its contributors may\r
+// be used to endorse or promote products derived from this software\r
+// without specific prior written permission.\r
+//\r
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\r
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\r
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\r
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\r
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\r
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\r
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\r
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\r
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+\r
+//!!!!!Max Program size 7551 Byte\r
+#define _CPULLUP_\r
+#define F_CPU 8000000UL\r
+#include <avr/io.h>\r
+#include <avr/interrupt.h>\r
+#include <util/delay.h> \r
+#include <avr/wdt.h>\r
+#include <avr/sleep.h>\r
+#include <avr/pgmspace.h>\r
+#include "../common/owSlave_tools.h"\r
+\r
+\r
+//#define FHEM_PLATINE\r
+#define W1DAQ\r
+//#define JOE_M\r
+volatile uint8_t owid1[8]={0x3A, 0x01, 0xDA, 0x84, 0x00, 0x00, 0x05, 0xA3};/**/\r
+volatile uint8_t owid2[8]={0x3A, 0x02, 0xDA, 0x84, 0x00, 0x00, 0x05, 0xFA};/**/\r
+uint8_t config_info1[26]={0,0,0,0,0,0,0,0,0x02,0,0,0,0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; //+2 for CRC\r
+uint8_t config_info2[26]={0,0,0,0,0,0,0,0,0x02,0,0,0,0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; //+2 for CRC\r
+ \r
+#if (owid>128) \r
+#error "Variable not correct"\r
+#endif\r
+\r
+OWST_EXTERN_VARS\r
+\r
+uint8_t pin_state1;\r
+uint8_t pin_set1;\r
+uint8_t pin_state2;\r
+uint8_t pin_set2;\r
+\r
+OWST_WDT_ISR\r
+\r
+\r
+#if defined(__AVR_ATtiny44__) || defined(__AVR_ATtiny84__) || defined(__AVR_ATtiny24A__)||defined(__AVR_ATtiny44A__) || defined(__AVR_ATtiny84A__)\r
+#define PCINT_VECTOR PCINT0_vect\r
+#define PIN_REG PINA\r
+#define PIN_DDR DDRA\r
+\r
+#ifdef FHEM_PLATINE\r
+#define PIN_PIOA1 (1<<PINA2)\r
+#define PIN_PIOB1 (1<<PINA1)\r
+#define PIN_PIOA2 (1<<PINA3)\r
+#define PIN_PIOB2 (1<<PINA4)\r
+//LEDS\r#define LPIN_CH2 (1<<PINB0)\r#define LDD_CH2 DDRB\r#define LPORT_CH2 PORTB\r#define LPIN_CH3 (1<<PINA5)\r#define LDD_CH3 DDRA\r#define LPORT_CH3 PORTA\r#define LPIN_CH0 (1<<PINA7)\r#define LDD_CH0 DDRA\r#define LPORT_CH0 PORTA\r#define LPIN_CH1 (1<<PINB1)\r#define LDD_CH1 DDRB\r#define LPORT_CH1 PORTB\r
+\r
+#define LED2_ON LPORT_CH2|=LPIN_CH2;\r
+#endif\r
+\r
+#ifdef JOE_M\r
+#define LED2_ON\r
+#define PIN_PIOA1 (1<<PINA4)\r
+#define PIN_PIOB1 (1<<PINA5)\r
+#define PIN_PIOA2 (1<<PINA6)\r
+#define PIN_PIOB2 (1<<PINA7)\r
+#endif\r
+\r
+#ifdef W1DAQ\r
+#define PIN_PIOB1 (1<<PINA1)\r
+#define PIN_PIOA1 (1<<PINA0)\r
+#define PIN_PIOB2 (1<<PINA7)\r
+#define PIN_PIOA2 (1<<PINA3)\r
+//LEDS\r#define LPIN_CH0 (1<<PINB1)\r#define LDD_CH0 DDRB\r#define LPORT_CH0 PORTB\r#define LPIN_CH1 (1<<PINB1)\r#define LDD_CH1 DDRB\r#define LPORT_CH1 PORTB\r#define LPIN_CH2 (1<<PINB1)\r#define LDD_CH2 DDRB\r#define LPORT_CH2 PORTB\r#define LPIN_CH3 (1<<PINB1)\r#define LDD_CH3 DDRB\r#define LPORT_CH3 PORTB\r\r
+#define LED2_ON LPORT_CH2&=~LPIN_CH2;\r
+#endif\r
+\r
+\r
+\r
+#endif\r
+\r
+\r
+ISR(PCINT0_vect) {\r
+// if (((PIN_REG&PIN_CH2)==0)&&((istat&PIN_CH2)==PIN_CH2)) { counters1.c32[2]++; LED2_ON}\r
+ //if (((PIN_REG&PIN_CH3)==0)&&((istat&PIN_CH3)==PIN_CH3)) { counters1.c32[3]++;LED2_ON }\r
+ if ((PIN_REG&PIN_PIOA1)==0) {pin_state1&=~0x1;LED2_ON} else { pin_state1|=0x01;}\r
+ if ((PIN_REG&PIN_PIOB1)==0) {pin_state1&=~0x4;LED2_ON} else {pin_state1|=0x04;}\r
+ if ((PIN_REG&PIN_PIOA2)==0) {pin_state2&=~0x1;LED2_ON} else {pin_state2|=0x01;}\r
+ if ((PIN_REG&PIN_PIOB2)==0) {pin_state2&=~0x4;LED2_ON} else {pin_state2|=0x04;}\r
+ //Reset Switch on the FHEM_BOARD\r
+ GIFR|=(1<<PCIF0);\r\r\r\r
+}\r
+\r
+\r
+\r
+\r
+\r
+int main(void){\r
+ OWST_INIT_ALL_OFF\r
+ OWINIT();\r
+ \r
+\r
+#if defined(__AVR_ATtiny44__) || defined(__AVR_ATtiny84__) || defined(__AVR_ATtiny24A__)||defined(__AVR_ATtiny44A__) || defined(__AVR_ATtiny84A__)\r
+\r
+ OWST_WDR_CONFIG4\r
+ \r
+#ifndef _CPULLUP_ // pullup\r
+ PORTA&=~(PIN_PIOA1|PIN_PIOB1);\r
+ PORTA&=~(PIN_PIOA2|PIN_PIOB2);\r
+#endif\r
+\r
+#ifdef FHEM_PLATINE //LEDs\r
+ LDD_CH0|=LPIN_CH0;\r LPORT_CH0&=~LPIN_CH0;\r LDD_CH1|=LPIN_CH1;\r LPORT_CH1&=~LPIN_CH1;\r LDD_CH2|=LPIN_CH2;\r LPORT_CH2&=~LPIN_CH2;\r LDD_CH3|=LPIN_CH3;\r LPORT_CH3&=~LPIN_CH3;\r
+#endif\r
+#ifdef W1DAQ\r
+ LDD_CH2|=LPIN_CH2;\r LPORT_CH2&=~LPIN_CH2;\r#endif\r
+\r
+\r
+ GIMSK|=(1<<PCIE0);\r
+ PCMSK0=(PIN_PIOA1|PIN_PIOB1|PIN_PIOA2|PIN_PIOB2); //Nicht ganz korrekt aber die Bits liegen gleich\r
+\r
+ \r
+ \r
+ #endif\r
+ \r
+ OWST_EN_PULLUP\r
+ \r
+ \r
+#ifdef FHEM_PLATINE\r
+\r
+ LPORT_CH0|=LPIN_CH0;\r _delay_ms(500);\r LPORT_CH0&=~LPIN_CH0;\r
+#endif\r
+ pin_set1=0x0F;\r
+ pin_set2=0x0F;\r
+ //pin_state1=0x00;\r
+ //pin_state2=0x00;\r
+ sei();\r
+ while(1) {\r
+\r
+ if (pin_set1&1) {\r
+ DDRA&=~(PIN_PIOA1); //Eingang\r
+ PORTA|=(PIN_PIOA1); //Pullup\r
+ pin_state1|=2;\r
+ } else {\r
+ DDRA|=(PIN_PIOA1); //Ausgang\r
+ PORTA&=~(PIN_PIOA1); //Gegen masse\r
+ pin_state1&=~2;\r
+ }\r
+ if (pin_set1&2) {\r
+ pin_state1|=8;\r
+ DDRA&=~(PIN_PIOB1); //Eingang\r
+ PORTA|=(PIN_PIOB1); //Pullup\r
+ } else {\r
+ DDRA|=(PIN_PIOB1); //Ausgang\r
+ PORTA&=~(PIN_PIOB1); //Gegen masse\r
+ pin_state1&=~8;\r
+ }\r
+ if (pin_set2&1) {\r
+ pin_state2|=2;\r
+ DDRA&=~(PIN_PIOA2); //Eingang\r
+ PORTA|=(PIN_PIOA2); //Pullup\r
+ } else {\r
+ DDRA|=(PIN_PIOA2); //Ausgang\r
+ PORTA&=~(PIN_PIOA2); //Gegen masse\r
+ pin_state2&=~2;\r
+ }\r
+ if (pin_set2&2) {\r
+ DDRA&=~(PIN_PIOB2); //Eingang\r
+ PORTA|=(PIN_PIOB2); //Pullup\r
+ pin_state2|=8;\r
+ } else {\r
+ DDRA|=(PIN_PIOB2); //Ausgang\r
+ PORTA&=~(PIN_PIOB2); //Gegen masse\r
+ pin_state2&=~8;\r
+ }\r
+#ifdef FHEM_PLATINE\r
+ if (LPORT_CH2&LPIN_CH2) {\r _delay_ms(50);\r LPORT_CH2&=~LPIN_CH2;\r }\r
+ if (LPORT_CH1&LPIN_CH1) {\r _delay_ms(50);\r LPORT_CH1&=~LPIN_CH1;\r }\r
+#endif\r
+#ifdef W1DAQ\r
+ if ((LPORT_CH2&LPIN_CH2)==0) {\r _delay_ms(50);\r LPORT_CH2|=LPIN_CH2;\r }\r
+#endif\r
+ OWST_MAIN_END \r
+ }\r
+\r
+\r
+}\r
+\r
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>\r
+<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
+ <PropertyGroup>\r
+ <SchemaVersion>2.0</SchemaVersion>\r
+ <ProjectVersion>7.0</ProjectVersion>\r
+ <ToolchainName>com.Atmel.AVRGCC8.C</ToolchainName>\r
+ <ProjectGuid>{7a5672fe-8226-4158-b931-e1f36b9a8858}</ProjectGuid>\r
+ <avrdevice>ATtiny84A</avrdevice>\r
+ <avrdeviceseries>none</avrdeviceseries>\r
+ <OutputType>Executable</OutputType>\r
+ <Language>C</Language>\r
+ <OutputFileName>$(MSBuildProjectName)</OutputFileName>\r
+ <OutputFileExtension>.elf</OutputFileExtension>\r
+ <OutputDirectory>$(MSBuildProjectDirectory)\$(Configuration)</OutputDirectory>\r
+ <AssemblyName>DS18B20_DS2438</AssemblyName>\r
+ <Name>DS2413_DS2413</Name>\r
+ <RootNamespace>DS18B20_DS2438</RootNamespace>\r
+ <ToolchainFlavour>Native</ToolchainFlavour>\r
+ <KeepTimersRunning>true</KeepTimersRunning>\r
+ <OverrideVtor>false</OverrideVtor>\r
+ <CacheFlash>true</CacheFlash>\r
+ <ProgFlashFromRam>true</ProgFlashFromRam>\r
+ <RamSnippetAddress>0x20000000</RamSnippetAddress>\r
+ <UncachedRange />\r
+ <preserveEEPROM>true</preserveEEPROM>\r
+ <OverrideVtorValue>exception_table</OverrideVtorValue>\r
+ <BootSegment>2</BootSegment>\r
+ <eraseonlaunchrule>0</eraseonlaunchrule>\r
+ <AsfFrameworkConfig>\r
+ <framework-data>\r
+ <options />\r
+ <configurations />\r
+ <files />\r
+ <documentation help="" />\r
+ <offline-documentation help="" />\r
+ <dependencies>\r
+ <content-extension eid="atmel.asf" uuidref="Atmel.ASF" version="3.28.1" />\r
+ </dependencies>\r
+ </framework-data>\r
+ </AsfFrameworkConfig>\r
+ <avrtool>com.atmel.avrdbg.tool.atmelice</avrtool>\r
+ <com_atmel_avrdbg_tool_atmelice>\r
+ <ToolOptions>\r
+ <InterfaceProperties>\r
+ <IspClock>125000</IspClock>\r
+ </InterfaceProperties>\r
+ <InterfaceName>ISP</InterfaceName>\r
+ </ToolOptions>\r
+ <ToolType>com.atmel.avrdbg.tool.atmelice</ToolType>\r
+ <ToolNumber>J41800000789</ToolNumber>\r
+ <ToolName>Atmel-ICE</ToolName>\r
+ </com_atmel_avrdbg_tool_atmelice>\r
+ <avrtoolinterface>ISP</avrtoolinterface>\r
+ <com_atmel_avrdbg_tool_simulator>\r
+ <ToolOptions>\r
+ <InterfaceProperties>\r
+ </InterfaceProperties>\r
+ <InterfaceName>\r
+ </InterfaceName>\r
+ </ToolOptions>\r
+ <ToolType>com.atmel.avrdbg.tool.simulator</ToolType>\r
+ <ToolNumber>\r
+ </ToolNumber>\r
+ <ToolName>Simulator</ToolName>\r
+ </com_atmel_avrdbg_tool_simulator>\r
+ <ExternalProgrammingToolCommand />\r
+ <avrtoolserialnumber>J41800000789</avrtoolserialnumber>\r
+ <avrdeviceexpectedsignature>0x1E930C</avrdeviceexpectedsignature>\r
+ <avrtoolinterfaceclock>125000</avrtoolinterfaceclock>\r
+ </PropertyGroup>\r
+ <PropertyGroup Condition=" '$(Configuration)' == 'Release' ">\r
+ <ToolchainSettings>\r
+ <AvrGcc>\r
+ <avrgcc.common.Device>-mmcu=attiny84a -B "%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.68\gcc\dev\attiny84a"</avrgcc.common.Device>\r
+ <avrgcc.common.outputfiles.hex>True</avrgcc.common.outputfiles.hex>\r
+ <avrgcc.common.outputfiles.lss>True</avrgcc.common.outputfiles.lss>\r
+ <avrgcc.common.outputfiles.eep>True</avrgcc.common.outputfiles.eep>\r
+ <avrgcc.common.outputfiles.srec>True</avrgcc.common.outputfiles.srec>\r
+ <avrgcc.common.outputfiles.usersignatures>False</avrgcc.common.outputfiles.usersignatures>\r
+ <avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>True</avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>\r
+ <avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>True</avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>\r
+ <avrgcc.compiler.directories.IncludePaths>\r
+ <ListValues>\r
+ <Value>%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.68\include</Value>\r
+ </ListValues>\r
+ </avrgcc.compiler.directories.IncludePaths>\r
+ <avrgcc.compiler.optimization.level>Optimize (-O1)</avrgcc.compiler.optimization.level>\r
+ <avrgcc.compiler.optimization.PackStructureMembers>True</avrgcc.compiler.optimization.PackStructureMembers>\r
+ <avrgcc.compiler.optimization.AllocateBytesNeededForEnum>True</avrgcc.compiler.optimization.AllocateBytesNeededForEnum>\r
+ <avrgcc.compiler.warnings.AllWarnings>True</avrgcc.compiler.warnings.AllWarnings>\r
+ <avrgcc.linker.libraries.Libraries>\r
+ <ListValues>\r
+ <Value>libm</Value>\r
+ </ListValues>\r
+ </avrgcc.linker.libraries.Libraries>\r
+ <avrgcc.assembler.debugging.DebugLevel>Default (-Wa,-g)</avrgcc.assembler.debugging.DebugLevel>\r
+ </AvrGcc>\r
+ </ToolchainSettings>\r
+ </PropertyGroup>\r
+ <PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">\r
+ <ToolchainSettings>\r
+ <AvrGcc>\r
+ <avrgcc.common.Device>-mmcu=attiny84a -B "%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.68\gcc\dev\attiny84a"</avrgcc.common.Device>\r
+ <avrgcc.common.outputfiles.hex>True</avrgcc.common.outputfiles.hex>\r
+ <avrgcc.common.outputfiles.lss>True</avrgcc.common.outputfiles.lss>\r
+ <avrgcc.common.outputfiles.eep>True</avrgcc.common.outputfiles.eep>\r
+ <avrgcc.common.outputfiles.srec>True</avrgcc.common.outputfiles.srec>\r
+ <avrgcc.common.outputfiles.usersignatures>False</avrgcc.common.outputfiles.usersignatures>\r
+ <avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>True</avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>\r
+ <avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>True</avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>\r
+ <avrgcc.compiler.symbols.DefSymbols>\r
+ <ListValues>\r
+ <Value>DEBUG</Value>\r
+ </ListValues>\r
+ </avrgcc.compiler.symbols.DefSymbols>\r
+ <avrgcc.compiler.directories.IncludePaths>\r
+ <ListValues>\r
+ <Value>%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.68\include</Value>\r
+ </ListValues>\r
+ </avrgcc.compiler.directories.IncludePaths>\r
+ <avrgcc.compiler.optimization.level>Optimize (-O1)</avrgcc.compiler.optimization.level>\r
+ <avrgcc.compiler.optimization.PackStructureMembers>True</avrgcc.compiler.optimization.PackStructureMembers>\r
+ <avrgcc.compiler.optimization.AllocateBytesNeededForEnum>True</avrgcc.compiler.optimization.AllocateBytesNeededForEnum>\r
+ <avrgcc.compiler.optimization.DebugLevel>Default (-g2)</avrgcc.compiler.optimization.DebugLevel>\r
+ <avrgcc.compiler.warnings.AllWarnings>True</avrgcc.compiler.warnings.AllWarnings>\r
+ <avrgcc.linker.libraries.Libraries>\r
+ <ListValues>\r
+ <Value>libm</Value>\r
+ </ListValues>\r
+ </avrgcc.linker.libraries.Libraries>\r
+ <avrgcc.assembler.debugging.DebugLevel>Default (-Wa,-g)</avrgcc.assembler.debugging.DebugLevel>\r
+ </AvrGcc>\r
+ </ToolchainSettings>\r
+ </PropertyGroup>\r
+ <ItemGroup>\r
+ <Compile Include="..\common\OWDS2413_DS2413.S">\r
+ <SubType>compile</SubType>\r
+ <Link>OWDS2413_DS2413.S</Link>\r
+ </Compile>\r
+ <Compile Include="DS2413_DS2413.c">\r
+ <SubType>compile</SubType>\r
+ </Compile>\r
+ </ItemGroup>\r
+ <Import Project="$(AVRSTUDIO_EXE_PATH)\\Vs\\Compiler.targets" />\r
+</Project>
\ No newline at end of file
\r
extern void OWINIT(void);\r
extern void EXTERN_SLEEP(void);\r
-#define FHEM_PLATINE\r
+//#define FHEM_PLATINE\r
+//#define JOE_M\r
+#define W1DAQ\r
\r
volatile uint8_t owid1[8]={0x1D, 0x1D, 0xDA, 0x84, 0x00, 0x00, 0x05, 0xD9};/**/\r
volatile uint8_t owid2[8]={0x3A, 0x3A, 0xDA, 0x84, 0x00, 0x00, 0x05, 0xB6};/**/\r
//LEDS\r#define LPIN_CH2 (1<<PINB0)\r#define LDD_CH2 DDRB\r#define LPORT_CH2 PORTB\r#define LPIN_CH3 (1<<PINA5)\r#define LDD_CH3 DDRA\r#define LPORT_CH3 PORTA\r#define LPIN_CH0 (1<<PINA7)\r#define LDD_CH0 DDRA\r#define LPORT_CH0 PORTA\r#define LPIN_CH1 (1<<PINB1)\r#define LDD_CH1 DDRB\r#define LPORT_CH1 PORTB\r
\r
#define LED2_ON LPORT_CH2|=LPIN_CH2;\r
-#else\r
+\r
+#endif\r
+\r
+#ifdef JOE_M\r
#define LED2_ON\r
#define PIN_CH2 (1<<PINA4)\r
#define PIN_CH3 (1<<PINA5)\r
-#define PIN_PIOA (1<<PINA6)\r
-#define PIN_PIOB (1<<PINA7)\r
+#define PIN_CH0 (1<<PINA6)\r
+#define PIN_CH1 (1<<PINA7)\r
+#define PIN_PIOA PIN_CH0\r
+#define PIN_PIOB PIN_CH1\r
+#endif\r
+\r
+#ifdef W1DAQ\r
+#define PIN_CH3 (1<<PINA1)\r
+#define PIN_CH2 (1<<PINA0)\r
+#define PIN_CH1 (1<<PINA7)\r
+#define PIN_CH0 (1<<PINA3)\r
+#define PIN_PIOA PIN_CH0\r
+#define PIN_PIOB PIN_CH1\r
+//LEDS\r#define LPIN_CH0 (1<<PINB1)\r#define LDD_CH0 DDRB\r#define LPORT_CH0 PORTB\r#define LPIN_CH1 (1<<PINB1)\r#define LDD_CH1 DDRB\r#define LPORT_CH1 PORTB\r#define LPIN_CH2 (1<<PINB1)\r#define LDD_CH2 DDRB\r#define LPORT_CH2 PORTB\r#define LPIN_CH3 (1<<PINB1)\r#define LDD_CH3 DDRB\r#define LPORT_CH3 PORTB\r\r
+#define LED2_ON LPORT_CH2&=~LPIN_CH2;\r
#endif\r
\r
#define TEST_TIMER ((TIMSK0 & (1<<TOIE0))==0)\r
PORTA&=~(PIN_CH2|PIN_CH3);\r
#endif\r
\r
- #ifdef FHEM_PLATINE //LEDs\r
+ #if defined(FHEM_PLATINE) || defined(W1DAQ) //LEDs\r
LDD_CH0|=LPIN_CH0;\r LPORT_CH0&=~LPIN_CH0;\r LDD_CH1|=LPIN_CH1;\r LPORT_CH1&=~LPIN_CH1;\r LDD_CH2|=LPIN_CH2;\r LPORT_CH2&=~LPIN_CH2;\r LDD_CH3|=LPIN_CH3;\r LPORT_CH3&=~LPIN_CH3;\r
#endif\r
\r
\r
LPORT_CH0|=LPIN_CH0;\r _delay_ms(500);\r LPORT_CH0&=~LPIN_CH0;\r
#endif\r
+#ifdef W1DAQ\r
+LPORT_CH0&=~LPIN_CH0;\r
+_delay_ms(500);\rLPORT_CH0|=LPIN_CH0;\r#endif\r
pin_state=0x0F;\r
+ pin_set=0;\r
sei();\r
while(1) {\r
\r
if (LPORT_CH2&LPIN_CH2) {\r _delay_ms(50);\r LPORT_CH2&=~LPIN_CH2;\r }\r
if (LPORT_CH1&LPIN_CH1) {\r _delay_ms(50);\r LPORT_CH1&=~LPIN_CH1;\r }\r
#endif\r
+#ifdef W1DAQ\r
+if ((LPORT_CH2&LPIN_CH2)==0) {\r _delay_ms(50);\r LPORT_CH2|=LPIN_CH2;\r}\r
+#endif\r
#ifndef FHEM_PLATINE\r
if ((PINB&(1<<PORTB0))==0) { //Jumper gesetzt ->Ruecksetzen\r
for (uint8_t i=2;i<4;i++) {\r
extern void OWINIT(void);\r
extern void EXTERN_SLEEP(void);\r
\r
+\r
//#define FHEM_PLATINE\r
+//#define JOE_M\r
+#define W1DAQ\r
\r
volatile uint8_t owid1[8]={0x1D, 0x40, 0xDA, 0x84, 0x00, 0x00, 0x05, 0xBD};/**/\r
volatile uint8_t owid2[8]={0x1D, 0x41, 0xDA, 0x84, 0x00, 0x00, 0x05, 0x8A};/**/\r
//LEDS\r#define LPIN_CH2 (1<<PINB0)\r#define LDD_CH2 DDRB\r#define LPORT_CH2 PORTB\r#define LPIN_CH3 (1<<PINA5)\r#define LDD_CH3 DDRA\r#define LPORT_CH3 PORTA\r#define LPIN_CH0 (1<<PINA7)\r#define LDD_CH0 DDRA\r#define LPORT_CH0 PORTA\r#define LPIN_CH1 (1<<PINB1)\r#define LDD_CH1 DDRB\r#define LPORT_CH1 PORTB\r
\r
#define LED2_ON LPORT_CH2|=LPIN_CH2;\r
-#else\r
+#endif\r
+\r
+#ifdef JOE_M\r
#define LED2_ON\r
#define PIN_CH2 (1<<PINA4)\r
#define PIN_CH3 (1<<PINA5)\r
#define PIN_CH1 (1<<PINA7)\r
#endif\r
\r
+#ifdef W1DAQ\r
+#define PIN_CH3 (1<<PINA1)\r
+#define PIN_CH2 (1<<PINA0)\r
+#define PIN_CH1 (1<<PINA7)\r
+#define PIN_CH0 (1<<PINA3)\r
+//LEDS\r#define LPIN_CH0 (1<<PINB1)\r#define LDD_CH0 DDRB\r#define LPORT_CH0 PORTB\r#define LPIN_CH1 (1<<PINB1)\r#define LDD_CH1 DDRB\r#define LPORT_CH1 PORTB\r#define LPIN_CH2 (1<<PINB1)\r#define LDD_CH2 DDRB\r#define LPORT_CH2 PORTB\r#define LPIN_CH3 (1<<PINB1)\r#define LDD_CH3 DDRB\r#define LPORT_CH3 PORTB\r\r
+#define LED2_ON LPORT_CH2&=~LPIN_CH2;\r
+#endif\r
+\r
+\r
#define TEST_TIMER ((TIMSK0 & (1<<TOIE0))==0)\r
\r
#endif\r
CLKPR=0;\r
#ifdef FHEM_PLATINE\r
LPORT_CH1|=LPIN_CH1;\r
+#endif\r
+#ifdef W1DAQ\r
+ LPORT_CH1&=~LPIN_CH1;\r
#endif\r
GIFR|=(1<<INTF0);\r
}\r
PORTA&=~(PIN_CH2|PIN_CH3);\r
#endif\r
\r
- #ifdef FHEM_PLATINE //LEDs\r
+ #if defined(FHEM_PLATINE) || defined(W1DAQ) //LEDs\r
LDD_CH0|=LPIN_CH0;\r LPORT_CH0&=~LPIN_CH0;\r LDD_CH1|=LPIN_CH1;\r LPORT_CH1&=~LPIN_CH1;\r LDD_CH2|=LPIN_CH2;\r LPORT_CH2&=~LPIN_CH2;\r LDD_CH3|=LPIN_CH3;\r LPORT_CH3&=~LPIN_CH3;\r
#endif\r
\r
//ACSR|=(1<<ACD); //Disable Comparator\r
ADCSRB|=(1<<ACME); //Disable Analog multiplexer\r
MCUCR &=~(1<<PUD); //All Pins Pullup...\r
- #ifdef FHEM_PLATINE\r
+#ifdef FHEM_PLATINE\r
DIDR0|=(1<<ADC0D);\r
PORTA&=~(1<<PINA0);//Disable Pullup\r
- #else\r
+#else\r
DIDR0|=(1<<ADC2D)|(1<<ADC1D); // Disable Digital input on Analog AIN0/AIN1 (PINA1 / PINA2)\r
PORTA&=~(1<<PINA2); //AIN1\r
- #endif\r
+#endif\r
ACSR&=~(1<<ACD);\r
ACSR|=(1<<ACIE)|(1<<ACIS1)|(1<<ACIS0)|(1<<ACBG); //Enabble comperator interrupt Rising edge....(1<<ACIS0) -> minus of Comperator falls down -> output of Comperator rises\r
- #ifdef FHEM_PLATINE\r
+#ifdef FHEM_PLATINE\r
//Switch std AIN1 to A0\r
ADCSRA&=~(1<<ADEN);\r
ADCSRB=(1<<ACME);\r
\r
\r
LPORT_CH0|=LPIN_CH0;\r _delay_ms(500);\r LPORT_CH0&=~LPIN_CH0;\r
- #endif\r
+#endif\r
+#ifdef W1DAQ\r
+ LPORT_CH0&=~LPIN_CH0;\r
+ _delay_ms(500);\r LPORT_CH0|=LPIN_CH0;\r#endif\r
sei();\r
while(1) {\r
- #ifdef FHEM_PLATINE\r
+#ifdef FHEM_PLATINE\r
if (LPORT_CH2&LPIN_CH2) {\r _delay_ms(50);\r LPORT_CH2&=~LPIN_CH2;\r }\r
if (LPORT_CH1&LPIN_CH1) {\r _delay_ms(50);\r LPORT_CH1&=~LPIN_CH1;\r }\r
- #endif\r
- #ifndef FHEM_PLATINE\r
+#endif\r
+#ifdef W1DAQ\r
+ if ((LPORT_CH2&LPIN_CH2)==0) {\r _delay_ms(50);\r LPORT_CH2|=LPIN_CH2;\r }\r
+#endif\r
+#ifndef FHEM_PLATINE\r
if ((PINB&(1<<PORTB0))==0) { //Jumper gesetzt ->Ruecksetzen\r
if ((counters1.c32[2]!=0)||(counters1.c32[3]!=0)||(counters2.c32[2]!=0)||(counters2.c32[3]!=0)) {\r
counters1.c32[0]++;\r counters2.c32[0]++;\r for (uint8_t i=2;i<4;i++) {\r
}\r
}\r
#endif\r
+ if (((TIMSK0 & (1<<TOIE0))==0)&& (mode==0)) {\r
+ MCUCR|=(1<<SE)|(1<<SM1);\r
+ \r
+ MCUCR&=~(1<<ISC01);\r
+ } else {\r
+ MCUCR|=(1<<SE);\r
+ MCUCR&=~(1<<SM1);\r
+ }\r
+ asm("SLEEP");\r
+\r
+/*\r
MCUCR|=(1<<SE);\r
MCUCR&=~(1<<SM1);\r
- asm("SLEEP");\r
+ asm("SLEEP");*/\r
}\r
\r
\r
--- /dev/null
+\r
+Microsoft Visual Studio Solution File, Format Version 12.00\r
+# Atmel Studio Solution File, Format Version 11.00\r
+VisualStudioVersion = 14.0.23107.0\r
+MinimumVisualStudioVersion = 10.0.40219.1\r
+Project("{54F91283-7BC4-4236-8FF9-10F437C3AD48}") = "DS2438_ADC", "DS2438_ADC.cproj", "{DCE6C7E3-EE26-4D79-826B-08594B9AD897}"\r
+EndProject\r
+Global\r
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution\r
+ Debug|AVR = Debug|AVR\r
+ Release|AVR = Release|AVR\r
+ EndGlobalSection\r
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution\r
+ {DCE6C7E3-EE26-4D79-826B-08594B9AD897}.Debug|AVR.ActiveCfg = Debug|AVR\r
+ {DCE6C7E3-EE26-4D79-826B-08594B9AD897}.Debug|AVR.Build.0 = Debug|AVR\r
+ {DCE6C7E3-EE26-4D79-826B-08594B9AD897}.Release|AVR.ActiveCfg = Release|AVR\r
+ {DCE6C7E3-EE26-4D79-826B-08594B9AD897}.Release|AVR.Build.0 = Release|AVR\r
+ EndGlobalSection\r
+ GlobalSection(SolutionProperties) = preSolution\r
+ HideSolutionNode = FALSE\r
+ EndGlobalSection\r
+EndGlobal\r
--- /dev/null
+// Copyright (c) 2017, Tobias Mueller tm(at)tm3d.de\r
+// All rights reserved.\r
+//\r
+// Redistribution and use in source and binary forms, with or without\r
+// modification, are permitted provided that the following conditions are\r
+// met:\r
+//\r
+// * Redistributions of source code must retain the above copyright\r
+// notice, this list of conditions and the following disclaimer.\r
+// * Redistributions in binary form must reproduce the above copyright\r
+// notice, this list of conditions and the following disclaimer in the\r
+// documentation and/or other materials provided with the\r
+// distribution.\r
+// * All advertising materials mentioning features or use of this\r
+// software must display the following acknowledgement: This product\r
+// includes software developed by tm3d.de and its contributors.\r
+// * Neither the name of tm3d.de nor the names of its contributors may\r
+// be used to endorse or promote products derived from this software\r
+// without specific prior written permission.\r
+//\r
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\r
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\r
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\r
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\r
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\r
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\r
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\r
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\r
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+\r
+\r
+#define F_CPU 8000000UL\r
+#include <avr/io.h>\r
+#include <avr/interrupt.h>\r
+#include <util/delay.h>\r
+#include <avr/wdt.h>\r
+#include <avr/sleep.h>\r
+#include <avr/pgmspace.h>\r
+\r
+\r
+extern void OWINIT();\r
+extern void EXTERN_SLEEP();\r
+\r
+uint8_t owid[8]={0x26, 0xA3, 0xD9, 0x84, 0xDD, 0xDD, 0x05, 0xF9};/**/\r
+uint8_t config_info[26]={0x01,0x06, 0x05,0x08, 0x06,0x08, 0x00,0x00, 0x02,0x09,0x00,0x09,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};\r
+\r
+\r
+\r
+extern uint8_t mode;\r
+extern uint8_t gcontrol;\r
+extern uint8_t reset_indicator;\r
+extern uint8_t alarmflag;\r
+\r
+volatile uint8_t wdcounter;\r
+\r
+\r
+typedef union {\r
+\r
+ volatile uint8_t bytes[64];\r
+ struct {\r
+ uint8_t status; //1\r
+ int16_t temp; //2\r
+ uint16_t voltage; //4\r
+ uint16_t current; //6\r
+ uint8_t threshold; //8\r
+ \r
+ uint8_t page1[8]; //9\r
+ uint8_t page2[8]; //17\r
+ uint8_t page3[8]; //25\r
+ uint8_t page4[8]; //33\r
+ uint8_t page5[8]; //41\r
+ uint8_t page6[8]; //49\r
+ uint8_t page7[8]; //57\r
+ //uint8_t crc; //65\r
+ };\r
+} pack_t;\r
+volatile pack_t pack;\r
+\r
+\r
+volatile int16_t am2302_temp;\r
+volatile uint16_t am2302_hum;\r
+\r
+\r
+\r
+volatile uint8_t am2302_mode=0;\r
+volatile uint8_t timeout=0;\r
+\r
+\r
+\r
+\r
+\r
+\r
+uint8_t userRegister[1];\r
+int16_t sRH,sT;\r
+volatile double temperatureC,humidityRH;\r
+volatile double l;\r
+\r
+#if defined(__AVR_ATtiny24__)||defined(__AVR_ATtiny44__) || defined(__AVR_ATtiny84__) || defined(__AVR_ATtiny24A__)||defined(__AVR_ATtiny44A__) || defined(__AVR_ATtiny84A__)\r
+ISR(WATCHDOG_vect) {\r
+ #else\r
+ISR(WDT_vect) {\r
+ #endif\r
+ wdcounter++;\r
+ if (reset_indicator==1) reset_indicator++;\r
+ else if (reset_indicator==2) mode=0;\r
+}\r
+ \r
+int testSW(void) {\r
+ uint8_t r;\r
+ DDRB&=~(1<<PORTB0); //Eingang\r
+ __asm__ __volatile__ ("nop");\r
+ PORTB|=(1<<PORTB0); //Pullup\r
+ __asm__ __volatile__ ("nop");\r
+ __asm__ __volatile__ ("nop");\r
+ __asm__ __volatile__ ("nop");\r
+ __asm__ __volatile__ ("nop");\r
+ __asm__ __volatile__ ("nop");\r
+ r=PINB&(1<<PORTB0);\r
+ __asm__ __volatile__ ("nop");\r
+ PORTB&=~(1<<PORTB0);\r
+ __asm__ __volatile__ ("nop");\r
+ DDRB|=(1<<PORTB0); //Eingang\r
+ return (r==0);\r
+}\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+ int main(void){\r
+ PRR|=(1<<PRUSI); // usi for save Power\r
+ PORTA=0xFF-(1<<PORTA5); \r
+ PORTB=0xFF-(1<<PORTB0); //Schalter kann gegen Masse sein und zieht dann immer Strom\r
+ DDRB|=(1<<PORTB0); //Als Ausgang und 0\r
+ \r
+ \r
+ OWINIT();\r
+\r
+ ACSR|=(1<<ACD); //Disable Comparator\r
+ //ADCSRB|=(1<<ACME); //Disable Analog multiplexer\r
+ MCUCR &=~(1<<PUD); //All Pins Pullup...\r
+ MCUCR |=(1<<BODS);\r
+ ADCSRA=(1<<ADEN)|(1<ADPS0)|(1<<ADPS2);\r
+ DIDR0|=(1<<ADC5D);\r
+ ADMUX=5; //VCC as ref\r
+ PORTA&=~(1<<PORTA5); \r
+ // Set up Watch Dog Timer for Inactivity\r
+ WDTCSR |= (1<<WDCE) ; // Enable the WD Change Bit\r
+ WDTCSR = (1<<WDIE) | // Enable WDT Interrupt\r
+ (1<<WDP2) | (1<<WDP1); // Set Timeout to ~2 seconds \r
+ \r
+ \r
+ sei();\r
+ \r
+ while(1) {\r
+ if (gcontrol) {\r
+ wdcounter=16;\r
+ gcontrol=0;\r
+ }\r
+ if (wdcounter>=16) {\r
+ uint16_t sum=0;\r
+ for(uint8_t i=0;i<16;i++) {\r
+ ADCSRA|=(1<<ADSC);\r
+ while ((ADCSRA&(1<<ADSC)));\r
+ sum=sum+ADC;\r
+ }\r
+ //5V=0x03FF0 (16 x 0x3FF) 5V=50C 50C = 50*256\r
+ am2302_temp=sum*0.782;\r
+ am2302_hum=sum/32.736;\r
+ wdcounter=0;\r
+ }\r
+ \r
+ \r
+\r
+ if (((TIMSK0 & (1<<TOIE0))==0)&& (mode==0)) {\r
+ MCUCR|=(1<<SE)|(1<<SM1);\r
+ MCUCR&=~(1<<ISC01);\r
+ } else {\r
+ MCUCR|=(1<<SE);\r
+ MCUCR&=~(1<<SM1);\r
+ }\r
+ asm("SLEEP");\r
+ }\r
+\r
+\r
+ }
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>\r
+<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="14.0">\r
+ <PropertyGroup>\r
+ <SchemaVersion>2.0</SchemaVersion>\r
+ <ProjectVersion>7.0</ProjectVersion>\r
+ <ToolchainName>com.Atmel.AVRGCC8.C</ToolchainName>\r
+ <ProjectGuid>dce6c7e3-ee26-4d79-826b-08594b9ad897</ProjectGuid>\r
+ <avrdevice>ATtiny84A</avrdevice>\r
+ <avrdeviceseries>none</avrdeviceseries>\r
+ <OutputType>Executable</OutputType>\r
+ <Language>C</Language>\r
+ <OutputFileName>$(MSBuildProjectName)</OutputFileName>\r
+ <OutputFileExtension>.elf</OutputFileExtension>\r
+ <OutputDirectory>$(MSBuildProjectDirectory)\$(Configuration)</OutputDirectory>\r
+ <AssemblyName>DS2438_DHT22</AssemblyName>\r
+ <Name>DS2438_ADC</Name>\r
+ <RootNamespace>DS2438_DHT22</RootNamespace>\r
+ <ToolchainFlavour>Native</ToolchainFlavour>\r
+ <KeepTimersRunning>true</KeepTimersRunning>\r
+ <OverrideVtor>false</OverrideVtor>\r
+ <CacheFlash>true</CacheFlash>\r
+ <ProgFlashFromRam>true</ProgFlashFromRam>\r
+ <RamSnippetAddress>0x20000000</RamSnippetAddress>\r
+ <UncachedRange />\r
+ <preserveEEPROM>true</preserveEEPROM>\r
+ <OverrideVtorValue>exception_table</OverrideVtorValue>\r
+ <BootSegment>2</BootSegment>\r
+ <eraseonlaunchrule>1</eraseonlaunchrule>\r
+ <ExternalProgrammingToolCommand />\r
+ <AsfFrameworkConfig>\r
+ <framework-data>\r
+ <options />\r
+ <configurations />\r
+ <files />\r
+ <documentation help="" />\r
+ <offline-documentation help="" />\r
+ <dependencies>\r
+ <content-extension eid="atmel.asf" uuidref="Atmel.ASF" version="3.28.1" />\r
+ </dependencies>\r
+ </framework-data>\r
+ </AsfFrameworkConfig>\r
+ <avrtool>com.atmel.avrdbg.tool.atmelice</avrtool>\r
+ <avrtoolserialnumber>J41800000789</avrtoolserialnumber>\r
+ <avrdeviceexpectedsignature>0x1E930C</avrdeviceexpectedsignature>\r
+ <com_atmel_avrdbg_tool_atmelice>\r
+ <ToolOptions>\r
+ <InterfaceProperties>\r
+ </InterfaceProperties>\r
+ <InterfaceName>debugWIRE</InterfaceName>\r
+ </ToolOptions>\r
+ <ToolType>com.atmel.avrdbg.tool.atmelice</ToolType>\r
+ <ToolNumber>J41800000789</ToolNumber>\r
+ <ToolName>Atmel-ICE</ToolName>\r
+ </com_atmel_avrdbg_tool_atmelice>\r
+ <avrtoolinterface>debugWIRE</avrtoolinterface>\r
+ </PropertyGroup>\r
+ <PropertyGroup Condition=" '$(Configuration)' == 'Release' ">\r
+ <ToolchainSettings>\r
+ <AvrGcc>\r
+ <avrgcc.common.Device>-mmcu=attiny84a -B "%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.79\gcc\dev\attiny84a"</avrgcc.common.Device>\r
+ <avrgcc.common.outputfiles.hex>True</avrgcc.common.outputfiles.hex>\r
+ <avrgcc.common.outputfiles.lss>True</avrgcc.common.outputfiles.lss>\r
+ <avrgcc.common.outputfiles.eep>True</avrgcc.common.outputfiles.eep>\r
+ <avrgcc.common.outputfiles.srec>True</avrgcc.common.outputfiles.srec>\r
+ <avrgcc.common.outputfiles.usersignatures>False</avrgcc.common.outputfiles.usersignatures>\r
+ <avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>True</avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>\r
+ <avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>True</avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>\r
+ <avrgcc.compiler.symbols.DefSymbols>\r
+ <ListValues>\r
+ <Value>NDEBUG</Value>\r
+ </ListValues>\r
+ </avrgcc.compiler.symbols.DefSymbols>\r
+ <avrgcc.compiler.directories.IncludePaths>\r
+ <ListValues>\r
+ <Value>%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.79\include</Value>\r
+ </ListValues>\r
+ </avrgcc.compiler.directories.IncludePaths>\r
+ <avrgcc.compiler.optimization.level>Optimize for size (-Os)</avrgcc.compiler.optimization.level>\r
+ <avrgcc.compiler.optimization.PackStructureMembers>True</avrgcc.compiler.optimization.PackStructureMembers>\r
+ <avrgcc.compiler.optimization.AllocateBytesNeededForEnum>True</avrgcc.compiler.optimization.AllocateBytesNeededForEnum>\r
+ <avrgcc.compiler.warnings.AllWarnings>True</avrgcc.compiler.warnings.AllWarnings>\r
+ <avrgcc.linker.libraries.Libraries>\r
+ <ListValues>\r
+ <Value>libm</Value>\r
+ </ListValues>\r
+ </avrgcc.linker.libraries.Libraries>\r
+ <avrgcc.assembler.general.IncludePaths>\r
+ <ListValues>\r
+ <Value>%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.79\include</Value>\r
+ </ListValues>\r
+ </avrgcc.assembler.general.IncludePaths>\r
+ </AvrGcc>\r
+ </ToolchainSettings>\r
+ </PropertyGroup>\r
+ <PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">\r
+ <ToolchainSettings>\r
+ <AvrGcc>\r
+ <avrgcc.common.Device>-mmcu=attiny84a -B "%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.79\gcc\dev\attiny84a"</avrgcc.common.Device>\r
+ <avrgcc.common.outputfiles.hex>True</avrgcc.common.outputfiles.hex>\r
+ <avrgcc.common.outputfiles.lss>True</avrgcc.common.outputfiles.lss>\r
+ <avrgcc.common.outputfiles.eep>True</avrgcc.common.outputfiles.eep>\r
+ <avrgcc.common.outputfiles.srec>True</avrgcc.common.outputfiles.srec>\r
+ <avrgcc.common.outputfiles.usersignatures>False</avrgcc.common.outputfiles.usersignatures>\r
+ <avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>True</avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>\r
+ <avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>True</avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>\r
+ <avrgcc.compiler.symbols.DefSymbols>\r
+ <ListValues>\r
+ <Value>DEBUG</Value>\r
+ </ListValues>\r
+ </avrgcc.compiler.symbols.DefSymbols>\r
+ <avrgcc.compiler.directories.IncludePaths>\r
+ <ListValues>\r
+ <Value>%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.79\include</Value>\r
+ </ListValues>\r
+ </avrgcc.compiler.directories.IncludePaths>\r
+ <avrgcc.compiler.optimization.level>Optimize (-O1)</avrgcc.compiler.optimization.level>\r
+ <avrgcc.compiler.optimization.PackStructureMembers>True</avrgcc.compiler.optimization.PackStructureMembers>\r
+ <avrgcc.compiler.optimization.AllocateBytesNeededForEnum>True</avrgcc.compiler.optimization.AllocateBytesNeededForEnum>\r
+ <avrgcc.compiler.optimization.DebugLevel>Default (-g2)</avrgcc.compiler.optimization.DebugLevel>\r
+ <avrgcc.compiler.warnings.AllWarnings>True</avrgcc.compiler.warnings.AllWarnings>\r
+ <avrgcc.linker.libraries.Libraries>\r
+ <ListValues>\r
+ <Value>libm</Value>\r
+ </ListValues>\r
+ </avrgcc.linker.libraries.Libraries>\r
+ <avrgcc.assembler.general.IncludePaths>\r
+ <ListValues>\r
+ <Value>%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.79\include</Value>\r
+ </ListValues>\r
+ </avrgcc.assembler.general.IncludePaths>\r
+ <avrgcc.assembler.debugging.DebugLevel>Default (-Wa,-g)</avrgcc.assembler.debugging.DebugLevel>\r
+ </AvrGcc>\r
+ </ToolchainSettings>\r
+ </PropertyGroup>\r
+ <ItemGroup>\r
+ <Compile Include="..\common\OWDS2438.S">\r
+ <SubType>compile</SubType>\r
+ <Link>OWDS2438.S</Link>\r
+ </Compile>\r
+ <Compile Include="DS2438_ADC.c">\r
+ <SubType>compile</SubType>\r
+ </Compile>\r
+ </ItemGroup>\r
+ <Import Project="$(AVRSTUDIO_EXE_PATH)\\Vs\\Compiler.targets" />\r
+</Project>
\ No newline at end of file
--- /dev/null
+\r
+Microsoft Visual Studio Solution File, Format Version 12.00\r
+# Atmel Studio Solution File, Format Version 11.00\r
+VisualStudioVersion = 14.0.23107.0\r
+MinimumVisualStudioVersion = 10.0.40219.1\r
+Project("{54F91283-7BC4-4236-8FF9-10F437C3AD48}") = "DS2438_ADC_DS2438_ADC", "DS2438_ADC_DS2438_ADC.cproj", "{7A5672FE-8226-4158-B931-E1F36B9A8858}"\r
+EndProject\r
+Global\r
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution\r
+ Debug|AVR = Debug|AVR\r
+ Release|AVR = Release|AVR\r
+ EndGlobalSection\r
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution\r
+ {7A5672FE-8226-4158-B931-E1F36B9A8858}.Debug|AVR.ActiveCfg = Debug|AVR\r
+ {7A5672FE-8226-4158-B931-E1F36B9A8858}.Debug|AVR.Build.0 = Debug|AVR\r
+ {7A5672FE-8226-4158-B931-E1F36B9A8858}.Release|AVR.ActiveCfg = Release|AVR\r
+ {7A5672FE-8226-4158-B931-E1F36B9A8858}.Release|AVR.Build.0 = Release|AVR\r
+ EndGlobalSection\r
+ GlobalSection(SolutionProperties) = preSolution\r
+ HideSolutionNode = FALSE\r
+ EndGlobalSection\r
+EndGlobal\r
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>\r
+<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
+ <PropertyGroup>\r
+ <SchemaVersion>2.0</SchemaVersion>\r
+ <ProjectVersion>7.0</ProjectVersion>\r
+ <ToolchainName>com.Atmel.AVRGCC8.C</ToolchainName>\r
+ <ProjectGuid>{7a5672fe-8226-4158-b931-e1f36b9a8858}</ProjectGuid>\r
+ <avrdevice>ATtiny84A</avrdevice>\r
+ <avrdeviceseries>none</avrdeviceseries>\r
+ <OutputType>Executable</OutputType>\r
+ <Language>C</Language>\r
+ <OutputFileName>$(MSBuildProjectName)</OutputFileName>\r
+ <OutputFileExtension>.elf</OutputFileExtension>\r
+ <OutputDirectory>$(MSBuildProjectDirectory)\$(Configuration)</OutputDirectory>\r
+ <AssemblyName>DS18B20_DS2438</AssemblyName>\r
+ <Name>DS2438_ADC_DS2438_ADC</Name>\r
+ <RootNamespace>DS18B20_DS2438</RootNamespace>\r
+ <ToolchainFlavour>Native</ToolchainFlavour>\r
+ <KeepTimersRunning>true</KeepTimersRunning>\r
+ <OverrideVtor>false</OverrideVtor>\r
+ <CacheFlash>true</CacheFlash>\r
+ <ProgFlashFromRam>true</ProgFlashFromRam>\r
+ <RamSnippetAddress>0x20000000</RamSnippetAddress>\r
+ <UncachedRange />\r
+ <preserveEEPROM>true</preserveEEPROM>\r
+ <OverrideVtorValue>exception_table</OverrideVtorValue>\r
+ <BootSegment>2</BootSegment>\r
+ <eraseonlaunchrule>1</eraseonlaunchrule>\r
+ <AsfFrameworkConfig>\r
+ <framework-data>\r
+ <options />\r
+ <configurations />\r
+ <files />\r
+ <documentation help="" />\r
+ <offline-documentation help="" />\r
+ <dependencies>\r
+ <content-extension eid="atmel.asf" uuidref="Atmel.ASF" version="3.28.1" />\r
+ </dependencies>\r
+ </framework-data>\r
+ </AsfFrameworkConfig>\r
+ <avrtool>com.atmel.avrdbg.tool.atmelice</avrtool>\r
+ <com_atmel_avrdbg_tool_atmelice>\r
+ <ToolOptions>\r
+ <InterfaceProperties>\r
+ <IspClock>125000</IspClock>\r
+ </InterfaceProperties>\r
+ <InterfaceName>debugWIRE</InterfaceName>\r
+ </ToolOptions>\r
+ <ToolType>com.atmel.avrdbg.tool.atmelice</ToolType>\r
+ <ToolNumber>J41800000789</ToolNumber>\r
+ <ToolName>Atmel-ICE</ToolName>\r
+ </com_atmel_avrdbg_tool_atmelice>\r
+ <avrtoolinterface>debugWIRE</avrtoolinterface>\r
+ <com_atmel_avrdbg_tool_simulator>\r
+ <ToolOptions>\r
+ <InterfaceProperties>\r
+ </InterfaceProperties>\r
+ <InterfaceName>\r
+ </InterfaceName>\r
+ </ToolOptions>\r
+ <ToolType>com.atmel.avrdbg.tool.simulator</ToolType>\r
+ <ToolNumber>\r
+ </ToolNumber>\r
+ <ToolName>Simulator</ToolName>\r
+ </com_atmel_avrdbg_tool_simulator>\r
+ <ExternalProgrammingToolCommand />\r
+ <avrtoolserialnumber>J41800000789</avrtoolserialnumber>\r
+ <avrdeviceexpectedsignature>0x1E930C</avrdeviceexpectedsignature>\r
+ <avrtoolinterfaceclock>125000</avrtoolinterfaceclock>\r
+ </PropertyGroup>\r
+ <PropertyGroup Condition=" '$(Configuration)' == 'Release' ">\r
+ <ToolchainSettings>\r
+ <AvrGcc>\r
+ <avrgcc.common.Device>-mmcu=attiny84a -B "%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.68\gcc\dev\attiny84a"</avrgcc.common.Device>\r
+ <avrgcc.common.outputfiles.hex>True</avrgcc.common.outputfiles.hex>\r
+ <avrgcc.common.outputfiles.lss>True</avrgcc.common.outputfiles.lss>\r
+ <avrgcc.common.outputfiles.eep>True</avrgcc.common.outputfiles.eep>\r
+ <avrgcc.common.outputfiles.srec>True</avrgcc.common.outputfiles.srec>\r
+ <avrgcc.common.outputfiles.usersignatures>False</avrgcc.common.outputfiles.usersignatures>\r
+ <avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>True</avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>\r
+ <avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>True</avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>\r
+ <avrgcc.compiler.directories.IncludePaths>\r
+ <ListValues>\r
+ <Value>%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.68\include</Value>\r
+ </ListValues>\r
+ </avrgcc.compiler.directories.IncludePaths>\r
+ <avrgcc.compiler.optimization.level>Optimize (-O1)</avrgcc.compiler.optimization.level>\r
+ <avrgcc.compiler.optimization.PackStructureMembers>True</avrgcc.compiler.optimization.PackStructureMembers>\r
+ <avrgcc.compiler.optimization.AllocateBytesNeededForEnum>True</avrgcc.compiler.optimization.AllocateBytesNeededForEnum>\r
+ <avrgcc.compiler.warnings.AllWarnings>True</avrgcc.compiler.warnings.AllWarnings>\r
+ <avrgcc.linker.libraries.Libraries>\r
+ <ListValues>\r
+ <Value>libm</Value>\r
+ </ListValues>\r
+ </avrgcc.linker.libraries.Libraries>\r
+ <avrgcc.assembler.debugging.DebugLevel>Default (-Wa,-g)</avrgcc.assembler.debugging.DebugLevel>\r
+ </AvrGcc>\r
+ </ToolchainSettings>\r
+ </PropertyGroup>\r
+ <PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">\r
+ <ToolchainSettings>\r
+ <AvrGcc>\r
+ <avrgcc.common.Device>-mmcu=attiny84a -B "%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.68\gcc\dev\attiny84a"</avrgcc.common.Device>\r
+ <avrgcc.common.outputfiles.hex>True</avrgcc.common.outputfiles.hex>\r
+ <avrgcc.common.outputfiles.lss>True</avrgcc.common.outputfiles.lss>\r
+ <avrgcc.common.outputfiles.eep>True</avrgcc.common.outputfiles.eep>\r
+ <avrgcc.common.outputfiles.srec>True</avrgcc.common.outputfiles.srec>\r
+ <avrgcc.common.outputfiles.usersignatures>False</avrgcc.common.outputfiles.usersignatures>\r
+ <avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>True</avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>\r
+ <avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>True</avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>\r
+ <avrgcc.compiler.symbols.DefSymbols>\r
+ <ListValues>\r
+ <Value>DEBUG</Value>\r
+ </ListValues>\r
+ </avrgcc.compiler.symbols.DefSymbols>\r
+ <avrgcc.compiler.directories.IncludePaths>\r
+ <ListValues>\r
+ <Value>%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.68\include</Value>\r
+ </ListValues>\r
+ </avrgcc.compiler.directories.IncludePaths>\r
+ <avrgcc.compiler.optimization.level>Optimize (-O1)</avrgcc.compiler.optimization.level>\r
+ <avrgcc.compiler.optimization.PackStructureMembers>True</avrgcc.compiler.optimization.PackStructureMembers>\r
+ <avrgcc.compiler.optimization.AllocateBytesNeededForEnum>True</avrgcc.compiler.optimization.AllocateBytesNeededForEnum>\r
+ <avrgcc.compiler.optimization.DebugLevel>Default (-g2)</avrgcc.compiler.optimization.DebugLevel>\r
+ <avrgcc.compiler.warnings.AllWarnings>True</avrgcc.compiler.warnings.AllWarnings>\r
+ <avrgcc.linker.libraries.Libraries>\r
+ <ListValues>\r
+ <Value>libm</Value>\r
+ </ListValues>\r
+ </avrgcc.linker.libraries.Libraries>\r
+ <avrgcc.assembler.debugging.DebugLevel>Default (-Wa,-g)</avrgcc.assembler.debugging.DebugLevel>\r
+ </AvrGcc>\r
+ </ToolchainSettings>\r
+ </PropertyGroup>\r
+ <ItemGroup>\r
+ <Compile Include="..\common\OWDS2438_DS2438.S">\r
+ <SubType>compile</SubType>\r
+ <Link>OWDS2438_DS2438.S</Link>\r
+ </Compile>\r
+ <Compile Include="DS2438_DS2438.c">\r
+ <SubType>compile</SubType>\r
+ </Compile>\r
+ </ItemGroup>\r
+ <Import Project="$(AVRSTUDIO_EXE_PATH)\\Vs\\Compiler.targets" />\r
+</Project>
\ No newline at end of file
--- /dev/null
+// Copyright (c) 2018, Tobias Mueller tm(at)tm3d.de\r
+// All rights reserved.\r
+//\r
+// Redistribution and use in source and binary forms, with or without\r
+// modification, are permitted provided that the following conditions are\r
+// met:\r
+//\r
+// * Redistributions of source code must retain the above copyright\r
+// notice, this list of conditions and the following disclaimer.\r
+// * Redistributions in binary form must reproduce the above copyright\r
+// notice, this list of conditions and the following disclaimer in the\r
+// documentation and/or other materials provided with the\r
+// distribution.\r
+// * All advertising materials mentioning features or use of this\r
+// software must display the following acknowledgement: This product\r
+// includes software developed by tm3d.de and its contributors.\r
+// * Neither the name of tm3d.de nor the names of its contributors may\r
+// be used to endorse or promote products derived from this software\r
+// without specific prior written permission.\r
+//\r
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\r
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\r
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\r
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\r
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\r
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\r
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\r
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\r
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+\r
+//!!!!!Max Program size 7551 Byte\r
+\r
+#define F_CPU 8000000UL\r
+#include <avr/io.h>\r
+#include <avr/interrupt.h>\r
+#include <util/delay.h> \r
+#include <avr/wdt.h>\r
+#include <avr/sleep.h>\r
+#include <avr/pgmspace.h>\r
+#include "../common/owSlave_tools.h"\r
+\r
+\r
+OWST_EXTERN_VARS\r
+OWST_WDT_ISR\r
+\r
+\r
+//#define W1DAQ\r
+#define JOE_M\r
+volatile uint8_t owid1[8]={0x26, 0x61, 0xDA, 0x84, 0x00, 0x00, 0x03, 0x43};/**/\r
+volatile uint8_t owid2[8]={0x26, 0x62, 0xDA, 0x84, 0x00, 0x00, 0x03, 0x1A};/**/\r
+volatile uint8_t config_info1[26]={6,6,6,0x08, 6,8, 0x00,0x00, 0x02,20,20,20,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; \r
+volatile uint8_t config_info2[26]={6,6, 6,0x08,6,8, 0,0, 0x02,20,20,20,0,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; \r
+ \r
+#if (owid>128) \r
+#error "Variable not correct"\r
+#endif\r
+\r
+#ifdef JOE_M\r
+#define PIN_PIOA1 (1<<PINA4)\r
+#define ADMA1 PINA4\r
+#define PIN_PIOB1 (1<<PINA5)\r
+#define ADMB1 PINA5\r
+#define PIN_PIOA2 (1<<PINA6)\r
+#define ADMA2 PINA6\r
+#define PIN_PIOB2 (1<<PINA7)\r
+#define ADMB2 PINA7\r
+#define ADDIFF1 0b011010\r
+#define ADDIFF1G 0b011011\r
+#define ADDIFF2 0b011110\r
+#define ADDIFF2G 0b011111\r
+#endif\r
+\r
+#ifdef W1DAQ\r
+#define PIN_PIOB1 (1<<PINA1)\r
+#define ADMB1 PINA1\r
+#define PIN_PIOA1 (1<<PINA0)\r
+#define ADMA1 PINA0\r
+#define PIN_PIOB2 (1<<PINA7)\r
+#define ADMB2 PINA7\r
+#define PIN_PIOA2 (1<<PINA3)\r
+#define ADMA2 PINA3\r
+#define ADDIFF1 0b001000\r
+#define ADDIFF1G 0b001001\r
+#define ADDIFF2 0b011000\r
+#define ADDIFF2G 0b011001\r
+\r
+#endif\r
+\r
+\r
+\r
+\r
+\r
+typedef union {\r
+ #if defined(__AVR_ATtiny25__)\r
+ volatile uint8_t bytes[16];\r
+ #else\r
+ volatile uint8_t bytes[64];\r
+ #endif\r
+ struct {\r
+ uint8_t status; //1\r
+ int16_t temp; //2\r
+ uint16_t voltage; //4\r
+ int16_t current; //6\r
+ uint8_t threshold; //8\r
+ \r
+ uint8_t page1[8]; //9\r
+ #if defined(__AVR_ATtiny25__)\r
+ #else\r
+ uint8_t page2[8]; //17\r
+ uint8_t page3[8]; //25\r
+ \r
+ uint8_t page4[8]; //33\r
+ uint8_t page5[8]; //41\r
+ uint8_t page6[8]; //49\r
+ uint8_t page7[8]; //57\r
+ \r
+ #endif\r
+ };\r
+} pack_t;\r
+volatile pack_t pack2,pack1;\r
+\r
+\r
+\r
+volatile int16_t DS2438_1_TEMP;\r
+volatile uint16_t DS2438_1_VAD;\r
+volatile uint16_t DS2438_1_VDD;\r
+volatile int16_t DS2438_2_TEMP;\r
+volatile uint16_t DS2438_2_VAD;\r
+volatile uint16_t DS2438_2_VDD;\r
+\r
+OWST_ADC_CONF16_FUNC\r
+OWST_ADC_CONF16_OSS_FUNC\r
+OWST_TESTSW\r
+\r
+\r
+int main(void){\r
+ OWST_INIT_ADC_ON \r
+ pack2.page3[0]=0xF4;//Spannung\r
+ pack1.page3[0]=0xF4; //Spannung\r
+ OWINIT();\r
+ OWST_WDR_CONFIG4\r
+ OWST_EN_PULLUP\r
+ \r
+ PORTA&=~((PIN_PIOA1)|(PIN_PIOB1)|(PIN_PIOA2)|(PIN_PIOB2));\r
+ OWST_INIT_ADC\r
+ DIDR0=(PIN_PIOA1)|(PIN_PIOB1)|(PIN_PIOA2)|(PIN_PIOB2);\r
+\r
+ //ADCSRB|=(1<<ADLAR); Adiust left\r
+ volatile double VCC;\r
+ volatile double VAD_A,VAD_B,VAD_C,VAD_D;\r
+ \r
+ gcontrol=1;\r
+ sei();\r
+ while(1) {\r
+ if (gcontrol) {\r
+ wdcounter=3;\r
+ gcontrol=0;\r
+ \r
+ }\r
+ if (wdcounter>2) { \r
+ \r
+ wdcounter=0;\r
+ ADMUX=OWST_ADCIN_REFINT;\r
+ _delay_us(100);\r
+ VCC=owst_ADC_runf();\r
+ VCC=(1.079*65472.0)/VCC;\r
+ DS2438_2_VDD=VCC*100;\r
+ DS2438_1_VDD=VCC*100;\r
+\r
+ if (testSW()) {\r
+ ADMUX= ADDIFF1; //ADC0 + ADC1 - Gain 1\r
+ _delay_us(100);\r
+ VAD_A=owst_ADC_runf();\r
+ if (VAD_A<3100) {\r
+ ADMUX= ADDIFF1G; //ADC0 + ADC1 - Gain 20\r
+ _delay_us(100);\r
+ VAD_A=owst_ADC_runf();\r
+ VAD_A=VCC/20.0*VAD_A/65472.0;\r
+ } else {\r
+ VAD_A=owst_ADC_OSS_runf();\r
+ VAD_A=VCC*VAD_A/65472.0;\r
+ }\r
+ DS2438_1_VAD=VAD_A*100;\r
+ DS2438_1_TEMP=VAD_A*256;\r
+\r
+ ADMUX= ADDIFF2; //ADC0 + ADC1 - Gain 1\r
+ _delay_us(100);\r
+ VAD_B=owst_ADC_runf();\r
+ if (VAD_B<3100) {\r
+ ADMUX= ADDIFF2G; //ADC0 + ADC1 - Gain 20\r
+ _delay_us(100);\r
+ VAD_B=owst_ADC_runf();\r
+ VAD_B=VCC/20.0*VAD_B/65472.0;\r
+ } else {\r
+ VAD_B=owst_ADC_OSS_runf();\r
+ VAD_B=VCC*VAD_B/65472.0;\r
+ }\r
+ DS2438_2_VAD=VAD_B*100;\r
+ DS2438_2_TEMP=VAD_B*256;\r
+\r
+\r
+\r
+ } else {\r
+ ADMUX=ADMA1;\r
+ _delay_us(100);\r
+ VAD_A=owst_ADC_OSS_runf();\r
+ VAD_A=VCC*VAD_A/65472.0;\r
+ DS2438_1_TEMP=VAD_A*256;\r
+ \r
+ ADMUX=ADMB1;\r
+ _delay_us(100);\r
+ VAD_B=owst_ADC_OSS_runf();\r
+ VAD_B=VCC*VAD_B/65472.0;\r
+ DS2438_1_VAD=VAD_B*100;\r
+ \r
+ ADMUX=ADMA2;\r
+ _delay_us(100);\r
+ VAD_C=owst_ADC_OSS_runf();\r
+ VAD_C=VCC*VAD_C/65472.0;\r
+ DS2438_2_TEMP=VAD_C*256;\r
+ \r
+ ADMUX=ADMB2;\r
+ _delay_us(100);\r
+ VAD_D=owst_ADC_OSS_runf();\r
+ VAD_D=VCC*VAD_D/65472.0;\r
+ DS2438_2_VAD=VAD_D*100;\r
+ }\r
+ \r
+ \r
+\r
+ \r
+ }\r
+ \r
+ \r
+ OWST_MAIN_END\r
+ }\r
+\r
+\r
+}\r
--- /dev/null
+\r
+Microsoft Visual Studio Solution File, Format Version 12.00\r
+# Atmel Studio Solution File, Format Version 11.00\r
+VisualStudioVersion = 14.0.23107.0\r
+MinimumVisualStudioVersion = 10.0.40219.1\r
+Project("{54F91283-7BC4-4236-8FF9-10F437C3AD48}") = "DS2438_CDM7160", "DS2438_CDM7160.cproj", "{91468D4F-8AE2-4C59-8A35-549C49E00934}"\r
+EndProject\r
+Global\r
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution\r
+ Debug|AVR = Debug|AVR\r
+ Release|AVR = Release|AVR\r
+ EndGlobalSection\r
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution\r
+ {91468D4F-8AE2-4C59-8A35-549C49E00934}.Debug|AVR.ActiveCfg = Debug|AVR\r
+ {91468D4F-8AE2-4C59-8A35-549C49E00934}.Debug|AVR.Build.0 = Debug|AVR\r
+ {91468D4F-8AE2-4C59-8A35-549C49E00934}.Release|AVR.ActiveCfg = Release|AVR\r
+ {91468D4F-8AE2-4C59-8A35-549C49E00934}.Release|AVR.Build.0 = Release|AVR\r
+ EndGlobalSection\r
+ GlobalSection(SolutionProperties) = preSolution\r
+ HideSolutionNode = FALSE\r
+ EndGlobalSection\r
+EndGlobal\r
--- /dev/null
+// Copyright (c) 2017, Tobias Mueller tm(at)tm3d.de\r
+// All rights reserved.\r
+//\r
+// Redistribution and use in source and binary forms, with or without\r
+// modification, are permitted provided that the following conditions are\r
+// met:\r
+//\r
+// * Redistributions of source code must retain the above copyright\r
+// notice, this list of conditions and the following disclaimer.\r
+// * Redistributions in binary form must reproduce the above copyright\r
+// notice, this list of conditions and the following disclaimer in the\r
+// documentation and/or other materials provided with the\r
+// distribution.\r
+// * All advertising materials mentioning features or use of this\r
+// software must display the following acknowledgement: This product\r
+// includes software developed by tm3d.de and its contributors.\r
+// * Neither the name of tm3d.de nor the names of its contributors may\r
+// be used to endorse or promote products derived from this software\r
+// without specific prior written permission.\r
+//\r
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\r
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\r
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\r
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\r
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\r
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\r
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\r
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\r
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+\r
+\r
+#define F_CPU 8000000UL\r
+#include <avr/io.h>\r
+#include <avr/interrupt.h>\r
+#include <util/delay.h>\r
+#include <avr/wdt.h>\r
+#include <avr/sleep.h>\r
+#include <avr/pgmspace.h>\r
+#include "../common/I2C/USI_TWI_Master.h"\r
+#include "../common/I2C/CDM7160.h"\r
+\r
+extern void OWINIT();\r
+extern void EXTERN_SLEEP();\r
+\r
+uint8_t owid[8]={0x26, 0xA2, 0xD9, 0x88, 0x00, 0x00, 0x05, 0x04};/**/\r
+uint8_t config_info[26]={10,13, 0x05,0x08, 10,22, 0x00,0x00, 0x02,0x07,0x00,0x07,0x00,0x00,0x00,0x00, 0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};\r
+ \r
+\r
+extern uint8_t mode;\r
+extern uint8_t gcontrol;\r
+extern uint8_t reset_indicator;\r
+extern uint8_t alarmflag;\r
+\r
+volatile uint8_t wdcounter=5;\r
+\r
+\r
+typedef union {\r
+\r
+ volatile uint8_t bytes[64];\r
+ struct {\r
+ uint8_t status; //1\r
+ int16_t temp; //2\r
+ uint16_t voltage; //4\r
+ uint16_t current; //6\r
+ uint8_t threshold; //8\r
+ \r
+ uint8_t page1[8]; //9\r
+ uint8_t page2[8]; //17\r
+ uint8_t page3[8]; //25\r
+ uint8_t page4[8]; //33\r
+ uint8_t page5[8]; //41\r
+ uint8_t page6[8]; //49\r
+ uint8_t page7[8]; //57\r
+ //uint8_t crc; //65\r
+ };\r
+} pack_t;\r
+volatile pack_t pack;\r
+\r
+\r
+\r
+volatile int16_t am2302_temp;\r
+volatile uint16_t am2302_hum;\r
+\r
+uint8_t userRegister[1];\r
+double temperatureC,humidityRH;\r
+volatile double l;\r
+\r
+#if defined(__AVR_ATtiny24__)||defined(__AVR_ATtiny44__) || defined(__AVR_ATtiny84__) || defined(__AVR_ATtiny24A__)||defined(__AVR_ATtiny44A__) || defined(__AVR_ATtiny84A__)\r
+ISR(WATCHDOG_vect) {\r
+#else\r
+ISR(WDT_vect) {\r
+#endif \r
+ wdcounter++;\r
+ if (reset_indicator==1) reset_indicator++;\r
+ else if (reset_indicator==2) mode=0;\r
+\r
+\r
+}\r
+\r
+int testSW(void) {\r
+ uint8_t r;\r
+ DDRB&=~(1<<PORTB0); //Eingang\r
+ __asm__ __volatile__ ("nop"); \r
+ PORTB|=(1<<PORTB0); //Pullup\r
+ __asm__ __volatile__ ("nop"); \r
+ __asm__ __volatile__ ("nop"); \r
+ __asm__ __volatile__ ("nop"); \r
+ __asm__ __volatile__ ("nop"); \r
+ __asm__ __volatile__ ("nop"); \r
+ r=PINB&(1<<PORTB0);\r
+ __asm__ __volatile__ ("nop"); \r
+ PORTB&=~(1<<PORTB0); \r
+ __asm__ __volatile__ ("nop"); \r
+ DDRB|=(1<<PORTB0); //Eingang\r
+ return (r==0);\r
+ \r
+ \r
+}\r
+\r
+int main(void){\r
+ PRR|=(1<<PRADC); // adc for save Power\r
+ PORTA=0xFF;\r
+ PORTB=0xFF-(1<<PORTB0); //Schalter kann gegen Masse sein und zieht dann immer Strom\r
+ DDRB|=(1<<PORTB0); //Als Ausgang und 0\r
+ \r
+ \r
+ OWINIT();\r
+\r
+ ACSR|=(1<<ACD); //Disable Comparator\r
+ ADCSRB|=(1<<ACME); //Disable Analog multiplexer\r
+ MCUCR &=~(1<<PUD); //All Pins Pullup...\r
+ MCUCR |=(1<<BODS);\r
+\r
+ \r
+ WDTCSR |= ((1<<WDCE) ); // Enable the WD Change Bit//| (1<<WDE)\r
+ WDTCSR |= (1<<WDIE) | // Enable WDT Interrupt\r
+ (1<<WDP3) | (1<<WDP0); // Set Timeout to ~8 seconds\r
+\r
+ uint8_t i;\r
+ for(i=0;i<64;i++) pack.bytes[i]=0;\r
+ pack.page3[0]=0xF4;\r
+ MCUSR=0;\r
+ USI_TWI_Master_Initialise();\r
+ CDM7160softReset();\r
+ _delay_ms(200);\r
+\r
+ CDM7160setMode(0); //Power Down Mode\r
+ _delay_ms(200);\r
+ CDM7160setAvCount(0x3F);\r
+ CDM7160setFMode(1);\r
+ am2302_temp=CDM7160getCO2();\r
+ CDM7160setMode(1);\r
+ _delay_ms(200); \r
+ sei();\r
+ \r
+ while(1) { \r
+ if (gcontrol) {\r
+ wdcounter=3;\r
+ gcontrol=0;\r
+ }\r
+ if (wdcounter>2) {\r
+ am2302_temp=CDM7160getCO2();\r
+ am2302_hum=am2302_temp/10;\r
+ wdcounter=0;\r
+ }\r
+\r
+ if (((TIMSK0 & (1<<TOIE0))==0)&& (mode==0)) {\r
+ MCUCR|=(1<<SE)|(1<<SM1);\r
+ MCUCR&=~(1<<ISC01);\r
+ } else {\r
+ MCUCR|=(1<<SE);\r
+ MCUCR&=~(1<<SM1);\r
+ }\r
+ asm("SLEEP");\r
+ }\r
+\r
+\r
+}
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>\r
+<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
+ <PropertyGroup>\r
+ <SchemaVersion>2.0</SchemaVersion>\r
+ <ProjectVersion>7.0</ProjectVersion>\r
+ <ToolchainName>com.Atmel.AVRGCC8.C</ToolchainName>\r
+ <ProjectGuid>{91468d4f-8ae2-4c59-8a35-549c49e00934}</ProjectGuid>\r
+ <avrdevice>ATtiny84A</avrdevice>\r
+ <avrdeviceseries>none</avrdeviceseries>\r
+ <OutputType>Executable</OutputType>\r
+ <Language>C</Language>\r
+ <OutputFileName>$(MSBuildProjectName)</OutputFileName>\r
+ <OutputFileExtension>.elf</OutputFileExtension>\r
+ <OutputDirectory>$(MSBuildProjectDirectory)\$(Configuration)</OutputDirectory>\r
+ <AssemblyName>DS2438_SHT2X</AssemblyName>\r
+ <Name>DS2438_CDM7160</Name>\r
+ <RootNamespace>DS2438_SHT2X</RootNamespace>\r
+ <ToolchainFlavour>Native</ToolchainFlavour>\r
+ <KeepTimersRunning>true</KeepTimersRunning>\r
+ <OverrideVtor>false</OverrideVtor>\r
+ <CacheFlash>true</CacheFlash>\r
+ <ProgFlashFromRam>true</ProgFlashFromRam>\r
+ <RamSnippetAddress>0x20000000</RamSnippetAddress>\r
+ <UncachedRange />\r
+ <preserveEEPROM>true</preserveEEPROM>\r
+ <OverrideVtorValue>exception_table</OverrideVtorValue>\r
+ <BootSegment>2</BootSegment>\r
+ <eraseonlaunchrule>1</eraseonlaunchrule>\r
+ <AsfFrameworkConfig>\r
+ <framework-data>\r
+ <options />\r
+ <configurations />\r
+ <files />\r
+ <documentation help="" />\r
+ <offline-documentation help="" />\r
+ <dependencies>\r
+ <content-extension eid="atmel.asf" uuidref="Atmel.ASF" version="3.28.1" />\r
+ </dependencies>\r
+ </framework-data>\r
+ </AsfFrameworkConfig>\r
+ <avrtool>com.atmel.avrdbg.tool.atmelice</avrtool>\r
+ <com_atmel_avrdbg_tool_atmelice>\r
+ <ToolOptions>\r
+ <InterfaceProperties>\r
+ </InterfaceProperties>\r
+ <InterfaceName>debugWIRE</InterfaceName>\r
+ </ToolOptions>\r
+ <ToolType>com.atmel.avrdbg.tool.atmelice</ToolType>\r
+ <ToolNumber>J41800000789</ToolNumber>\r
+ <ToolName>Atmel-ICE</ToolName>\r
+ </com_atmel_avrdbg_tool_atmelice>\r
+ <avrtoolinterface>debugWIRE</avrtoolinterface>\r
+ <ExternalProgrammingToolCommand />\r
+ <avrtoolserialnumber>J41800000789</avrtoolserialnumber>\r
+ <avrdeviceexpectedsignature>0x1E930C</avrdeviceexpectedsignature>\r
+ </PropertyGroup>\r
+ <PropertyGroup Condition=" '$(Configuration)' == 'Release' ">\r
+ <ToolchainSettings>\r
+ <AvrGcc>\r
+ <avrgcc.common.Device>-mmcu=attiny84a -B "%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.68\gcc\dev\attiny84a"</avrgcc.common.Device>\r
+ <avrgcc.common.outputfiles.hex>True</avrgcc.common.outputfiles.hex>\r
+ <avrgcc.common.outputfiles.lss>True</avrgcc.common.outputfiles.lss>\r
+ <avrgcc.common.outputfiles.eep>True</avrgcc.common.outputfiles.eep>\r
+ <avrgcc.common.outputfiles.srec>True</avrgcc.common.outputfiles.srec>\r
+ <avrgcc.common.outputfiles.usersignatures>False</avrgcc.common.outputfiles.usersignatures>\r
+ <avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>True</avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>\r
+ <avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>True</avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>\r
+ <avrgcc.compiler.symbols.DefSymbols>\r
+ <ListValues>\r
+ <Value>DEBUG</Value>\r
+ </ListValues>\r
+ </avrgcc.compiler.symbols.DefSymbols>\r
+ <avrgcc.compiler.directories.IncludePaths>\r
+ <ListValues>\r
+ <Value>%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.68\include</Value>\r
+ </ListValues>\r
+ </avrgcc.compiler.directories.IncludePaths>\r
+ <avrgcc.compiler.optimization.level>Optimize (-O1)</avrgcc.compiler.optimization.level>\r
+ <avrgcc.compiler.optimization.PackStructureMembers>True</avrgcc.compiler.optimization.PackStructureMembers>\r
+ <avrgcc.compiler.optimization.AllocateBytesNeededForEnum>True</avrgcc.compiler.optimization.AllocateBytesNeededForEnum>\r
+ <avrgcc.compiler.optimization.DebugLevel>Default (-g2)</avrgcc.compiler.optimization.DebugLevel>\r
+ <avrgcc.compiler.warnings.AllWarnings>True</avrgcc.compiler.warnings.AllWarnings>\r
+ <avrgcc.linker.libraries.Libraries>\r
+ <ListValues>\r
+ <Value>libm</Value>\r
+ </ListValues>\r
+ </avrgcc.linker.libraries.Libraries>\r
+ <avrgcc.assembler.debugging.DebugLevel>Default (-Wa,-g)</avrgcc.assembler.debugging.DebugLevel>\r
+ </AvrGcc>\r
+ </ToolchainSettings>\r
+ </PropertyGroup>\r
+ <PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">\r
+ <ToolchainSettings>\r
+ <AvrGcc>\r
+ <avrgcc.common.Device>-mmcu=attiny84a -B "%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.68\gcc\dev\attiny84a"</avrgcc.common.Device>\r
+ <avrgcc.common.outputfiles.hex>True</avrgcc.common.outputfiles.hex>\r
+ <avrgcc.common.outputfiles.lss>True</avrgcc.common.outputfiles.lss>\r
+ <avrgcc.common.outputfiles.eep>True</avrgcc.common.outputfiles.eep>\r
+ <avrgcc.common.outputfiles.srec>True</avrgcc.common.outputfiles.srec>\r
+ <avrgcc.common.outputfiles.usersignatures>False</avrgcc.common.outputfiles.usersignatures>\r
+ <avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>True</avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>\r
+ <avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>True</avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>\r
+ <avrgcc.compiler.symbols.DefSymbols>\r
+ <ListValues>\r
+ <Value>DEBUG</Value>\r
+ </ListValues>\r
+ </avrgcc.compiler.symbols.DefSymbols>\r
+ <avrgcc.compiler.directories.IncludePaths>\r
+ <ListValues>\r
+ <Value>%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.68\include</Value>\r
+ </ListValues>\r
+ </avrgcc.compiler.directories.IncludePaths>\r
+ <avrgcc.compiler.optimization.level>Optimize (-O1)</avrgcc.compiler.optimization.level>\r
+ <avrgcc.compiler.optimization.PackStructureMembers>True</avrgcc.compiler.optimization.PackStructureMembers>\r
+ <avrgcc.compiler.optimization.AllocateBytesNeededForEnum>True</avrgcc.compiler.optimization.AllocateBytesNeededForEnum>\r
+ <avrgcc.compiler.optimization.DebugLevel>Default (-g2)</avrgcc.compiler.optimization.DebugLevel>\r
+ <avrgcc.compiler.warnings.AllWarnings>True</avrgcc.compiler.warnings.AllWarnings>\r
+ <avrgcc.linker.libraries.Libraries>\r
+ <ListValues>\r
+ <Value>libm</Value>\r
+ </ListValues>\r
+ </avrgcc.linker.libraries.Libraries>\r
+ <avrgcc.assembler.debugging.DebugLevel>Default (-Wa,-g)</avrgcc.assembler.debugging.DebugLevel>\r
+ </AvrGcc>\r
+ </ToolchainSettings>\r
+ </PropertyGroup>\r
+ <ItemGroup>\r
+ <Compile Include="..\common\calibr.c">\r
+ <SubType>compile</SubType>\r
+ <Link>calibr.c</Link>\r
+ </Compile>\r
+ <Compile Include="..\common\I2C\CDM7160.c">\r
+ <SubType>compile</SubType>\r
+ <Link>CDM7160.c</Link>\r
+ </Compile>\r
+ <Compile Include="..\common\I2C\USI_TWI_Master.c">\r
+ <SubType>compile</SubType>\r
+ <Link>USI_TWI_Master.c</Link>\r
+ </Compile>\r
+ <Compile Include="..\common\OWDS2438.S">\r
+ <SubType>compile</SubType>\r
+ <Link>OWDS2438.S</Link>\r
+ </Compile>\r
+ <Compile Include="DS2438_CDM7160.c">\r
+ <SubType>compile</SubType>\r
+ </Compile>\r
+ </ItemGroup>\r
+ <Import Project="$(AVRSTUDIO_EXE_PATH)\\Vs\\Compiler.targets" />\r
+</Project>
\ No newline at end of file
--- /dev/null
+\r
+Microsoft Visual Studio Solution File, Format Version 12.00\r
+# Atmel Studio Solution File, Format Version 11.00\r
+VisualStudioVersion = 14.0.25420.1\r
+MinimumVisualStudioVersion = 10.0.40219.1\r
+Project("{54F91283-7BC4-4236-8FF9-10F437C3AD48}") = "DS2438_CDM7160_DS2438_BMP280", "DS2438_CDM7160_DS2438_BMP280.cproj", "{7A5672FE-8226-4158-B931-E1F36B9A8858}"\r
+EndProject\r
+Global\r
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution\r
+ Debug|AVR = Debug|AVR\r
+ Release|AVR = Release|AVR\r
+ EndGlobalSection\r
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution\r
+ {7A5672FE-8226-4158-B931-E1F36B9A8858}.Debug|AVR.ActiveCfg = Debug|AVR\r
+ {7A5672FE-8226-4158-B931-E1F36B9A8858}.Debug|AVR.Build.0 = Debug|AVR\r
+ {7A5672FE-8226-4158-B931-E1F36B9A8858}.Release|AVR.ActiveCfg = Release|AVR\r
+ {7A5672FE-8226-4158-B931-E1F36B9A8858}.Release|AVR.Build.0 = Release|AVR\r
+ EndGlobalSection\r
+ GlobalSection(SolutionProperties) = preSolution\r
+ HideSolutionNode = FALSE\r
+ EndGlobalSection\r
+EndGlobal\r
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>\r
+<Store xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="AtmelPackComponentManagement">\r
+ <ProjectComponents />\r
+</Store>
\ No newline at end of file
--- /dev/null
+// Copyright (c) 2017, Tobias Mueller tm(at)tm3d.de\r
+// All rights reserved.\r
+//\r
+// Redistribution and use in source and binary forms, with or without\r
+// modification, are permitted provided that the following conditions are\r
+// met:\r
+//\r
+// * Redistributions of source code must retain the above copyright\r
+// notice, this list of conditions and the following disclaimer.\r
+// * Redistributions in binary form must reproduce the above copyright\r
+// notice, this list of conditions and the following disclaimer in the\r
+// documentation and/or other materials provided with the\r
+// distribution.\r
+// * All advertising materials mentioning features or use of this\r
+// software must display the following acknowledgement: This product\r
+// includes software developed by tm3d.de and its contributors.\r
+// * Neither the name of tm3d.de nor the names of its contributors may\r
+// be used to endorse or promote products derived from this software\r
+// without specific prior written permission.\r
+//\r
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\r
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\r
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\r
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\r
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\r
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\r
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\r
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\r
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+\r
+//!!!!!Max Program size 7551 Byte\r
+\r
+#define F_CPU 8000000UL\r
+#include <avr/io.h>\r
+#include <avr/interrupt.h>\r
+#include <util/delay.h> \r
+#include <avr/wdt.h>\r
+#include <avr/sleep.h>\r
+#include <avr/pgmspace.h>\r
+#include "../common/I2C/TWI_Master.h"\r
+#include "../common/I2C/BMP280.h"\r
+#include "../common/I2C/CDM7160.h"\r
+#include "../common/owSlave_tools.h"\r
+\r
+\r
+OWST_EXTERN_VARS\r
+\r
+\r
+\r
+volatile uint8_t owid1[8]={0x26, 0x01, 0x01, 0x01, 0x00, 0x00, 0x03, 0xF6};/**/\r
+volatile uint8_t owid2[8]={0x26, 0x02, 0x01, 0x01, 0x00, 0x00, 0x03, 0xAF};/**/\r
+volatile uint8_t config_info1[26]={1,6, 10,8, 10,8, 0x00,0x00, 0x02,14,16,16,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; \r
+volatile uint8_t config_info2[26]={1,6, 2,8, 2,8, 0,0 , 0x02,14,14,14,0,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; \r
+ \r
+\r
+\r
+typedef union {\r
+ volatile uint8_t bytes[64];\r
+ struct {\r
+ uint8_t status; //1\r
+ int16_t temp; //2\r
+ uint16_t voltage; //4\r
+ int16_t current; //6\r
+ uint8_t threshold; //8\r
+ uint8_t page1[8]; //9\r
+ uint8_t page2[8]; //17\r
+ \r
+ uint8_t page3[8]; //25\r
+ \r
+ uint8_t page4[8]; //33\r
+ uint8_t page5[8]; //41\r
+ uint8_t page6[8]; //49\r
+ uint8_t page7[8]; //57\r
+ \r
+ };\r
+} pack1_t;\r
+volatile pack1_t pack1;\r
+\r
+\r
+\r
+\r
+typedef union {\r
+ volatile uint8_t bytes[64];\r
+ struct {\r
+ uint8_t status; //1\r
+ int16_t temp; //2\r
+ uint16_t voltage; //4\r
+ int16_t current; //6\r
+ uint8_t threshold; //8\r
+ \r
+ uint8_t page1[8]; //9\r
+ \r
+ uint8_t page2[8]; //17\r
+ uint8_t page3[8]; //25\r
+ \r
+ uint8_t page4[8]; //33\r
+ uint8_t page5[8]; //41\r
+ uint8_t page6[8]; //25\r
+ uint8_t page7[8]; //57\r
+ \r
+ };\r
+} pack2_t;\r
+volatile pack2_t pack2;\r
+\r
+OWST_WDT_ISR\r
+OWST_TESTSW\r
+\r
+\r
+\r
+\r
+\r
+volatile int16_t DS2438_1_TEMP;\r
+volatile uint16_t DS2438_1_VAD;\r
+volatile uint16_t DS2438_1_VDD;\r
+volatile int16_t DS2438_2_TEMP;\r
+volatile uint16_t DS2438_2_VAD;\r
+volatile uint16_t DS2438_2_VDD;\r
+\r
+\r
+\r
+double temperatureC,humidityRH,hhum;\r
+double l;\r
+uint32_t P;\r
+int32_t t;\r
+uint8_t max_adr=0;\r
+int16_t CO2;\r
+\r
+\r
+int main(void){\r
+ OWST_INIT_USI_ON\r
+ OWINIT();\r
+ OWST_WDR_CONFIG8\r
+ OWST_EN_PULLUP\r
+ \r
+ pack1.page3[0]=0xF1;\r
+ pack2.page3[0]=0xF4;\r
+\r
+ TWI_Master_Initialise();\r
+ CDM7160softReset();\r
+ _delay_ms(200);\r
+\r
+ CDM7160setMode(0); //Power Down Mode\r
+ _delay_ms(200);\r
+ CDM7160setAvCount(0x3F);\r
+ CDM7160setFMode(1);\r
+ CO2=CDM7160getCO2();\r
+ CDM7160setMode(1);\r
+ _delay_ms(200);\r
+\r
+ bmp280Init();\r
+\r
+\r
+\r
+\r
+ gcontrol=1;\r
+ sei();\r
+\r
+ while(1) {\r
+ if (gcontrol) wdcounter=4;\r
+ if (wdcounter>3) { //8s\r
+ wdcounter=0;\r
+ bmp280ConvertInt(&t,&P,1);\r
+ _delay_ms(100);\r
+ CO2=CDM7160getCO2()-35;\r
+ double cc=(double)CO2/(P/101300.0*298.0/(273.0+t/100.0));\r
+ DS2438_2_TEMP=t/100.0*256.0;\r
+ DS2438_1_TEMP=CO2;\r
+ DS2438_1_VDD=cc/10;\r
+ DS2438_1_VAD=(cc-DS2438_1_VDD*10)*100;\r
+ DS2438_2_VDD=P/1000;\r
+ DS2438_2_VAD=(P-DS2438_2_VDD*1000);\r
+\r
+ \r
+ }\r
+ \r
+ if (gcontrol) {\r
+ gcontrol=0;\r
+ }\r
+\r
+ \r
+ OWST_MAIN_END\r
+ }\r
+\r
+\r
+}\r
--- /dev/null
+\r
+Microsoft Visual Studio Solution File, Format Version 12.00\r
+# Atmel Studio Solution File, Format Version 11.00\r
+VisualStudioVersion = 14.0.23107.0\r
+MinimumVisualStudioVersion = 10.0.40219.1\r
+Project("{54F91283-7BC4-4236-8FF9-10F437C3AD48}") = "DS2438_DHT22", "DS2438_DHT22.cproj", "{DCE6C7E3-EE26-4D79-826B-08594B9AD897}"\r
+EndProject\r
+Global\r
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution\r
+ Debug|AVR = Debug|AVR\r
+ Release|AVR = Release|AVR\r
+ EndGlobalSection\r
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution\r
+ {DCE6C7E3-EE26-4D79-826B-08594B9AD897}.Debug|AVR.ActiveCfg = Debug|AVR\r
+ {DCE6C7E3-EE26-4D79-826B-08594B9AD897}.Debug|AVR.Build.0 = Debug|AVR\r
+ {DCE6C7E3-EE26-4D79-826B-08594B9AD897}.Release|AVR.ActiveCfg = Release|AVR\r
+ {DCE6C7E3-EE26-4D79-826B-08594B9AD897}.Release|AVR.Build.0 = Release|AVR\r
+ EndGlobalSection\r
+ GlobalSection(SolutionProperties) = preSolution\r
+ HideSolutionNode = FALSE\r
+ EndGlobalSection\r
+EndGlobal\r
--- /dev/null
+// Copyright (c) 2017, Tobias Mueller tm(at)tm3d.de\r
+// All rights reserved.\r
+//\r
+// Redistribution and use in source and binary forms, with or without\r
+// modification, are permitted provided that the following conditions are\r
+// met:\r
+//\r
+// * Redistributions of source code must retain the above copyright\r
+// notice, this list of conditions and the following disclaimer.\r
+// * Redistributions in binary form must reproduce the above copyright\r
+// notice, this list of conditions and the following disclaimer in the\r
+// documentation and/or other materials provided with the\r
+// distribution.\r
+// * All advertising materials mentioning features or use of this\r
+// software must display the following acknowledgement: This product\r
+// includes software developed by tm3d.de and its contributors.\r
+// * Neither the name of tm3d.de nor the names of its contributors may\r
+// be used to endorse or promote products derived from this software\r
+// without specific prior written permission.\r
+//\r
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\r
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\r
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\r
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\r
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\r
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\r
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\r
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\r
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+\r
+\r
+#define F_CPU 8000000UL\r
+#include <avr/io.h>\r
+#include <avr/interrupt.h>\r
+#include <util/delay.h>\r
+#include <avr/wdt.h>\r
+#include <avr/sleep.h>\r
+#include <avr/pgmspace.h>\r
+\r
+\r
+extern void OWINIT();\r
+extern void EXTERN_SLEEP();\r
+\r
+uint8_t owid[8]={0x26, 0xA2, 0xD9, 0x84, 0xDD, 0xDD, 0x05, 0xCE};/**/\r
+uint8_t config_info[26]={0x01,0x06, 0x05,0x08, 0x04,0x07, 0x00,0x00, 0x02,0x09,0x00,0x09,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};\r
+\r
+\r
+\r
+extern uint8_t mode;\r
+extern uint8_t gcontrol;\r
+extern uint8_t reset_indicator;\r
+extern uint8_t alarmflag;\r
+\r
+volatile uint8_t wdcounter;\r
+\r
+\r
+typedef union {\r
+\r
+ volatile uint8_t bytes[64];\r
+ struct {\r
+ uint8_t status; //1\r
+ int16_t temp; //2\r
+ uint16_t voltage; //4\r
+ uint16_t current; //6\r
+ uint8_t threshold; //8\r
+ \r
+ uint8_t page1[8]; //9\r
+ uint8_t page2[8]; //17\r
+ uint8_t page3[8]; //25\r
+ uint8_t page4[8]; //33\r
+ uint8_t page5[8]; //41\r
+ uint8_t page6[8]; //49\r
+ uint8_t page7[8]; //57\r
+ //uint8_t crc; //65\r
+ };\r
+} pack_t;\r
+volatile pack_t pack;\r
+\r
+\r
+#define DDR_SENSOR DDRA\r
+#define PORT_SENSOR PORTA\r
+#define PIN_SENSOR PINA\r
+#define SENSOR PINA2\r
+\r
+#define SENSOR_sda_out DDR_SENSOR |= (1 << SENSOR)\r
+#define SENSOR_sda_in DDR_SENSOR &= ~(1 << SENSOR);PORT_SENSOR |= (1 << SENSOR) // release sda => hi in consequence of pullup\r
+#define SENSOR_sda_low PORT_SENSOR &= ~(1 << SENSOR)\r
+#define SENSOR_sda_hi PORT_SENSOR |= (1 << SENSOR)\r
+#define SENSOR_is_hi PIN_SENSOR & (1 << SENSOR)\r
+#define SENSOR_is_low !(PIN_SENSOR & (1 << SENSOR))\r
+\r
+volatile int16_t am2302_temp;\r
+volatile uint16_t am2302_hum;\r
+\r
+\r
+uint8_t am_wait(uint8_t _time,uint8_t _signal){\r
+ TCNT1=0;\r
+ while(TCNT1==0);\r
+ if (_signal)\r
+ while((SENSOR_is_hi)&&(TCNT1<_time)) {}\r
+ else\r
+ while((SENSOR_is_low)&&(TCNT1<_time)) {}\r
+ \r
+ if (TCNT1>=_time) {return 1;}\r
+ return 0;\r
+}\r
+\r
+volatile uint8_t am2302_mode=0;\r
+volatile uint8_t timeout=0;\r
+\r
+\r
+\r
+\r
+\r
+\r
+uint8_t userRegister[1];\r
+int16_t sRH,sT;\r
+volatile double temperatureC,humidityRH;\r
+volatile double l;\r
+\r
+#if defined(__AVR_ATtiny24__)||defined(__AVR_ATtiny44__) || defined(__AVR_ATtiny84__) || defined(__AVR_ATtiny24A__)||defined(__AVR_ATtiny44A__) || defined(__AVR_ATtiny84A__)\r
+ISR(WATCHDOG_vect) {\r
+ #else\r
+ISR(WDT_vect) {\r
+ #endif\r
+ wdcounter++;\r
+ if (reset_indicator==1) reset_indicator++;\r
+ else if (reset_indicator==2) mode=0;\r
+}\r
+ \r
+int testSW(void) {\r
+ uint8_t r;\r
+ DDRB&=~(1<<PORTB0); //Eingang\r
+ __asm__ __volatile__ ("nop");\r
+ PORTB|=(1<<PORTB0); //Pullup\r
+ __asm__ __volatile__ ("nop");\r
+ __asm__ __volatile__ ("nop");\r
+ __asm__ __volatile__ ("nop");\r
+ __asm__ __volatile__ ("nop");\r
+ __asm__ __volatile__ ("nop");\r
+ r=PINB&(1<<PORTB0);\r
+ __asm__ __volatile__ ("nop");\r
+ PORTB&=~(1<<PORTB0);\r
+ __asm__ __volatile__ ("nop");\r
+ DDRB|=(1<<PORTB0); //Eingang\r
+ return (r==0);\r
+}\r
+\r
+uint8_t am2302() {\r
+ int16_t lam2302_temp;\r
+ uint16_t lam2302_hum;\r
+ uint8_t rSREG;\r
+ uint8_t sensor_data[5];\r
+\r
+ TCCR1B=(1<<CS11); //Clock/8 1µs\r
+\r
+ \r
+ SENSOR_sda_out;\r
+ SENSOR_sda_low; \r
+ _delay_ms(20);\r
+ SENSOR_sda_hi; \r
+ SENSOR_sda_in;\r
+// _delay_ms(40);\r
+ //SENSOR_sda_low;\r
+ //_delay_us(40);\r
+\r
+ //SENSOR_sda_in;\r
+ /*uint16_t loopCnt;\r
+ loopCnt=10000;\r
+ while((SENSOR_is_low)) {\r
+ if (loopCnt-- == 0) return 11;\r
+ }\r
+ loopCnt=10000;\r
+ while((SENSOR_is_hi)) {\r
+ if (loopCnt-- == 0) return 12;\r
+ }*/\r
+ if (am_wait(200,1)) return 2;\r
+ if (am_wait(100,0)) return 3;\r
+ if (am_wait(100,1)) return 4;\r
+ \r
+ for(uint8_t i = 0; i < 5; i++) {\r
+ uint8_t sensor_byte = 0;\r
+ for(uint8_t j = 1; j <= 8; j++) {// get 8 bits from sensor\r
+ if (am_wait(88,0)) return 5;\r
+ \r
+ TCNT1=0;while(TCNT1==0);;while(TCNT1<35) ;\r
+ sensor_byte <<= 1; // add new lower byte\r
+ if (SENSOR_is_hi) {// if sda high after 30us => bit=1 else bit=0\r
+ sensor_byte |= 1;\r
+ if (am_wait(45,1)) return 6;// 30us - 75us = 45us\r
+ }\r
+ }\r
+ sensor_data[i] = sensor_byte;\r
+ }\r
+\r
+ // checksum\r
+ if ( ((sensor_data[0]+sensor_data[1]+sensor_data[2]+sensor_data[3]) & 0xff ) != sensor_data[4])\r
+ {\r
+ PORTB&=~(1<<PINB0);\r
+ return 7;\r
+ }\r
+ if (sensor_data[2]&0x80) { //minus\r
+ sensor_data[2]&=~(0x80);\r
+ lam2302_temp=-( sensor_data[2]*10);\r
+ } else\r
+ lam2302_temp=(sensor_data[2]*10);\r
+ if (!testSW()) {\r
+ double htemp=lam2302_temp;\r
+ double hhum=(1.0546-0.000216*htemp)*(sensor_data[0]*10);\r
+ //htemp=Temperauter * 10 \r
+ //lam2302_hum=0.318*hhum +76;\r
+ lam2302_hum=0.31*hhum +80; //hhum = Hum*10 -> 5V also all *5\r
+ config_info[5]=7;\r
+ }\r
+ else {\r
+ \r
+ lam2302_hum=(sensor_data[0]*10);\r
+ config_info[5]=12;\r
+ }\r
+ lam2302_temp=lam2302_temp*25.6;\r
+ rSREG=SREG;\r
+ cli();\r
+ am2302_hum=lam2302_hum;\r
+ am2302_temp=lam2302_temp;\r
+ SREG=rSREG;\r
+ return 0;\r
+}\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+ int main(void){\r
+ PRR|=(1<<PRUSI)|(1<<PRADC); // adc and usi for save Power\r
+ PORTA=0xFF;\r
+ PORTB=0xFF-(1<<PORTB0); //Schalter kann gegen Masse sein und zieht dann immer Strom\r
+ DDRB|=(1<<PORTB0); //Als Ausgang und 0\r
+ \r
+ \r
+ OWINIT();\r
+\r
+ ACSR|=(1<<ACD); //Disable Comparator\r
+ ADCSRB|=(1<<ACME); //Disable Analog multiplexer\r
+ MCUCR &=~(1<<PUD); //All Pins Pullup...\r
+ MCUCR |=(1<<BODS);\r
+\r
+ \r
+ DDRA|=(1<<PINA1); //stromversorgung\r
+#define SENSON PORTA|=(1<<PINA1);\r
+#define SENSOFF PORTA&=~(1<<PINA1);\r
+\r
+ // Set up Watch Dog Timer for Inactivity\r
+ WDTCSR |= (1<<WDCE) ; // Enable the WD Change Bit\r
+ WDTCSR = (1<<WDIE) | // Enable WDT Interrupt\r
+ (1<<WDP2) | (1<<WDP1); // Set Timeout to ~2 seconds \r
+ \r
+ if (testSW()) {\r
+ config_info[5]=12; //hum *10\r
+ }else{\r
+ config_info[5]=7; //HIH4031\r
+ }\r
+ \r
+ uint8_t i;\r
+ for(i=0;i<64;i++) pack.bytes[i]=0;\r
+ pack.page3[0]=0xF1; //Wiregate Code\r
+ MCUSR=0;\r
+ \r
+ uint8_t err;\r
+ uint8_t pn=1;\r
+ SENSON\r
+ _delay_ms(4000);\r
+ err =am2302();\r
+ am2302_temp=err*256;\r
+ sei();\r
+ \r
+ while(1) {\r
+ if (gcontrol) {\r
+ if (wdcounter>2) {\r
+ wdcounter=0;\r
+ SENSON\r
+ }\r
+ gcontrol=0;\r
+ }\r
+ if (wdcounter==2) {\r
+ err=am2302();\r
+ if (err!=0) {\r
+ pack.page3[pn]=err;\r
+ pn=pn+1;if (pn>31) pn=1;\r
+ }\r
+ //SENSOFF\r
+ wdcounter=3;\r
+ }\r
+ if (wdcounter>=16) {\r
+ wdcounter=0;\r
+ SENSON\r
+ }\r
+ \r
+ \r
+\r
+ if (((TIMSK0 & (1<<TOIE0))==0)&& (mode==0)) {\r
+ MCUCR|=(1<<SE)|(1<<SM1);\r
+ MCUCR&=~(1<<ISC01);\r
+ } else {\r
+ MCUCR|=(1<<SE);\r
+ MCUCR&=~(1<<SM1);\r
+ }\r
+ asm("SLEEP");\r
+ }\r
+\r
+\r
+ }
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>\r
+<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="14.0">\r
+ <PropertyGroup>\r
+ <SchemaVersion>2.0</SchemaVersion>\r
+ <ProjectVersion>7.0</ProjectVersion>\r
+ <ToolchainName>com.Atmel.AVRGCC8.C</ToolchainName>\r
+ <ProjectGuid>dce6c7e3-ee26-4d79-826b-08594b9ad897</ProjectGuid>\r
+ <avrdevice>ATtiny84A</avrdevice>\r
+ <avrdeviceseries>none</avrdeviceseries>\r
+ <OutputType>Executable</OutputType>\r
+ <Language>C</Language>\r
+ <OutputFileName>$(MSBuildProjectName)</OutputFileName>\r
+ <OutputFileExtension>.elf</OutputFileExtension>\r
+ <OutputDirectory>$(MSBuildProjectDirectory)\$(Configuration)</OutputDirectory>\r
+ <AssemblyName>DS2438_DHT22</AssemblyName>\r
+ <Name>DS2438_DHT22</Name>\r
+ <RootNamespace>DS2438_DHT22</RootNamespace>\r
+ <ToolchainFlavour>Native</ToolchainFlavour>\r
+ <KeepTimersRunning>true</KeepTimersRunning>\r
+ <OverrideVtor>false</OverrideVtor>\r
+ <CacheFlash>true</CacheFlash>\r
+ <ProgFlashFromRam>true</ProgFlashFromRam>\r
+ <RamSnippetAddress>0x20000000</RamSnippetAddress>\r
+ <UncachedRange />\r
+ <preserveEEPROM>true</preserveEEPROM>\r
+ <OverrideVtorValue>exception_table</OverrideVtorValue>\r
+ <BootSegment>2</BootSegment>\r
+ <eraseonlaunchrule>1</eraseonlaunchrule>\r
+ <ExternalProgrammingToolCommand />\r
+ <AsfFrameworkConfig>\r
+ <framework-data>\r
+ <options />\r
+ <configurations />\r
+ <files />\r
+ <documentation help="" />\r
+ <offline-documentation help="" />\r
+ <dependencies>\r
+ <content-extension eid="atmel.asf" uuidref="Atmel.ASF" version="3.28.1" />\r
+ </dependencies>\r
+ </framework-data>\r
+ </AsfFrameworkConfig>\r
+ <avrtool>com.atmel.avrdbg.tool.atmelice</avrtool>\r
+ <avrtoolserialnumber>J41800000789</avrtoolserialnumber>\r
+ <avrdeviceexpectedsignature>0x1E930C</avrdeviceexpectedsignature>\r
+ <com_atmel_avrdbg_tool_atmelice>\r
+ <ToolOptions>\r
+ <InterfaceProperties>\r
+ </InterfaceProperties>\r
+ <InterfaceName>debugWIRE</InterfaceName>\r
+ </ToolOptions>\r
+ <ToolType>com.atmel.avrdbg.tool.atmelice</ToolType>\r
+ <ToolNumber>J41800000789</ToolNumber>\r
+ <ToolName>Atmel-ICE</ToolName>\r
+ </com_atmel_avrdbg_tool_atmelice>\r
+ <avrtoolinterface>debugWIRE</avrtoolinterface>\r
+ </PropertyGroup>\r
+ <PropertyGroup Condition=" '$(Configuration)' == 'Release' ">\r
+ <ToolchainSettings>\r
+ <AvrGcc>\r
+ <avrgcc.common.Device>-mmcu=attiny84a -B "%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.79\gcc\dev\attiny84a"</avrgcc.common.Device>\r
+ <avrgcc.common.outputfiles.hex>True</avrgcc.common.outputfiles.hex>\r
+ <avrgcc.common.outputfiles.lss>True</avrgcc.common.outputfiles.lss>\r
+ <avrgcc.common.outputfiles.eep>True</avrgcc.common.outputfiles.eep>\r
+ <avrgcc.common.outputfiles.srec>True</avrgcc.common.outputfiles.srec>\r
+ <avrgcc.common.outputfiles.usersignatures>False</avrgcc.common.outputfiles.usersignatures>\r
+ <avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>True</avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>\r
+ <avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>True</avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>\r
+ <avrgcc.compiler.symbols.DefSymbols>\r
+ <ListValues>\r
+ <Value>NDEBUG</Value>\r
+ </ListValues>\r
+ </avrgcc.compiler.symbols.DefSymbols>\r
+ <avrgcc.compiler.directories.IncludePaths>\r
+ <ListValues>\r
+ <Value>%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.79\include</Value>\r
+ </ListValues>\r
+ </avrgcc.compiler.directories.IncludePaths>\r
+ <avrgcc.compiler.optimization.level>Optimize for size (-Os)</avrgcc.compiler.optimization.level>\r
+ <avrgcc.compiler.optimization.PackStructureMembers>True</avrgcc.compiler.optimization.PackStructureMembers>\r
+ <avrgcc.compiler.optimization.AllocateBytesNeededForEnum>True</avrgcc.compiler.optimization.AllocateBytesNeededForEnum>\r
+ <avrgcc.compiler.warnings.AllWarnings>True</avrgcc.compiler.warnings.AllWarnings>\r
+ <avrgcc.linker.libraries.Libraries>\r
+ <ListValues>\r
+ <Value>libm</Value>\r
+ </ListValues>\r
+ </avrgcc.linker.libraries.Libraries>\r
+ <avrgcc.assembler.general.IncludePaths>\r
+ <ListValues>\r
+ <Value>%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.79\include</Value>\r
+ </ListValues>\r
+ </avrgcc.assembler.general.IncludePaths>\r
+ </AvrGcc>\r
+ </ToolchainSettings>\r
+ </PropertyGroup>\r
+ <PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">\r
+ <ToolchainSettings>\r
+ <AvrGcc>\r
+ <avrgcc.common.Device>-mmcu=attiny84a -B "%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.79\gcc\dev\attiny84a"</avrgcc.common.Device>\r
+ <avrgcc.common.outputfiles.hex>True</avrgcc.common.outputfiles.hex>\r
+ <avrgcc.common.outputfiles.lss>True</avrgcc.common.outputfiles.lss>\r
+ <avrgcc.common.outputfiles.eep>True</avrgcc.common.outputfiles.eep>\r
+ <avrgcc.common.outputfiles.srec>True</avrgcc.common.outputfiles.srec>\r
+ <avrgcc.common.outputfiles.usersignatures>False</avrgcc.common.outputfiles.usersignatures>\r
+ <avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>True</avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>\r
+ <avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>True</avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>\r
+ <avrgcc.compiler.symbols.DefSymbols>\r
+ <ListValues>\r
+ <Value>DEBUG</Value>\r
+ </ListValues>\r
+ </avrgcc.compiler.symbols.DefSymbols>\r
+ <avrgcc.compiler.directories.IncludePaths>\r
+ <ListValues>\r
+ <Value>%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.79\include</Value>\r
+ </ListValues>\r
+ </avrgcc.compiler.directories.IncludePaths>\r
+ <avrgcc.compiler.optimization.level>Optimize (-O1)</avrgcc.compiler.optimization.level>\r
+ <avrgcc.compiler.optimization.PackStructureMembers>True</avrgcc.compiler.optimization.PackStructureMembers>\r
+ <avrgcc.compiler.optimization.AllocateBytesNeededForEnum>True</avrgcc.compiler.optimization.AllocateBytesNeededForEnum>\r
+ <avrgcc.compiler.optimization.DebugLevel>Default (-g2)</avrgcc.compiler.optimization.DebugLevel>\r
+ <avrgcc.compiler.warnings.AllWarnings>True</avrgcc.compiler.warnings.AllWarnings>\r
+ <avrgcc.linker.libraries.Libraries>\r
+ <ListValues>\r
+ <Value>libm</Value>\r
+ </ListValues>\r
+ </avrgcc.linker.libraries.Libraries>\r
+ <avrgcc.assembler.general.IncludePaths>\r
+ <ListValues>\r
+ <Value>%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.79\include</Value>\r
+ </ListValues>\r
+ </avrgcc.assembler.general.IncludePaths>\r
+ <avrgcc.assembler.debugging.DebugLevel>Default (-Wa,-g)</avrgcc.assembler.debugging.DebugLevel>\r
+ </AvrGcc>\r
+ </ToolchainSettings>\r
+ </PropertyGroup>\r
+ <ItemGroup>\r
+ <Compile Include="..\common\OWDS2438.S">\r
+ <SubType>compile</SubType>\r
+ <Link>OWDS2438.S</Link>\r
+ </Compile>\r
+ <Compile Include="DS2438_DHT22.c">\r
+ <SubType>compile</SubType>\r
+ </Compile>\r
+ </ItemGroup>\r
+ <Import Project="$(AVRSTUDIO_EXE_PATH)\\Vs\\Compiler.targets" />\r
+</Project>
\ No newline at end of file
<ExternalProgrammingToolCommand />\r
<AsfFrameworkConfig>\r
<framework-data>\r
- <options />\r
- <configurations />\r
- <files />\r
- <documentation help="" />\r
- <offline-documentation help="" />\r
- <dependencies>\r
- <content-extension eid="atmel.asf" uuidref="Atmel.ASF" version="3.28.1" />\r
- </dependencies>\r
-</framework-data>\r
+ <options />\r
+ <configurations />\r
+ <files />\r
+ <documentation help="" />\r
+ <offline-documentation help="" />\r
+ <dependencies>\r
+ <content-extension eid="atmel.asf" uuidref="Atmel.ASF" version="3.28.1" />\r
+ </dependencies>\r
+ </framework-data>\r
</AsfFrameworkConfig>\r
<avrtool>com.atmel.avrdbg.tool.atmelice</avrtool>\r
<avrtoolserialnumber>J41800000789</avrtoolserialnumber>\r
--- /dev/null
+\r
+Microsoft Visual Studio Solution File, Format Version 12.00\r
+# Atmel Studio Solution File, Format Version 11.00\r
+VisualStudioVersion = 14.0.23107.0\r
+MinimumVisualStudioVersion = 10.0.40219.1\r
+Project("{54F91283-7BC4-4236-8FF9-10F437C3AD48}") = "DS2438_Fenster_Kontakt", "DS2438_Fenster_Kontakt.cproj", "{DCE6C7E3-EE26-4D79-826B-08594B9AD897}"\r
+EndProject\r
+Global\r
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution\r
+ Debug|AVR = Debug|AVR\r
+ Release|AVR = Release|AVR\r
+ EndGlobalSection\r
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution\r
+ {DCE6C7E3-EE26-4D79-826B-08594B9AD897}.Debug|AVR.ActiveCfg = Debug|AVR\r
+ {DCE6C7E3-EE26-4D79-826B-08594B9AD897}.Debug|AVR.Build.0 = Debug|AVR\r
+ {DCE6C7E3-EE26-4D79-826B-08594B9AD897}.Release|AVR.ActiveCfg = Release|AVR\r
+ {DCE6C7E3-EE26-4D79-826B-08594B9AD897}.Release|AVR.Build.0 = Release|AVR\r
+ EndGlobalSection\r
+ GlobalSection(SolutionProperties) = preSolution\r
+ HideSolutionNode = FALSE\r
+ EndGlobalSection\r
+EndGlobal\r
--- /dev/null
+// Copyright (c) 2017, Tobias Mueller tm(at)tm3d.de\r
+// All rights reserved.\r
+//\r
+// Redistribution and use in source and binary forms, with or without\r
+// modification, are permitted provided that the following conditions are\r
+// met:\r
+//\r
+// * Redistributions of source code must retain the above copyright\r
+// notice, this list of conditions and the following disclaimer.\r
+// * Redistributions in binary form must reproduce the above copyright\r
+// notice, this list of conditions and the following disclaimer in the\r
+// documentation and/or other materials provided with the\r
+// distribution.\r
+// * All advertising materials mentioning features or use of this\r
+// software must display the following acknowledgement: This product\r
+// includes software developed by tm3d.de and its contributors.\r
+// * Neither the name of tm3d.de nor the names of its contributors may\r
+// be used to endorse or promote products derived from this software\r
+// without specific prior written permission.\r
+//\r
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\r
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\r
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\r
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\r
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\r
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\r
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\r
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\r
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+\r
+\r
+#define F_CPU 8000000UL\r
+#include <avr/io.h>\r
+#include <avr/interrupt.h>\r
+#include <util/delay.h>\r
+#include <avr/wdt.h>\r
+#include <avr/sleep.h>\r
+#include <avr/pgmspace.h>\r
+\r
+\r
+extern void OWINIT();\r
+extern void EXTERN_SLEEP();\r
+\r
+uint8_t owid[8]={0x26, 0xA3, 0xD9, 0x89, 0xDD, 0xDD, 0x05, 0x64};/**/\r
+uint8_t config_info[26]={0x01,0x06, 0x05,0x08, 0x06,0x08, 0x00,0x00, 0x02,0x09,0x00,0x09,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};\r
+\r
+\r
+\r
+extern uint8_t mode;\r
+extern uint8_t gcontrol;\r
+extern uint8_t reset_indicator;\r
+extern uint8_t alarmflag;\r
+\r
+volatile uint8_t wdcounter;\r
+\r
+\r
+typedef union {\r
+\r
+ volatile uint8_t bytes[64];\r
+ struct {\r
+ uint8_t status; //1\r
+ int16_t temp; //2\r
+ uint16_t voltage; //4\r
+ uint16_t current; //6\r
+ uint8_t threshold; //8\r
+ \r
+ uint8_t page1[8]; //9\r
+ uint8_t page2[8]; //17\r
+ uint8_t page3[8]; //25\r
+ uint8_t page4[8]; //33\r
+ uint8_t page5[8]; //41\r
+ uint8_t page6[8]; //49\r
+ uint8_t page7[8]; //57\r
+ //uint8_t crc; //65\r
+ };\r
+} pack_t;\r
+volatile pack_t pack;\r
+\r
+\r
+volatile int16_t ds_temp;\r
+volatile uint16_t ds_vad;\r
+volatile uint16_t ds_vdd;\r
+\r
+#define CH1 (1<<PORTA0)\r
+#define CH2 (1<<PORTA1)\r
+#define CH3 (1<<PORTA2)\r
+#define PIN_CH1 PINA\r
+#define PIN_CH2 PINA\r
+#define PIN_CH3 PINA\r
+\r
+volatile uint8_t ch1,ch2,ch3;\r
+\r
+\r
+#if defined(__AVR_ATtiny24__)||defined(__AVR_ATtiny44__) || defined(__AVR_ATtiny84__) || defined(__AVR_ATtiny24A__)||defined(__AVR_ATtiny44A__) || defined(__AVR_ATtiny84A__)\r
+ISR(WATCHDOG_vect) {\r
+ #else\r
+ISR(WDT_vect) {\r
+ #endif\r
+ wdcounter++;if (wdcounter==11) wdcounter=10;\r
+ if (ch1>1) ch1++;\r
+ if (ch2>1) ch2++;\r
+ if (ch3>1) ch3++;\r
+ if (reset_indicator==1) reset_indicator++;\r
+ else if (reset_indicator==2) mode=0;\r
+\r
+}\r
+ \r
+ISR(PCINT0_vect) {\r
+\r
+ if ((PIN_CH1&CH1)==0) {if (ch1==0) ch1=1;} else {ds_temp=25600;ch1=0;}\r
+ if ((PIN_CH2&CH2)==0) {if (ch2==0) ch2=1;} else {ds_vdd=0x1f4;ch2=0;}\r
+ if ((PIN_CH3&CH3)==0) {if (ch3==0) ch3=1;} else {ds_vad=0x1f4;ch3=0;}\r
+ \r
+ wdcounter=10;\r
+}\r
+\r
+int testSW(void) {\r
+ uint8_t r;\r
+ DDRB&=~(1<<PORTB0); //Eingang\r
+ __asm__ __volatile__ ("nop");\r
+ PORTB|=(1<<PORTB0); //Pullup\r
+ __asm__ __volatile__ ("nop");\r
+ __asm__ __volatile__ ("nop");\r
+ __asm__ __volatile__ ("nop");\r
+ __asm__ __volatile__ ("nop");\r
+ __asm__ __volatile__ ("nop");\r
+ r=PINB&(1<<PORTB0);\r
+ __asm__ __volatile__ ("nop");\r
+ PORTB&=~(1<<PORTB0);\r
+ __asm__ __volatile__ ("nop");\r
+ DDRB|=(1<<PORTB0); //Eingang\r
+ return (r==0);\r
+}\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+ int main(void){\r
+ PRR|=(1<<PRUSI); // usi for save Power\r
+ PORTA=0xFF; \r
+ PORTB=0xFF-(1<<PORTB0); //Schalter kann gegen Masse sein und zieht dann immer Strom\r
+ DDRB|=(1<<PORTB0); //Als Ausgang und 0\r
+ \r
+ \r
+ OWINIT();\r
+\r
+ ACSR|=(1<<ACD); //Disable Comparator\r
+ //ADCSRB|=(1<<ACME); //Disable Analog multiplexer\r
+ MCUCR &=~(1<<PUD); //All Pins Pullup...\r
+ \r
+ // Set up Watch Dog Timer for Inactivity\r
+ WDTCSR |= (1<<WDCE) ; // Enable the WD Change Bit\r
+ WDTCSR = (1<<WDIE) | // Enable WDT Interrupt\r
+ (1<<WDP2) | (1<<WDP1); // Set Timeout to ~2 seconds \r
+ \r
+ GIMSK|=(1<<PCIE0);\r
+ PCMSK0=(CH1)|(CH2)|(CH3);\r
+\r
+ \r
+ sei();\r
+ \r
+ while(1) {\r
+ if ((PIN_CH1&CH1)==0) {if (ch1==0) ch1=1;} else {ds_temp=25600;ch1=0;}\r
+ if ((PIN_CH2&CH2)==0){if (ch2==0) ch2=1;} else {ds_vdd=0x1f4;ch2=0;}\r
+ if ((PIN_CH3&CH3)==0) {if (ch3==0) ch3=1;} else {ds_vad=0x1f4;ch3=0;}\r
+\r
+ if (ch1==10) {ch1=0;ds_temp=0;};\r
+ if (ch2==10) {ch2=0;ds_vdd=0;};\r
+ if (ch3==10) {ch3=0;ds_vad=0;};\r
+\r
+ if ((gcontrol&1)==1) {\r
+ if (ch1==1) {\r
+ ch1=2;\r
+ }\r
+ }\r
+ if ((gcontrol&2)==2) {\r
+ if ((ch2==1)) {\r
+ ch2=2;\r
+ }\r
+ }\r
+ if ((gcontrol&4)==4) {\r
+ if (ch3==1) {\r
+ ch3=2;\r
+ }\r
+ }\r
+ gcontrol=0;\r
+ \r
+\r
+ #define TEST_TIMER ((TIMSK0 & (1<<TOIE0))==0)\r
+ if (TEST_TIMER&&(mode==0)) {\r
+ MCUCR|=(1<<SE)|(1<<SM1); //Power Down, only low level on 1-Wire and pin change on PCINT wakes up\r
+ MCUCR&=~(1<<ISC01);\r
+ } else {\r
+ MCUCR|=(1<<SE);\r
+ MCUCR&=~(1<<SM1);\r
+ }\r
+ asm("SLEEP");\r
+\r
+ }\r
+\r
+\r
+ }
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>\r
+<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="14.0">\r
+ <PropertyGroup>\r
+ <SchemaVersion>2.0</SchemaVersion>\r
+ <ProjectVersion>7.0</ProjectVersion>\r
+ <ToolchainName>com.Atmel.AVRGCC8.C</ToolchainName>\r
+ <ProjectGuid>dce6c7e3-ee26-4d79-826b-08594b9ad897</ProjectGuid>\r
+ <avrdevice>ATtiny84A</avrdevice>\r
+ <avrdeviceseries>none</avrdeviceseries>\r
+ <OutputType>Executable</OutputType>\r
+ <Language>C</Language>\r
+ <OutputFileName>$(MSBuildProjectName)</OutputFileName>\r
+ <OutputFileExtension>.elf</OutputFileExtension>\r
+ <OutputDirectory>$(MSBuildProjectDirectory)\$(Configuration)</OutputDirectory>\r
+ <AssemblyName>DS2438_DHT22</AssemblyName>\r
+ <Name>DS2438_Fenster_Kontakt</Name>\r
+ <RootNamespace>DS2438_DHT22</RootNamespace>\r
+ <ToolchainFlavour>Native</ToolchainFlavour>\r
+ <KeepTimersRunning>true</KeepTimersRunning>\r
+ <OverrideVtor>false</OverrideVtor>\r
+ <CacheFlash>true</CacheFlash>\r
+ <ProgFlashFromRam>true</ProgFlashFromRam>\r
+ <RamSnippetAddress>0x20000000</RamSnippetAddress>\r
+ <UncachedRange />\r
+ <preserveEEPROM>true</preserveEEPROM>\r
+ <OverrideVtorValue>exception_table</OverrideVtorValue>\r
+ <BootSegment>2</BootSegment>\r
+ <eraseonlaunchrule>1</eraseonlaunchrule>\r
+ <ExternalProgrammingToolCommand />\r
+ <AsfFrameworkConfig>\r
+ <framework-data>\r
+ <options />\r
+ <configurations />\r
+ <files />\r
+ <documentation help="" />\r
+ <offline-documentation help="" />\r
+ <dependencies>\r
+ <content-extension eid="atmel.asf" uuidref="Atmel.ASF" version="3.28.1" />\r
+ </dependencies>\r
+ </framework-data>\r
+ </AsfFrameworkConfig>\r
+ <avrtool>com.atmel.avrdbg.tool.atmelice</avrtool>\r
+ <avrtoolserialnumber>J41800000789</avrtoolserialnumber>\r
+ <avrdeviceexpectedsignature>0x1E930C</avrdeviceexpectedsignature>\r
+ <com_atmel_avrdbg_tool_atmelice>\r
+ <ToolOptions>\r
+ <InterfaceProperties>\r
+ </InterfaceProperties>\r
+ <InterfaceName>debugWIRE</InterfaceName>\r
+ </ToolOptions>\r
+ <ToolType>com.atmel.avrdbg.tool.atmelice</ToolType>\r
+ <ToolNumber>J41800000789</ToolNumber>\r
+ <ToolName>Atmel-ICE</ToolName>\r
+ </com_atmel_avrdbg_tool_atmelice>\r
+ <avrtoolinterface>debugWIRE</avrtoolinterface>\r
+ </PropertyGroup>\r
+ <PropertyGroup Condition=" '$(Configuration)' == 'Release' ">\r
+ <ToolchainSettings>\r
+ <AvrGcc>\r
+ <avrgcc.common.Device>-mmcu=attiny84a -B "%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.79\gcc\dev\attiny84a"</avrgcc.common.Device>\r
+ <avrgcc.common.outputfiles.hex>True</avrgcc.common.outputfiles.hex>\r
+ <avrgcc.common.outputfiles.lss>True</avrgcc.common.outputfiles.lss>\r
+ <avrgcc.common.outputfiles.eep>True</avrgcc.common.outputfiles.eep>\r
+ <avrgcc.common.outputfiles.srec>True</avrgcc.common.outputfiles.srec>\r
+ <avrgcc.common.outputfiles.usersignatures>False</avrgcc.common.outputfiles.usersignatures>\r
+ <avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>True</avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>\r
+ <avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>True</avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>\r
+ <avrgcc.compiler.symbols.DefSymbols>\r
+ <ListValues>\r
+ <Value>NDEBUG</Value>\r
+ </ListValues>\r
+ </avrgcc.compiler.symbols.DefSymbols>\r
+ <avrgcc.compiler.directories.IncludePaths>\r
+ <ListValues>\r
+ <Value>%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.79\include</Value>\r
+ </ListValues>\r
+ </avrgcc.compiler.directories.IncludePaths>\r
+ <avrgcc.compiler.optimization.level>Optimize for size (-Os)</avrgcc.compiler.optimization.level>\r
+ <avrgcc.compiler.optimization.PackStructureMembers>True</avrgcc.compiler.optimization.PackStructureMembers>\r
+ <avrgcc.compiler.optimization.AllocateBytesNeededForEnum>True</avrgcc.compiler.optimization.AllocateBytesNeededForEnum>\r
+ <avrgcc.compiler.warnings.AllWarnings>True</avrgcc.compiler.warnings.AllWarnings>\r
+ <avrgcc.linker.libraries.Libraries>\r
+ <ListValues>\r
+ <Value>libm</Value>\r
+ </ListValues>\r
+ </avrgcc.linker.libraries.Libraries>\r
+ <avrgcc.assembler.general.IncludePaths>\r
+ <ListValues>\r
+ <Value>%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.79\include</Value>\r
+ </ListValues>\r
+ </avrgcc.assembler.general.IncludePaths>\r
+ </AvrGcc>\r
+ </ToolchainSettings>\r
+ </PropertyGroup>\r
+ <PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">\r
+ <ToolchainSettings>\r
+ <AvrGcc>\r
+ <avrgcc.common.Device>-mmcu=attiny84a -B "%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.79\gcc\dev\attiny84a"</avrgcc.common.Device>\r
+ <avrgcc.common.outputfiles.hex>True</avrgcc.common.outputfiles.hex>\r
+ <avrgcc.common.outputfiles.lss>True</avrgcc.common.outputfiles.lss>\r
+ <avrgcc.common.outputfiles.eep>True</avrgcc.common.outputfiles.eep>\r
+ <avrgcc.common.outputfiles.srec>True</avrgcc.common.outputfiles.srec>\r
+ <avrgcc.common.outputfiles.usersignatures>False</avrgcc.common.outputfiles.usersignatures>\r
+ <avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>True</avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>\r
+ <avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>True</avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>\r
+ <avrgcc.compiler.symbols.DefSymbols>\r
+ <ListValues>\r
+ <Value>DEBUG</Value>\r
+ </ListValues>\r
+ </avrgcc.compiler.symbols.DefSymbols>\r
+ <avrgcc.compiler.directories.IncludePaths>\r
+ <ListValues>\r
+ <Value>%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.79\include</Value>\r
+ </ListValues>\r
+ </avrgcc.compiler.directories.IncludePaths>\r
+ <avrgcc.compiler.optimization.level>Optimize (-O1)</avrgcc.compiler.optimization.level>\r
+ <avrgcc.compiler.optimization.PackStructureMembers>True</avrgcc.compiler.optimization.PackStructureMembers>\r
+ <avrgcc.compiler.optimization.AllocateBytesNeededForEnum>True</avrgcc.compiler.optimization.AllocateBytesNeededForEnum>\r
+ <avrgcc.compiler.optimization.DebugLevel>Default (-g2)</avrgcc.compiler.optimization.DebugLevel>\r
+ <avrgcc.compiler.warnings.AllWarnings>True</avrgcc.compiler.warnings.AllWarnings>\r
+ <avrgcc.linker.libraries.Libraries>\r
+ <ListValues>\r
+ <Value>libm</Value>\r
+ </ListValues>\r
+ </avrgcc.linker.libraries.Libraries>\r
+ <avrgcc.assembler.general.IncludePaths>\r
+ <ListValues>\r
+ <Value>%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.79\include</Value>\r
+ </ListValues>\r
+ </avrgcc.assembler.general.IncludePaths>\r
+ <avrgcc.assembler.debugging.DebugLevel>Default (-Wa,-g)</avrgcc.assembler.debugging.DebugLevel>\r
+ </AvrGcc>\r
+ </ToolchainSettings>\r
+ </PropertyGroup>\r
+ <ItemGroup>\r
+ <Compile Include="DS2438_Fenster_Kontakt.c">\r
+ <SubType>compile</SubType>\r
+ </Compile>\r
+ <Compile Include="OWDS2438.S">\r
+ <SubType>compile</SubType>\r
+ </Compile>\r
+ </ItemGroup>\r
+ <Import Project="$(AVRSTUDIO_EXE_PATH)\\Vs\\Compiler.targets" />\r
+</Project>
\ No newline at end of file
--- /dev/null
+// Copyright (c) 2015, Tobias Mueller tm(at)tm3d.de\r
+// All rights reserved. \r
+// \r
+// Redistribution and use in source and binary forms, with or without \r
+// modification, are permitted provided that the following conditions are \r
+// met: \r
+// \r
+// * Redistributions of source code must retain the above copyright \r
+// notice, this list of conditions and the following disclaimer. \r
+// * Redistributions in binary form must reproduce the above copyright \r
+// notice, this list of conditions and the following disclaimer in the \r
+// documentation and/or other materials provided with the \r
+// distribution. \r
+// * All advertising materials mentioning features or use of this \r
+// software must display the following acknowledgement: This product \r
+// includes software developed by tm3d.de and its contributors. \r
+// * Neither the name of tm3d.de nor the names of its contributors may \r
+// be used to endorse or promote products derived from this software \r
+// without specific prior written permission. \r
+// \r
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \r
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT \r
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR \r
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT \r
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, \r
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT \r
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, \r
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY \r
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT \r
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE \r
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \r
+\r
+#define _CHANGEABLE_ID_\r
+//#define _DIS_FLASH_\r
+#define _ZERO_POLLING_\r
+//#define _DB_\r
+//#define __4MHZ__\r
+\r
+#include "../common/OWConfig.s"\r
+#include "../common/OWCRC8.s"\r
+\r
+#if defined(__AVR_ATtiny25__)\r
+.extern pack,16\r
+#else\r
+.extern pack,64\r
+#endif\r
+.extern ds_temp,2\r
+.extern ds_vdd,2\r
+.extern ds_vad,2\r
+\r
+.comm block,1 ; Block der augegeben, geschrieben wird (Parameter von READ/WRITE Scratchpad)\r
+\r
+\r
+.macro CHIP_INIT\r
+.endm\r
+\r
+; Ab hier Geraeteabhaenging\r
+#define OW_READ_SCRATCHPAD_ADR OW_FIRST_COMMAND+0\r
+#define OW_READ_SCRATCHPAD OW_FIRST_COMMAND+1\r
+#define OW_WRITE_SCRATCHPAD_ADR OW_FIRST_COMMAND+2\r
+#define OW_WRITE_SCRATCHPAD OW_FIRST_COMMAND+3\r
+\r
+\r
+\r
+.macro COMMAND_TABLE\r
+ rjmp h_readscratchpad_adr\r
+ rjmp h_readscratchpad\r
+ rjmp h_writescratchpad_adr\r
+ rjmp h_writescratchpad\r
+.endm\r
+\r
+#include "../common/OWRomFunctions.s"\r
+#include "../common/OWTimerInterrupt.s"\r
+\r
+\r
+;---------------------------------------------------\r
+; READ COMMAND and start operation\r
+;---------------------------------------------------\r
+\r
+\r
+h_readcommand:\r
+ clr r_bytep\r
+#ifndef _DIS_FLASH_\r
+ FLASH_COMMANDS ; muss zu erst sein....\r
+#endif\r
+ cset 0xBE,OW_READ_SCRATCHPAD_ADR\r
+ cset 0x4E,OW_WRITE_SCRATCHPAD_ADR\r
+ cjmp 0x44,hrc_set_convertT\r
+ cjmp 0xB4,hrc_set_convertV\r
+ FW_CONFIG_INFO\r
+#ifdef _CHANGEABLE_ID_\r
+ CHANGE_ID_COMMANDS\r
+#endif\r
+ rjmp handle_end_sleep\r
+\r
+\r
+hrc_set_convertT:\r
+ ldi r_temp,1\r
+ sts gcontrol,r_temp\r
+ lds r_temp,ds_temp\r
+ sts pack+1,r_temp\r
+ lds r_temp,ds_temp+1\r
+ sts pack+2,r_temp\r
+ rjmp handle_end_sleep\r
+hrc_set_convertV:\r
+ lds r_temp,pack\r
+ sbrs r_temp,3\r
+ rjmp hrc_set_convertVV\r
+ ldi r_temp,2\r
+ sts gcontrol,r_temp\r
+ //ldi r_temp,0xF4#\r
+ lds r_temp,ds_vdd\r
+ sts pack+3,r_temp\r
+ //ldi r_temp,0x01\r
+ lds r_temp,ds_vdd+1\r
+ sts pack+4,r_temp\r
+ rjmp hrc_set_convertend\r
+hrc_set_convertVV:\r
+ ldi r_temp,4\r
+ sts gcontrol,r_temp\r
+ lds r_temp,ds_vad\r
+ sts pack+3,r_temp\r
+ lds r_temp,ds_vad+1\r
+ sts pack+4,r_temp\r
+hrc_set_convertend:\r
+ rjmp handle_end_sleep\r
+\r
+\r
+\r
+;---------------------------------------------------\r
+; READ SCRATCHPAD\r
+;---------------------------------------------------\r
+\r
+h_readscratchpad_adr:\r
+ lsl r_rwbyte\r
+ lsl r_rwbyte\r
+ lsl r_rwbyte\r
+#if defined(__AVR_ATtiny25__)\r
+ andi r_rwbyte,0x01 ;nur Page 0 und 1 und das immer wiederholen\r
+#endif\r
+ sts block,r_rwbyte\r
+ ldi r_sendflag,1\r
+ ldi r_mode,OW_READ_SCRATCHPAD\r
+ ldi r_temp,8\r
+ sts gcontrol,r_temp\r
+ CRCInit2\r
+h_readscratchpad:\r
+ cpi r_bytep,8\r
+ breq h_readscratchpad_crc\r
+ cpi r_bytep,9\r
+ breq h_readscratchpad_all\r
+ lds r_temp,block\r
+ add r_temp,r_bytep\r
+ configZ pack,r_temp\r
+ ld r_rwbyte,Z\r
+ rjmp handle_end_inc\r
+h_readscratchpad_crc:\r
+ lds r_rwbyte,crc\r
+ rjmp handle_end_inc\r
+h_readscratchpad_all:\r
+ rjmp handle_end_sleep\r
+\r
+\r
+\r
+\r
+;---------------------------------------------------\r
+; WRITE SCRATCHPAD\r
+;---------------------------------------------------\r
+h_writescratchpad_adr:\r
+ lsl r_rwbyte\r
+ lsl r_rwbyte\r
+ lsl r_rwbyte\r
+#if defined(__AVR_ATtiny25__)\r
+ andi r_rwbyte,0x01 ;nur Page 0 und 1 und das immer wiederholen\r
+#endif\r
+ sts block,r_rwbyte\r
+ ldi r_mode,OW_WRITE_SCRATCHPAD\r
+ ldi r_bcount,1 \r
+ rjmp handle_end \r
+h_writescratchpad:\r
+ cpi r_bytep,8\r
+ breq h_writescratchpad_all\r
+ lds r_temp,block\r
+ add r_temp,r_bytep\r
+ configZ pack,r_temp\r
+ st Z,r_rwbyte\r
+ rjmp handle_end_inc\r
+h_writescratchpad_all:\r
+ rjmp handle_end_sleep\r
+\r
+\r
+\r
+\r
+\r
+#include "../common/OWPinInterrupt.s"\r
+.end
\ No newline at end of file
-
-Microsoft Visual Studio Solution File, Format Version 12.00
-# Atmel Studio Solution File, Format Version 11.00
-VisualStudioVersion = 14.0.23107.0
-MinimumVisualStudioVersion = 10.0.40219.1
-Project("{54F91283-7BC4-4236-8FF9-10F437C3AD48}") = "DS2438_HDC1080", "DS2438_HDC1080.cproj", "{91468D4F-8AE2-4C59-8A35-549C49E00934}"
-EndProject
-Global
- GlobalSection(SolutionConfigurationPlatforms) = preSolution
- Debug|AVR = Debug|AVR
- Release|AVR = Release|AVR
- EndGlobalSection
- GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {91468D4F-8AE2-4C59-8A35-549C49E00934}.Debug|AVR.ActiveCfg = Debug|AVR
- {91468D4F-8AE2-4C59-8A35-549C49E00934}.Debug|AVR.Build.0 = Debug|AVR
- {91468D4F-8AE2-4C59-8A35-549C49E00934}.Release|AVR.ActiveCfg = Release|AVR
- {91468D4F-8AE2-4C59-8A35-549C49E00934}.Release|AVR.Build.0 = Release|AVR
- EndGlobalSection
- GlobalSection(SolutionProperties) = preSolution
- HideSolutionNode = FALSE
- EndGlobalSection
-EndGlobal
+\r
+Microsoft Visual Studio Solution File, Format Version 12.00\r
+# Atmel Studio Solution File, Format Version 11.00\r
+VisualStudioVersion = 14.0.23107.0\r
+MinimumVisualStudioVersion = 10.0.40219.1\r
+Project("{54F91283-7BC4-4236-8FF9-10F437C3AD48}") = "DS2438_HDC1080", "DS2438_HDC1080.cproj", "{91468D4F-8AE2-4C59-8A35-549C49E00934}"\r
+EndProject\r
+Global\r
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution\r
+ Debug|AVR = Debug|AVR\r
+ Release|AVR = Release|AVR\r
+ EndGlobalSection\r
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution\r
+ {91468D4F-8AE2-4C59-8A35-549C49E00934}.Debug|AVR.ActiveCfg = Debug|AVR\r
+ {91468D4F-8AE2-4C59-8A35-549C49E00934}.Debug|AVR.Build.0 = Debug|AVR\r
+ {91468D4F-8AE2-4C59-8A35-549C49E00934}.Release|AVR.ActiveCfg = Release|AVR\r
+ {91468D4F-8AE2-4C59-8A35-549C49E00934}.Release|AVR.Build.0 = Release|AVR\r
+ EndGlobalSection\r
+ GlobalSection(SolutionProperties) = preSolution\r
+ HideSolutionNode = FALSE\r
+ EndGlobalSection\r
+EndGlobal\r
--- /dev/null
+\r
+Microsoft Visual Studio Solution File, Format Version 12.00\r
+# Atmel Studio Solution File, Format Version 11.00\r
+VisualStudioVersion = 14.0.23107.0\r
+MinimumVisualStudioVersion = 10.0.40219.1\r
+Project("{54F91283-7BC4-4236-8FF9-10F437C3AD48}") = "DS2438_HDC2010", "DS2438_HDC2010.cproj", "{91468D4F-8AE2-4C59-8A35-549C49E00934}"\r
+EndProject\r
+Global\r
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution\r
+ Debug|AVR = Debug|AVR\r
+ Release|AVR = Release|AVR\r
+ EndGlobalSection\r
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution\r
+ {91468D4F-8AE2-4C59-8A35-549C49E00934}.Debug|AVR.ActiveCfg = Debug|AVR\r
+ {91468D4F-8AE2-4C59-8A35-549C49E00934}.Debug|AVR.Build.0 = Debug|AVR\r
+ {91468D4F-8AE2-4C59-8A35-549C49E00934}.Release|AVR.ActiveCfg = Release|AVR\r
+ {91468D4F-8AE2-4C59-8A35-549C49E00934}.Release|AVR.Build.0 = Release|AVR\r
+ EndGlobalSection\r
+ GlobalSection(SolutionProperties) = preSolution\r
+ HideSolutionNode = FALSE\r
+ EndGlobalSection\r
+EndGlobal\r
--- /dev/null
+// Copyright (c) 2017, Tobias Mueller tm(at)tm3d.de\r
+// All rights reserved.\r
+//\r
+// Redistribution and use in source and binary forms, with or without\r
+// modification, are permitted provided that the following conditions are\r
+// met:\r
+//\r
+// * Redistributions of source code must retain the above copyright\r
+// notice, this list of conditions and the following disclaimer.\r
+// * Redistributions in binary form must reproduce the above copyright\r
+// notice, this list of conditions and the following disclaimer in the\r
+// documentation and/or other materials provided with the\r
+// distribution.\r
+// * All advertising materials mentioning features or use of this\r
+// software must display the following acknowledgement: This product\r
+// includes software developed by tm3d.de and its contributors.\r
+// * Neither the name of tm3d.de nor the names of its contributors may\r
+// be used to endorse or promote products derived from this software\r
+// without specific prior written permission.\r
+//\r
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\r
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\r
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\r
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\r
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\r
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\r
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\r
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\r
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+\r
+\r
+#define F_CPU 8000000UL\r
+#include <avr/io.h>\r
+#include <avr/interrupt.h>\r
+#include <util/delay.h>\r
+#include <avr/wdt.h>\r
+#include <avr/sleep.h>\r
+#include <avr/pgmspace.h>\r
+#include "../common/I2C/USI_TWI_Master.h"\r
+#include "../common/I2C/HDC1080.h"\r
+#include "../common/calibr.h"\r
+\r
+extern void OWINIT();\r
+extern void EXTERN_SLEEP();\r
+\r
+uint8_t owid[8]={0x26, 0xA2, 0xD9, 0x84, 0x00, 0x00, 0x05, 0x16};/**/\r
+uint8_t config_info[26]={0x01,0x06, 0x05,0x08, 0x04,0x07, 0x00,0x00, 0x02,11,0x00,11,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};\r
+ \r
+\r
+extern uint8_t mode;\r
+extern uint8_t gcontrol;\r
+extern uint8_t reset_indicator;\r
+extern uint8_t alarmflag;\r
+\r
+volatile uint8_t wdcounter=5;\r
+\r
+\r
+typedef union {\r
+\r
+ volatile uint8_t bytes[64];\r
+ struct {\r
+ uint8_t status; //1\r
+ int16_t temp; //2\r
+ uint16_t voltage; //4\r
+ uint16_t current; //6\r
+ uint8_t threshold; //8\r
+ \r
+ uint8_t page1[8]; //9\r
+ uint8_t page2[8]; //17\r
+ uint8_t page3[8]; //25\r
+ uint8_t page4[8]; //33\r
+ uint8_t page5[8]; //41\r
+ uint8_t page6[8]; //49\r
+ uint8_t page7[8]; //57\r
+ //uint8_t crc; //65\r
+ };\r
+} pack_t;\r
+volatile pack_t pack;\r
+\r
+\r
+\r
+volatile int16_t am2302_temp;\r
+volatile uint16_t am2302_hum;\r
+\r
+uint8_t userRegister[1];\r
+int16_t sRH,sT;\r
+double temperatureC,humidityRH;\r
+volatile double l;\r
+\r
+#if defined(__AVR_ATtiny24__)||defined(__AVR_ATtiny44__) || defined(__AVR_ATtiny84__) || defined(__AVR_ATtiny24A__)||defined(__AVR_ATtiny44A__) || defined(__AVR_ATtiny84A__)\r
+ISR(WATCHDOG_vect) {\r
+#else\r
+ISR(WDT_vect) {\r
+#endif \r
+ wdcounter++;\r
+ if (reset_indicator==1) reset_indicator++;\r
+ else if (reset_indicator==2) mode=0;\r
+\r
+\r
+}\r
+\r
+int testSW(void) {\r
+ uint8_t r;\r
+ DDRB&=~(1<<PORTB0); //Eingang\r
+ __asm__ __volatile__ ("nop"); \r
+ PORTB|=(1<<PORTB0); //Pullup\r
+ __asm__ __volatile__ ("nop"); \r
+ __asm__ __volatile__ ("nop"); \r
+ __asm__ __volatile__ ("nop"); \r
+ __asm__ __volatile__ ("nop"); \r
+ __asm__ __volatile__ ("nop"); \r
+ r=PINB&(1<<PORTB0);\r
+ __asm__ __volatile__ ("nop"); \r
+ PORTB&=~(1<<PORTB0); \r
+ __asm__ __volatile__ ("nop"); \r
+ DDRB|=(1<<PORTB0); //Eingang\r
+ return (r==0);\r
+ \r
+ \r
+}\r
+\r
+int main(void){\r
+ PRR|=(1<<PRADC); // adc for save Power\r
+ PORTA=0xFF;\r
+ PORTB=0xFF-(1<<PORTB0); //Schalter kann gegen Masse sein und zieht dann immer Strom\r
+ DDRB|=(1<<PORTB0); //Als Ausgang und 0\r
+ \r
+ \r
+ OWINIT();\r
+\r
+ ACSR|=(1<<ACD); //Disable Comparator\r
+ ADCSRB|=(1<<ACME); //Disable Analog multiplexer\r
+ MCUCR &=~(1<<PUD); //All Pins Pullup...\r
+ MCUCR |=(1<<BODS);\r
+\r
+ \r
+ WDTCSR |= ((1<<WDCE) ); // Enable the WD Change Bit//| (1<<WDE)\r
+ WDTCSR |= (1<<WDIE) | // Enable WDT Interrupt\r
+ (1<<WDP3) | (1<<WDP0); // Set Timeout to ~8 seconds\r
+ if (testSW()) {\r
+ config_info[5]=8;\r
+ }else{\r
+ config_info[5]=7;\r
+ }\r
+ \r
+ uint8_t i;\r
+ for(i=0;i<64;i++) pack.bytes[i]=0;\r
+ MCUSR=0;\r
+ USI_TWI_Master_Initialise();\r
+ HDC2010_Init();\r
+ HDC2010_Readf(&temperatureC,&humidityRH);\r
+ \r
+ sei();\r
+ \r
+ while(1) {\r
+ if (gcontrol) {\r
+ wdcounter=3;\r
+ gcontrol=0;\r
+ }\r
+ if (wdcounter>2) {\r
+ //PORTB|=(1<<PINB1); //Dauer 440ms\r
+ HDC2010_Readf(&temperatureC,&humidityRH);\r
+\r
+ humidityRH = calibr_hum(temperatureC,-0.2,humidityRH)*10.0;\r
+ temperatureC-=0.2;\r
+ temperatureC*=10.0;\r
+ if (testSW()) {\r
+ am2302_hum= humidityRH;\r
+ am2302_temp=temperatureC*25.6;\r
+ //am2302_temp=am2302_temp-45;\r
+ config_info[5]=12; \r
+ \r
+ }else{\r
+ \r
+ double hhum=(1.0546-0.000216*temperatureC)*(humidityRH);\r
+ //am2302_hum=0.318*hhum +76.0;\r
+ am2302_hum=0.31*hhum +80;\r
+ am2302_temp=temperatureC*25.6;\r
+ //am2302_temp=am2302_temp-45;\r
+ config_info[5]=7;\r
+ }\r
+ //PORTB&=~(1<<PINB1);\r
+ wdcounter=0;\r
+ }\r
+\r
+ if (((TIMSK0 & (1<<TOIE0))==0)&& (mode==0)) {\r
+ MCUCR|=(1<<SE)|(1<<SM1);\r
+ MCUCR&=~(1<<ISC01);\r
+ } else {\r
+ MCUCR|=(1<<SE);\r
+ MCUCR&=~(1<<SM1);\r
+ }\r
+ asm("SLEEP");\r
+ }\r
+\r
+\r
+}
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>\r
+<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
+ <PropertyGroup>\r
+ <SchemaVersion>2.0</SchemaVersion>\r
+ <ProjectVersion>7.0</ProjectVersion>\r
+ <ToolchainName>com.Atmel.AVRGCC8.C</ToolchainName>\r
+ <ProjectGuid>{91468d4f-8ae2-4c59-8a35-549c49e00934}</ProjectGuid>\r
+ <avrdevice>ATtiny84A</avrdevice>\r
+ <avrdeviceseries>none</avrdeviceseries>\r
+ <OutputType>Executable</OutputType>\r
+ <Language>C</Language>\r
+ <OutputFileName>$(MSBuildProjectName)</OutputFileName>\r
+ <OutputFileExtension>.elf</OutputFileExtension>\r
+ <OutputDirectory>$(MSBuildProjectDirectory)\$(Configuration)</OutputDirectory>\r
+ <AssemblyName>DS2438_SHT2X</AssemblyName>\r
+ <Name>DS2438_HDC2010</Name>\r
+ <RootNamespace>DS2438_SHT2X</RootNamespace>\r
+ <ToolchainFlavour>Native</ToolchainFlavour>\r
+ <KeepTimersRunning>true</KeepTimersRunning>\r
+ <OverrideVtor>false</OverrideVtor>\r
+ <CacheFlash>true</CacheFlash>\r
+ <ProgFlashFromRam>true</ProgFlashFromRam>\r
+ <RamSnippetAddress>0x20000000</RamSnippetAddress>\r
+ <UncachedRange />\r
+ <preserveEEPROM>true</preserveEEPROM>\r
+ <OverrideVtorValue>exception_table</OverrideVtorValue>\r
+ <BootSegment>2</BootSegment>\r
+ <eraseonlaunchrule>1</eraseonlaunchrule>\r
+ <AsfFrameworkConfig>\r
+ <framework-data>\r
+ <options />\r
+ <configurations />\r
+ <files />\r
+ <documentation help="" />\r
+ <offline-documentation help="" />\r
+ <dependencies>\r
+ <content-extension eid="atmel.asf" uuidref="Atmel.ASF" version="3.28.1" />\r
+ </dependencies>\r
+</framework-data>\r
+ </AsfFrameworkConfig>\r
+ <avrtool>com.atmel.avrdbg.tool.atmelice</avrtool>\r
+ <com_atmel_avrdbg_tool_atmelice>\r
+ <ToolOptions>\r
+ <InterfaceProperties>\r
+ </InterfaceProperties>\r
+ <InterfaceName>debugWIRE</InterfaceName>\r
+ </ToolOptions>\r
+ <ToolType>com.atmel.avrdbg.tool.atmelice</ToolType>\r
+ <ToolNumber>J41800000789</ToolNumber>\r
+ <ToolName>Atmel-ICE</ToolName>\r
+ </com_atmel_avrdbg_tool_atmelice>\r
+ <avrtoolinterface>debugWIRE</avrtoolinterface>\r
+ <ExternalProgrammingToolCommand />\r
+ <avrtoolserialnumber>J41800000789</avrtoolserialnumber>\r
+ <avrdeviceexpectedsignature>0x1E930C</avrdeviceexpectedsignature>\r
+ </PropertyGroup>\r
+ <PropertyGroup Condition=" '$(Configuration)' == 'Release' ">\r
+ <ToolchainSettings>\r
+ <AvrGcc>\r
+ <avrgcc.common.Device>-mmcu=attiny84a -B "%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.68\gcc\dev\attiny84a"</avrgcc.common.Device>\r
+ <avrgcc.common.outputfiles.hex>True</avrgcc.common.outputfiles.hex>\r
+ <avrgcc.common.outputfiles.lss>True</avrgcc.common.outputfiles.lss>\r
+ <avrgcc.common.outputfiles.eep>True</avrgcc.common.outputfiles.eep>\r
+ <avrgcc.common.outputfiles.srec>True</avrgcc.common.outputfiles.srec>\r
+ <avrgcc.common.outputfiles.usersignatures>False</avrgcc.common.outputfiles.usersignatures>\r
+ <avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>True</avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>\r
+ <avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>True</avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>\r
+ <avrgcc.compiler.symbols.DefSymbols>\r
+ <ListValues>\r
+ <Value>DEBUG</Value>\r
+ </ListValues>\r
+ </avrgcc.compiler.symbols.DefSymbols>\r
+ <avrgcc.compiler.directories.IncludePaths>\r
+ <ListValues>\r
+ <Value>%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.68\include</Value>\r
+ </ListValues>\r
+ </avrgcc.compiler.directories.IncludePaths>\r
+ <avrgcc.compiler.optimization.level>Optimize (-O1)</avrgcc.compiler.optimization.level>\r
+ <avrgcc.compiler.optimization.PackStructureMembers>True</avrgcc.compiler.optimization.PackStructureMembers>\r
+ <avrgcc.compiler.optimization.AllocateBytesNeededForEnum>True</avrgcc.compiler.optimization.AllocateBytesNeededForEnum>\r
+ <avrgcc.compiler.optimization.DebugLevel>Default (-g2)</avrgcc.compiler.optimization.DebugLevel>\r
+ <avrgcc.compiler.warnings.AllWarnings>True</avrgcc.compiler.warnings.AllWarnings>\r
+ <avrgcc.compiler.miscellaneous.OtherFlags>-std=gnu99 -D__4MHZ__</avrgcc.compiler.miscellaneous.OtherFlags>\r
+ <avrgcc.linker.libraries.Libraries>\r
+ <ListValues>\r
+ <Value>libm</Value>\r
+ </ListValues>\r
+ </avrgcc.linker.libraries.Libraries>\r
+ <avrgcc.assembler.general.AssemblerFlags>-D__4MHZ__</avrgcc.assembler.general.AssemblerFlags>\r
+ <avrgcc.assembler.debugging.DebugLevel>Default (-Wa,-g)</avrgcc.assembler.debugging.DebugLevel>\r
+</AvrGcc>\r
+ </ToolchainSettings>\r
+ </PropertyGroup>\r
+ <PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">\r
+ <ToolchainSettings>\r
+ <AvrGcc>\r
+ <avrgcc.common.Device>-mmcu=attiny84a -B "%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.68\gcc\dev\attiny84a"</avrgcc.common.Device>\r
+ <avrgcc.common.outputfiles.hex>True</avrgcc.common.outputfiles.hex>\r
+ <avrgcc.common.outputfiles.lss>True</avrgcc.common.outputfiles.lss>\r
+ <avrgcc.common.outputfiles.eep>True</avrgcc.common.outputfiles.eep>\r
+ <avrgcc.common.outputfiles.srec>True</avrgcc.common.outputfiles.srec>\r
+ <avrgcc.common.outputfiles.usersignatures>False</avrgcc.common.outputfiles.usersignatures>\r
+ <avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>True</avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>\r
+ <avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>True</avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>\r
+ <avrgcc.compiler.symbols.DefSymbols>\r
+ <ListValues>\r
+ <Value>DEBUG</Value>\r
+ </ListValues>\r
+ </avrgcc.compiler.symbols.DefSymbols>\r
+ <avrgcc.compiler.directories.IncludePaths>\r
+ <ListValues>\r
+ <Value>%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.68\include</Value>\r
+ </ListValues>\r
+ </avrgcc.compiler.directories.IncludePaths>\r
+ <avrgcc.compiler.optimization.level>Optimize (-O1)</avrgcc.compiler.optimization.level>\r
+ <avrgcc.compiler.optimization.PackStructureMembers>True</avrgcc.compiler.optimization.PackStructureMembers>\r
+ <avrgcc.compiler.optimization.AllocateBytesNeededForEnum>True</avrgcc.compiler.optimization.AllocateBytesNeededForEnum>\r
+ <avrgcc.compiler.optimization.DebugLevel>Default (-g2)</avrgcc.compiler.optimization.DebugLevel>\r
+ <avrgcc.compiler.warnings.AllWarnings>True</avrgcc.compiler.warnings.AllWarnings>\r
+ <avrgcc.linker.libraries.Libraries>\r
+ <ListValues>\r
+ <Value>libm</Value>\r
+ </ListValues>\r
+ </avrgcc.linker.libraries.Libraries>\r
+ <avrgcc.assembler.debugging.DebugLevel>Default (-Wa,-g)</avrgcc.assembler.debugging.DebugLevel>\r
+ </AvrGcc>\r
+ </ToolchainSettings>\r
+ </PropertyGroup>\r
+ <ItemGroup>\r
+ <Compile Include="..\common\calibr.c">\r
+ <SubType>compile</SubType>\r
+ <Link>calibr.c</Link>\r
+ </Compile>\r
+ <Compile Include="..\common\I2C\HDC2010.c">\r
+ <SubType>compile</SubType>\r
+ <Link>HDC2010.c</Link>\r
+ </Compile>\r
+ <Compile Include="..\common\I2C\USI_TWI_Master.c">\r
+ <SubType>compile</SubType>\r
+ <Link>USI_TWI_Master.c</Link>\r
+ </Compile>\r
+ <Compile Include="..\common\OWDS2438.S">\r
+ <SubType>compile</SubType>\r
+ <Link>OWDS2438.S</Link>\r
+ </Compile>\r
+ <Compile Include="DS2438_HDC2010.c">\r
+ <SubType>compile</SubType>\r
+ </Compile>\r
+ </ItemGroup>\r
+ <Import Project="$(AVRSTUDIO_EXE_PATH)\\Vs\\Compiler.targets" />\r
+</Project>
\ No newline at end of file
--- /dev/null
+// Copyright (c) 2017, Tobias Mueller tm(at)tm3d.de\r
+// All rights reserved.\r
+//\r
+// Redistribution and use in source and binary forms, with or without\r
+// modification, are permitted provided that the following conditions are\r
+// met:\r
+//\r
+// * Redistributions of source code must retain the above copyright\r
+// notice, this list of conditions and the following disclaimer.\r
+// * Redistributions in binary form must reproduce the above copyright\r
+// notice, this list of conditions and the following disclaimer in the\r
+// documentation and/or other materials provided with the\r
+// distribution.\r
+// * All advertising materials mentioning features or use of this\r
+// software must display the following acknowledgement: This product\r
+// includes software developed by tm3d.de and its contributors.\r
+// * Neither the name of tm3d.de nor the names of its contributors may\r
+// be used to endorse or promote products derived from this software\r
+// without specific prior written permission.\r
+//\r
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\r
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\r
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\r
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\r
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\r
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\r
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\r
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\r
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+\r
+//!!!!!Max Program size 7551 Byte\r
+//#define __4MHZ__\r
+#define F_CPU 8000000UL\r
+#include <avr/io.h>\r
+#include <avr/interrupt.h>\r
+#include <util/delay.h>\r
+#include <avr/wdt.h>\r
+#include <avr/sleep.h>\r
+#include <avr/pgmspace.h>\r
+#include "../common/I2C/TWI_Master.h"\r
+#include "../common/I2C/HDC2010.h"\r
+#include "../common/I2C/MAX44009.h"\r
+#include "../common/owSlave_tools.h"\r
+\r
+OWST_EXTERN_VARS\r
+\r
+\r
+\r
+volatile uint8_t owid1[8]={0x26, 0xA2, 0xD9, 0x84, 0x00, 0x16, 0x05, 0x50};/**/\r
+volatile uint8_t owid2[8]={0x26, 0xA3, 0xD9, 0x84, 0x00, 0x16, 0x05, 0x67};/**/\r
+ //18\r
+volatile uint8_t config_info1[26]={3,28, 0x05,0x08, 8,27, 0x00,0x00, 0x02,17,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};\r
+volatile uint8_t config_info2[26]={0x01,0x06, 0x05,0x08, 0x04,0x07, 11,0x08, 0x02,0x07,0x00,0x07,17,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};\r
+\r
+#if (owid>128)\r
+#error "Variable not correct"\r
+#endif\r
+\r
+extern uint8_t cpsp2;\r
+\r
+OWST_WDT_ISR\r
+\r
+/*\r
+\r
+\r
+ typedef union {\r
+ volatile uint8_t bytes[8];\r
+ struct {\r
+ uint16_t temp; //0\r
+ uint8_t TH; //2\r
+ uint8_t TL; //3\r
+ uint8_t config; //4\r
+ uint8_t rrFF; //5\r
+ uint8_t rr00; //6\r
+ uint8_t rr10; //7\r
+ };\r
+ } pack1_t;\r
+ volatile pack1_t pack1;\r
+*/\r
+\r
+\r
+ typedef union {\r
+ #if defined(__AVR_ATtiny25__)\r
+ uint8_t bytes[16];\r
+ #else\r
+ uint8_t bytes[64];\r
+ #endif\r
+ struct {\r
+ uint8_t status; //1\r
+ int16_t temp; //2\r
+ uint16_t voltage; //4\r
+ int16_t current; //6\r
+ uint8_t threshold; //8\r
+ \r
+ uint8_t page1[8]; //9\r
+ #if defined(__AVR_ATtiny25__)\r
+ #else\r
+ uint8_t page2[8]; //17\r
+ union{\r
+ uint8_t page3[8]; //25\r
+ struct {\r
+ uint8_t free;\r
+ uint16_t R0;\r
+ uint16_t VS;\r
+ uint8_t cmode;\r
+ int16_t ip;\r
+ \r
+ };\r
+ };\r
+ union{\r
+ uint8_t page4[8]; //33\r
+ struct {\r
+ uint16_t tol_s8;\r
+ uint16_t tol_d;\r
+ uint16_t r_day_max;\r
+ uint16_t r_week_max;\r
+ };\r
+ };\r
+ union{\r
+ uint8_t page5[8]; //41\r
+ struct {\r
+ uint8_t codeVOC; // immer 0x37 nach Neustart\r
+ uint8_t days_of_r0; //Anzahl der Tage fuer die r0 ermittelt wird\r
+ int8_t corr_VOC_mult; //r0 corr\r
+ int8_t corr_VOC_div;\r
+ uint16_t vv3;\r
+ uint8_t time_corr; //Wiregate;\r
+ uint8_t reset_code;\r
+ };\r
+ uint16_t page5d[4];\r
+ };\r
+ uint8_t page6[8]; //49\r
+ uint8_t page7[8]; //57\r
+ \r
+ #endif\r
+ };\r
+ } pack2_t;\r
+ volatile pack2_t pack2,pack1;\r
+\r
+\r
+\r
+\r
+ volatile int16_t DS2438_2_TEMP;\r
+ volatile uint16_t DS2438_2_VAD;\r
+ volatile uint16_t DS2438_2_VDD=0x01F4;\r
+ volatile int16_t DS2438_1_TEMP;\r
+ volatile uint16_t DS2438_1_VAD;\r
+ volatile uint16_t DS2438_1_VDD=0x01F4;\r
+\r
+ OWST_TESTSW\r
+\r
+\r
+ double temperatureC,humidityRH,hhum;\r
+ double l;\r
+\r
+\r
+ uint16_t weekmaxarr[33];\r
+\r
+ //Kompensieren der Abhänigkeit von RS/RO von Temperatur und Luftfeuchte\r
+ inline double interp(double t, double h) {\r
+ double h2;\r
+ double t2;\r
+ h2=h*h;\r
+ t2=t*t;\r
+ return 4.76111e-9*h2*t2-3.96956e-7*h2*t+0.0000408889*h2-1.07132e-6*h*t2+0.000115968*h*t-0.0101333*h+0.000163806*t2-0.0241179*t+1.80591;\r
+ }\r
+ inline double calibr_hum05(double t,double hum) {\r
+ double y=-0.0006*t*t-0.2455*t-28.5902;\r
+ return -(hum/y)+hum;\r
+ }\r
+ inline double calibr_hum075(double t,double hum) {\r
+ double y=-0.0004*t*t-0.1636*t-18.9173;\r
+ return -(hum/y)+hum;\r
+ }\r
+ inline double calibr_hum1(double t,double hum) {\r
+ double y=-0.0003*t*t-0.1228*t-14.0808;\r
+ return -(hum/y)+hum;\r
+ }\r
+\r
+ double R0;\r
+ uint16_t mr;\r
+ uint8_t startup=10;\r
+ double ip;\r
+ double la[4];\r
+ uint8_t lainit=1;\r
+\r
+\r
+ \r
+ #define EEPROM_R0 0\r
+ #define EEPROM_R0d 2\r
+ #define EEPROM_R0w 4\r
+ #define EEPROM_dol 6\r
+ #define EEPROM_CODE_DAYOFR0 8\r
+ #define EEPROM_CORR 10\r
+ #define EEPROM_FREE 12\r
+ #define EEPROM_TCORR_RESET 14\r
+\r
+ uint16_t readEEPROM(uint8_t addr,uint16_t def) {\r
+ uint16_t hr;\r
+ while(EECR & (1<<EEPE));\r
+ EEARL=addr+1;\r
+ EECR |= (1<<EERE);\r
+ hr=EEDR;\r
+ if (hr!=0xFF) {\r
+ hr=hr<<8;\r
+ while(EECR & (1<<EEPE));\r
+ EEARL=addr;\r
+ EECR |= (1<<EERE);\r
+ hr|=EEDR;\r
+ return hr;\r
+ }\r
+ return def;\r
+ }\r
+\r
+ void writeEEPROM(uint8_t addr,uint16_t val) {\r
+ while(EECR & (1<<EEPE));\r
+ EECR = (0<<EEPM1)|(0<<EEPM0);\r
+ EEARL = addr;\r
+ EEDR = val&0xFF;\r
+ EECR |= (1<<EEMPE);\r
+ EECR |= (1<<EEPE);\r
+ while(EECR & (1<<EEPE));\r
+ EECR = (0<<EEPM1)|(0<<EEPM0);\r
+ EEARL = addr+1;\r
+ EEDR = val>>8;\r
+ EECR |= (1<<EEMPE);\r
+ EECR |= (1<<EEPE);\r
+ }\r
+\r
+ int main(void){\r
+ PORTA=0xFF-(1<<PINA1);\r
+ PORTB=0xFF-(1<<PORTB0); //Schalter kann gegen Masse sein und zieht dann immer Strom\r
+ DDRB|=(1<<PORTB0); //Als Ausgang und 0\r
+ OWINIT();\r
+ DDRB|=(1<<PINB1);//Ausgang und 1\r
+ DDRA|=(1<<PINA0);\r
+ \r
+ WDTCSR |= ((1<<WDCE) ); // Enable the WD Change Bit//| (1<<WDE)\r
+ WDTCSR |= (1<<WDIE) | // Enable WDT Interrupt\r
+ //(1<<WDP0) |(1<<WDP2) | (1<<WDP1); // Set Timeout to ~2 seconds\r
+ (1<<WDP3) | (1<<WDP0); // Set Timeout to ~8 seconds\r
+\r
+ MCUSR=0;\r
+\r
+ //ADMUX=0b00001110; //ADC1 + ADC3 -\r
+ ADMUX=0x01 ; //PA3 single and 3V\r
+ OWST_INIT_ADC\r
+ //ADCSRA = (1<<ADEN)|(1<<ADPS1)|(1<<ADPS0);//|\r
+ \r
+ \r
+\r
+ pack2.page3[0]=0xF1;\r
+ pack2.cmode=0;\r
+ pack2.R0=readEEPROM(EEPROM_R0,1);\r
+ R0=pack2.R0/100.0;\r
+ \r
+ pack2.r_day_max=readEEPROM(EEPROM_R0d,1);\r
+ pack2.r_week_max=readEEPROM(EEPROM_R0w,1);\r
+ pack2.tol_d=readEEPROM(EEPROM_dol,0);\r
+ pack2.tol_s8=0; //Tag faengt mit Einschalten an\r
+\r
+ pack2.page5d[0]=readEEPROM(EEPROM_CODE_DAYOFR0,0x0437);\r
+ pack2.page5d[1]=readEEPROM(EEPROM_CORR,0x0101);\r
+ pack2.page5d[2]=readEEPROM(EEPROM_FREE,0x0);\r
+ pack2.page5d[3]=readEEPROM( EEPROM_TCORR_RESET,0x0005);\r
+\r
+ for(uint8_t i=0;i<pack2.days_of_r0;i++) {\r
+ weekmaxarr[i]=pack2.r_week_max;\r
+ }\r
+\r
+ for(uint8_t i=0;i<8;i++) pack2.page6[i]=owid1[i];\r
+ if (testSW()) {\r
+ config_info2[5]=12;\r
+ }else{\r
+ config_info2[5]=7;\r
+ }\r
+\r
+ TWI_Master_Initialise();\r
+ \r
+ //initSHT2x();\r
+ HDC2010_Init();\r
+ \r
+ _delay_ms(100);\r
+ gcontrol=1;\r
+ sei();\r
+ while(1) {\r
+ \r
+ if ((cpsp2&0x80)!=0) {\r
+ if ((cpsp2&0x0F)==5) {\r
+ if (pack2.reset_code==0x01) {\r
+ R0=1;\r
+ pack2.R0=0;\r
+ writeEEPROM(EEPROM_R0,0);\r
+ } else if (pack2.reset_code==0x05) {\r
+ pack2.r_day_max=1;\r
+ pack2.r_week_max=1;\r
+ pack2.tol_d=0;\r
+ pack2.tol_s8=0; //Tag faengt mit Einschalten an\r
+ R0=1;\r
+ writeEEPROM(EEPROM_R0,0xFF);\r
+ writeEEPROM(EEPROM_R0d,0xFF); //Maximum des Tages\r
+ writeEEPROM(EEPROM_R0w,0xFF); //Maximum der Letzten 7 Tage\r
+ writeEEPROM(EEPROM_dol,0xFF); //Anzahl der Betriebstage\r
+ for(uint8_t i=0;i<7;i++) {\r
+ weekmaxarr[i]=1;\r
+ }\r
+ } else {\r
+ writeEEPROM(EEPROM_CODE_DAYOFR0,0x0037|(pack2.days_of_r0<<8));\r
+ writeEEPROM(EEPROM_CORR,pack2.page5d[1]);\r
+ writeEEPROM(EEPROM_FREE,pack2.page5d[2]);\r
+ writeEEPROM(EEPROM_TCORR_RESET,pack2.time_corr);\r
+ }\r
+ }\r
+ cpsp2=0;\r
+ }\r
+ if (wdcounter>0) { //8s\r
+ pack2.tol_s8++;\r
+ if (pack2.tol_s8>(10000)) {//10800 ist theortisch der Tag aber meistens zu lang\r
+ pack2.tol_s8=0;\r
+ pack2.tol_d++; //rund 180 Jahre :-)\r
+ pack2.r_week_max=0;\r
+ weekmaxarr[pack2.days_of_r0]=pack2.r_day_max;\r
+ for(uint8_t i=0;i<pack2.days_of_r0;i++) {\r
+ weekmaxarr[i]=weekmaxarr[i+1];\r
+ //maximum of week\r
+ if (weekmaxarr[i]>pack2.r_week_max) pack2.r_week_max=weekmaxarr[i];\r
+ }\r
+ if (pack2.tol_d>7) {\r
+ pack2.R0=pack2.r_week_max;\r
+ } else {\r
+ pack2.R0=pack2.r_day_max;\r
+ }\r
+ //R0=//R0-0.5*(pack2.R0/100-R0);\r
+ R0=R0-(R0-pack2.R0/100.0)*0.5 ;\r
+ pack2.R0=R0*100;\r
+ writeEEPROM(EEPROM_R0,pack2.R0);\r
+ writeEEPROM(EEPROM_R0d,pack2.r_day_max); //Maximum des Tages\r
+ writeEEPROM(EEPROM_R0w,pack2.r_week_max); //Maximum der Letzten 7 Tage\r
+ writeEEPROM(EEPROM_dol,pack2.tol_d); //Anzahl der Betriebstage\r
+ pack2.r_day_max=0;\r
+ }\r
+ if (startup!=0) startup--;\r
+ //getSHT2xHumTemp(&temperatureC,&humidityRH);\r
+ HDC2010_Readf(&temperatureC,&humidityRH);\r
+ ip=interp(temperatureC,humidityRH);\r
+ pack2.ip=ip*1000;\r
+ //double RH=calibr_hum(temperatureC,-0.2,humidityRH)*10.0;\r
+ //double TC =temperatureC *10.0-2;\r
+ double RH=calibr_hum075(temperatureC,humidityRH)*10.0;\r
+ //double RH=humidityRH*10.0;\r
+ double TC=temperatureC*10.0-7.5;\r
+\r
+\r
+ if (testSW()) {\r
+ DS2438_2_VAD=RH;\r
+ DS2438_2_TEMP=TC*25.6;\r
+ config_info2[5]=12; //10V = 100%\r
+ }else{\r
+ hhum=(1.0546-0.000216*TC)*(RH);\r
+ DS2438_2_VAD=0.31*hhum +80;\r
+ DS2438_2_TEMP=TC*25.6;\r
+ config_info2[5]=7;\r
+ }\r
+ mr=0;\r
+ //Kritische Sektion !___Ein Breakpoint in dieser Section kann den TGS8100 zerstoeren!___________________________\r
+ PORTB&=~(1<<PINB1); //Auf 0 Ziehen\r
+ _delay_us(300);\r
+ for(uint8_t i=0;i<32;i++) {\r
+ ADCSRA|=(1<<ADSC);\r
+ while ((ADCSRA&(1<<ADSC)));\r
+ mr+=ADC;\r
+ }\r
+ PORTB|=(1<<PINB1);\r
+ //ENDE Kritische Sektion !______________________________\r
+\r
+ //pack2.VS=mr*3/128; //VS in Volt = VS/256 --> Nur zum Debug .... Speicher reicht sonst nicht....\r
+ l=mr*1.8/32768.0; //Spannung in v\r
+ l=( 1.8/l- 1) *30; //l is resistance\r
+ if (lainit) {\r
+ la[0]=la[1]=la[2]=la[3]=l; //smaller code\r
+ lainit=0;\r
+ } else {\r
+ //for (uint8_t i=0;i<3;i++) {\r
+ // la[i]=la[i+1];\r
+ //}\r
+ la[0]=la[1];\r
+ la[1]=la[2];\r
+ la[2]=la[3];\r
+ la[3]=l;\r
+ }\r
+ double lasum=la[0]+la[1]+la[2]+la[3];\r
+ l=lasum/4.0;\r
+ \r
+ pack2.current=l*100;\r
+ \r
+ l=l/ip;\r
+ \r
+ if (startup==0){\r
+ if (l>R0) {\r
+ R0=l;\r
+ pack2.R0=R0*100;\r
+ writeEEPROM(EEPROM_R0,pack2.R0);\r
+\r
+ }\r
+ if (l*100>pack2.r_day_max) {\r
+ pack2.r_day_max=l*100;\r
+ }\r
+ } else if (l<R0) l=R0; //negative Werte am Anfang verhintern\r
+ //l=exp((1-(l/R0))*6.05)-1;// exp((1-($val)/55)*5.75); (5.75 geht über 125 6.05 geht bis 240... mittlere Linie im Datenblatt)\r
+ //l=pow(R0/l,1.8)*3-3; \r
+ if (l!=0) {\r
+ l=R0/l;\r
+ //l=l*l*12-12;\r
+ l=exp((1-(1/l))*6.05)-1;\r
+ l=l*(double)pack2.corr_VOC_mult/(double)pack2.corr_VOC_div;\r
+ l=l*8.0; //fuer DS18B20*/\r
+ } \r
+ wdcounter=0;\r
+ DS2438_1_VAD=l;\r
+ DS2438_1_VDD=(l-DS2438_1_VAD)*1000.0;\r
+ \r
+ l=MAX44009getlux(1);\r
+ if (l<0.030) l=0.030; //Darf nicht 0 sein. minimum -35°C Sensor minimum 0.045\r
+ //double l=1000;\r
+ l=log(l)*10*256;\r
+ DS2438_1_TEMP=l;\r
+\r
+ \r
+ }\r
+ \r
+ \r
+ if (gcontrol) {\r
+ gcontrol=0;\r
+ \r
+ }\r
+\r
+ \r
+ OWST_MAIN_END\r
+ }\r
+\r
+\r
+ }\r
--- /dev/null
+\r
+Microsoft Visual Studio Solution File, Format Version 12.00\r
+# Atmel Studio Solution File, Format Version 11.00\r
+VisualStudioVersion = 14.0.25420.1\r
+MinimumVisualStudioVersion = 10.0.40219.1\r
+Project("{54F91283-7BC4-4236-8FF9-10F437C3AD48}") = "DS2438_MAX44009_VOC_DS2438_HDC", "DS2438_MAX44009_VOC_DS2438_HDC.cproj", "{7A5672FE-8226-4158-B931-E1F36B9A8858}"\r
+EndProject\r
+Global\r
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution\r
+ Debug|AVR = Debug|AVR\r
+ Release|AVR = Release|AVR\r
+ EndGlobalSection\r
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution\r
+ {7A5672FE-8226-4158-B931-E1F36B9A8858}.Debug|AVR.ActiveCfg = Debug|AVR\r
+ {7A5672FE-8226-4158-B931-E1F36B9A8858}.Debug|AVR.Build.0 = Debug|AVR\r
+ {7A5672FE-8226-4158-B931-E1F36B9A8858}.Release|AVR.ActiveCfg = Release|AVR\r
+ {7A5672FE-8226-4158-B931-E1F36B9A8858}.Release|AVR.Build.0 = Release|AVR\r
+ EndGlobalSection\r
+ GlobalSection(SolutionProperties) = preSolution\r
+ HideSolutionNode = FALSE\r
+ EndGlobalSection\r
+EndGlobal\r
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>\r
+<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
+ <PropertyGroup>\r
+ <SchemaVersion>2.0</SchemaVersion>\r
+ <ProjectVersion>7.0</ProjectVersion>\r
+ <ToolchainName>com.Atmel.AVRGCC8.C</ToolchainName>\r
+ <ProjectGuid>{7a5672fe-8226-4158-b931-e1f36b9a8858}</ProjectGuid>\r
+ <avrdevice>ATtiny84A</avrdevice>\r
+ <avrdeviceseries>none</avrdeviceseries>\r
+ <OutputType>Executable</OutputType>\r
+ <Language>C</Language>\r
+ <OutputFileName>$(MSBuildProjectName)</OutputFileName>\r
+ <OutputFileExtension>.elf</OutputFileExtension>\r
+ <OutputDirectory>$(MSBuildProjectDirectory)\$(Configuration)</OutputDirectory>\r
+ <AssemblyName>DS18B20_DS2438</AssemblyName>\r
+ <Name>DS2438_MAX44009_VOC_DS2438_HDC</Name>\r
+ <RootNamespace>DS18B20_DS2438</RootNamespace>\r
+ <ToolchainFlavour>Native</ToolchainFlavour>\r
+ <KeepTimersRunning>true</KeepTimersRunning>\r
+ <OverrideVtor>false</OverrideVtor>\r
+ <CacheFlash>true</CacheFlash>\r
+ <ProgFlashFromRam>true</ProgFlashFromRam>\r
+ <RamSnippetAddress>0x20000000</RamSnippetAddress>\r
+ <UncachedRange />\r
+ <preserveEEPROM>true</preserveEEPROM>\r
+ <OverrideVtorValue>exception_table</OverrideVtorValue>\r
+ <BootSegment>2</BootSegment>\r
+ <eraseonlaunchrule>1</eraseonlaunchrule>\r
+ <AsfFrameworkConfig>\r
+ <framework-data>\r
+ <options />\r
+ <configurations />\r
+ <files />\r
+ <documentation help="" />\r
+ <offline-documentation help="" />\r
+ <dependencies>\r
+ <content-extension eid="atmel.asf" uuidref="Atmel.ASF" version="3.28.1" />\r
+ </dependencies>\r
+ </framework-data>\r
+ </AsfFrameworkConfig>\r
+ <avrtool>com.atmel.avrdbg.tool.atmelice</avrtool>\r
+ <com_atmel_avrdbg_tool_atmelice>\r
+ <ToolOptions>\r
+ <InterfaceProperties>\r
+ </InterfaceProperties>\r
+ <InterfaceName>debugWIRE</InterfaceName>\r
+ </ToolOptions>\r
+ <ToolType>com.atmel.avrdbg.tool.atmelice</ToolType>\r
+ <ToolNumber>J41800000789</ToolNumber>\r
+ <ToolName>Atmel-ICE</ToolName>\r
+ </com_atmel_avrdbg_tool_atmelice>\r
+ <avrtoolinterface>debugWIRE</avrtoolinterface>\r
+ <com_atmel_avrdbg_tool_simulator>\r
+ <ToolOptions>\r
+ <InterfaceProperties>\r
+ </InterfaceProperties>\r
+ <InterfaceName>\r
+ </InterfaceName>\r
+ </ToolOptions>\r
+ <ToolType>com.atmel.avrdbg.tool.simulator</ToolType>\r
+ <ToolNumber>\r
+ </ToolNumber>\r
+ <ToolName>Simulator</ToolName>\r
+ </com_atmel_avrdbg_tool_simulator>\r
+ <ExternalProgrammingToolCommand />\r
+ <avrtoolserialnumber>J41800000789</avrtoolserialnumber>\r
+ <avrdeviceexpectedsignature>0x1E930C</avrdeviceexpectedsignature>\r
+ <ResetRule>0</ResetRule>\r
+ <EraseKey />\r
+ </PropertyGroup>\r
+ <PropertyGroup Condition=" '$(Configuration)' == 'Release' ">\r
+ <ToolchainSettings>\r
+ <AvrGcc>\r
+ <avrgcc.common.Device>-mmcu=attiny84a -B "%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.68\gcc\dev\attiny84a"</avrgcc.common.Device>\r
+ <avrgcc.common.outputfiles.hex>True</avrgcc.common.outputfiles.hex>\r
+ <avrgcc.common.outputfiles.lss>True</avrgcc.common.outputfiles.lss>\r
+ <avrgcc.common.outputfiles.eep>True</avrgcc.common.outputfiles.eep>\r
+ <avrgcc.common.outputfiles.srec>True</avrgcc.common.outputfiles.srec>\r
+ <avrgcc.common.outputfiles.usersignatures>False</avrgcc.common.outputfiles.usersignatures>\r
+ <avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>True</avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>\r
+ <avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>True</avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>\r
+ <avrgcc.compiler.symbols.DefSymbols>\r
+ <ListValues>\r
+ <Value>__4MHZ__</Value>\r
+ </ListValues>\r
+ </avrgcc.compiler.symbols.DefSymbols>\r
+ <avrgcc.compiler.directories.IncludePaths>\r
+ <ListValues>\r
+ <Value>%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.68\include</Value>\r
+ </ListValues>\r
+ </avrgcc.compiler.directories.IncludePaths>\r
+ <avrgcc.compiler.optimization.level>Optimize (-O1)</avrgcc.compiler.optimization.level>\r
+ <avrgcc.compiler.optimization.PackStructureMembers>True</avrgcc.compiler.optimization.PackStructureMembers>\r
+ <avrgcc.compiler.optimization.AllocateBytesNeededForEnum>True</avrgcc.compiler.optimization.AllocateBytesNeededForEnum>\r
+ <avrgcc.compiler.warnings.AllWarnings>True</avrgcc.compiler.warnings.AllWarnings>\r
+ <avrgcc.linker.libraries.Libraries>\r
+ <ListValues>\r
+ <Value>libm</Value>\r
+ </ListValues>\r
+ </avrgcc.linker.libraries.Libraries>\r
+ <avrgcc.assembler.general.AssemblerFlags>-D__4MHZ__</avrgcc.assembler.general.AssemblerFlags>\r
+ <avrgcc.assembler.debugging.DebugLevel>Default (-Wa,-g)</avrgcc.assembler.debugging.DebugLevel>\r
+</AvrGcc>\r
+ </ToolchainSettings>\r
+ </PropertyGroup>\r
+ <PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">\r
+ <ToolchainSettings>\r
+ <AvrGcc>\r
+ <avrgcc.common.Device>-mmcu=attiny84a -B "%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.68\gcc\dev\attiny84a"</avrgcc.common.Device>\r
+ <avrgcc.common.outputfiles.hex>True</avrgcc.common.outputfiles.hex>\r
+ <avrgcc.common.outputfiles.lss>True</avrgcc.common.outputfiles.lss>\r
+ <avrgcc.common.outputfiles.eep>True</avrgcc.common.outputfiles.eep>\r
+ <avrgcc.common.outputfiles.srec>True</avrgcc.common.outputfiles.srec>\r
+ <avrgcc.common.outputfiles.usersignatures>False</avrgcc.common.outputfiles.usersignatures>\r
+ <avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>True</avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>\r
+ <avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>True</avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>\r
+ <avrgcc.compiler.symbols.DefSymbols>\r
+ <ListValues>\r
+ <Value>DEBUG</Value>\r
+ <Value>__4MHZ__</Value>\r
+ </ListValues>\r
+ </avrgcc.compiler.symbols.DefSymbols>\r
+ <avrgcc.compiler.preprocessor.UndefSymbols>\r
+ <ListValues>\r
+ <Value>_CHANGEABLE_ID_</Value>\r
+ </ListValues>\r
+ </avrgcc.compiler.preprocessor.UndefSymbols>\r
+ <avrgcc.compiler.directories.IncludePaths>\r
+ <ListValues>\r
+ <Value>%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.68\include</Value>\r
+ </ListValues>\r
+ </avrgcc.compiler.directories.IncludePaths>\r
+ <avrgcc.compiler.optimization.level>Optimize (-O1)</avrgcc.compiler.optimization.level>\r
+ <avrgcc.compiler.optimization.PackStructureMembers>True</avrgcc.compiler.optimization.PackStructureMembers>\r
+ <avrgcc.compiler.optimization.AllocateBytesNeededForEnum>True</avrgcc.compiler.optimization.AllocateBytesNeededForEnum>\r
+ <avrgcc.compiler.optimization.DebugLevel>Default (-g2)</avrgcc.compiler.optimization.DebugLevel>\r
+ <avrgcc.compiler.warnings.AllWarnings>True</avrgcc.compiler.warnings.AllWarnings>\r
+ <avrgcc.linker.libraries.Libraries>\r
+ <ListValues>\r
+ <Value>libm</Value>\r
+ </ListValues>\r
+ </avrgcc.linker.libraries.Libraries>\r
+ <avrgcc.assembler.general.AssemblerFlags>-D__4MHZ__</avrgcc.assembler.general.AssemblerFlags>\r
+ <avrgcc.assembler.debugging.DebugLevel>Default (-Wa,-g)</avrgcc.assembler.debugging.DebugLevel>\r
+</AvrGcc>\r
+ </ToolchainSettings>\r
+ </PropertyGroup>\r
+ <ItemGroup>\r
+ <Compile Include="..\common\I2C\HDC2010.c">\r
+ <SubType>compile</SubType>\r
+ <Link>HDC2010.c</Link>\r
+ </Compile>\r
+ <Compile Include="..\common\I2C\MAX44009.c">\r
+ <SubType>compile</SubType>\r
+ <Link>MAX44009.c</Link>\r
+ </Compile>\r
+ <Compile Include="..\common\I2C\TWI_Master.c">\r
+ <SubType>compile</SubType>\r
+ <Link>TWI_Master.c</Link>\r
+ </Compile>\r
+ <Compile Include="..\common\OWDS2438_DS2438.S">\r
+ <SubType>compile</SubType>\r
+ <Link>OWDS2438_DS2438.S</Link>\r
+ </Compile>\r
+ <Compile Include="DS2438_DS2438.c">\r
+ <SubType>compile</SubType>\r
+ </Compile>\r
+ </ItemGroup>\r
+ <Import Project="$(AVRSTUDIO_EXE_PATH)\\Vs\\Compiler.targets" />\r
+</Project>
\ No newline at end of file
--- /dev/null
+// Copyright (c) 2017, Tobias Mueller tm(at)tm3d.de\r
+// All rights reserved.\r
+//\r
+// Redistribution and use in source and binary forms, with or without\r
+// modification, are permitted provided that the following conditions are\r
+// met:\r
+//\r
+// * Redistributions of source code must retain the above copyright\r
+// notice, this list of conditions and the following disclaimer.\r
+// * Redistributions in binary form must reproduce the above copyright\r
+// notice, this list of conditions and the following disclaimer in the\r
+// documentation and/or other materials provided with the\r
+// distribution.\r
+// * All advertising materials mentioning features or use of this\r
+// software must display the following acknowledgement: This product\r
+// includes software developed by tm3d.de and its contributors.\r
+// * Neither the name of tm3d.de nor the names of its contributors may\r
+// be used to endorse or promote products derived from this software\r
+// without specific prior written permission.\r
+//\r
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\r
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\r
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\r
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\r
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\r
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\r
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\r
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\r
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+\r
+//!!!!!Max Program size 7551 Byte\r
+\r
+#define F_CPU 8000000UL\r
+#include <avr/io.h>\r
+#include <avr/interrupt.h>\r
+#include <util/delay.h>\r
+#include <avr/wdt.h>\r
+#include <avr/sleep.h>\r
+#include <avr/pgmspace.h>\r
+#include "../common/I2C/TWI_Master.h"\r
+#include "../common/I2C/SHT2xV2.h"\r
+#include "../common/I2C/MAX44009.h"\r
+#include "../common/owSlave_tools.h"\r
+\r
+OWST_EXTERN_VARS\r
+\r
+\r
+\r
+volatile uint8_t owid1[8]={0x26, 0xA2, 0xD9, 0x84, 0x00, 0x16, 0x05, 0x50};/**/\r
+volatile uint8_t owid2[8]={0x26, 0xA3, 0xD9, 0x84, 0x00, 0x16, 0x05, 0x67};/**/\r
+ //18\r
+volatile uint8_t config_info1[26]={3,28, 0x05,0x08, 8,27, 0x00,0x00, 0x02,17,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};\r
+volatile uint8_t config_info2[26]={0x01,0x06, 0x05,0x08, 0x04,0x07, 11,0x08, 0x02,0x07,0x00,0x07,17,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};\r
+\r
+#if (owid>128)\r
+#error "Variable not correct"\r
+#endif\r
+\r
+extern uint8_t cpsp2;\r
+\r
+OWST_WDT_ISR\r
+\r
+/*\r
+\r
+\r
+ typedef union {\r
+ volatile uint8_t bytes[8];\r
+ struct {\r
+ uint16_t temp; //0\r
+ uint8_t TH; //2\r
+ uint8_t TL; //3\r
+ uint8_t config; //4\r
+ uint8_t rrFF; //5\r
+ uint8_t rr00; //6\r
+ uint8_t rr10; //7\r
+ };\r
+ } pack1_t;\r
+ volatile pack1_t pack1;\r
+*/\r
+\r
+\r
+ typedef union {\r
+ #if defined(__AVR_ATtiny25__)\r
+ uint8_t bytes[16];\r
+ #else\r
+ uint8_t bytes[64];\r
+ #endif\r
+ struct {\r
+ uint8_t status; //1\r
+ int16_t temp; //2\r
+ uint16_t voltage; //4\r
+ int16_t current; //6\r
+ uint8_t threshold; //8\r
+ \r
+ uint8_t page1[8]; //9\r
+ #if defined(__AVR_ATtiny25__)\r
+ #else\r
+ uint8_t page2[8]; //17\r
+ union{\r
+ uint8_t page3[8]; //25\r
+ struct {\r
+ uint8_t free;\r
+ uint16_t R0;\r
+ uint16_t VS;\r
+ uint8_t cmode;\r
+ int16_t ip;\r
+ \r
+ };\r
+ };\r
+ union{\r
+ uint8_t page4[8]; //33\r
+ struct {\r
+ uint16_t tol_s8;\r
+ uint16_t tol_d;\r
+ uint16_t r_day_max;\r
+ uint16_t r_week_max;\r
+ };\r
+ };\r
+ union{\r
+ uint8_t page5[8]; //41\r
+ struct {\r
+ uint8_t codeVOC; // immer 0x37 nach Neustart\r
+ uint8_t days_of_r0; //Anzahl der Tage fuer die r0 ermittelt wird\r
+ int8_t corr_VOC_mult; //r0 corr\r
+ int8_t corr_VOC_div;\r
+ uint16_t vv3;\r
+ uint8_t time_corr; //Wiregate;\r
+ uint8_t reset_code;\r
+ };\r
+ uint16_t page5d[4];\r
+ };\r
+ uint8_t page6[8]; //49\r
+ uint8_t page7[8]; //57\r
+ \r
+ #endif\r
+ };\r
+ } pack2_t;\r
+ volatile pack2_t pack2,pack1;\r
+\r
+\r
+\r
+\r
+ volatile int16_t DS2438_2_TEMP;\r
+ volatile uint16_t DS2438_2_VAD;\r
+ volatile uint16_t DS2438_2_VDD=0x01F4;\r
+ volatile int16_t DS2438_1_TEMP;\r
+ volatile uint16_t DS2438_1_VAD;\r
+ volatile uint16_t DS2438_1_VDD=0x01F4;\r
+\r
+ OWST_TESTSW\r
+\r
+\r
+ double temperatureC,humidityRH,hhum;\r
+ double l;\r
+\r
+\r
+ uint16_t weekmaxarr[33];\r
+\r
+ //Kompensieren der Abhänigkeit von RS/RO von Temperatur und Luftfeuchte\r
+ inline double interp(double t, double h) {\r
+ double h2;\r
+ double t2;\r
+ h2=h*h;\r
+ t2=t*t;\r
+ return 4.76111e-9*h2*t2-3.96956e-7*h2*t+0.0000408889*h2-1.07132e-6*h*t2+0.000115968*h*t-0.0101333*h+0.000163806*t2-0.0241179*t+1.80591;\r
+ }\r
+ inline double calibr_hum05(double t,double hum) {\r
+ double y=-0.0006*t*t-0.2455*t-28.5902;\r
+ return -(hum/y)+hum;\r
+ }\r
+ inline double calibr_hum075(double t,double hum) {\r
+ double y=-0.0004*t*t-0.1636*t-18.9173;\r
+ return -(hum/y)+hum;\r
+ }\r
+ inline double calibr_hum1(double t,double hum) {\r
+ double y=-0.0003*t*t-0.1228*t-14.0808;\r
+ return -(hum/y)+hum;\r
+ }\r
+\r
+ double R0;\r
+ uint16_t mr;\r
+ uint8_t startup=10;\r
+ double ip;\r
+ double la[4];\r
+ uint8_t lainit=1;\r
+\r
+\r
+ \r
+ #define EEPROM_R0 0\r
+ #define EEPROM_R0d 2\r
+ #define EEPROM_R0w 4\r
+ #define EEPROM_dol 6\r
+ #define EEPROM_CODE_DAYOFR0 8\r
+ #define EEPROM_CORR 10\r
+ #define EEPROM_FREE 12\r
+ #define EEPROM_TCORR_RESET 14\r
+\r
+ uint16_t readEEPROM(uint8_t addr,uint16_t def) {\r
+ uint16_t hr;\r
+ while(EECR & (1<<EEPE));\r
+ EEARL=addr+1;\r
+ EECR |= (1<<EERE);\r
+ hr=EEDR;\r
+ if (hr!=0xFF) {\r
+ hr=hr<<8;\r
+ while(EECR & (1<<EEPE));\r
+ EEARL=addr;\r
+ EECR |= (1<<EERE);\r
+ hr|=EEDR;\r
+ return hr;\r
+ }\r
+ return def;\r
+ }\r
+\r
+ void writeEEPROM(uint8_t addr,uint16_t val) {\r
+ while(EECR & (1<<EEPE));\r
+ EECR = (0<<EEPM1)|(0<<EEPM0);\r
+ EEARL = addr;\r
+ EEDR = val&0xFF;\r
+ EECR |= (1<<EEMPE);\r
+ EECR |= (1<<EEPE);\r
+ while(EECR & (1<<EEPE));\r
+ EECR = (0<<EEPM1)|(0<<EEPM0);\r
+ EEARL = addr+1;\r
+ EEDR = val>>8;\r
+ EECR |= (1<<EEMPE);\r
+ EECR |= (1<<EEPE);\r
+ }\r
+\r
+ int main(void){\r
+ PORTA=0xFF-(1<<PINA1);\r
+ PORTB=0xFF-(1<<PORTB0); //Schalter kann gegen Masse sein und zieht dann immer Strom\r
+ DDRB|=(1<<PORTB0); //Als Ausgang und 0\r
+ OWINIT();\r
+ DDRB|=(1<<PINB1);//Ausgang und 1\r
+ DDRA|=(1<<PINA0);\r
+ \r
+ WDTCSR |= ((1<<WDCE) ); // Enable the WD Change Bit//| (1<<WDE)\r
+ WDTCSR |= (1<<WDIE) | // Enable WDT Interrupt\r
+ //(1<<WDP0) |(1<<WDP2) | (1<<WDP1); // Set Timeout to ~2 seconds\r
+ (1<<WDP3) | (1<<WDP0); // Set Timeout to ~8 seconds\r
+\r
+ MCUSR=0;\r
+\r
+ //ADMUX=0b00001110; //ADC1 + ADC3 -\r
+ ADMUX=0x01 ; //PA3 single and 3V\r
+ OWST_INIT_ADC\r
+ //ADCSRA = (1<<ADEN)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0);//|\r
+ \r
+ \r
+\r
+ pack2.page3[0]=0xF1;\r
+ pack2.cmode=0;\r
+ pack2.R0=readEEPROM(EEPROM_R0,1);\r
+ R0=pack2.R0/100.0;\r
+ \r
+ pack2.r_day_max=readEEPROM(EEPROM_R0d,1);\r
+ pack2.r_week_max=readEEPROM(EEPROM_R0w,1);\r
+ pack2.tol_d=readEEPROM(EEPROM_dol,0);\r
+ pack2.tol_s8=0; //Tag faengt mit Einschalten an\r
+\r
+ pack2.page5d[0]=readEEPROM(EEPROM_CODE_DAYOFR0,0x0437);\r
+ pack2.page5d[1]=readEEPROM(EEPROM_CORR,0x0101);\r
+ pack2.page5d[2]=readEEPROM(EEPROM_FREE,0x0);\r
+ pack2.page5d[3]=readEEPROM( EEPROM_TCORR_RESET,0x0005);\r
+\r
+ for(uint8_t i=0;i<pack2.days_of_r0;i++) {\r
+ weekmaxarr[i]=pack2.r_week_max;\r
+ }\r
+\r
+ for(uint8_t i=0;i<8;i++) pack2.page6[i]=owid1[i];\r
+ if (testSW()) {\r
+ config_info2[5]=12;\r
+ }else{\r
+ config_info2[5]=7;\r
+ }\r
+\r
+ TWI_Master_Initialise();\r
+ \r
+ initSHT2x();\r
+ \r
+ _delay_ms(100);\r
+ gcontrol=1;\r
+ sei();\r
+ while(1) {\r
+ \r
+ if ((cpsp2&0x80)!=0) {\r
+ if ((cpsp2&0x0F)==5) {\r
+ if (pack2.reset_code==0x01) {\r
+ R0=1;\r
+ pack2.R0=0;\r
+ writeEEPROM(EEPROM_R0,0);\r
+ } else if (pack2.reset_code==0x05) {\r
+ pack2.r_day_max=1;\r
+ pack2.r_week_max=1;\r
+ pack2.tol_d=0;\r
+ pack2.tol_s8=0; //Tag faengt mit Einschalten an\r
+ R0=1;\r
+ writeEEPROM(EEPROM_R0,0xFF);\r
+ writeEEPROM(EEPROM_R0d,0xFF); //Maximum des Tages\r
+ writeEEPROM(EEPROM_R0w,0xFF); //Maximum der Letzten 7 Tage\r
+ writeEEPROM(EEPROM_dol,0xFF); //Anzahl der Betriebstage\r
+ for(uint8_t i=0;i<7;i++) {\r
+ weekmaxarr[i]=1;\r
+ }\r
+ } else {\r
+ writeEEPROM(EEPROM_CODE_DAYOFR0,0x0037|(pack2.days_of_r0<<8));\r
+ writeEEPROM(EEPROM_CORR,pack2.page5d[1]);\r
+ writeEEPROM(EEPROM_FREE,pack2.page5d[2]);\r
+ writeEEPROM(EEPROM_TCORR_RESET,pack2.time_corr);\r
+ }\r
+ }\r
+ cpsp2=0;\r
+ }\r
+ if (wdcounter>0) { //8s\r
+ pack2.tol_s8++;\r
+ if (pack2.tol_s8>(10000)) {//10800 ist theortisch der Tag aber meistens zu lang\r
+ pack2.tol_s8=0;\r
+ pack2.tol_d++; //rund 180 Jahre :-)\r
+ pack2.r_week_max=0;\r
+ weekmaxarr[pack2.days_of_r0]=pack2.r_day_max;\r
+ for(uint8_t i=0;i<pack2.days_of_r0;i++) {\r
+ weekmaxarr[i]=weekmaxarr[i+1];\r
+ //maximum of week\r
+ if (weekmaxarr[i]>pack2.r_week_max) pack2.r_week_max=weekmaxarr[i];\r
+ }\r
+ if (pack2.tol_d>7) {\r
+ pack2.R0=pack2.r_week_max;\r
+ } else {\r
+ pack2.R0=pack2.r_day_max;\r
+ }\r
+ //R0=//R0-0.5*(pack2.R0/100-R0);\r
+ R0=R0-(R0-pack2.R0/100.0)*0.5 ;\r
+ pack2.R0=R0*100;\r
+ writeEEPROM(EEPROM_R0,pack2.R0);\r
+ writeEEPROM(EEPROM_R0d,pack2.r_day_max); //Maximum des Tages\r
+ writeEEPROM(EEPROM_R0w,pack2.r_week_max); //Maximum der Letzten 7 Tage\r
+ writeEEPROM(EEPROM_dol,pack2.tol_d); //Anzahl der Betriebstage\r
+ pack2.r_day_max=0;\r
+ }\r
+ if (startup!=0) startup--;\r
+ getSHT2xHumTemp(&temperatureC,&humidityRH);\r
+ ip=interp(temperatureC,humidityRH);\r
+ pack2.ip=ip*1000;\r
+ //double RH=calibr_hum(temperatureC,-0.2,humidityRH)*10.0;\r
+ //double TC =temperatureC *10.0-2;\r
+ double RH=calibr_hum075(temperatureC,humidityRH)*10.0;\r
+ //double RH=humidityRH*10.0;\r
+ double TC=temperatureC*10.0-7.5;\r
+\r
+\r
+ if (testSW()) {\r
+ DS2438_2_VAD=RH;\r
+ DS2438_2_TEMP=TC*25.6;\r
+ config_info2[5]=12; //10V = 100%\r
+ }else{\r
+ hhum=(1.0546-0.000216*TC)*(RH);\r
+ DS2438_2_VAD=0.31*hhum +80;\r
+ DS2438_2_TEMP=TC*25.6;\r
+ config_info2[5]=7;\r
+ }\r
+ mr=0;\r
+ //Kritische Sektion !___Ein Breakpoint in dieser Section kann den TGS8100 zerstoeren!___________________________\r
+ PORTB&=~(1<<PINB1); //Auf 0 Ziehen\r
+ _delay_us(500);\r
+ for(uint8_t i=0;i<32;i++) {\r
+ ADCSRA|=(1<<ADSC);\r
+ while ((ADCSRA&(1<<ADSC)));\r
+ mr+=ADC;\r
+ }\r
+ PORTB|=(1<<PINB1);\r
+ //ENDE Kritische Sektion !______________________________\r
+\r
+ //pack2.VS=mr*3/128; //VS in Volt = VS/256 --> Nur zum Debug .... Speicher reicht sonst nicht....\r
+ l=mr*3.0/32768.0; //Spannung in v\r
+ l=( 3/l- 1) *30; //l is resistance\r
+ if (lainit) {\r
+ la[0]=la[1]=la[2]=la[3]=l; //smaller code\r
+ lainit=0;\r
+ } else {\r
+ //for (uint8_t i=0;i<3;i++) {\r
+ // la[i]=la[i+1];\r
+ //}\r
+ la[0]=la[1];\r
+ la[1]=la[2];\r
+ la[2]=la[3];\r
+ la[3]=l;\r
+ }\r
+ double lasum=la[0]+la[1]+la[2]+la[3];\r
+ l=lasum/4.0;\r
+ \r
+ pack2.current=l*100;\r
+ \r
+ l=l/ip;\r
+ \r
+ if (startup==0){\r
+ if (l>R0) {\r
+ R0=l;\r
+ pack2.R0=R0*100;\r
+ writeEEPROM(EEPROM_R0,pack2.R0);\r
+\r
+ }\r
+ if (l*100>pack2.r_day_max) {\r
+ pack2.r_day_max=l*100;\r
+ }\r
+ } else if (l<R0) l=R0; //negative Werte am Anfang verhintern\r
+ //l=exp((1-(l/R0))*6.05)-1;// exp((1-($val)/55)*5.75); (5.75 geht über 125 6.05 geht bis 240... mittlere Linie im Datenblatt)\r
+ //l=pow(R0/l,1.8)*3-3; \r
+ if (l!=0) {\r
+ l=R0/l;\r
+ //l=l*l*12-12;\r
+ l=exp((1-(1/l))*6.05)-1;\r
+ l=l*(double)pack2.corr_VOC_mult/(double)pack2.corr_VOC_div;\r
+ l=l*8.0; //fuer DS18B20*/\r
+ } \r
+ wdcounter=0;\r
+ DS2438_1_VAD=l;\r
+ DS2438_1_VDD=(l-DS2438_1_VAD)*1000.0;\r
+ \r
+ l=MAX44009getlux(1);\r
+ if (l<0.030) l=0.030; //Darf nicht 0 sein. minimum -35°C Sensor minimum 0.045\r
+ //double l=1000;\r
+ l=log(l)*10*256;\r
+ DS2438_1_TEMP=l;\r
+\r
+ \r
+ }\r
+ \r
+ \r
+ if (gcontrol) {\r
+ gcontrol=0;\r
+ \r
+ }\r
+\r
+ \r
+ OWST_MAIN_END\r
+ }\r
+\r
+\r
+ }\r
--- /dev/null
+\r
+Microsoft Visual Studio Solution File, Format Version 12.00\r
+# Atmel Studio Solution File, Format Version 11.00\r
+VisualStudioVersion = 14.0.23107.0\r
+MinimumVisualStudioVersion = 10.0.40219.1\r
+Project("{54F91283-7BC4-4236-8FF9-10F437C3AD48}") = "DS2438_MAX44009_VOC_DS2438_SHT", "DS2438_MAX44009_VOC_DS2438_SHT.cproj", "{7A5672FE-8226-4158-B931-E1F36B9A8858}"\r
+EndProject\r
+Global\r
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution\r
+ Debug|AVR = Debug|AVR\r
+ Release|AVR = Release|AVR\r
+ EndGlobalSection\r
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution\r
+ {7A5672FE-8226-4158-B931-E1F36B9A8858}.Debug|AVR.ActiveCfg = Debug|AVR\r
+ {7A5672FE-8226-4158-B931-E1F36B9A8858}.Debug|AVR.Build.0 = Debug|AVR\r
+ {7A5672FE-8226-4158-B931-E1F36B9A8858}.Release|AVR.ActiveCfg = Release|AVR\r
+ {7A5672FE-8226-4158-B931-E1F36B9A8858}.Release|AVR.Build.0 = Release|AVR\r
+ EndGlobalSection\r
+ GlobalSection(SolutionProperties) = preSolution\r
+ HideSolutionNode = FALSE\r
+ EndGlobalSection\r
+EndGlobal\r
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>\r
+<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
+ <PropertyGroup>\r
+ <SchemaVersion>2.0</SchemaVersion>\r
+ <ProjectVersion>7.0</ProjectVersion>\r
+ <ToolchainName>com.Atmel.AVRGCC8.C</ToolchainName>\r
+ <ProjectGuid>{7a5672fe-8226-4158-b931-e1f36b9a8858}</ProjectGuid>\r
+ <avrdevice>ATtiny84A</avrdevice>\r
+ <avrdeviceseries>none</avrdeviceseries>\r
+ <OutputType>Executable</OutputType>\r
+ <Language>C</Language>\r
+ <OutputFileName>$(MSBuildProjectName)</OutputFileName>\r
+ <OutputFileExtension>.elf</OutputFileExtension>\r
+ <OutputDirectory>$(MSBuildProjectDirectory)\$(Configuration)</OutputDirectory>\r
+ <AssemblyName>DS18B20_DS2438</AssemblyName>\r
+ <Name>DS2438_MAX44009_VOC_DS2438_SHT</Name>\r
+ <RootNamespace>DS18B20_DS2438</RootNamespace>\r
+ <ToolchainFlavour>Native</ToolchainFlavour>\r
+ <KeepTimersRunning>true</KeepTimersRunning>\r
+ <OverrideVtor>false</OverrideVtor>\r
+ <CacheFlash>true</CacheFlash>\r
+ <ProgFlashFromRam>true</ProgFlashFromRam>\r
+ <RamSnippetAddress>0x20000000</RamSnippetAddress>\r
+ <UncachedRange />\r
+ <preserveEEPROM>true</preserveEEPROM>\r
+ <OverrideVtorValue>exception_table</OverrideVtorValue>\r
+ <BootSegment>2</BootSegment>\r
+ <eraseonlaunchrule>1</eraseonlaunchrule>\r
+ <AsfFrameworkConfig>\r
+ <framework-data>\r
+ <options />\r
+ <configurations />\r
+ <files />\r
+ <documentation help="" />\r
+ <offline-documentation help="" />\r
+ <dependencies>\r
+ <content-extension eid="atmel.asf" uuidref="Atmel.ASF" version="3.28.1" />\r
+ </dependencies>\r
+ </framework-data>\r
+ </AsfFrameworkConfig>\r
+ <avrtool>com.atmel.avrdbg.tool.atmelice</avrtool>\r
+ <com_atmel_avrdbg_tool_atmelice>\r
+ <ToolOptions>\r
+ <InterfaceProperties>\r
+ </InterfaceProperties>\r
+ <InterfaceName>debugWIRE</InterfaceName>\r
+ </ToolOptions>\r
+ <ToolType>com.atmel.avrdbg.tool.atmelice</ToolType>\r
+ <ToolNumber>J41800000789</ToolNumber>\r
+ <ToolName>Atmel-ICE</ToolName>\r
+ </com_atmel_avrdbg_tool_atmelice>\r
+ <avrtoolinterface>debugWIRE</avrtoolinterface>\r
+ <com_atmel_avrdbg_tool_simulator>\r
+ <ToolOptions>\r
+ <InterfaceProperties>\r
+ </InterfaceProperties>\r
+ <InterfaceName>\r
+ </InterfaceName>\r
+ </ToolOptions>\r
+ <ToolType>com.atmel.avrdbg.tool.simulator</ToolType>\r
+ <ToolNumber>\r
+ </ToolNumber>\r
+ <ToolName>Simulator</ToolName>\r
+ </com_atmel_avrdbg_tool_simulator>\r
+ <ExternalProgrammingToolCommand />\r
+ <avrtoolserialnumber>J41800000789</avrtoolserialnumber>\r
+ <avrdeviceexpectedsignature>0x1E930C</avrdeviceexpectedsignature>\r
+ <ResetRule>0</ResetRule>\r
+ <EraseKey />\r
+ </PropertyGroup>\r
+ <PropertyGroup Condition=" '$(Configuration)' == 'Release' ">\r
+ <ToolchainSettings>\r
+ <AvrGcc>\r
+ <avrgcc.common.Device>-mmcu=attiny84a -B "%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.68\gcc\dev\attiny84a"</avrgcc.common.Device>\r
+ <avrgcc.common.outputfiles.hex>True</avrgcc.common.outputfiles.hex>\r
+ <avrgcc.common.outputfiles.lss>True</avrgcc.common.outputfiles.lss>\r
+ <avrgcc.common.outputfiles.eep>True</avrgcc.common.outputfiles.eep>\r
+ <avrgcc.common.outputfiles.srec>True</avrgcc.common.outputfiles.srec>\r
+ <avrgcc.common.outputfiles.usersignatures>False</avrgcc.common.outputfiles.usersignatures>\r
+ <avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>True</avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>\r
+ <avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>True</avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>\r
+ <avrgcc.compiler.directories.IncludePaths>\r
+ <ListValues>\r
+ <Value>%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.68\include</Value>\r
+ </ListValues>\r
+ </avrgcc.compiler.directories.IncludePaths>\r
+ <avrgcc.compiler.optimization.level>Optimize (-O1)</avrgcc.compiler.optimization.level>\r
+ <avrgcc.compiler.optimization.PackStructureMembers>True</avrgcc.compiler.optimization.PackStructureMembers>\r
+ <avrgcc.compiler.optimization.AllocateBytesNeededForEnum>True</avrgcc.compiler.optimization.AllocateBytesNeededForEnum>\r
+ <avrgcc.compiler.warnings.AllWarnings>True</avrgcc.compiler.warnings.AllWarnings>\r
+ <avrgcc.linker.libraries.Libraries>\r
+ <ListValues>\r
+ <Value>libm</Value>\r
+ </ListValues>\r
+ </avrgcc.linker.libraries.Libraries>\r
+ <avrgcc.assembler.debugging.DebugLevel>Default (-Wa,-g)</avrgcc.assembler.debugging.DebugLevel>\r
+</AvrGcc>\r
+ </ToolchainSettings>\r
+ </PropertyGroup>\r
+ <PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">\r
+ <ToolchainSettings>\r
+ <AvrGcc>\r
+ <avrgcc.common.Device>-mmcu=attiny84a -B "%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.68\gcc\dev\attiny84a"</avrgcc.common.Device>\r
+ <avrgcc.common.outputfiles.hex>True</avrgcc.common.outputfiles.hex>\r
+ <avrgcc.common.outputfiles.lss>True</avrgcc.common.outputfiles.lss>\r
+ <avrgcc.common.outputfiles.eep>True</avrgcc.common.outputfiles.eep>\r
+ <avrgcc.common.outputfiles.srec>True</avrgcc.common.outputfiles.srec>\r
+ <avrgcc.common.outputfiles.usersignatures>False</avrgcc.common.outputfiles.usersignatures>\r
+ <avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>True</avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>\r
+ <avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>True</avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>\r
+ <avrgcc.compiler.symbols.DefSymbols>\r
+ <ListValues>\r
+ <Value>DEBUG</Value>\r
+ </ListValues>\r
+ </avrgcc.compiler.symbols.DefSymbols>\r
+ <avrgcc.compiler.preprocessor.UndefSymbols>\r
+ <ListValues>\r
+ <Value>_CHANGEABLE_ID_</Value>\r
+ </ListValues>\r
+ </avrgcc.compiler.preprocessor.UndefSymbols>\r
+ <avrgcc.compiler.directories.IncludePaths>\r
+ <ListValues>\r
+ <Value>%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.68\include</Value>\r
+ </ListValues>\r
+ </avrgcc.compiler.directories.IncludePaths>\r
+ <avrgcc.compiler.optimization.level>Optimize (-O1)</avrgcc.compiler.optimization.level>\r
+ <avrgcc.compiler.optimization.PackStructureMembers>True</avrgcc.compiler.optimization.PackStructureMembers>\r
+ <avrgcc.compiler.optimization.AllocateBytesNeededForEnum>True</avrgcc.compiler.optimization.AllocateBytesNeededForEnum>\r
+ <avrgcc.compiler.optimization.DebugLevel>Default (-g2)</avrgcc.compiler.optimization.DebugLevel>\r
+ <avrgcc.compiler.warnings.AllWarnings>True</avrgcc.compiler.warnings.AllWarnings>\r
+ <avrgcc.linker.libraries.Libraries>\r
+ <ListValues>\r
+ <Value>libm</Value>\r
+ </ListValues>\r
+ </avrgcc.linker.libraries.Libraries>\r
+ <avrgcc.assembler.general.AssemblerFlags>-U_CHANGEABLE_ID_</avrgcc.assembler.general.AssemblerFlags>\r
+ <avrgcc.assembler.debugging.DebugLevel>Default (-Wa,-g)</avrgcc.assembler.debugging.DebugLevel>\r
+</AvrGcc>\r
+ </ToolchainSettings>\r
+ </PropertyGroup>\r
+ <ItemGroup>\r
+ <Compile Include="..\common\I2C\MAX44009.c">\r
+ <SubType>compile</SubType>\r
+ <Link>MAX44009.c</Link>\r
+ </Compile>\r
+ <Compile Include="..\common\I2C\SHT2xV2.c">\r
+ <SubType>compile</SubType>\r
+ <Link>SHT2xV2.c</Link>\r
+ </Compile>\r
+ <Compile Include="..\common\I2C\TWI_Master.c">\r
+ <SubType>compile</SubType>\r
+ <Link>TWI_Master.c</Link>\r
+ </Compile>\r
+ <Compile Include="..\common\OWDS2438_DS2438.S">\r
+ <SubType>compile</SubType>\r
+ <Link>OWDS2438_DS2438.S</Link>\r
+ </Compile>\r
+ <Compile Include="DS2438_DS2438.c">\r
+ <SubType>compile</SubType>\r
+ </Compile>\r
+ </ItemGroup>\r
+ <Import Project="$(AVRSTUDIO_EXE_PATH)\\Vs\\Compiler.targets" />\r
+</Project>
\ No newline at end of file
--- /dev/null
+// Copyright (c) 2017, Tobias Mueller tm(at)tm3d.de\r
+// All rights reserved.\r
+//\r
+// Redistribution and use in source and binary forms, with or without\r
+// modification, are permitted provided that the following conditions are\r
+// met:\r
+//\r
+// * Redistributions of source code must retain the above copyright\r
+// notice, this list of conditions and the following disclaimer.\r
+// * Redistributions in binary form must reproduce the above copyright\r
+// notice, this list of conditions and the following disclaimer in the\r
+// documentation and/or other materials provided with the\r
+// distribution.\r
+// * All advertising materials mentioning features or use of this\r
+// software must display the following acknowledgement: This product\r
+// includes software developed by tm3d.de and its contributors.\r
+// * Neither the name of tm3d.de nor the names of its contributors may\r
+// be used to endorse or promote products derived from this software\r
+// without specific prior written permission.\r
+//\r
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\r
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\r
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\r
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\r
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\r
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\r
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\r
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\r
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+\r
+//!!!!!Max Program size 7551 Byte\r
+\r
+#define F_CPU 8000000UL\r
+#include <avr/io.h>\r
+#include <avr/interrupt.h>\r
+#include <util/delay.h> \r
+#include <avr/wdt.h>\r
+#include <avr/sleep.h>\r
+#include <avr/pgmspace.h>\r
+#include "../common/I2C/USI_TWI_Master.h"\r
+#include "../common/I2C/SHT2xV2.h"\r
+#include "../common/calibr.h"\r
+#include "../common/I2C/BMP280.h"\r
+#include "../common/I2C/MAX44009.h"\r
+#include "../common/owSlave_tools.h"\r
+\r
+\r
+OWST_EXTERN_VARS\r
+\r
+\r
+\r
+volatile uint8_t owid1[8]={0x26, 0x01, 0x01, 0x01, 0x00, 0x00, 0x03, 0xF6};/**/\r
+volatile uint8_t owid2[8]={0x26, 0x02, 0x01, 0x01, 0x00, 0x00, 0x03, 0xAF};/**/\r
+volatile uint8_t config_info1[26]={0x01,0x06, 0x05,0x08, 4,7, 0x00,0x00, 0x02,7,0x00,7,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; \r
+volatile uint8_t config_info2[26]={3,4, 0x05,0x08, 2,20, 0,0 , 0x02,15,0x00,14,0,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; \r
+ \r
+\r
+\r
+typedef union {\r
+ volatile uint8_t bytes[64];\r
+ struct {\r
+ uint8_t status; //1\r
+ int16_t temp; //2\r
+ uint16_t voltage; //4\r
+ int16_t current; //6\r
+ uint8_t threshold; //8\r
+ uint8_t page1[8]; //9\r
+ uint8_t page2[8]; //17\r
+ \r
+ uint8_t page3[8]; //25\r
+ \r
+ uint8_t page4[8]; //33\r
+ uint8_t page5[8]; //41\r
+ uint8_t page6[8]; //49\r
+ uint8_t page7[8]; //57\r
+ \r
+ };\r
+} pack1_t;\r
+volatile pack1_t pack1;\r
+\r
+\r
+\r
+\r
+typedef union {\r
+ volatile uint8_t bytes[64];\r
+ struct {\r
+ uint8_t status; //1\r
+ int16_t temp; //2\r
+ uint16_t voltage; //4\r
+ int16_t current; //6\r
+ uint8_t threshold; //8\r
+ \r
+ uint8_t page1[8]; //9\r
+ \r
+ uint8_t page2[8]; //17\r
+ uint8_t page3[8]; //25\r
+ \r
+ uint8_t page4[8]; //33\r
+ uint8_t page5[8]; //41\r
+ uint8_t page6[8]; //25\r
+ uint8_t page7[8]; //57\r
+ \r
+ };\r
+} pack2_t;\r
+volatile pack2_t pack2;\r
+\r
+OWST_WDT_ISR\r
+OWST_TESTSW\r
+\r
+\r
+\r
+\r
+\r
+volatile int16_t DS2438_1_TEMP;\r
+volatile uint16_t DS2438_1_VAD;\r
+volatile int16_t DS2438_2_TEMP;\r
+volatile uint16_t DS2438_2_VAD;\r
+\r
+\r
+\r
+double temperatureC,humidityRH,hhum;\r
+double l;\r
+uint32_t P;\r
+int32_t t;\r
+uint8_t max_adr=0;\r
+\r
+\r
+int main(void){\r
+ OWST_INIT_USI_ON\r
+ OWINIT();\r
+ OWST_WDR_CONFIG8\r
+ OWST_EN_PULLUP\r
+ \r
+ pack1.page3[0]=0xF1;\r
+ pack2.page3[0]=0xF4;\r
+\r
+\r
+ USI_TWI_Master_Initialise();\r
+ _delay_ms(10);\r
+ bmp280Init();\r
+ _delay_ms(10);\r
+ initSHT2x();\r
+ _delay_ms(100);\r
+ if (checkMAX44009(0)) max_adr=0; else max_adr=1 ;\r
+ gcontrol=1;\r
+ sei();\r
+\r
+ while(1) {\r
+ if (gcontrol) wdcounter=1;\r
+ if (wdcounter>0) { //8s\r
+ getSHT2xHumTemp(&temperatureC,&humidityRH);\r
+ double RH=humidityRH*10.0;\r
+ double TC =temperatureC *10.0;\r
+ if (testSW()) {\r
+ DS2438_1_VAD=RH;\r
+ DS2438_1_TEMP=TC*25.6;\r
+ config_info1[5]=12; //10V = 100%\r
+ }else{\r
+ hhum=(1.0546-0.000216*TC)*(RH);\r
+ //am2302_hum=0.318*hhum +76.0;\r
+ DS2438_1_VAD=0.31*hhum +80;\r
+ DS2438_1_TEMP=TC*25.6;\r
+ config_info1[5]=7;\r
+ }\r
+ wdcounter=0;\r
+ bmp280ConvertInt(&t,&P,1);\r
+ uint16_t Pu=P/50;\r
+ Pu=Pu-1400;\r
+ DS2438_2_VAD=Pu;\r
+ l=MAX44009getlux(max_adr);\r
+ if (l<0.030) l=0.030; //Darf nicht 0 sein. minimum -35°C Sensor minimum 0.045\r
+ //double l=1000;\r
+ l=log(l)*10*16;\r
+ DS2438_2_TEMP=l;\r
+ \r
+ }\r
+ \r
+ if (gcontrol) {\r
+ gcontrol=0;\r
+ }\r
+\r
+ \r
+ OWST_MAIN_END\r
+ }\r
+\r
+\r
+}\r
--- /dev/null
+\r
+Microsoft Visual Studio Solution File, Format Version 12.00\r
+# Atmel Studio Solution File, Format Version 11.00\r
+VisualStudioVersion = 14.0.23107.0\r
+MinimumVisualStudioVersion = 10.0.40219.1\r
+Project("{54F91283-7BC4-4236-8FF9-10F437C3AD48}") = "DS2438_SHT2X_DS2438_BMP280_MAX44009", "DS2438_SHT2X_DS2438_BMP280_MAX44009.cproj", "{7A5672FE-8226-4158-B931-E1F36B9A8858}"\r
+EndProject\r
+Global\r
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution\r
+ Debug|AVR = Debug|AVR\r
+ Release|AVR = Release|AVR\r
+ EndGlobalSection\r
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution\r
+ {7A5672FE-8226-4158-B931-E1F36B9A8858}.Debug|AVR.ActiveCfg = Debug|AVR\r
+ {7A5672FE-8226-4158-B931-E1F36B9A8858}.Debug|AVR.Build.0 = Debug|AVR\r
+ {7A5672FE-8226-4158-B931-E1F36B9A8858}.Release|AVR.ActiveCfg = Release|AVR\r
+ {7A5672FE-8226-4158-B931-E1F36B9A8858}.Release|AVR.Build.0 = Release|AVR\r
+ EndGlobalSection\r
+ GlobalSection(SolutionProperties) = preSolution\r
+ HideSolutionNode = FALSE\r
+ EndGlobalSection\r
+EndGlobal\r
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>\r
+<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
+ <PropertyGroup>\r
+ <SchemaVersion>2.0</SchemaVersion>\r
+ <ProjectVersion>7.0</ProjectVersion>\r
+ <ToolchainName>com.Atmel.AVRGCC8.C</ToolchainName>\r
+ <ProjectGuid>{7a5672fe-8226-4158-b931-e1f36b9a8858}</ProjectGuid>\r
+ <avrdevice>ATtiny84A</avrdevice>\r
+ <avrdeviceseries>none</avrdeviceseries>\r
+ <OutputType>Executable</OutputType>\r
+ <Language>C</Language>\r
+ <OutputFileName>$(MSBuildProjectName)</OutputFileName>\r
+ <OutputFileExtension>.elf</OutputFileExtension>\r
+ <OutputDirectory>$(MSBuildProjectDirectory)\$(Configuration)</OutputDirectory>\r
+ <AssemblyName>DS18B20_DS2438</AssemblyName>\r
+ <Name>DS2438_SHT2X_DS2438_BMP280_MAX44009</Name>\r
+ <RootNamespace>DS18B20_DS2438</RootNamespace>\r
+ <ToolchainFlavour>Native</ToolchainFlavour>\r
+ <KeepTimersRunning>true</KeepTimersRunning>\r
+ <OverrideVtor>false</OverrideVtor>\r
+ <CacheFlash>true</CacheFlash>\r
+ <ProgFlashFromRam>true</ProgFlashFromRam>\r
+ <RamSnippetAddress>0x20000000</RamSnippetAddress>\r
+ <UncachedRange />\r
+ <preserveEEPROM>true</preserveEEPROM>\r
+ <OverrideVtorValue>exception_table</OverrideVtorValue>\r
+ <BootSegment>2</BootSegment>\r
+ <eraseonlaunchrule>1</eraseonlaunchrule>\r
+ <AsfFrameworkConfig>\r
+ <framework-data>\r
+ <options />\r
+ <configurations />\r
+ <files />\r
+ <documentation help="" />\r
+ <offline-documentation help="" />\r
+ <dependencies>\r
+ <content-extension eid="atmel.asf" uuidref="Atmel.ASF" version="3.28.1" />\r
+ </dependencies>\r
+ </framework-data>\r
+ </AsfFrameworkConfig>\r
+ <avrtool>com.atmel.avrdbg.tool.atmelice</avrtool>\r
+ <com_atmel_avrdbg_tool_atmelice>\r
+ <ToolOptions>\r
+ <InterfaceProperties>\r
+ </InterfaceProperties>\r
+ <InterfaceName>debugWIRE</InterfaceName>\r
+ </ToolOptions>\r
+ <ToolType>com.atmel.avrdbg.tool.atmelice</ToolType>\r
+ <ToolNumber>J41800000789</ToolNumber>\r
+ <ToolName>Atmel-ICE</ToolName>\r
+ </com_atmel_avrdbg_tool_atmelice>\r
+ <avrtoolinterface>debugWIRE</avrtoolinterface>\r
+ <com_atmel_avrdbg_tool_simulator>\r
+ <ToolOptions>\r
+ <InterfaceProperties>\r
+ </InterfaceProperties>\r
+ <InterfaceName>\r
+ </InterfaceName>\r
+ </ToolOptions>\r
+ <ToolType>com.atmel.avrdbg.tool.simulator</ToolType>\r
+ <ToolNumber>\r
+ </ToolNumber>\r
+ <ToolName>Simulator</ToolName>\r
+ </com_atmel_avrdbg_tool_simulator>\r
+ <ExternalProgrammingToolCommand />\r
+ <avrtoolserialnumber>J41800000789</avrtoolserialnumber>\r
+ <avrdeviceexpectedsignature>0x1E930C</avrdeviceexpectedsignature>\r
+ </PropertyGroup>\r
+ <PropertyGroup Condition=" '$(Configuration)' == 'Release' ">\r
+ <ToolchainSettings>\r
+ <AvrGcc>\r
+ <avrgcc.common.Device>-mmcu=attiny84a -B "%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.68\gcc\dev\attiny84a"</avrgcc.common.Device>\r
+ <avrgcc.common.outputfiles.hex>True</avrgcc.common.outputfiles.hex>\r
+ <avrgcc.common.outputfiles.lss>True</avrgcc.common.outputfiles.lss>\r
+ <avrgcc.common.outputfiles.eep>True</avrgcc.common.outputfiles.eep>\r
+ <avrgcc.common.outputfiles.srec>True</avrgcc.common.outputfiles.srec>\r
+ <avrgcc.common.outputfiles.usersignatures>False</avrgcc.common.outputfiles.usersignatures>\r
+ <avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>True</avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>\r
+ <avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>True</avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>\r
+ <avrgcc.compiler.directories.IncludePaths>\r
+ <ListValues>\r
+ <Value>%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.68\include</Value>\r
+ </ListValues>\r
+ </avrgcc.compiler.directories.IncludePaths>\r
+ <avrgcc.compiler.optimization.level>Optimize (-O1)</avrgcc.compiler.optimization.level>\r
+ <avrgcc.compiler.optimization.PackStructureMembers>True</avrgcc.compiler.optimization.PackStructureMembers>\r
+ <avrgcc.compiler.optimization.AllocateBytesNeededForEnum>True</avrgcc.compiler.optimization.AllocateBytesNeededForEnum>\r
+ <avrgcc.compiler.warnings.AllWarnings>True</avrgcc.compiler.warnings.AllWarnings>\r
+ <avrgcc.linker.libraries.Libraries>\r
+ <ListValues>\r
+ <Value>libm</Value>\r
+ </ListValues>\r
+ </avrgcc.linker.libraries.Libraries>\r
+ <avrgcc.assembler.debugging.DebugLevel>Default (-Wa,-g)</avrgcc.assembler.debugging.DebugLevel>\r
+ </AvrGcc>\r
+ </ToolchainSettings>\r
+ </PropertyGroup>\r
+ <PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">\r
+ <ToolchainSettings>\r
+ <AvrGcc>\r
+ <avrgcc.common.Device>-mmcu=attiny84a -B "%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.68\gcc\dev\attiny84a"</avrgcc.common.Device>\r
+ <avrgcc.common.outputfiles.hex>True</avrgcc.common.outputfiles.hex>\r
+ <avrgcc.common.outputfiles.lss>True</avrgcc.common.outputfiles.lss>\r
+ <avrgcc.common.outputfiles.eep>True</avrgcc.common.outputfiles.eep>\r
+ <avrgcc.common.outputfiles.srec>True</avrgcc.common.outputfiles.srec>\r
+ <avrgcc.common.outputfiles.usersignatures>False</avrgcc.common.outputfiles.usersignatures>\r
+ <avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>True</avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>\r
+ <avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>True</avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>\r
+ <avrgcc.compiler.symbols.DefSymbols>\r
+ <ListValues>\r
+ <Value>DEBUG</Value>\r
+ </ListValues>\r
+ </avrgcc.compiler.symbols.DefSymbols>\r
+ <avrgcc.compiler.directories.IncludePaths>\r
+ <ListValues>\r
+ <Value>%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.68\include</Value>\r
+ </ListValues>\r
+ </avrgcc.compiler.directories.IncludePaths>\r
+ <avrgcc.compiler.optimization.level>Optimize (-O1)</avrgcc.compiler.optimization.level>\r
+ <avrgcc.compiler.optimization.PackStructureMembers>True</avrgcc.compiler.optimization.PackStructureMembers>\r
+ <avrgcc.compiler.optimization.AllocateBytesNeededForEnum>True</avrgcc.compiler.optimization.AllocateBytesNeededForEnum>\r
+ <avrgcc.compiler.optimization.DebugLevel>Default (-g2)</avrgcc.compiler.optimization.DebugLevel>\r
+ <avrgcc.compiler.warnings.AllWarnings>True</avrgcc.compiler.warnings.AllWarnings>\r
+ <avrgcc.linker.libraries.Libraries>\r
+ <ListValues>\r
+ <Value>libm</Value>\r
+ </ListValues>\r
+ </avrgcc.linker.libraries.Libraries>\r
+ <avrgcc.assembler.debugging.DebugLevel>Default (-Wa,-g)</avrgcc.assembler.debugging.DebugLevel>\r
+ </AvrGcc>\r
+ </ToolchainSettings>\r
+ </PropertyGroup>\r
+ <ItemGroup>\r
+ <Compile Include="..\common\calibr.c">\r
+ <SubType>compile</SubType>\r
+ <Link>calibr.c</Link>\r
+ </Compile>\r
+ <Compile Include="..\common\I2C\BMP280.c">\r
+ <SubType>compile</SubType>\r
+ <Link>BMP280.c</Link>\r
+ </Compile>\r
+ <Compile Include="..\common\I2C\MAX44009.c">\r
+ <SubType>compile</SubType>\r
+ <Link>MAX44009.c</Link>\r
+ </Compile>\r
+ <Compile Include="..\common\I2C\SHT2xV2.c">\r
+ <SubType>compile</SubType>\r
+ <Link>SHT2xV2.c</Link>\r
+ </Compile>\r
+ <Compile Include="..\common\I2C\USI_TWI_Master.c">\r
+ <SubType>compile</SubType>\r
+ <Link>USI_TWI_Master.c</Link>\r
+ </Compile>\r
+ <Compile Include="..\common\OWDS2438_DS2438.S">\r
+ <SubType>compile</SubType>\r
+ <Link>OWDS2438_DS2438.S</Link>\r
+ </Compile>\r
+ <Compile Include="DS2438_DS2438.c">\r
+ <SubType>compile</SubType>\r
+ </Compile>\r
+ </ItemGroup>\r
+ <Import Project="$(AVRSTUDIO_EXE_PATH)\\Vs\\Compiler.targets" />\r
+</Project>
\ No newline at end of file
--- /dev/null
+// Copyright (c) 2018, Tobias Mueller tm(at)tm3d.de\r
+// All rights reserved.\r
+//\r
+// Redistribution and use in source and binary forms, with or without\r
+// modification, are permitted provided that the following conditions are\r
+// met:\r
+//\r
+// * Redistributions of source code must retain the above copyright\r
+// notice, this list of conditions and the following disclaimer.\r
+// * Redistributions in binary form must reproduce the above copyright\r
+// notice, this list of conditions and the following disclaimer in the\r
+// documentation and/or other materials provided with the\r
+// distribution.\r
+// * All advertising materials mentioning features or use of this\r
+// software must display the following acknowledgement: This product\r
+// includes software developed by tm3d.de and its contributors.\r
+// * Neither the name of tm3d.de nor the names of its contributors may\r
+// be used to endorse or promote products derived from this software\r
+// without specific prior written permission.\r
+//\r
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\r
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\r
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\r
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\r
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\r
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\r
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\r
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\r
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+\r
+//!!!!!Max Program size 7551 Byte\r
+\r
+#define F_CPU 8000000UL\r
+#include <avr/io.h>\r
+#include <avr/interrupt.h>\r
+#include <util/delay.h> \r
+#include <avr/wdt.h>\r
+#include <avr/sleep.h>\r
+#include <avr/pgmspace.h>\r
+#include "../common/I2C/USI_TWI_Master.h"\r
+#include "../common/I2C/LPS225HB.h"\r
+#include "../common/I2C/SHT2xV2.h"\r
+#include "../common/calibr.h"\r
+\r
+extern void OWINIT(void);\r
+extern void EXTERN_SLEEP(void);\r
+\r
+\r
+\r
+volatile uint8_t owid1[8]={0x26, 0x3B, 0xDA, 0x84, 0x00, 0x00, 0x03, 0xA2};/**/\r
+volatile uint8_t owid2[8]={0x26, 0x3C, 0xDA, 0x84, 0x00, 0x00, 0x03, 0x27};/**/\r
+volatile uint8_t config_info1[26]={0x02,23, 0x05,0x08, 0x2,20, 0x00,0x00, 0x02,29,0x00,29,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; \r
+volatile uint8_t config_info2[26]={0x01,0x06, 0x05,0x08, 0x04,0x07, 0,0, 0x02,0x07,0x00,0x07,0,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; \r
+ \r
+#if (owid>128) \r
+#error "Variable not correct"\r
+#endif\r
+\r
+extern uint8_t mode;\r
+extern uint8_t gcontrol;\r
+extern uint8_t reset_indicator;\r
+extern uint8_t alarmflag;\r
+volatile uint8_t wdcounter=1;\r
+\r
+\r
+typedef union {\r
+ #if defined(__AVR_ATtiny25__)\r
+ volatile uint8_t bytes[16];\r
+ #else\r
+ volatile uint8_t bytes[64];\r
+ #endif\r
+ struct {\r
+ uint8_t status; //1\r
+ int16_t temp; //2\r
+ uint16_t voltage; //4\r
+ int16_t current; //6\r
+ uint8_t threshold; //8\r
+ union {\r
+ uint8_t page1[8]; //9\r
+ struct {\r
+ uint32_t etm;\r
+ uint8_t ica;\r
+ uint16_t offset;\r
+ uint8_t f1;\r
+ };\r
+ };\r
+ #if defined(__AVR_ATtiny25__)\r
+ #else\r
+ union {\r
+ uint8_t page2[8]; //17\r
+ struct {\r
+ uint32_t dis; \r
+ uint32_t eoc;\r
+ };\r
+ };\r
+ \r
+ uint8_t page3[8]; //25\r
+ \r
+ uint8_t page4[8]; //33\r
+ uint8_t page5[8]; //41\r
+ uint8_t page6[8]; //49\r
+ uint8_t page7[8]; //57\r
+ \r
+ #endif\r
+ };\r
+} pack1_t;\r
+volatile pack1_t pack1;\r
+\r
+\r
+\r
+\r
+typedef union {\r
+ #if defined(__AVR_ATtiny25__)\r
+ volatile uint8_t bytes[16];\r
+ #else\r
+ volatile uint8_t bytes[64];\r
+ #endif\r
+ struct {\r
+ uint8_t status; //1\r
+ int16_t temp; //2\r
+ uint16_t voltage; //4\r
+ int16_t current; //6\r
+ uint8_t threshold; //8\r
+ \r
+ uint8_t page1[8]; //9\r
+ #if defined(__AVR_ATtiny25__)\r
+ #else\r
+ uint8_t page2[8]; //17\r
+ uint8_t page3[8]; //25\r
+ \r
+ uint8_t page4[8]; //33\r
+ uint8_t page5[8]; //41\r
+ uint8_t page6[8]; //49\r
+ uint8_t page7[8]; //57\r
+ \r
+ #endif\r
+ };\r
+} pack2_t;\r
+volatile pack2_t pack2;\r
+\r
+\r
+#if defined(__AVR_ATtiny24__)||defined(__AVR_ATtiny44__) || defined(__AVR_ATtiny84__) || defined(__AVR_ATtiny24A__)||defined(__AVR_ATtiny44A__) || defined(__AVR_ATtiny84A__)\r
+ISR(WATCHDOG_vect) {\r
+#else\r
+ISR(WDT_vect) {\r
+#endif\r
+ wdcounter++;\r
+ if (reset_indicator==1) reset_indicator++;\r
+ else if (reset_indicator==2) mode=0;\r
+}\r
+\r
+\r
+\r
+volatile int16_t DS2438_1_TEMP;\r
+volatile uint16_t DS2438_1_VAD;\r
+volatile int16_t DS2438_2_TEMP;\r
+volatile uint16_t DS2438_2_VAD;\r
+\r
+\r
+uint8_t userRegister[1];\r
+int16_t sRH,sT;\r
+double temperatureC,humidityRH,hhum;\r
+double l;\r
+uint32_t P;\r
+int16_t t;\r
+\r
+int testSW(void) {\r
+ uint8_t r;\r
+ DDRB&=~(1<<PORTB0); //Eingang\r
+ __asm__ __volatile__ ("nop"); \r
+ PORTB|=(1<<PORTB0); //Pullup\r
+ __asm__ __volatile__ ("nop"); \r
+ __asm__ __volatile__ ("nop"); \r
+ __asm__ __volatile__ ("nop"); \r
+ __asm__ __volatile__ ("nop"); \r
+ __asm__ __volatile__ ("nop"); \r
+ r=PINB&(1<<PORTB0);\r
+ __asm__ __volatile__ ("nop"); \r
+ PORTB&=~(1<<PORTB0); \r
+ __asm__ __volatile__ ("nop"); \r
+ DDRB|=(1<<PORTB0); //Eingang\r
+ return (r==0); //Offen mal HIH4030\r
+ \r
+ \r
+}\r
+\r
+\r
+int main(void){\r
+ PRR|=(1<<PRADC); // adc for save Power\r
+ PORTA=0xFF;\r
+ PORTB=0xFF-(1<<PORTB0); //Schalter kann gegen Masse sein und zieht dann immer Strom\r
+ DDRB|=(1<<PORTB0); //Als Ausgang und 0\r
+ OWINIT();\r
+ DDRB|=(1<<PINB1);//Ausgang und 1\r
+ DDRA|=(1<<PINA0);\r
+ \r
+ WDTCSR |= ((1<<WDCE) ); // Enable the WD Change Bit//| (1<<WDE)\r
+ WDTCSR |= (1<<WDIE) | // Enable WDT Interrupt\r
+ (1<<WDP3) | (1<<WDP0); // Set Timeout to ~8 seconds\r
+ \r
+ MCUSR=0;\r
+\r
+ pack2.page3[0]=0xF1; //Luftfeuchte\r
+ pack1.page3[0]=0xF4; //Spannung\r
+\r
+\r
+ if (testSW()) {\r
+ config_info2[5]=12;\r
+ }else{\r
+ config_info2[5]=7;\r
+ }\r
+\r
+ USI_TWI_Master_Initialise();\r
+ initSHT2x();\r
+ _delay_ms(10);\r
+ LPS225HB_Init();\r
+ gcontrol=1;\r
+ sei();\r
+ while(1) {\r
+ if (gcontrol) {\r
+ //wdcounter=3;\r
+ gcontrol=0;\r
+ \r
+ }\r
+ if (wdcounter>3) { \r
+ getSHT2xHumTemp(&temperatureC,&humidityRH);\r
+ double RH=calibr_hum(temperatureC,-0.2,humidityRH)*10.0;\r
+ double TC =temperatureC *10.0-2;\r
+\r
+\r
+ if (testSW()) {\r
+ DS2438_2_VAD=RH;\r
+ DS2438_2_TEMP=TC*25.6;\r
+ \r
+ config_info2[5]=12; //10V = 100%\r
+ }else{\r
+ hhum=(1.0546-0.000216*TC)*(RH);\r
+ //am2302_hum=0.318*hhum +76.0;\r
+ DS2438_2_VAD=0.31*hhum +80;\r
+ DS2438_2_TEMP=TC*25.6;\r
+ config_info2[5]=7;\r
+ }\r
+ //DS2438_1_TEMP=DS2438_2_TEMP;\r
+\r
+ LPS225HB_Readi(&t,&P) ;\r
+ P=P-700*(uint32_t)(4096);\r
+ P=((double)P/102.4);\r
+ //cli();pack.A=ADC;sei();\r
+ //cli();DS2438_1_TEMP=P;sei();\r
+ DS2438_1_TEMP=P;\r
+ P=P/20;\r
+ DS2438_1_VAD=P;\r
+\r
+ // gcontrol=1;\r
+ wdcounter=0;\r
+ \r
+ }\r
+ \r
+ \r
+\r
+ \r
+#if defined(__AVR_ATtiny25__)||defined(__AVR_ATtiny45__) || defined(__AVR_ATtiny85__)\r
+ if (((TIMSK & (1<<TOIE0))==0)&& (mode==0))\r
+#endif \r
+#if defined(__AVR_ATtiny24__)||defined(__AVR_ATtiny44__) || defined(__AVR_ATtiny84__) ||defined(__AVR_ATtiny24A__)||defined(__AVR_ATtiny44A__) || defined(__AVR_ATtiny84A__)\r
+ if (((TIMSK0 & (1<<TOIE0))==0)&& (mode==0))\r
+#endif\r
+ {\r
+\r
+ MCUCR|=(1<<SE)|(1<<SM1);\r
+ MCUCR&=~(1<<ISC01);\r
+ } else {\r
+ MCUCR|=(1<<SE);\r
+ MCUCR&=~(1<<SM1);\r
+ }\r
+ asm("SLEEP");\r
+ }\r
+\r
+\r
+}\r
--- /dev/null
+\r
+Microsoft Visual Studio Solution File, Format Version 12.00\r
+# Atmel Studio Solution File, Format Version 11.00\r
+VisualStudioVersion = 14.0.23107.0\r
+MinimumVisualStudioVersion = 10.0.40219.1\r
+Project("{54F91283-7BC4-4236-8FF9-10F437C3AD48}") = "DS2438_SHT2X_DS2438_LPS225HB", "DS2438_SHT2X_DS2438_LPS225HB.cproj", "{7A5672FE-8226-4158-B931-E1F36B9A8858}"\r
+EndProject\r
+Global\r
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution\r
+ Debug|AVR = Debug|AVR\r
+ Release|AVR = Release|AVR\r
+ EndGlobalSection\r
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution\r
+ {7A5672FE-8226-4158-B931-E1F36B9A8858}.Debug|AVR.ActiveCfg = Debug|AVR\r
+ {7A5672FE-8226-4158-B931-E1F36B9A8858}.Debug|AVR.Build.0 = Debug|AVR\r
+ {7A5672FE-8226-4158-B931-E1F36B9A8858}.Release|AVR.ActiveCfg = Release|AVR\r
+ {7A5672FE-8226-4158-B931-E1F36B9A8858}.Release|AVR.Build.0 = Release|AVR\r
+ EndGlobalSection\r
+ GlobalSection(SolutionProperties) = preSolution\r
+ HideSolutionNode = FALSE\r
+ EndGlobalSection\r
+EndGlobal\r
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>\r
+<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
+ <PropertyGroup>\r
+ <SchemaVersion>2.0</SchemaVersion>\r
+ <ProjectVersion>7.0</ProjectVersion>\r
+ <ToolchainName>com.Atmel.AVRGCC8.C</ToolchainName>\r
+ <ProjectGuid>{7a5672fe-8226-4158-b931-e1f36b9a8858}</ProjectGuid>\r
+ <avrdevice>ATtiny84A</avrdevice>\r
+ <avrdeviceseries>none</avrdeviceseries>\r
+ <OutputType>Executable</OutputType>\r
+ <Language>C</Language>\r
+ <OutputFileName>$(MSBuildProjectName)</OutputFileName>\r
+ <OutputFileExtension>.elf</OutputFileExtension>\r
+ <OutputDirectory>$(MSBuildProjectDirectory)\$(Configuration)</OutputDirectory>\r
+ <AssemblyName>DS18B20_DS2438</AssemblyName>\r
+ <Name>DS2438_SHT2X_DS2438_LPS225HB</Name>\r
+ <RootNamespace>DS18B20_DS2438</RootNamespace>\r
+ <ToolchainFlavour>Native</ToolchainFlavour>\r
+ <KeepTimersRunning>true</KeepTimersRunning>\r
+ <OverrideVtor>false</OverrideVtor>\r
+ <CacheFlash>true</CacheFlash>\r
+ <ProgFlashFromRam>true</ProgFlashFromRam>\r
+ <RamSnippetAddress>0x20000000</RamSnippetAddress>\r
+ <UncachedRange />\r
+ <preserveEEPROM>true</preserveEEPROM>\r
+ <OverrideVtorValue>exception_table</OverrideVtorValue>\r
+ <BootSegment>2</BootSegment>\r
+ <eraseonlaunchrule>1</eraseonlaunchrule>\r
+ <AsfFrameworkConfig>\r
+ <framework-data>\r
+ <options />\r
+ <configurations />\r
+ <files />\r
+ <documentation help="" />\r
+ <offline-documentation help="" />\r
+ <dependencies>\r
+ <content-extension eid="atmel.asf" uuidref="Atmel.ASF" version="3.28.1" />\r
+ </dependencies>\r
+ </framework-data>\r
+ </AsfFrameworkConfig>\r
+ <avrtool>com.atmel.avrdbg.tool.atmelice</avrtool>\r
+ <com_atmel_avrdbg_tool_atmelice>\r
+ <ToolOptions>\r
+ <InterfaceProperties>\r
+ </InterfaceProperties>\r
+ <InterfaceName>debugWIRE</InterfaceName>\r
+ </ToolOptions>\r
+ <ToolType>com.atmel.avrdbg.tool.atmelice</ToolType>\r
+ <ToolNumber>J41800000789</ToolNumber>\r
+ <ToolName>Atmel-ICE</ToolName>\r
+ </com_atmel_avrdbg_tool_atmelice>\r
+ <avrtoolinterface>debugWIRE</avrtoolinterface>\r
+ <com_atmel_avrdbg_tool_simulator>\r
+ <ToolOptions>\r
+ <InterfaceProperties>\r
+ </InterfaceProperties>\r
+ <InterfaceName>\r
+ </InterfaceName>\r
+ </ToolOptions>\r
+ <ToolType>com.atmel.avrdbg.tool.simulator</ToolType>\r
+ <ToolNumber>\r
+ </ToolNumber>\r
+ <ToolName>Simulator</ToolName>\r
+ </com_atmel_avrdbg_tool_simulator>\r
+ <ExternalProgrammingToolCommand />\r
+ <avrtoolserialnumber>J41800000789</avrtoolserialnumber>\r
+ <avrdeviceexpectedsignature>0x1E930C</avrdeviceexpectedsignature>\r
+ </PropertyGroup>\r
+ <PropertyGroup Condition=" '$(Configuration)' == 'Release' ">\r
+ <ToolchainSettings>\r
+ <AvrGcc>\r
+ <avrgcc.common.Device>-mmcu=attiny84a -B "%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.68\gcc\dev\attiny84a"</avrgcc.common.Device>\r
+ <avrgcc.common.outputfiles.hex>True</avrgcc.common.outputfiles.hex>\r
+ <avrgcc.common.outputfiles.lss>True</avrgcc.common.outputfiles.lss>\r
+ <avrgcc.common.outputfiles.eep>True</avrgcc.common.outputfiles.eep>\r
+ <avrgcc.common.outputfiles.srec>True</avrgcc.common.outputfiles.srec>\r
+ <avrgcc.common.outputfiles.usersignatures>False</avrgcc.common.outputfiles.usersignatures>\r
+ <avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>True</avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>\r
+ <avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>True</avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>\r
+ <avrgcc.compiler.directories.IncludePaths>\r
+ <ListValues>\r
+ <Value>%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.68\include</Value>\r
+ </ListValues>\r
+ </avrgcc.compiler.directories.IncludePaths>\r
+ <avrgcc.compiler.optimization.level>Optimize (-O1)</avrgcc.compiler.optimization.level>\r
+ <avrgcc.compiler.optimization.PackStructureMembers>True</avrgcc.compiler.optimization.PackStructureMembers>\r
+ <avrgcc.compiler.optimization.AllocateBytesNeededForEnum>True</avrgcc.compiler.optimization.AllocateBytesNeededForEnum>\r
+ <avrgcc.compiler.warnings.AllWarnings>True</avrgcc.compiler.warnings.AllWarnings>\r
+ <avrgcc.linker.libraries.Libraries>\r
+ <ListValues>\r
+ <Value>libm</Value>\r
+ </ListValues>\r
+ </avrgcc.linker.libraries.Libraries>\r
+ <avrgcc.assembler.debugging.DebugLevel>Default (-Wa,-g)</avrgcc.assembler.debugging.DebugLevel>\r
+ </AvrGcc>\r
+ </ToolchainSettings>\r
+ </PropertyGroup>\r
+ <PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">\r
+ <ToolchainSettings>\r
+ <AvrGcc>\r
+ <avrgcc.common.Device>-mmcu=attiny84a -B "%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.68\gcc\dev\attiny84a"</avrgcc.common.Device>\r
+ <avrgcc.common.outputfiles.hex>True</avrgcc.common.outputfiles.hex>\r
+ <avrgcc.common.outputfiles.lss>True</avrgcc.common.outputfiles.lss>\r
+ <avrgcc.common.outputfiles.eep>True</avrgcc.common.outputfiles.eep>\r
+ <avrgcc.common.outputfiles.srec>True</avrgcc.common.outputfiles.srec>\r
+ <avrgcc.common.outputfiles.usersignatures>False</avrgcc.common.outputfiles.usersignatures>\r
+ <avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>True</avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>\r
+ <avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>True</avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>\r
+ <avrgcc.compiler.symbols.DefSymbols>\r
+ <ListValues>\r
+ <Value>DEBUG</Value>\r
+ </ListValues>\r
+ </avrgcc.compiler.symbols.DefSymbols>\r
+ <avrgcc.compiler.directories.IncludePaths>\r
+ <ListValues>\r
+ <Value>%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.68\include</Value>\r
+ </ListValues>\r
+ </avrgcc.compiler.directories.IncludePaths>\r
+ <avrgcc.compiler.optimization.level>Optimize (-O1)</avrgcc.compiler.optimization.level>\r
+ <avrgcc.compiler.optimization.PackStructureMembers>True</avrgcc.compiler.optimization.PackStructureMembers>\r
+ <avrgcc.compiler.optimization.AllocateBytesNeededForEnum>True</avrgcc.compiler.optimization.AllocateBytesNeededForEnum>\r
+ <avrgcc.compiler.optimization.DebugLevel>Default (-g2)</avrgcc.compiler.optimization.DebugLevel>\r
+ <avrgcc.compiler.warnings.AllWarnings>True</avrgcc.compiler.warnings.AllWarnings>\r
+ <avrgcc.linker.libraries.Libraries>\r
+ <ListValues>\r
+ <Value>libm</Value>\r
+ </ListValues>\r
+ </avrgcc.linker.libraries.Libraries>\r
+ <avrgcc.assembler.debugging.DebugLevel>Default (-Wa,-g)</avrgcc.assembler.debugging.DebugLevel>\r
+ </AvrGcc>\r
+ </ToolchainSettings>\r
+ </PropertyGroup>\r
+ <ItemGroup>\r
+ <Compile Include="..\common\calibr.c">\r
+ <SubType>compile</SubType>\r
+ <Link>calibr.c</Link>\r
+ </Compile>\r
+ <Compile Include="..\common\I2C\LPS225HB.c">\r
+ <SubType>compile</SubType>\r
+ <Link>LPS225HB.c</Link>\r
+ </Compile>\r
+ <Compile Include="..\common\I2C\SHT2xV2.c">\r
+ <SubType>compile</SubType>\r
+ <Link>SHT2xV2.c</Link>\r
+ </Compile>\r
+ <Compile Include="..\common\I2C\USI_TWI_Master.c">\r
+ <SubType>compile</SubType>\r
+ <Link>USI_TWI_Master.c</Link>\r
+ </Compile>\r
+ <Compile Include="..\common\OWDS2438_DS2438.S">\r
+ <SubType>compile</SubType>\r
+ <Link>OWDS2438_DS2438.S</Link>\r
+ </Compile>\r
+ <Compile Include="DS2438_DS2438.c">\r
+ <SubType>compile</SubType>\r
+ </Compile>\r
+ </ItemGroup>\r
+ <Import Project="$(AVRSTUDIO_EXE_PATH)\\Vs\\Compiler.targets" />\r
+</Project>
\ No newline at end of file
MCUSR=0;\r
USI_TWI_Master_Initialise();\r
\r
- \r
+ pack.page3[0]=0xF1;\r
+\r
\r
initSHT3x(0);\r
_delay_ms(100);\r
\r
if (((TIMSK0 & (1<<TOIE0))==0)&& (mode==0)) {\r
MCUCR|=(1<<SE)|(1<<SM1);\r
+ \r
MCUCR&=~(1<<ISC01);\r
} else {\r
MCUCR|=(1<<SE);\r
<preserveEEPROM>true</preserveEEPROM>\r
<OverrideVtorValue>exception_table</OverrideVtorValue>\r
<BootSegment>2</BootSegment>\r
- <eraseonlaunchrule>1</eraseonlaunchrule>\r
+ <eraseonlaunchrule>0</eraseonlaunchrule>\r
<AsfFrameworkConfig>\r
<framework-data>\r
<options />\r
<com_atmel_avrdbg_tool_atmelice>\r
<ToolOptions>\r
<InterfaceProperties>\r
+ <IspClock>125000</IspClock>\r
</InterfaceProperties>\r
- <InterfaceName>debugWIRE</InterfaceName>\r
+ <InterfaceName>ISP</InterfaceName>\r
</ToolOptions>\r
<ToolType>com.atmel.avrdbg.tool.atmelice</ToolType>\r
<ToolNumber>J41800000789</ToolNumber>\r
<ToolName>Atmel-ICE</ToolName>\r
</com_atmel_avrdbg_tool_atmelice>\r
- <avrtoolinterface>debugWIRE</avrtoolinterface>\r
+ <avrtoolinterface>ISP</avrtoolinterface>\r
<ExternalProgrammingToolCommand />\r
<avrtoolserialnumber>J41800000789</avrtoolserialnumber>\r
<avrdeviceexpectedsignature>0x1E930C</avrdeviceexpectedsignature>\r
+ <avrtoolinterfaceclock>125000</avrtoolinterfaceclock>\r
</PropertyGroup>\r
<PropertyGroup Condition=" '$(Configuration)' == 'Release' ">\r
<ToolchainSettings>\r
<AvrGcc>\r
- <avrgcc.common.Device>-mmcu=attiny84a -B "%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.68\gcc\dev\attiny84a"</avrgcc.common.Device>\r
- <avrgcc.common.outputfiles.hex>True</avrgcc.common.outputfiles.hex>\r
- <avrgcc.common.outputfiles.lss>True</avrgcc.common.outputfiles.lss>\r
- <avrgcc.common.outputfiles.eep>True</avrgcc.common.outputfiles.eep>\r
- <avrgcc.common.outputfiles.srec>True</avrgcc.common.outputfiles.srec>\r
- <avrgcc.common.outputfiles.usersignatures>False</avrgcc.common.outputfiles.usersignatures>\r
- <avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>True</avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>\r
- <avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>True</avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>\r
- <avrgcc.compiler.symbols.DefSymbols>\r
- <ListValues>\r
- <Value>__4MHZ__</Value>\r
- </ListValues>\r
- </avrgcc.compiler.symbols.DefSymbols>\r
- <avrgcc.compiler.directories.IncludePaths>\r
- <ListValues>\r
- <Value>%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.68\include</Value>\r
- </ListValues>\r
- </avrgcc.compiler.directories.IncludePaths>\r
- <avrgcc.compiler.optimization.level>Optimize (-O1)</avrgcc.compiler.optimization.level>\r
- <avrgcc.compiler.optimization.PackStructureMembers>True</avrgcc.compiler.optimization.PackStructureMembers>\r
- <avrgcc.compiler.optimization.AllocateBytesNeededForEnum>True</avrgcc.compiler.optimization.AllocateBytesNeededForEnum>\r
- <avrgcc.compiler.optimization.DebugLevel>Default (-g2)</avrgcc.compiler.optimization.DebugLevel>\r
- <avrgcc.compiler.warnings.AllWarnings>True</avrgcc.compiler.warnings.AllWarnings>\r
- <avrgcc.linker.libraries.Libraries>\r
- <ListValues>\r
- <Value>libm</Value>\r
- </ListValues>\r
- </avrgcc.linker.libraries.Libraries>\r
- <avrgcc.assembler.debugging.DebugLevel>Default (-Wa,-g)</avrgcc.assembler.debugging.DebugLevel>\r
-</AvrGcc>\r
+ <avrgcc.common.Device>-mmcu=attiny84a -B "%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.68\gcc\dev\attiny84a"</avrgcc.common.Device>\r
+ <avrgcc.common.outputfiles.hex>True</avrgcc.common.outputfiles.hex>\r
+ <avrgcc.common.outputfiles.lss>True</avrgcc.common.outputfiles.lss>\r
+ <avrgcc.common.outputfiles.eep>True</avrgcc.common.outputfiles.eep>\r
+ <avrgcc.common.outputfiles.srec>True</avrgcc.common.outputfiles.srec>\r
+ <avrgcc.common.outputfiles.usersignatures>False</avrgcc.common.outputfiles.usersignatures>\r
+ <avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>True</avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>\r
+ <avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>True</avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>\r
+ <avrgcc.compiler.symbols.DefSymbols>\r
+ <ListValues>\r
+ <Value>__4MHZ__</Value>\r
+ </ListValues>\r
+ </avrgcc.compiler.symbols.DefSymbols>\r
+ <avrgcc.compiler.directories.IncludePaths>\r
+ <ListValues>\r
+ <Value>%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.68\include</Value>\r
+ </ListValues>\r
+ </avrgcc.compiler.directories.IncludePaths>\r
+ <avrgcc.compiler.optimization.level>Optimize (-O1)</avrgcc.compiler.optimization.level>\r
+ <avrgcc.compiler.optimization.PackStructureMembers>True</avrgcc.compiler.optimization.PackStructureMembers>\r
+ <avrgcc.compiler.optimization.AllocateBytesNeededForEnum>True</avrgcc.compiler.optimization.AllocateBytesNeededForEnum>\r
+ <avrgcc.compiler.optimization.DebugLevel>Default (-g2)</avrgcc.compiler.optimization.DebugLevel>\r
+ <avrgcc.compiler.warnings.AllWarnings>True</avrgcc.compiler.warnings.AllWarnings>\r
+ <avrgcc.linker.libraries.Libraries>\r
+ <ListValues>\r
+ <Value>libm</Value>\r
+ </ListValues>\r
+ </avrgcc.linker.libraries.Libraries>\r
+ <avrgcc.assembler.debugging.DebugLevel>Default (-Wa,-g)</avrgcc.assembler.debugging.DebugLevel>\r
+ </AvrGcc>\r
</ToolchainSettings>\r
</PropertyGroup>\r
<PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">\r
<ToolchainSettings>\r
<AvrGcc>\r
- <avrgcc.common.Device>-mmcu=attiny84a -B "%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.68\gcc\dev\attiny84a"</avrgcc.common.Device>\r
- <avrgcc.common.outputfiles.hex>True</avrgcc.common.outputfiles.hex>\r
- <avrgcc.common.outputfiles.lss>True</avrgcc.common.outputfiles.lss>\r
- <avrgcc.common.outputfiles.eep>True</avrgcc.common.outputfiles.eep>\r
- <avrgcc.common.outputfiles.srec>True</avrgcc.common.outputfiles.srec>\r
- <avrgcc.common.outputfiles.usersignatures>False</avrgcc.common.outputfiles.usersignatures>\r
- <avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>True</avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>\r
- <avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>True</avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>\r
- <avrgcc.compiler.symbols.DefSymbols>\r
- <ListValues>\r
- <Value>DEBUG</Value>\r
- <Value>__4MHZ__</Value>\r
- </ListValues>\r
- </avrgcc.compiler.symbols.DefSymbols>\r
- <avrgcc.compiler.directories.IncludePaths>\r
- <ListValues>\r
- <Value>%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.68\include</Value>\r
- </ListValues>\r
- </avrgcc.compiler.directories.IncludePaths>\r
- <avrgcc.compiler.optimization.level>Optimize (-O1)</avrgcc.compiler.optimization.level>\r
- <avrgcc.compiler.optimization.PackStructureMembers>True</avrgcc.compiler.optimization.PackStructureMembers>\r
- <avrgcc.compiler.optimization.AllocateBytesNeededForEnum>True</avrgcc.compiler.optimization.AllocateBytesNeededForEnum>\r
- <avrgcc.compiler.optimization.DebugLevel>Default (-g2)</avrgcc.compiler.optimization.DebugLevel>\r
- <avrgcc.compiler.warnings.AllWarnings>True</avrgcc.compiler.warnings.AllWarnings>\r
- <avrgcc.linker.libraries.Libraries>\r
- <ListValues>\r
- <Value>libm</Value>\r
- </ListValues>\r
- </avrgcc.linker.libraries.Libraries>\r
- <avrgcc.assembler.debugging.DebugLevel>Default (-Wa,-g)</avrgcc.assembler.debugging.DebugLevel>\r
-</AvrGcc>\r
+ <avrgcc.common.Device>-mmcu=attiny84a -B "%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.68\gcc\dev\attiny84a"</avrgcc.common.Device>\r
+ <avrgcc.common.outputfiles.hex>True</avrgcc.common.outputfiles.hex>\r
+ <avrgcc.common.outputfiles.lss>True</avrgcc.common.outputfiles.lss>\r
+ <avrgcc.common.outputfiles.eep>True</avrgcc.common.outputfiles.eep>\r
+ <avrgcc.common.outputfiles.srec>True</avrgcc.common.outputfiles.srec>\r
+ <avrgcc.common.outputfiles.usersignatures>False</avrgcc.common.outputfiles.usersignatures>\r
+ <avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>True</avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>\r
+ <avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>True</avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>\r
+ <avrgcc.compiler.symbols.DefSymbols>\r
+ <ListValues>\r
+ <Value>DEBUG</Value>\r
+ <Value>__4MHZ__</Value>\r
+ </ListValues>\r
+ </avrgcc.compiler.symbols.DefSymbols>\r
+ <avrgcc.compiler.directories.IncludePaths>\r
+ <ListValues>\r
+ <Value>%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.68\include</Value>\r
+ </ListValues>\r
+ </avrgcc.compiler.directories.IncludePaths>\r
+ <avrgcc.compiler.optimization.level>Optimize (-O1)</avrgcc.compiler.optimization.level>\r
+ <avrgcc.compiler.optimization.PackStructureMembers>True</avrgcc.compiler.optimization.PackStructureMembers>\r
+ <avrgcc.compiler.optimization.AllocateBytesNeededForEnum>True</avrgcc.compiler.optimization.AllocateBytesNeededForEnum>\r
+ <avrgcc.compiler.optimization.DebugLevel>Default (-g2)</avrgcc.compiler.optimization.DebugLevel>\r
+ <avrgcc.compiler.warnings.AllWarnings>True</avrgcc.compiler.warnings.AllWarnings>\r
+ <avrgcc.linker.libraries.Libraries>\r
+ <ListValues>\r
+ <Value>libm</Value>\r
+ </ListValues>\r
+ </avrgcc.linker.libraries.Libraries>\r
+ <avrgcc.assembler.debugging.DebugLevel>Default (-Wa,-g)</avrgcc.assembler.debugging.DebugLevel>\r
+ </AvrGcc>\r
</ToolchainSettings>\r
</PropertyGroup>\r
<ItemGroup>\r
#include <avr/wdt.h>\r
#include <avr/sleep.h>\r
#include <avr/pgmspace.h>\r
+#include "../common/I2C/TWI_Master.h"\r
\r
extern void OWINIT();\r
extern void EXTERN_SLEEP();\r
#error "Variable not correct"\r
#endif\r
\r
-extern uint8_t mode;\r
+extern volatile uint8_t mode;\r
extern uint8_t gcontrol;\r
extern uint8_t reset_indicator;\r
extern uint8_t alarmflag;\r
\r
\r
+\r
+#if defined(__AVR_ATtiny24__)||defined(__AVR_ATtiny44__) || defined(__AVR_ATtiny84__) || defined(__AVR_ATtiny24A__)||defined(__AVR_ATtiny44A__) || defined(__AVR_ATtiny84A__)\r
+ISR(WATCHDOG_vect) {\r
+ #else\r
+ ISR(WDT_vect) {\r
+ // mode=0;\r
+ #endif\r
+ //wdcounter++;\r
+ if (reset_indicator==1) reset_indicator++;\r
+ else if (reset_indicator==2) mode=0;\r
+ }\r
+\r
+\r
typedef union {\r
volatile uint8_t bytes[0x20];\r
struct {\r
volatile pack_t pack;\r
\r
\r
+#if defined(__AVR_ATtiny24__)||defined(__AVR_ATtiny44__) || defined(__AVR_ATtiny84__)||defined(__AVR_ATtiny24A__)||defined(__AVR_ATtiny44A__) || defined(__AVR_ATtiny84A__)\r
+#define AD_PORT PORTA\r
+#define AD_DDR DDRA\r
+#endif\r
\r
-\r
+#if defined(__AVR_ATmega168__)||defined(__AVR_ATmega168A__) ||defined(__AVR_ATmega328__) ||defined(__AVR_ATmega328P__) ||defined(__AVR_ATmega328PB__) \r
+#define AD_PORT PORTC\r
+#define AD_DDR DDRC\r
+#endif\r
\r
\r
int main(void){\r
pack.HD=0xFF;\r
pack.LD=0x00;\r
pack.VCCP=0;\r
+ MCUCR &=~(1<<PUD); //All Pins Pullup...\r
+ MCUCR |=(1<<BODS);\r
+ MCUSR=0;\r
\r
- PORTA=0xFF;\r
- PORTB=0xFF;\r
\r
- OWINIT();\r
\r
+ OWINIT();\r
+ DDRC=0xFF;\r
+ DDRB=0xFF;\r
+ DDRD=0xFF-(1<<PIND2);\r
+ PORTB=0xFF;\r
+ PORTC=0xFF;\r
+ PORTD=0xFF-(1<<PIND2);\r
+ PRR=0xCF;\r
+ \r
MCUCR &=~(1<<PUD); //All Pins Pullup...\r
- MCUCR |=(1<<BODS);\r
+ //MCUCR |=(1<<BODS);\r
//PORTA&=~((1<<PINA0)|(1<<PINA1)|(1<<PINA2)|(1<<PINA3));\r
\r
- ADCSRA=(1<<ADEN)|(1<ADPS0)|(1<<ADPS2);\r
+ //ADCSRA=(1<<ADEN)|(1<ADPS0)|(1<<ADPS2);\r
\r
\r
- \r
+ WDTCSR |= (1<<WDCE) |(1<<WDE); // Enable the WD Change Bit//| (1<<WDE)\r
+ WDTCSR = (1<<WDIE) | // Enable WDT Interrupt\r
+ (1<<WDP2) | (1<<WDP0); // Set Timeout to ~8 seconds\r
gcontrol=1;\r
ADCSRB|=(1<<ADLAR); \r
sei();\r
}\r
\r
uint8_t bb=1;\r
- for(uint8_t i=0;i<4;i++) {\r
+ for(volatile uint8_t i=0;i<4;i++) {\r
if (pack.bytes[8+i*2]&0x80) { //Chanel as output\r
if (pack.bytes[8+i*2]&0x40) {\r
- DDRA|=bb;\r
+ // AD_DDR|=bb;\r
} else {\r
- DDRA&=~bb;\r
+ cli();\r
+ // AD_DDR&=~bb;\r
+ sei();\r
}\r
} else {\r
- DDRA&=~bb;\r
+ cli();\r
+ // AD_DDR&=~bb;\r
+ sei();\r
}\r
bb=bb*2;\r
}\r
\r
+\r
+#if defined(__AVR_ATmega168__)||defined(__AVR_ATmega168A__) ||defined(__AVR_ATmega328__) ||defined(__AVR_ATmega328P__) ||defined(__AVR_ATmega328PB__) \r
+ if (((TIMSK0 & (1<<TOIE0))==0)&& (mode==0)){\r
+ //if ( mode==0){\r
+ SMCR|=(1<<SE)|(1<<SM1);\r
+ EICRA&=~(1<<ISC01);\r
+ } else {\r
+ SMCR|=(1<<SE);\r
+ SMCR&=~(1<<SM1);\r
+ }\r
+ asm("SLEEP");\r
+#else\r
+\r
#if defined(__AVR_ATtiny25__)||defined(__AVR_ATtiny45__) || defined(__AVR_ATtiny85__)\r
if (((TIMSK & (1<<TOIE0))==0)&& (mode==0))\r
#endif \r
-#if defined(__AVR_ATtiny24__)||defined(__AVR_ATtiny44__) || defined(__AVR_ATtiny84__) ||defined(__AVR_ATtiny24A__)||defined(__AVR_ATtiny44A__) || defined(__AVR_ATtiny84A__)\r
+#if defined(__AVR_ATtiny24__)||defined(__AVR_ATtiny44__) || defined(__AVR_ATtiny84__) ||defined(__AVR_ATtiny24A__)||defined(__AVR_ATtiny44A__) || defined(__AVR_ATtiny84A__) \r
if (((TIMSK0 & (1<<TOIE0))==0)&& (mode==0))\r
#endif\r
{\r
\r
MCUCR|=(1<<SE)|(1<<SM1);\r
+ MCUCR&=~(1<<SM0);\r
MCUCR&=~(1<<ISC01);\r
} else {\r
MCUCR|=(1<<SE);\r
MCUCR&=~(1<<SM1);\r
}\r
- // asm("SLEEP");\r
+ asm("SLEEP");\r
+#endif\r
}\r
\r
\r
<ProjectVersion>7.0</ProjectVersion>\r
<ToolchainName>com.Atmel.AVRGCC8.C</ToolchainName>\r
<ProjectGuid>dce6c7e3-ee26-4d79-826b-08594b9ad897</ProjectGuid>\r
- <avrdevice>ATtiny84A</avrdevice>\r
+ <avrdevice>ATmega328P</avrdevice>\r
<avrdeviceseries>none</avrdeviceseries>\r
<OutputType>Executable</OutputType>\r
<Language>C</Language>\r
<preserveEEPROM>true</preserveEEPROM>\r
<OverrideVtorValue>exception_table</OverrideVtorValue>\r
<BootSegment>2</BootSegment>\r
- <eraseonlaunchrule>1</eraseonlaunchrule>\r
+ <eraseonlaunchrule>0</eraseonlaunchrule>\r
<ExternalProgrammingToolCommand />\r
<AsfFrameworkConfig>\r
<framework-data>\r
</dependencies>\r
</framework-data>\r
</AsfFrameworkConfig>\r
- <avrtool />\r
+ <avrtool>com.atmel.avrdbg.tool.atmelice</avrtool>\r
+ <avrtoolinterface>ISP</avrtoolinterface>\r
+ <avrtoolserialnumber>J41800000789</avrtoolserialnumber>\r
+ <avrdeviceexpectedsignature>0x1E950F</avrdeviceexpectedsignature>\r
+ <com_atmel_avrdbg_tool_atmelice>\r
+ <ToolOptions>\r
+ <InterfaceProperties>\r
+ <IspClock>125000</IspClock>\r
+ </InterfaceProperties>\r
+ <InterfaceName>ISP</InterfaceName>\r
+ </ToolOptions>\r
+ <ToolType>com.atmel.avrdbg.tool.atmelice</ToolType>\r
+ <ToolNumber>J41800000789</ToolNumber>\r
+ <ToolName>Atmel-ICE</ToolName>\r
+ </com_atmel_avrdbg_tool_atmelice>\r
+ <avrtoolinterfaceclock>125000</avrtoolinterfaceclock>\r
</PropertyGroup>\r
<PropertyGroup Condition=" '$(Configuration)' == 'Release' ">\r
<ToolchainSettings>\r
<AvrGcc>\r
- <avrgcc.common.Device>-mmcu=attiny84a -B "%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.79\gcc\dev\attiny84a"</avrgcc.common.Device>\r
- <avrgcc.common.outputfiles.hex>True</avrgcc.common.outputfiles.hex>\r
- <avrgcc.common.outputfiles.lss>True</avrgcc.common.outputfiles.lss>\r
- <avrgcc.common.outputfiles.eep>True</avrgcc.common.outputfiles.eep>\r
- <avrgcc.common.outputfiles.srec>True</avrgcc.common.outputfiles.srec>\r
- <avrgcc.common.outputfiles.usersignatures>False</avrgcc.common.outputfiles.usersignatures>\r
- <avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>True</avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>\r
- <avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>True</avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>\r
- <avrgcc.compiler.symbols.DefSymbols>\r
- <ListValues>\r
- <Value>NDEBUG</Value>\r
- </ListValues>\r
- </avrgcc.compiler.symbols.DefSymbols>\r
- <avrgcc.compiler.directories.IncludePaths>\r
- <ListValues>\r
- <Value>%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.79\include</Value>\r
- </ListValues>\r
- </avrgcc.compiler.directories.IncludePaths>\r
- <avrgcc.compiler.optimization.level>Optimize for size (-Os)</avrgcc.compiler.optimization.level>\r
- <avrgcc.compiler.optimization.PackStructureMembers>True</avrgcc.compiler.optimization.PackStructureMembers>\r
- <avrgcc.compiler.optimization.AllocateBytesNeededForEnum>True</avrgcc.compiler.optimization.AllocateBytesNeededForEnum>\r
- <avrgcc.compiler.warnings.AllWarnings>True</avrgcc.compiler.warnings.AllWarnings>\r
- <avrgcc.linker.libraries.Libraries>\r
- <ListValues>\r
- <Value>libm</Value>\r
- </ListValues>\r
- </avrgcc.linker.libraries.Libraries>\r
- <avrgcc.assembler.general.IncludePaths>\r
- <ListValues>\r
- <Value>%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.79\include</Value>\r
- </ListValues>\r
- </avrgcc.assembler.general.IncludePaths>\r
- </AvrGcc>\r
+ <avrgcc.common.Device>-mmcu=atmega328p -B "%24(PackRepoDir)\atmel\ATmega_DFP\1.1.130\gcc\dev\atmega328p"</avrgcc.common.Device>\r
+ <avrgcc.common.outputfiles.hex>True</avrgcc.common.outputfiles.hex>\r
+ <avrgcc.common.outputfiles.lss>True</avrgcc.common.outputfiles.lss>\r
+ <avrgcc.common.outputfiles.eep>True</avrgcc.common.outputfiles.eep>\r
+ <avrgcc.common.outputfiles.srec>True</avrgcc.common.outputfiles.srec>\r
+ <avrgcc.common.outputfiles.usersignatures>False</avrgcc.common.outputfiles.usersignatures>\r
+ <avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>True</avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>\r
+ <avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>True</avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>\r
+ <avrgcc.compiler.symbols.DefSymbols>\r
+ <ListValues>\r
+ <Value>NDEBUG</Value>\r
+ </ListValues>\r
+ </avrgcc.compiler.symbols.DefSymbols>\r
+ <avrgcc.compiler.directories.IncludePaths>\r
+ <ListValues>\r
+ <Value>%24(PackRepoDir)\atmel\ATmega_DFP\1.1.130\include</Value>\r
+ </ListValues>\r
+ </avrgcc.compiler.directories.IncludePaths>\r
+ <avrgcc.compiler.optimization.level>Optimize for size (-Os)</avrgcc.compiler.optimization.level>\r
+ <avrgcc.compiler.optimization.PackStructureMembers>True</avrgcc.compiler.optimization.PackStructureMembers>\r
+ <avrgcc.compiler.optimization.AllocateBytesNeededForEnum>True</avrgcc.compiler.optimization.AllocateBytesNeededForEnum>\r
+ <avrgcc.compiler.warnings.AllWarnings>True</avrgcc.compiler.warnings.AllWarnings>\r
+ <avrgcc.linker.libraries.Libraries>\r
+ <ListValues>\r
+ <Value>libm</Value>\r
+ </ListValues>\r
+ </avrgcc.linker.libraries.Libraries>\r
+ <avrgcc.assembler.general.IncludePaths>\r
+ <ListValues>\r
+ <Value>%24(PackRepoDir)\atmel\ATmega_DFP\1.1.130\include</Value>\r
+ </ListValues>\r
+ </avrgcc.assembler.general.IncludePaths>\r
+</AvrGcc>\r
</ToolchainSettings>\r
</PropertyGroup>\r
<PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">\r
<ToolchainSettings>\r
<AvrGcc>\r
- <avrgcc.common.Device>-mmcu=attiny84a -B "%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.79\gcc\dev\attiny84a"</avrgcc.common.Device>\r
- <avrgcc.common.outputfiles.hex>True</avrgcc.common.outputfiles.hex>\r
- <avrgcc.common.outputfiles.lss>True</avrgcc.common.outputfiles.lss>\r
- <avrgcc.common.outputfiles.eep>True</avrgcc.common.outputfiles.eep>\r
- <avrgcc.common.outputfiles.srec>True</avrgcc.common.outputfiles.srec>\r
- <avrgcc.common.outputfiles.usersignatures>False</avrgcc.common.outputfiles.usersignatures>\r
- <avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>True</avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>\r
- <avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>True</avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>\r
- <avrgcc.compiler.symbols.DefSymbols>\r
- <ListValues>\r
- <Value>DEBUG</Value>\r
- </ListValues>\r
- </avrgcc.compiler.symbols.DefSymbols>\r
- <avrgcc.compiler.directories.IncludePaths>\r
- <ListValues>\r
- <Value>%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.79\include</Value>\r
- </ListValues>\r
- </avrgcc.compiler.directories.IncludePaths>\r
- <avrgcc.compiler.optimization.level>Optimize (-O1)</avrgcc.compiler.optimization.level>\r
- <avrgcc.compiler.optimization.PackStructureMembers>True</avrgcc.compiler.optimization.PackStructureMembers>\r
- <avrgcc.compiler.optimization.AllocateBytesNeededForEnum>True</avrgcc.compiler.optimization.AllocateBytesNeededForEnum>\r
- <avrgcc.compiler.optimization.DebugLevel>Default (-g2)</avrgcc.compiler.optimization.DebugLevel>\r
- <avrgcc.compiler.warnings.AllWarnings>True</avrgcc.compiler.warnings.AllWarnings>\r
- <avrgcc.linker.libraries.Libraries>\r
- <ListValues>\r
- <Value>libm</Value>\r
- </ListValues>\r
- </avrgcc.linker.libraries.Libraries>\r
- <avrgcc.assembler.general.IncludePaths>\r
- <ListValues>\r
- <Value>%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.79\include</Value>\r
- </ListValues>\r
- </avrgcc.assembler.general.IncludePaths>\r
- <avrgcc.assembler.debugging.DebugLevel>Default (-Wa,-g)</avrgcc.assembler.debugging.DebugLevel>\r
- </AvrGcc>\r
+ <avrgcc.common.Device>-mmcu=atmega328p -B "%24(PackRepoDir)\atmel\ATmega_DFP\1.1.130\gcc\dev\atmega328p"</avrgcc.common.Device>\r
+ <avrgcc.common.outputfiles.hex>True</avrgcc.common.outputfiles.hex>\r
+ <avrgcc.common.outputfiles.lss>True</avrgcc.common.outputfiles.lss>\r
+ <avrgcc.common.outputfiles.eep>True</avrgcc.common.outputfiles.eep>\r
+ <avrgcc.common.outputfiles.srec>True</avrgcc.common.outputfiles.srec>\r
+ <avrgcc.common.outputfiles.usersignatures>False</avrgcc.common.outputfiles.usersignatures>\r
+ <avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>True</avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>\r
+ <avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>True</avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>\r
+ <avrgcc.compiler.symbols.DefSymbols>\r
+ <ListValues>\r
+ <Value>DEBUG</Value>\r
+ </ListValues>\r
+ </avrgcc.compiler.symbols.DefSymbols>\r
+ <avrgcc.compiler.directories.IncludePaths>\r
+ <ListValues>\r
+ <Value>%24(PackRepoDir)\atmel\ATmega_DFP\1.1.130\include</Value>\r
+ </ListValues>\r
+ </avrgcc.compiler.directories.IncludePaths>\r
+ <avrgcc.compiler.optimization.level>Optimize (-O1)</avrgcc.compiler.optimization.level>\r
+ <avrgcc.compiler.optimization.PackStructureMembers>True</avrgcc.compiler.optimization.PackStructureMembers>\r
+ <avrgcc.compiler.optimization.AllocateBytesNeededForEnum>True</avrgcc.compiler.optimization.AllocateBytesNeededForEnum>\r
+ <avrgcc.compiler.optimization.DebugLevel>Default (-g2)</avrgcc.compiler.optimization.DebugLevel>\r
+ <avrgcc.compiler.warnings.AllWarnings>True</avrgcc.compiler.warnings.AllWarnings>\r
+ <avrgcc.linker.libraries.Libraries>\r
+ <ListValues>\r
+ <Value>libm</Value>\r
+ </ListValues>\r
+ </avrgcc.linker.libraries.Libraries>\r
+ <avrgcc.assembler.general.IncludePaths>\r
+ <ListValues>\r
+ <Value>%24(PackRepoDir)\atmel\ATmega_DFP\1.1.130\include</Value>\r
+ </ListValues>\r
+ </avrgcc.assembler.general.IncludePaths>\r
+ <avrgcc.assembler.debugging.DebugLevel>Default (-Wa,-g)</avrgcc.assembler.debugging.DebugLevel>\r
+</AvrGcc>\r
</ToolchainSettings>\r
</PropertyGroup>\r
<ItemGroup>\r
+ <Compile Include="..\common\I2C\TWI_Master.c">\r
+ <SubType>compile</SubType>\r
+ <Link>TWI_Master.c</Link>\r
+ </Compile>\r
<Compile Include="DS2450.c">\r
<SubType>compile</SubType>\r
</Compile>\r
\r
#define _CHANGEABLE_ID_\r
#define _ZERO_POLLING_\r
-#define __4MHZ__\r
-\r
+//#define __4MHZ__\r
+//#define _DB_\r
#include "../common/OWConfig.s"\r
#include "../common/OWCRC16.s"\r
\r
;ldi r_bcount,1\r
rjmp handle_end\r
h_readmemory_end:\r
- ldi r_mode,OW_SLEEP\r
- clr r_sendflag\r
- rjmp handle_end\r
+ //ldi r_mode,OW_SLEEP\r
+ //clr r_sendflag\r
+ rjmp handle_end_sleep\r
h_readmemorycrc1:;init zweites CRC Byte\r
lds r_rwbyte,crcsave\r
;ldi r_bcount,1\r
--- /dev/null
+\r
+// Copyright (c) 2017, Tobias Mueller tm(at)tm3d.de\r
+// All rights reserved.\r
+//\r
+// Redistribution and use in source and binary forms, with or without\r
+// modification, are permitted provided that the following conditions are\r
+// met:\r
+//\r
+// * Redistributions of source code must retain the above copyright\r
+// notice, this list of conditions and the following disclaimer.\r
+// * Redistributions in binary form must reproduce the above copyright\r
+// notice, this list of conditions and the following disclaimer in the\r
+// documentation and/or other materials provided with the\r
+// distribution.\r
+// * All advertising materials mentioning features or use of this\r
+// software must display the following acknowledgement: This product\r
+// includes software developed by tm3d.de and its contributors.\r
+// * Neither the name of tm3d.de nor the names of its contributors may\r
+// be used to endorse or promote products derived from this software\r
+// without specific prior written permission.\r
+//\r
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\r
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\r
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\r
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\r
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\r
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\r
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\r
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\r
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+\r
+#define F_CPU 8000000UL\r
+#include <avr/io.h>\r
+#include <avr/interrupt.h>\r
+#include <util/delay.h>\r
+#include <avr/wdt.h>\r
+#include <avr/sleep.h>\r
+#include <avr/pgmspace.h>\r
+#include "../common/owSlave_tools.h"\r
+\r
+\r
+OWST_EXTERN_VARS\r
+\r
+uint8_t owid[8]={0x20, 0xA2, 0xD9, 0x84, 0x00, 0x16, 0x02, 0x5D};/**/\r
+uint8_t config_info[26]={0x06,0x09,0x06,9,0x06,9,0x06,9,0x02,20,20,20,20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};\r
+\r
+OWST_WDT_ISR\r
+\r
+\r
+typedef union {\r
+ volatile uint8_t bytes[0x20];\r
+ struct {\r
+ //Page0\r
+ uint16_t A; //0\r
+ uint16_t B; //2\r
+ uint16_t C; //4\r
+ uint16_t D; //6\r
+ //Page1\r
+ uint8_t CSA1;\r
+ uint8_t CSA2;\r
+ uint8_t CSB1;\r
+ uint8_t CSB2;\r
+ uint8_t CSC1;\r
+ uint8_t CSC2;\r
+ uint8_t CSD1;\r
+ uint8_t CSD2;\r
+ //Page2\r
+ uint8_t LA;\r
+ uint8_t HA;\r
+ uint8_t LB;\r
+ uint8_t HB;\r
+ uint8_t LC;\r
+ uint8_t HC;\r
+ uint8_t LD;\r
+ uint8_t HD;\r
+ //Page3\r
+ uint8_t FC1;\r
+ uint8_t FC2;\r
+ uint8_t FC3;\r
+ uint8_t FC4;\r
+ uint8_t VCCP;\r
+ uint8_t FC5;\r
+ uint8_t FC6;\r
+ uint8_t FC7;\r
+ uint8_t convc1;\r
+ uint8_t convc2;\r
+ \r
+ \r
+ };\r
+} pack_t;\r
+volatile pack_t pack;\r
+\r
+OWST_ADC_CONF16_FUNC\r
+OWST_ADC_CONF16_OSS_FUNC\r
+OWST_TESTSW\r
+\r
+#define LPIN_CH2 (1<<PINB1)\r#define LDD_CH2 DDRB\r#define LPORT_CH2 PORTB\r#define LED2_ON LPORT_CH2&=~LPIN_CH2;\r
+#define LED2_OFF LPORT_CH2|=LPIN_CH2;\r
+\r
+int main(void){\r
+ pack.A=0;\r
+ pack.B=0;\r
+ pack.C=0;\r
+ pack.D=0;\r
+ pack.CSA1=0x08;\r
+ pack.CSA2=0x8C;\r
+ pack.CSB1=0x08;\r
+ pack.CSB2=0x8C;\r
+ pack.CSC1=0x08;\r
+ pack.CSC2=0x8C;\r
+ pack.CSD1=0x08;\r
+ pack.CSD2=0x8C;\r
+ pack.HA=0xFF;\r
+ pack.LA=0x00;\r
+ pack.HB=0xFF;\r
+ pack.LB=0x00;\r
+ pack.HC=0xFF;\r
+ pack.LC=0x00;\r
+ pack.HD=0xFF;\r
+ pack.LD=0x00;\r
+ pack.VCCP=0;\r
+ OWST_INIT_ADC_ON\r
+ OWINIT();\r
+\r
+ OWST_WDR_CONFIG8\r
+ gcontrol=1;\r
+ OWST_INIT_ADC\r
+ AD_DDR&=~(1<<PINA0);\r
+ AD_PORT&=~(1<<PINA0);\r
+ AD_DDR&=~(1<<PINA1);\r
+ AD_PORT&=~(1<<PINA1);\r
+ AD_DDR&=~(1<<PINA3);\r
+ AD_PORT&=~(1<<PINA3);\r
+ AD_DDR&=~(1<<PINA7);\r
+ AD_PORT&=~(1<<PINA7);\r
+ DIDR0|=((1<<ADC7D)|(1<<ADC3D)|(1<<ADC1D)|(1<<ADC0D));\r
+ sei();\r
+ wdcounter=5;\r
+ //DDRB|=(1<<PINB1);\r
+ LDD_CH2 |=LPIN_CH2;\r
+ volatile double VCC;\r
+ volatile double VAD_A,VAD_B,VAD_C,VAD_D;\r
+ while(1) {\r
+ if (wdcounter>3) {\r
+ LED2_ON\r
+ wdcounter=0;\r
+ ADMUX=OWST_ADCIN_REFINT;\r
+ _delay_us(100);\r
+ VCC=owst_ADC_runf();\r
+ VCC=(1.079*65472.0)/VCC;\r
+ //if (VCC>5.1) VCC=5.1;\r
+ //VAD=VCC*65535.0/5.1;\r
+ //if (VAD>65535) VAD=65535;\r
+ if (testSW()) { //Zwei differential Eingaenge\r
+ VAD_C=0;\r
+ ADMUX=0b001000; //ADC0 + ADC1 - Gain 1\r
+ _delay_us(100);\r
+ VAD_A=owst_ADC_runf();\r
+ if (VAD_A<3100) {\r
+ ADMUX=0b001001; //ADC0 + ADC1 - Gain 20\r
+ _delay_us(100);\r
+ VAD_A=owst_ADC_runf();\r
+ VAD_A=VCC/20.0*VAD_A/65472.0;\r
+ //VAD_A=VCC/20.0;\r
+ VAD_C+=12850;\r
+ } else {\r
+ VAD_A=owst_ADC_OSS_runf();\r
+ VAD_A=VCC*VAD_A/65472.0;\r
+ VAD_C+=0;\r
+ }\r
+ if (pack.CSA2&0x01) VAD_A=VAD_A*65535.0/5.1; else VAD_A=VAD_A*65535.0/2.55;\r
+ if (VAD_A>65535) VAD_A=65535;\r
+ ///_------------------------ B---------------------\r
+ ADMUX=0b011000; //ADC3 + ADC7 - Gain 1\r
+ _delay_us(100);\r
+ VAD_B=owst_ADC_runf();\r
+ if (VAD_B<3100) {\r
+ ADMUX=0b011001; //ADC3 + ADC7 - Gain 20\r
+ _delay_us(100);\r
+ VAD_B=owst_ADC_runf();\r
+ VAD_B=VCC/20.0*VAD_B/65472.0;\r
+ //VAD_B=VAD_B20.0;\r
+ VAD_C+=12850*2;\r
+ } else {\r
+ VAD_B=owst_ADC_OSS_runf();\r
+ VAD_B=VCC*VAD_B/65472.0;\r
+ VAD_C+=0;\r
+ }\r
+ if (pack.CSB2&0x01) VAD_B=VAD_B*65535.0/5.1; else VAD_B=VAD_B*65535.0/2.55;\r
+ //VAD_B=VAD_B*65535.0/5.1;\r
+ if (VAD_B>65535) VAD_B=65535;\r
+ VAD_D=VCC*65535.0/5.1;\r
+ if (VAD_D>65535) VAD_D=65535;\r
+\r
+ } else { // 4 Eingaenge gegen Masse\r
+ ADMUX=OWST_ADCIN_PA0;\r
+ _delay_us(100);\r
+ VAD_A=owst_ADC_OSS_runf();\r
+ VAD_A=VCC*VAD_A/65472.0;\r
+ if (pack.CSA2&0x01) VAD_A=VAD_A*65535.0/5.1; else VAD_A=VAD_A*65535.0/2.55;\r
+ if (VAD_A>65535) VAD_A=65535;\r
+\r
+ ADMUX=OWST_ADCIN_PA1;\r
+ _delay_us(100);\r
+ VAD_B=owst_ADC_OSS_runf();\r
+ VAD_B=VCC*VAD_B/65472.0;\r
+ if (pack.CSB2&0x01) VAD_B=VAD_B*65535.0/5.1; else VAD_B=VAD_B*65535.0/2.55;\r
+ if (VAD_B>65535) VAD_B=65535;\r
+\r
+ ADMUX=OWST_ADCIN_PA3;\r
+ _delay_us(100);\r
+ VAD_C=owst_ADC_OSS_runf();\r
+ VAD_C=VCC*VAD_C/65472.0;\r
+ if (pack.CSC2&0x01) VAD_C=VAD_C*65535.0/5.1; else VAD_C=VAD_C*65535.0/2.55;\r
+ if (VAD_C>65535) VAD_C=65535;\r
+\r
+ ADMUX=OWST_ADCIN_PA7;\r
+ _delay_us(100);\r
+ VAD_D=owst_ADC_OSS_runf();\r
+ VAD_D=VCC*VAD_D/65472.0;\r
+ if (pack.CSD2&0x01) VAD_D=VAD_D*65535.0/5.1; else VAD_D=VAD_D*65535.0/2.55;\r
+ if (VAD_D>65535) VAD_D=65535;\r
+ }\r
+ LED2_OFF\r
+\r
+\r
+ }\r
+\r
+ if (gcontrol) {\r
+ //PORTB|=(1<<PINB1);\r
+ uint8_t bb=1;\r
+ uint8_t bb1=1;\r
+ for(uint8_t i=0;i<4;i++){ //Initialisieren mit 0 oder FF oder letzter Wert\r
+ if (pack.convc1&bb1) {\r
+ if (pack.convc2&(bb)) {pack.bytes[i*2]=0;pack.bytes[i*2+1]=0;}\r
+ bb=bb<<1;\r
+ if (pack.convc2&(bb)) {pack.bytes[i*2]=0xFF;pack.bytes[i*2+1]=0xFF;}\r
+ bb=bb<<1;\r
+ } else bb=bb<<2;\r
+ bb1=bb1<<1; \r
+ }\r
+ //CHanel A\r
+ if (pack.convc1&1) {\r
+ //if (pack.CSA2&0x01) ADMUX=0; else ADMUX=0x80;\r
+ cli();pack.A=VAD_A;sei();\r
+ alarmflag=0;\r
+ if (pack.CSA2&0x08) //AEH\r
+ if (pack.bytes[1]>pack.HA) {alarmflag=1;pack.CSA2|=0x20;}\r
+ if (pack.CSA2&0x04) //AEL\r
+ if (pack.bytes[1]<pack.LA) {alarmflag=1;pack.CSA2|=0x10;}\r
+ }\r
+\r
+ if (pack.convc1&2) {\r
+ //if (pack.CSB2&0x01) ADMUX=1; else ADMUX=0x81;\r
+ cli();pack.B=VAD_B;sei();\r
+ if (pack.CSB2&0x08) //AEH\r
+ if (pack.bytes[1]>pack.HB) {alarmflag=1;pack.CSB2|=0x20;}\r
+ if (pack.CSB2&0x04) //AEL\r
+ if (pack.bytes[1]<pack.LB) {alarmflag=1;pack.CSB2|=0x10;}\r
+ }\r
+\r
+ if (pack.convc1&4) {\r
+ //if (pack.CSC2&0x01) ADMUX=2; else ADMUX=0x82;\r
+ cli();pack.C=VAD_C;sei();\r
+ if (pack.CSC2&0x08) //AEH\r
+ if (pack.bytes[1]>pack.HC) {alarmflag=1;pack.CSC2|=0x20;}\r
+ if (pack.CSC2&0x04) //AEL\r
+ if (pack.bytes[1]<pack.LC) {alarmflag=1;pack.CSC2|=0x10;}\r
+ } \r
+ if (pack.convc1&8) {\r
+ cli();pack.D=VAD_D;sei();\r
+ if (pack.CSD2&0x08) //AEH\r
+ if (pack.bytes[1]>pack.HD) {alarmflag=1;pack.CSD2|=0x20;}\r
+ if (pack.CSD2&0x04) //AEL\r
+ if (pack.bytes[1]<pack.LD) {alarmflag=1;pack.CSD2|=0x10;}\r
+ }\r
+ \r
+ EXTERN_SLEEP();\r
+ //PORTB&=~(1<<PINB1);\r
+ }\r
+\r
+ uint8_t bb=1;\r
+ for(volatile uint8_t i=0;i<4;i++) {\r
+ if (pack.bytes[8+i*2]&0x80) { //Chanel as output\r
+ if (pack.bytes[8+i*2]&0x40) {\r
+ // AD_DDR|=bb;\r
+ } else {\r
+ cli();\r
+ // AD_DDR&=~bb;\r
+ sei();\r
+ }\r
+ } else {\r
+ cli();\r
+ // AD_DDR&=~bb;\r
+ sei();\r
+ }\r
+ bb=bb*2;\r
+ }\r
+ OWST_MAIN_END \r
+ }\r
+\r
+\r
+}
\ No newline at end of file
--- /dev/null
+\r
+Microsoft Visual Studio Solution File, Format Version 12.00\r
+# Atmel Studio Solution File, Format Version 11.00\r
+VisualStudioVersion = 14.0.25420.1\r
+MinimumVisualStudioVersion = 10.0.40219.1\r
+Project("{54F91283-7BC4-4236-8FF9-10F437C3AD48}") = "DS2450_ADC", "DS2450_ADC.cproj", "{DCE6C7E3-EE26-4D79-826B-08594B9AD897}"\r
+EndProject\r
+Global\r
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution\r
+ Debug|AVR = Debug|AVR\r
+ Release|AVR = Release|AVR\r
+ EndGlobalSection\r
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution\r
+ {DCE6C7E3-EE26-4D79-826B-08594B9AD897}.Debug|AVR.ActiveCfg = Debug|AVR\r
+ {DCE6C7E3-EE26-4D79-826B-08594B9AD897}.Debug|AVR.Build.0 = Debug|AVR\r
+ {DCE6C7E3-EE26-4D79-826B-08594B9AD897}.Release|AVR.ActiveCfg = Release|AVR\r
+ {DCE6C7E3-EE26-4D79-826B-08594B9AD897}.Release|AVR.Build.0 = Release|AVR\r
+ EndGlobalSection\r
+ GlobalSection(SolutionProperties) = preSolution\r
+ HideSolutionNode = FALSE\r
+ EndGlobalSection\r
+EndGlobal\r
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>\r
+<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="14.0">\r
+ <PropertyGroup>\r
+ <SchemaVersion>2.0</SchemaVersion>\r
+ <ProjectVersion>7.0</ProjectVersion>\r
+ <ToolchainName>com.Atmel.AVRGCC8.C</ToolchainName>\r
+ <ProjectGuid>dce6c7e3-ee26-4d79-826b-08594b9ad897</ProjectGuid>\r
+ <avrdevice>ATtiny84A</avrdevice>\r
+ <avrdeviceseries>none</avrdeviceseries>\r
+ <OutputType>Executable</OutputType>\r
+ <Language>C</Language>\r
+ <OutputFileName>$(MSBuildProjectName)</OutputFileName>\r
+ <OutputFileExtension>.elf</OutputFileExtension>\r
+ <OutputDirectory>$(MSBuildProjectDirectory)\$(Configuration)</OutputDirectory>\r
+ <AssemblyName>DS2450</AssemblyName>\r
+ <Name>DS2450_ADC</Name>\r
+ <RootNamespace>DS2450</RootNamespace>\r
+ <ToolchainFlavour>Native</ToolchainFlavour>\r
+ <KeepTimersRunning>true</KeepTimersRunning>\r
+ <OverrideVtor>false</OverrideVtor>\r
+ <CacheFlash>true</CacheFlash>\r
+ <ProgFlashFromRam>true</ProgFlashFromRam>\r
+ <RamSnippetAddress>0x20000000</RamSnippetAddress>\r
+ <UncachedRange />\r
+ <preserveEEPROM>true</preserveEEPROM>\r
+ <OverrideVtorValue>exception_table</OverrideVtorValue>\r
+ <BootSegment>2</BootSegment>\r
+ <eraseonlaunchrule>1</eraseonlaunchrule>\r
+ <ExternalProgrammingToolCommand />\r
+ <AsfFrameworkConfig>\r
+ <framework-data>\r
+ <options />\r
+ <configurations />\r
+ <files />\r
+ <documentation help="" />\r
+ <offline-documentation help="" />\r
+ <dependencies>\r
+ <content-extension eid="atmel.asf" uuidref="Atmel.ASF" version="3.28.1" />\r
+ </dependencies>\r
+ </framework-data>\r
+ </AsfFrameworkConfig>\r
+ <avrtool>com.atmel.avrdbg.tool.atmelice</avrtool>\r
+ <avrtoolinterface>debugWIRE</avrtoolinterface>\r
+ <avrtoolserialnumber>J41800000789</avrtoolserialnumber>\r
+ <avrdeviceexpectedsignature>0x1E930C</avrdeviceexpectedsignature>\r
+ <com_atmel_avrdbg_tool_atmelice>\r
+ <ToolOptions>\r
+ <InterfaceProperties>\r
+ <IspClock>125000</IspClock>\r
+ </InterfaceProperties>\r
+ <InterfaceName>debugWIRE</InterfaceName>\r
+ </ToolOptions>\r
+ <ToolType>com.atmel.avrdbg.tool.atmelice</ToolType>\r
+ <ToolNumber>J41800000789</ToolNumber>\r
+ <ToolName>Atmel-ICE</ToolName>\r
+ </com_atmel_avrdbg_tool_atmelice>\r
+ <avrtoolinterfaceclock>125000</avrtoolinterfaceclock>\r
+ </PropertyGroup>\r
+ <PropertyGroup Condition=" '$(Configuration)' == 'Release' ">\r
+ <ToolchainSettings>\r
+ <AvrGcc>\r
+ <avrgcc.common.Device>-mmcu=attiny84a -B "%24(PackRepoDir)\atmel\ATtiny_DFP\1.1.102\gcc\dev\attiny84a"</avrgcc.common.Device>\r
+ <avrgcc.common.outputfiles.hex>True</avrgcc.common.outputfiles.hex>\r
+ <avrgcc.common.outputfiles.lss>True</avrgcc.common.outputfiles.lss>\r
+ <avrgcc.common.outputfiles.eep>True</avrgcc.common.outputfiles.eep>\r
+ <avrgcc.common.outputfiles.srec>True</avrgcc.common.outputfiles.srec>\r
+ <avrgcc.common.outputfiles.usersignatures>False</avrgcc.common.outputfiles.usersignatures>\r
+ <avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>True</avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>\r
+ <avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>True</avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>\r
+ <avrgcc.compiler.symbols.DefSymbols>\r
+ <ListValues>\r
+ <Value>NDEBUG</Value>\r
+ </ListValues>\r
+ </avrgcc.compiler.symbols.DefSymbols>\r
+ <avrgcc.compiler.directories.IncludePaths>\r
+ <ListValues>\r
+ <Value>%24(PackRepoDir)\atmel\ATtiny_DFP\1.1.102\include</Value>\r
+ </ListValues>\r
+ </avrgcc.compiler.directories.IncludePaths>\r
+ <avrgcc.compiler.optimization.level>Optimize for size (-Os)</avrgcc.compiler.optimization.level>\r
+ <avrgcc.compiler.optimization.PackStructureMembers>True</avrgcc.compiler.optimization.PackStructureMembers>\r
+ <avrgcc.compiler.optimization.AllocateBytesNeededForEnum>True</avrgcc.compiler.optimization.AllocateBytesNeededForEnum>\r
+ <avrgcc.compiler.warnings.AllWarnings>True</avrgcc.compiler.warnings.AllWarnings>\r
+ <avrgcc.linker.libraries.Libraries>\r
+ <ListValues>\r
+ <Value>libm</Value>\r
+ </ListValues>\r
+ </avrgcc.linker.libraries.Libraries>\r
+ <avrgcc.assembler.general.IncludePaths>\r
+ <ListValues>\r
+ <Value>%24(PackRepoDir)\atmel\ATtiny_DFP\1.1.102\include</Value>\r
+ </ListValues>\r
+ </avrgcc.assembler.general.IncludePaths>\r
+ </AvrGcc>\r
+ </ToolchainSettings>\r
+ </PropertyGroup>\r
+ <PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">\r
+ <ToolchainSettings>\r
+ <AvrGcc>\r
+ <avrgcc.common.Device>-mmcu=attiny84a -B "%24(PackRepoDir)\atmel\ATtiny_DFP\1.1.102\gcc\dev\attiny84a"</avrgcc.common.Device>\r
+ <avrgcc.common.outputfiles.hex>True</avrgcc.common.outputfiles.hex>\r
+ <avrgcc.common.outputfiles.lss>True</avrgcc.common.outputfiles.lss>\r
+ <avrgcc.common.outputfiles.eep>True</avrgcc.common.outputfiles.eep>\r
+ <avrgcc.common.outputfiles.srec>True</avrgcc.common.outputfiles.srec>\r
+ <avrgcc.common.outputfiles.usersignatures>False</avrgcc.common.outputfiles.usersignatures>\r
+ <avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>True</avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>\r
+ <avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>True</avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>\r
+ <avrgcc.compiler.symbols.DefSymbols>\r
+ <ListValues>\r
+ <Value>DEBUG</Value>\r
+ </ListValues>\r
+ </avrgcc.compiler.symbols.DefSymbols>\r
+ <avrgcc.compiler.directories.IncludePaths>\r
+ <ListValues>\r
+ <Value>%24(PackRepoDir)\atmel\ATtiny_DFP\1.1.102\include</Value>\r
+ </ListValues>\r
+ </avrgcc.compiler.directories.IncludePaths>\r
+ <avrgcc.compiler.optimization.level>Optimize (-O1)</avrgcc.compiler.optimization.level>\r
+ <avrgcc.compiler.optimization.PackStructureMembers>True</avrgcc.compiler.optimization.PackStructureMembers>\r
+ <avrgcc.compiler.optimization.AllocateBytesNeededForEnum>True</avrgcc.compiler.optimization.AllocateBytesNeededForEnum>\r
+ <avrgcc.compiler.optimization.DebugLevel>Default (-g2)</avrgcc.compiler.optimization.DebugLevel>\r
+ <avrgcc.compiler.warnings.AllWarnings>True</avrgcc.compiler.warnings.AllWarnings>\r
+ <avrgcc.linker.libraries.Libraries>\r
+ <ListValues>\r
+ <Value>libm</Value>\r
+ </ListValues>\r
+ </avrgcc.linker.libraries.Libraries>\r
+ <avrgcc.assembler.general.IncludePaths>\r
+ <ListValues>\r
+ <Value>%24(PackRepoDir)\atmel\ATtiny_DFP\1.1.102\include</Value>\r
+ </ListValues>\r
+ </avrgcc.assembler.general.IncludePaths>\r
+ <avrgcc.assembler.debugging.DebugLevel>Default (-Wa,-g)</avrgcc.assembler.debugging.DebugLevel>\r
+ </AvrGcc>\r
+ </ToolchainSettings>\r
+ </PropertyGroup>\r
+ <ItemGroup>\r
+ <Compile Include="DS2450.c">\r
+ <SubType>compile</SubType>\r
+ </Compile>\r
+ <Compile Include="OWDS2450.S">\r
+ <SubType>compile</SubType>\r
+ </Compile>\r
+ </ItemGroup>\r
+ <Import Project="$(AVRSTUDIO_EXE_PATH)\\Vs\\Compiler.targets" />\r
+</Project>
\ No newline at end of file
--- /dev/null
+\r
+// Copyright (c) 2017, Tobias Mueller tm(at)tm3d.de\r
+// All rights reserved. \r
+// \r
+// Redistribution and use in source and binary forms, with or without \r
+// modification, are permitted provided that the following conditions are \r
+// met: \r
+// \r
+// * Redistributions of source code must retain the above copyright \r
+// notice, this list of conditions and the following disclaimer. \r
+// * Redistributions in binary form must reproduce the above copyright \r
+// notice, this list of conditions and the following disclaimer in the \r
+// documentation and/or other materials provided with the \r
+// distribution. \r
+// * All advertising materials mentioning features or use of this \r
+// software must display the following acknowledgement: This product \r
+// includes software developed by tm3d.de and its contributors. \r
+// * Neither the name of tm3d.de nor the names of its contributors may \r
+// be used to endorse or promote products derived from this software \r
+// without specific prior written permission. \r
+// \r
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \r
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT \r
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR \r
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT \r
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, \r
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT \r
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, \r
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY \r
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT \r
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE \r
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \r
+\r
+#define _CHANGEABLE_ID_\r
+#define _ZERO_POLLING_\r
+//#define __4MHZ__\r
+//#define _DB_\r
+#include "../common/OWConfig.s"\r
+#include "../common/OWCRC16.s"\r
+\r
+.extern pack,8\r
+.comm addr,1 ;zweites Adressbyte ist unnoetig (Warum auch immer fuer 32 Byte 16 Bit Adressen verwendet werden....)\r
+.comm crcsave,1 ; zwischenspeicherspeicher fuer crc nur zweites byte....\r
+//.extern am2302_temp,2\r
+\r
+\r
+\r
+.macro CHIP_INIT \r
+.endm\r
+\r
+.macro COMMAND_TABLE\r
+ rjmp h_readmemoryaddr\r
+ rjmp h_readmemory\r
+ rjmp h_readmemorycrc1\r
+ rjmp h_readmemorycrc2\r
+ rjmp h_writememoryaddr\r
+ rjmp h_writememory\r
+ rjmp h_writememorycrc1\r
+ rjmp h_writememorycrc2\r
+ rjmp h_writememoryreadback\r
+ rjmp h_convert\r
+ rjmp h_convertcrc1\r
+ rjmp h_convertcrc2\r
+ rjmp h_convert_conv\r
+.endm\r
+\r
+#include "../common/OWRomFunctions.s"\r
+#include "../common/OWTimerInterrupt.s"\r
+\r
+\r
+\r
+; Ab hier Geraeteabhaenging\r
+#define OW_READ_MEMORY_ADDR OW_FIRST_COMMAND+0\r
+#define OW_READ_MEMORY OW_FIRST_COMMAND+1\r
+#define OW_READ_MEMORY_CRC1 OW_FIRST_COMMAND+2\r
+#define OW_READ_MEMORY_CRC2 OW_FIRST_COMMAND+3\r
+#define OW_WRITE_MEMORY_ADDR OW_FIRST_COMMAND+4\r
+#define OW_WRITE_MEMORY OW_FIRST_COMMAND+5\r
+#define OW_WRITE_MEMORY_CRC1 OW_FIRST_COMMAND+6\r
+#define OW_WRITE_MEMORY_CRC2 OW_FIRST_COMMAND+7\r
+#define OW_WRITE_MEMORY_READBACK OW_FIRST_COMMAND+8\r
+#define OW_CONVERT OW_FIRST_COMMAND+9\r
+#define OW_CONVERT_CRC1 OW_FIRST_COMMAND+10\r
+#define OW_CONVERT_CRC2 OW_FIRST_COMMAND+11\r
+#define OW_CONVERT_CONV OW_FIRST_COMMAND+12\r
+\r
+;---------------------------------------------------\r
+; READ COMMAND and start operation\r
+;---------------------------------------------------\r
+\r
+\r
+h_readcommand:\r
+ clr r_bytep\r
+#ifndef _DIS_FLASH_\r
+ FLASH_COMMANDS ; muss zu erst sein....\r
+#endif\r
+ cset 0xAA,OW_READ_MEMORY_ADDR\r
+ cset 0x55,OW_WRITE_MEMORY_ADDR\r
+ cset 0x3C,OW_CONVERT\r
+ FW_CONFIG_INFO\r
+#ifdef _CHANGEABLE_ID_\r
+ CHANGE_ID_COMMANDS\r
+#endif\r
+ ldi r_mode,OW_SLEEP\r
+ rjmp handle_end\r
+\r
+\r
+h_readmemoryaddr:\r
+ cpi r_bytep,0 ;erstes Adressbyte ?\r
+ brne h_readmemory_addr_byte1 ;nein dann weiter\r
+ andi r_rwbyte,0x1F ; nur Adressen zwischen 0 und 0x1F zulassen\r
+ sts addr,r_rwbyte ;speichern des ersten bytes\r
+ rjmp handle_end_inc\r
+h_readmemory_addr_byte1: ;zweiters Addressbyte wird nicht gespeichert!\r
+ ldi r_mode,OW_READ_MEMORY ;weiter zu read Memory\r
+ ;;ldi r_bcount,1 ;ist unten\r
+ ldi r_sendflag,1 ;jetzt sendet der Slave zum Master\r
+ clr r_bytep\r
+ rjmp h_readmemory2\r
+h_readmemory:\r
+ lds r_bytep,addr\r
+ inc r_bytep\r
+ sts addr,r_bytep\r
+ andi r_bytep,0x07\r
+ breq h_readmemory_init_crc\r
+h_readmemory2:\r
+ lds r_bytep,addr\r
+ ;andi r_bytep,0x1F ist oben\r
+ configZ pack,r_bytep\r
+ ld r_rwbyte,Z\r
+ ;ldi r_bcount,1\r
+ rjmp handle_end ;sendet das Byte und geht zu h_readmemory\r
+h_readmemory_init_crc:; init erstes CRC byte\r
+ lds r_rwbyte,crc\r
+ com r_rwbyte\r
+ lds r_temp,crc+1\r
+ com r_temp\r
+ sts crcsave,r_temp\r
+ ldi r_mode,OW_READ_MEMORY_CRC1\r
+ ;ldi r_bcount,1\r
+ rjmp handle_end\r
+h_readmemory_end:\r
+ //ldi r_mode,OW_SLEEP\r
+ //clr r_sendflag\r
+ rjmp handle_end_sleep\r
+h_readmemorycrc1:;init zweites CRC Byte\r
+ lds r_rwbyte,crcsave\r
+ ;ldi r_bcount,1\r
+ ldi r_mode,OW_READ_MEMORY_CRC2\r
+ rjmp handle_end\r
+h_readmemorycrc2:;weiteres senden..... nach zweitem Byte\r
+ lds r_temp,addr\r
+ andi r_temp,0xE0\r
+ brne h_readmemory_end; ende des speichers\r
+ ldi r_mode,OW_READ_MEMORY\r
+ CRCInit1 ;Start with new CRC\r
+ rjmp h_readmemory2\r
+\r
+h_writememoryaddr:\r
+ cpi r_bytep,0 ;erstes Adressbyte ?\r
+ brne h_writememory_addr_byte1 ;nein dann weiter\r
+ andi r_rwbyte,0x1F ; nur Adressen zwischen 0 und 0x1F zulassen\r
+ sts addr,r_rwbyte ;speichern des ersten bytes\r
+ inc r_bytep\r
+ ;ldi r_bcount,1\r
+ rjmp handle_end\r
+h_writememory_addr_byte1: ;zweiters Addressbyte wird nicht gespeichert!\r
+ ldi r_mode,OW_WRITE_MEMORY ;weiter zu read Memory\r
+ ;ldi r_bcount,1 ;; _________________________________________________in handle_end integrieren.....\r
+ lds r_bytep,addr\r
+ rjmp handle_end ;read Memory Byte\r
+h_writememory:\r
+ lds r_bytep,addr\r
+ configZ pack,r_bytep\r
+ st Z,r_rwbyte\r
+ ;ldi r_bcount,1\r
+ ldi r_mode,OW_WRITE_MEMORY_CRC1\r
+ ldi r_sendflag,1 ;jetzt sendet der Slave zum Master\r
+ lds r_rwbyte,crc\r
+ com r_rwbyte\r
+ lds r_temp,crc+1\r
+ com r_temp\r
+ sts crcsave,r_temp\r
+ rjmp handle_end\r
+h_writememorycrc1:\r
+ lds r_rwbyte,crcsave\r
+ ;ldi r_bcount,1\r
+ ldi r_mode,OW_WRITE_MEMORY_CRC2\r
+ rjmp handle_end\r
+h_writememorycrc2:\r
+ lds r_temp,addr\r
+ configZ pack,r_temp\r
+ ld r_rwbyte,Z\r
+ ;ldi r_bcount,1\r
+ ldi r_mode,OW_WRITE_MEMORY_READBACK\r
+ rjmp handle_end\r
+h_writememoryreadback:\r
+ ldi r_temp,0x00\r
+ sts crc+1,r_temp\r
+ lds r_temp,addr\r
+ inc r_temp\r
+ sts addr,r_temp\r
+ sts crc,r_temp\r
+ ldi r_sendflag,0\r
+ ;ldi r_bcount,1\r
+ ldi r_mode,OW_WRITE_MEMORY\r
+ rjmp handle_end\r
+\r
+h_convert:\r
+ cpi r_bytep,0 ;erstes Adressbyte ?\r
+ brne h_convert_byte1 ;nein dann weiter\r
+ inc r_bytep\r
+ sts pack+0x20,r_rwbyte\r
+ ;ldi r_bcount,1\r
+ rjmp handle_end\r
+h_convert_byte1: ;zweies byte glesen go crc#\r
+ sts pack+0x21,r_rwbyte\r
+ lds r_rwbyte,crc\r
+ com r_rwbyte\r
+ lds r_temp,crc+1\r
+ com r_temp\r
+ sts crcsave,r_temp\r
+ ldi r_mode,OW_CONVERT_CRC1\r
+ ;ldi r_bcount,1\r
+ ldi r_sendflag,1\r
+ rjmp handle_end \r
+h_convertcrc1:\r
+ lds r_rwbyte,crcsave\r
+ ;ldi r_bcount,1\r
+ ldi r_mode,OW_CONVERT_CRC2\r
+ rjmp handle_end\r
+h_convertcrc2:\r
+ ldi r_temp,1\r
+ sts gcontrol,r_temp\r
+ ;ldi r_bcount,1\r
+ ldi r_mode,OW_CONVERT_CONV\r
+ ;clr r_sendflag\r
+ ldi r_sendflag,3 ;set bit 0 and 1 for no zero polling\r
+h_convert_conv:\r
+ ldi r_bcount,0\r
+ ldi r_rwbyte,0\r
+ rjmp handle_end_no_bcount \r
+\r
+\r
+\r
+\r
+#include "../common/OWPinInterrupt.s"\r
+.end
\ No newline at end of file
--- /dev/null
+\r
+// Copyright (c) 2017, Tobias Mueller tm(at)tm3d.de\r
+// All rights reserved.\r
+//\r
+// Redistribution and use in source and binary forms, with or without\r
+// modification, are permitted provided that the following conditions are\r
+// met:\r
+//\r
+// * Redistributions of source code must retain the above copyright\r
+// notice, this list of conditions and the following disclaimer.\r
+// * Redistributions in binary form must reproduce the above copyright\r
+// notice, this list of conditions and the following disclaimer in the\r
+// documentation and/or other materials provided with the\r
+// distribution.\r
+// * All advertising materials mentioning features or use of this\r
+// software must display the following acknowledgement: This product\r
+// includes software developed by tm3d.de and its contributors.\r
+// * Neither the name of tm3d.de nor the names of its contributors may\r
+// be used to endorse or promote products derived from this software\r
+// without specific prior written permission.\r
+//\r
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\r
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\r
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\r
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\r
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\r
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\r
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\r
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\r
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+\r
+#define F_CPU 8000000UL\r
+#include <avr/io.h>\r
+#include <avr/interrupt.h>\r
+#include <util/delay.h>\r
+#include <avr/wdt.h>\r
+#include <avr/sleep.h>\r
+#include <avr/pgmspace.h>\r
+#include "../common/owSlave_tools.h"\r
+\r
+\r
+OWST_EXTERN_VARS\r
+\r
+uint8_t owid[8]={0x20, 0xA2, 0xD9, 0x84, 0x00, 0x16, 0x02, 0x5D};/**/\r
+uint8_t config_info[26]={0x06,0x09,0x06,9,0x06,9,0x06,9,0x02,20,20,20,20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};\r
+\r
+OWST_WDT_ISR\r
+\r
+\r
+typedef union {\r
+ volatile uint8_t bytes[0x20];\r
+ struct {\r
+ //Page0\r
+ uint16_t A; //0\r
+ uint16_t B; //2\r
+ uint16_t C; //4\r
+ uint16_t D; //6\r
+ //Page1\r
+ uint8_t CSA1;\r
+ uint8_t CSA2;\r
+ uint8_t CSB1;\r
+ uint8_t CSB2;\r
+ uint8_t CSC1;\r
+ uint8_t CSC2;\r
+ uint8_t CSD1;\r
+ uint8_t CSD2;\r
+ //Page2\r
+ uint8_t LA;\r
+ uint8_t HA;\r
+ uint8_t LB;\r
+ uint8_t HB;\r
+ uint8_t LC;\r
+ uint8_t HC;\r
+ uint8_t LD;\r
+ uint8_t HD;\r
+ //Page3\r
+ uint8_t FC1;\r
+ uint8_t FC2;\r
+ uint8_t FC3;\r
+ uint8_t FC4;\r
+ uint8_t VCCP;\r
+ uint8_t FC5;\r
+ uint8_t FC6;\r
+ uint8_t FC7;\r
+ uint8_t convc1;\r
+ uint8_t convc2;\r
+ \r
+ \r
+ };\r
+} pack_t;\r
+volatile pack_t pack;\r
+\r
+OWST_ADC_CONF16_FUNC\r
+OWST_ADC_CONF16_OSS_FUNC\r
+OWST_TESTSW\r
+\r
+#define LPIN_CH2 (1<<PINB1)\r#define LDD_CH2 DDRB\r#define LPORT_CH2 PORTB\r#define LED2_ON LPORT_CH2&=~LPIN_CH2;\r
+#define LED2_OFF LPORT_CH2|=LPIN_CH2;\r
+\r
+int main(void){\r
+ pack.A=0;\r
+ pack.B=0;\r
+ pack.C=0;\r
+ pack.D=0;\r
+ pack.CSA1=0x08;\r
+ pack.CSA2=0x8C;\r
+ pack.CSB1=0x08;\r
+ pack.CSB2=0x8C;\r
+ pack.CSC1=0x08;\r
+ pack.CSC2=0x8C;\r
+ pack.CSD1=0x08;\r
+ pack.CSD2=0x8C;\r
+ pack.HA=0xFF;\r
+ pack.LA=0x00;\r
+ pack.HB=0xFF;\r
+ pack.LB=0x00;\r
+ pack.HC=0xFF;\r
+ pack.LC=0x00;\r
+ pack.HD=0xFF;\r
+ pack.LD=0x00;\r
+ pack.VCCP=0;\r
+ OWST_INIT_ADC_ON\r
+ OWINIT();\r
+\r
+ OWST_WDR_CONFIG8\r
+ gcontrol=1;\r
+ OWST_INIT_ADC\r
+ AD_DDR&=~(1<<PINA4);\r
+ AD_PORT&=~(1<<PINA4);\r
+ AD_DDR&=~(1<<PINA5);\r
+ AD_PORT&=~(1<<PINA5);\r
+ AD_DDR&=~(1<<PINA6);\r
+ AD_PORT&=~(1<<PINA6);\r
+ AD_DDR&=~(1<<PINA7);\r
+ AD_PORT&=~(1<<PINA7);\r
+ DIDR0|=((1<<ADC4D)|(1<<ADC5D)|(1<<ADC6D)|(1<<ADC7D));\r
+ sei();\r
+ wdcounter=5;\r
+ //DDRB|=(1<<PINB1);\r
+ LDD_CH2 |=LPIN_CH2;\r
+ volatile double VCC;\r
+ volatile double VAD_A,VAD_B,VAD_C,VAD_D;\r
+ while(1) {\r
+ if (wdcounter>3) {\r
+ LED2_ON\r
+ wdcounter=0;\r
+ ADMUX=OWST_ADCIN_REFINT;\r
+ _delay_us(100);\r
+ VCC=owst_ADC_runf();\r
+ VCC=(1.079*65472.0)/VCC;\r
+ //if (VCC>5.1) VCC=5.1;\r
+ //VAD=VCC*65535.0/5.1;\r
+ //if (VAD>65535) VAD=65535;\r
+ if (testSW()) { //Zwei differential Eingaenge\r
+ VAD_C=0;\r
+ ADMUX=0b0011010; //ADC4 + ADC5 - Gain 1\r
+ _delay_us(100);\r
+ VAD_A=owst_ADC_runf();\r
+ if (VAD_A<3100) {\r
+ ADMUX=0b0011011; //ADC0 + ADC1 - Gain 20\r
+ _delay_us(100);\r
+ VAD_A=owst_ADC_runf();\r
+ VAD_A=VCC/20.0*VAD_A/65472.0;\r
+ //VAD_A=VCC/20.0;\r
+ VAD_C+=12850;\r
+ } else {\r
+ VAD_A=owst_ADC_OSS_runf();\r
+ VAD_A=VCC*VAD_A/65472.0;\r
+ VAD_C+=0;\r
+ }\r
+ if (pack.CSA2&0x01) VAD_A=VAD_A*65535.0/5.1; else VAD_A=VAD_A*65535.0/2.55;\r
+ if (VAD_A>65535) VAD_A=65535;\r
+ ///_------------------------ B---------------------\r
+ ADMUX=0b011110; //ADC6 + ADC7 - Gain 1\r
+ _delay_us(100);\r
+ VAD_B=owst_ADC_runf();\r
+ if (VAD_B<3100) {\r
+ ADMUX=0b011111; //ADC6 + ADC7 - Gain 20\r
+ _delay_us(100);\r
+ VAD_B=owst_ADC_runf();\r
+ VAD_B=VCC/20.0*VAD_B/65472.0;\r
+ //VAD_B=VAD_B20.0;\r
+ VAD_C+=12850*2;\r
+ } else {\r
+ VAD_B=owst_ADC_OSS_runf();\r
+ VAD_B=VCC*VAD_B/65472.0;\r
+ VAD_C+=0;\r
+ }\r
+ if (pack.CSB2&0x01) VAD_B=VAD_B*65535.0/5.1; else VAD_B=VAD_B*65535.0/2.55;\r
+ //VAD_B=VAD_B*65535.0/5.1;\r
+ if (VAD_B>65535) VAD_B=65535;\r
+ VAD_D=VCC*65535.0/5.1;\r
+ if (VAD_D>65535) VAD_D=65535;\r
+\r
+ } else { // 4 Eingaenge gegen Masse\r
+ ADMUX=OWST_ADCIN_PA4;\r
+ _delay_us(100);\r
+ VAD_A=owst_ADC_OSS_runf();\r
+ VAD_A=VCC*VAD_A/65472.0;\r
+ if (pack.CSA2&0x01) VAD_A=VAD_A*65535.0/5.1; else VAD_A=VAD_A*65535.0/2.55;\r
+ if (VAD_A>65535) VAD_A=65535;\r
+\r
+ ADMUX=OWST_ADCIN_PA5;\r
+ _delay_us(100);\r
+ VAD_B=owst_ADC_OSS_runf();\r
+ VAD_B=VCC*VAD_B/65472.0;\r
+ if (pack.CSB2&0x01) VAD_B=VAD_B*65535.0/5.1; else VAD_B=VAD_B*65535.0/2.55;\r
+ if (VAD_B>65535) VAD_B=65535;\r
+\r
+ ADMUX=OWST_ADCIN_PA6;\r
+ _delay_us(100);\r
+ VAD_C=owst_ADC_OSS_runf();\r
+ VAD_C=VCC*VAD_C/65472.0;\r
+ if (pack.CSC2&0x01) VAD_C=VAD_C*65535.0/5.1; else VAD_C=VAD_C*65535.0/2.55;\r
+ if (VAD_C>65535) VAD_C=65535;\r
+\r
+ ADMUX=OWST_ADCIN_PA7;\r
+ _delay_us(100);\r
+ VAD_D=owst_ADC_OSS_runf();\r
+ VAD_D=VCC*VAD_D/65472.0;\r
+ if (pack.CSD2&0x01) VAD_D=VAD_D*65535.0/5.1; else VAD_D=VAD_D*65535.0/2.55;\r
+ if (VAD_D>65535) VAD_D=65535;\r
+ }\r
+ LED2_OFF\r
+\r
+\r
+ }\r
+\r
+ if (gcontrol) {\r
+ //PORTB|=(1<<PINB1);\r
+ uint8_t bb=1;\r
+ uint8_t bb1=1;\r
+ for(uint8_t i=0;i<4;i++){ //Initialisieren mit 0 oder FF oder letzter Wert\r
+ if (pack.convc1&bb1) {\r
+ if (pack.convc2&(bb)) {pack.bytes[i*2]=0;pack.bytes[i*2+1]=0;}\r
+ bb=bb<<1;\r
+ if (pack.convc2&(bb)) {pack.bytes[i*2]=0xFF;pack.bytes[i*2+1]=0xFF;}\r
+ bb=bb<<1;\r
+ } else bb=bb<<2;\r
+ bb1=bb1<<1; \r
+ }\r
+ //CHanel A\r
+ if (pack.convc1&1) {\r
+ //if (pack.CSA2&0x01) ADMUX=0; else ADMUX=0x80;\r
+ cli();pack.A=VAD_A;sei();\r
+ alarmflag=0;\r
+ if (pack.CSA2&0x08) //AEH\r
+ if (pack.bytes[1]>pack.HA) {alarmflag=1;pack.CSA2|=0x20;}\r
+ if (pack.CSA2&0x04) //AEL\r
+ if (pack.bytes[1]<pack.LA) {alarmflag=1;pack.CSA2|=0x10;}\r
+ }\r
+\r
+ if (pack.convc1&2) {\r
+ //if (pack.CSB2&0x01) ADMUX=1; else ADMUX=0x81;\r
+ cli();pack.B=VAD_B;sei();\r
+ if (pack.CSB2&0x08) //AEH\r
+ if (pack.bytes[1]>pack.HB) {alarmflag=1;pack.CSB2|=0x20;}\r
+ if (pack.CSB2&0x04) //AEL\r
+ if (pack.bytes[1]<pack.LB) {alarmflag=1;pack.CSB2|=0x10;}\r
+ }\r
+\r
+ if (pack.convc1&4) {\r
+ //if (pack.CSC2&0x01) ADMUX=2; else ADMUX=0x82;\r
+ cli();pack.C=VAD_C;sei();\r
+ if (pack.CSC2&0x08) //AEH\r
+ if (pack.bytes[1]>pack.HC) {alarmflag=1;pack.CSC2|=0x20;}\r
+ if (pack.CSC2&0x04) //AEL\r
+ if (pack.bytes[1]<pack.LC) {alarmflag=1;pack.CSC2|=0x10;}\r
+ } \r
+ if (pack.convc1&8) {\r
+ cli();pack.D=VAD_D;sei();\r
+ if (pack.CSD2&0x08) //AEH\r
+ if (pack.bytes[1]>pack.HD) {alarmflag=1;pack.CSD2|=0x20;}\r
+ if (pack.CSD2&0x04) //AEL\r
+ if (pack.bytes[1]<pack.LD) {alarmflag=1;pack.CSD2|=0x10;}\r
+ }\r
+ \r
+ EXTERN_SLEEP();\r
+ //PORTB&=~(1<<PINB1);\r
+ }\r
+\r
+ uint8_t bb=1;\r
+ for(volatile uint8_t i=0;i<4;i++) {\r
+ if (pack.bytes[8+i*2]&0x80) { //Chanel as output\r
+ if (pack.bytes[8+i*2]&0x40) {\r
+ // AD_DDR|=bb;\r
+ } else {\r
+ cli();\r
+ // AD_DDR&=~bb;\r
+ sei();\r
+ }\r
+ } else {\r
+ cli();\r
+ // AD_DDR&=~bb;\r
+ sei();\r
+ }\r
+ bb=bb*2;\r
+ }\r
+ OWST_MAIN_END \r
+ }\r
+\r
+\r
+}
\ No newline at end of file
--- /dev/null
+\r
+Microsoft Visual Studio Solution File, Format Version 12.00\r
+# Atmel Studio Solution File, Format Version 11.00\r
+VisualStudioVersion = 14.0.25420.1\r
+MinimumVisualStudioVersion = 10.0.40219.1\r
+Project("{54F91283-7BC4-4236-8FF9-10F437C3AD48}") = "DS2450_ADC_JOE2", "DS2450_ADC_JOE2.cproj", "{DCE6C7E3-EE26-4D79-826B-08594B9AD897}"\r
+EndProject\r
+Global\r
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution\r
+ Debug|AVR = Debug|AVR\r
+ Release|AVR = Release|AVR\r
+ EndGlobalSection\r
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution\r
+ {DCE6C7E3-EE26-4D79-826B-08594B9AD897}.Debug|AVR.ActiveCfg = Debug|AVR\r
+ {DCE6C7E3-EE26-4D79-826B-08594B9AD897}.Debug|AVR.Build.0 = Debug|AVR\r
+ {DCE6C7E3-EE26-4D79-826B-08594B9AD897}.Release|AVR.ActiveCfg = Release|AVR\r
+ {DCE6C7E3-EE26-4D79-826B-08594B9AD897}.Release|AVR.Build.0 = Release|AVR\r
+ EndGlobalSection\r
+ GlobalSection(SolutionProperties) = preSolution\r
+ HideSolutionNode = FALSE\r
+ EndGlobalSection\r
+EndGlobal\r
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>\r
+<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="14.0">\r
+ <PropertyGroup>\r
+ <SchemaVersion>2.0</SchemaVersion>\r
+ <ProjectVersion>7.0</ProjectVersion>\r
+ <ToolchainName>com.Atmel.AVRGCC8.C</ToolchainName>\r
+ <ProjectGuid>dce6c7e3-ee26-4d79-826b-08594b9ad897</ProjectGuid>\r
+ <avrdevice>ATtiny84A</avrdevice>\r
+ <avrdeviceseries>none</avrdeviceseries>\r
+ <OutputType>Executable</OutputType>\r
+ <Language>C</Language>\r
+ <OutputFileName>$(MSBuildProjectName)</OutputFileName>\r
+ <OutputFileExtension>.elf</OutputFileExtension>\r
+ <OutputDirectory>$(MSBuildProjectDirectory)\$(Configuration)</OutputDirectory>\r
+ <AssemblyName>DS2450</AssemblyName>\r
+ <Name>DS2450_ADC_JOE2</Name>\r
+ <RootNamespace>DS2450</RootNamespace>\r
+ <ToolchainFlavour>Native</ToolchainFlavour>\r
+ <KeepTimersRunning>true</KeepTimersRunning>\r
+ <OverrideVtor>false</OverrideVtor>\r
+ <CacheFlash>true</CacheFlash>\r
+ <ProgFlashFromRam>true</ProgFlashFromRam>\r
+ <RamSnippetAddress>0x20000000</RamSnippetAddress>\r
+ <UncachedRange />\r
+ <preserveEEPROM>true</preserveEEPROM>\r
+ <OverrideVtorValue>exception_table</OverrideVtorValue>\r
+ <BootSegment>2</BootSegment>\r
+ <eraseonlaunchrule>1</eraseonlaunchrule>\r
+ <ExternalProgrammingToolCommand />\r
+ <AsfFrameworkConfig>\r
+ <framework-data>\r
+ <options />\r
+ <configurations />\r
+ <files />\r
+ <documentation help="" />\r
+ <offline-documentation help="" />\r
+ <dependencies>\r
+ <content-extension eid="atmel.asf" uuidref="Atmel.ASF" version="3.28.1" />\r
+ </dependencies>\r
+ </framework-data>\r
+ </AsfFrameworkConfig>\r
+ <avrtool>com.atmel.avrdbg.tool.atmelice</avrtool>\r
+ <avrtoolinterface>debugWIRE</avrtoolinterface>\r
+ <avrtoolserialnumber>J41800000789</avrtoolserialnumber>\r
+ <avrdeviceexpectedsignature>0x1E930C</avrdeviceexpectedsignature>\r
+ <com_atmel_avrdbg_tool_atmelice>\r
+ <ToolOptions>\r
+ <InterfaceProperties>\r
+ <IspClock>125000</IspClock>\r
+ </InterfaceProperties>\r
+ <InterfaceName>debugWIRE</InterfaceName>\r
+ </ToolOptions>\r
+ <ToolType>com.atmel.avrdbg.tool.atmelice</ToolType>\r
+ <ToolNumber>J41800000789</ToolNumber>\r
+ <ToolName>Atmel-ICE</ToolName>\r
+ </com_atmel_avrdbg_tool_atmelice>\r
+ <avrtoolinterfaceclock>125000</avrtoolinterfaceclock>\r
+ </PropertyGroup>\r
+ <PropertyGroup Condition=" '$(Configuration)' == 'Release' ">\r
+ <ToolchainSettings>\r
+ <AvrGcc>\r
+ <avrgcc.common.Device>-mmcu=attiny84a -B "%24(PackRepoDir)\atmel\ATtiny_DFP\1.1.102\gcc\dev\attiny84a"</avrgcc.common.Device>\r
+ <avrgcc.common.outputfiles.hex>True</avrgcc.common.outputfiles.hex>\r
+ <avrgcc.common.outputfiles.lss>True</avrgcc.common.outputfiles.lss>\r
+ <avrgcc.common.outputfiles.eep>True</avrgcc.common.outputfiles.eep>\r
+ <avrgcc.common.outputfiles.srec>True</avrgcc.common.outputfiles.srec>\r
+ <avrgcc.common.outputfiles.usersignatures>False</avrgcc.common.outputfiles.usersignatures>\r
+ <avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>True</avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>\r
+ <avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>True</avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>\r
+ <avrgcc.compiler.symbols.DefSymbols>\r
+ <ListValues>\r
+ <Value>NDEBUG</Value>\r
+ </ListValues>\r
+ </avrgcc.compiler.symbols.DefSymbols>\r
+ <avrgcc.compiler.directories.IncludePaths>\r
+ <ListValues>\r
+ <Value>%24(PackRepoDir)\atmel\ATtiny_DFP\1.1.102\include</Value>\r
+ </ListValues>\r
+ </avrgcc.compiler.directories.IncludePaths>\r
+ <avrgcc.compiler.optimization.level>Optimize for size (-Os)</avrgcc.compiler.optimization.level>\r
+ <avrgcc.compiler.optimization.PackStructureMembers>True</avrgcc.compiler.optimization.PackStructureMembers>\r
+ <avrgcc.compiler.optimization.AllocateBytesNeededForEnum>True</avrgcc.compiler.optimization.AllocateBytesNeededForEnum>\r
+ <avrgcc.compiler.warnings.AllWarnings>True</avrgcc.compiler.warnings.AllWarnings>\r
+ <avrgcc.linker.libraries.Libraries>\r
+ <ListValues>\r
+ <Value>libm</Value>\r
+ </ListValues>\r
+ </avrgcc.linker.libraries.Libraries>\r
+ <avrgcc.assembler.general.IncludePaths>\r
+ <ListValues>\r
+ <Value>%24(PackRepoDir)\atmel\ATtiny_DFP\1.1.102\include</Value>\r
+ </ListValues>\r
+ </avrgcc.assembler.general.IncludePaths>\r
+ </AvrGcc>\r
+ </ToolchainSettings>\r
+ </PropertyGroup>\r
+ <PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">\r
+ <ToolchainSettings>\r
+ <AvrGcc>\r
+ <avrgcc.common.Device>-mmcu=attiny84a -B "%24(PackRepoDir)\atmel\ATtiny_DFP\1.1.102\gcc\dev\attiny84a"</avrgcc.common.Device>\r
+ <avrgcc.common.outputfiles.hex>True</avrgcc.common.outputfiles.hex>\r
+ <avrgcc.common.outputfiles.lss>True</avrgcc.common.outputfiles.lss>\r
+ <avrgcc.common.outputfiles.eep>True</avrgcc.common.outputfiles.eep>\r
+ <avrgcc.common.outputfiles.srec>True</avrgcc.common.outputfiles.srec>\r
+ <avrgcc.common.outputfiles.usersignatures>False</avrgcc.common.outputfiles.usersignatures>\r
+ <avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>True</avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>\r
+ <avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>True</avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>\r
+ <avrgcc.compiler.symbols.DefSymbols>\r
+ <ListValues>\r
+ <Value>DEBUG</Value>\r
+ </ListValues>\r
+ </avrgcc.compiler.symbols.DefSymbols>\r
+ <avrgcc.compiler.directories.IncludePaths>\r
+ <ListValues>\r
+ <Value>%24(PackRepoDir)\atmel\ATtiny_DFP\1.1.102\include</Value>\r
+ </ListValues>\r
+ </avrgcc.compiler.directories.IncludePaths>\r
+ <avrgcc.compiler.optimization.level>Optimize (-O1)</avrgcc.compiler.optimization.level>\r
+ <avrgcc.compiler.optimization.PackStructureMembers>True</avrgcc.compiler.optimization.PackStructureMembers>\r
+ <avrgcc.compiler.optimization.AllocateBytesNeededForEnum>True</avrgcc.compiler.optimization.AllocateBytesNeededForEnum>\r
+ <avrgcc.compiler.optimization.DebugLevel>Default (-g2)</avrgcc.compiler.optimization.DebugLevel>\r
+ <avrgcc.compiler.warnings.AllWarnings>True</avrgcc.compiler.warnings.AllWarnings>\r
+ <avrgcc.linker.libraries.Libraries>\r
+ <ListValues>\r
+ <Value>libm</Value>\r
+ </ListValues>\r
+ </avrgcc.linker.libraries.Libraries>\r
+ <avrgcc.assembler.general.IncludePaths>\r
+ <ListValues>\r
+ <Value>%24(PackRepoDir)\atmel\ATtiny_DFP\1.1.102\include</Value>\r
+ </ListValues>\r
+ </avrgcc.assembler.general.IncludePaths>\r
+ <avrgcc.assembler.debugging.DebugLevel>Default (-Wa,-g)</avrgcc.assembler.debugging.DebugLevel>\r
+ </AvrGcc>\r
+ </ToolchainSettings>\r
+ </PropertyGroup>\r
+ <ItemGroup>\r
+ <Compile Include="DS2450.c">\r
+ <SubType>compile</SubType>\r
+ </Compile>\r
+ <Compile Include="OWDS2450.S">\r
+ <SubType>compile</SubType>\r
+ </Compile>\r
+ </ItemGroup>\r
+ <Import Project="$(AVRSTUDIO_EXE_PATH)\\Vs\\Compiler.targets" />\r
+</Project>
\ No newline at end of file
--- /dev/null
+\r
+// Copyright (c) 2017, Tobias Mueller tm(at)tm3d.de\r
+// All rights reserved. \r
+// \r
+// Redistribution and use in source and binary forms, with or without \r
+// modification, are permitted provided that the following conditions are \r
+// met: \r
+// \r
+// * Redistributions of source code must retain the above copyright \r
+// notice, this list of conditions and the following disclaimer. \r
+// * Redistributions in binary form must reproduce the above copyright \r
+// notice, this list of conditions and the following disclaimer in the \r
+// documentation and/or other materials provided with the \r
+// distribution. \r
+// * All advertising materials mentioning features or use of this \r
+// software must display the following acknowledgement: This product \r
+// includes software developed by tm3d.de and its contributors. \r
+// * Neither the name of tm3d.de nor the names of its contributors may \r
+// be used to endorse or promote products derived from this software \r
+// without specific prior written permission. \r
+// \r
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \r
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT \r
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR \r
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT \r
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, \r
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT \r
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, \r
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY \r
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT \r
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE \r
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \r
+\r
+#define _CHANGEABLE_ID_\r
+#define _ZERO_POLLING_\r
+//#define __4MHZ__\r
+//#define _DB_\r
+#include "../common/OWConfig.s"\r
+#include "../common/OWCRC16.s"\r
+\r
+.extern pack,8\r
+.comm addr,1 ;zweites Adressbyte ist unnoetig (Warum auch immer fuer 32 Byte 16 Bit Adressen verwendet werden....)\r
+.comm crcsave,1 ; zwischenspeicherspeicher fuer crc nur zweites byte....\r
+//.extern am2302_temp,2\r
+\r
+\r
+\r
+.macro CHIP_INIT \r
+.endm\r
+\r
+.macro COMMAND_TABLE\r
+ rjmp h_readmemoryaddr\r
+ rjmp h_readmemory\r
+ rjmp h_readmemorycrc1\r
+ rjmp h_readmemorycrc2\r
+ rjmp h_writememoryaddr\r
+ rjmp h_writememory\r
+ rjmp h_writememorycrc1\r
+ rjmp h_writememorycrc2\r
+ rjmp h_writememoryreadback\r
+ rjmp h_convert\r
+ rjmp h_convertcrc1\r
+ rjmp h_convertcrc2\r
+ rjmp h_convert_conv\r
+.endm\r
+\r
+#include "../common/OWRomFunctions.s"\r
+#include "../common/OWTimerInterrupt.s"\r
+\r
+\r
+\r
+; Ab hier Geraeteabhaenging\r
+#define OW_READ_MEMORY_ADDR OW_FIRST_COMMAND+0\r
+#define OW_READ_MEMORY OW_FIRST_COMMAND+1\r
+#define OW_READ_MEMORY_CRC1 OW_FIRST_COMMAND+2\r
+#define OW_READ_MEMORY_CRC2 OW_FIRST_COMMAND+3\r
+#define OW_WRITE_MEMORY_ADDR OW_FIRST_COMMAND+4\r
+#define OW_WRITE_MEMORY OW_FIRST_COMMAND+5\r
+#define OW_WRITE_MEMORY_CRC1 OW_FIRST_COMMAND+6\r
+#define OW_WRITE_MEMORY_CRC2 OW_FIRST_COMMAND+7\r
+#define OW_WRITE_MEMORY_READBACK OW_FIRST_COMMAND+8\r
+#define OW_CONVERT OW_FIRST_COMMAND+9\r
+#define OW_CONVERT_CRC1 OW_FIRST_COMMAND+10\r
+#define OW_CONVERT_CRC2 OW_FIRST_COMMAND+11\r
+#define OW_CONVERT_CONV OW_FIRST_COMMAND+12\r
+\r
+;---------------------------------------------------\r
+; READ COMMAND and start operation\r
+;---------------------------------------------------\r
+\r
+\r
+h_readcommand:\r
+ clr r_bytep\r
+#ifndef _DIS_FLASH_\r
+ FLASH_COMMANDS ; muss zu erst sein....\r
+#endif\r
+ cset 0xAA,OW_READ_MEMORY_ADDR\r
+ cset 0x55,OW_WRITE_MEMORY_ADDR\r
+ cset 0x3C,OW_CONVERT\r
+ FW_CONFIG_INFO\r
+#ifdef _CHANGEABLE_ID_\r
+ CHANGE_ID_COMMANDS\r
+#endif\r
+ ldi r_mode,OW_SLEEP\r
+ rjmp handle_end\r
+\r
+\r
+h_readmemoryaddr:\r
+ cpi r_bytep,0 ;erstes Adressbyte ?\r
+ brne h_readmemory_addr_byte1 ;nein dann weiter\r
+ andi r_rwbyte,0x1F ; nur Adressen zwischen 0 und 0x1F zulassen\r
+ sts addr,r_rwbyte ;speichern des ersten bytes\r
+ rjmp handle_end_inc\r
+h_readmemory_addr_byte1: ;zweiters Addressbyte wird nicht gespeichert!\r
+ ldi r_mode,OW_READ_MEMORY ;weiter zu read Memory\r
+ ;;ldi r_bcount,1 ;ist unten\r
+ ldi r_sendflag,1 ;jetzt sendet der Slave zum Master\r
+ clr r_bytep\r
+ rjmp h_readmemory2\r
+h_readmemory:\r
+ lds r_bytep,addr\r
+ inc r_bytep\r
+ sts addr,r_bytep\r
+ andi r_bytep,0x07\r
+ breq h_readmemory_init_crc\r
+h_readmemory2:\r
+ lds r_bytep,addr\r
+ ;andi r_bytep,0x1F ist oben\r
+ configZ pack,r_bytep\r
+ ld r_rwbyte,Z\r
+ ;ldi r_bcount,1\r
+ rjmp handle_end ;sendet das Byte und geht zu h_readmemory\r
+h_readmemory_init_crc:; init erstes CRC byte\r
+ lds r_rwbyte,crc\r
+ com r_rwbyte\r
+ lds r_temp,crc+1\r
+ com r_temp\r
+ sts crcsave,r_temp\r
+ ldi r_mode,OW_READ_MEMORY_CRC1\r
+ ;ldi r_bcount,1\r
+ rjmp handle_end\r
+h_readmemory_end:\r
+ //ldi r_mode,OW_SLEEP\r
+ //clr r_sendflag\r
+ rjmp handle_end_sleep\r
+h_readmemorycrc1:;init zweites CRC Byte\r
+ lds r_rwbyte,crcsave\r
+ ;ldi r_bcount,1\r
+ ldi r_mode,OW_READ_MEMORY_CRC2\r
+ rjmp handle_end\r
+h_readmemorycrc2:;weiteres senden..... nach zweitem Byte\r
+ lds r_temp,addr\r
+ andi r_temp,0xE0\r
+ brne h_readmemory_end; ende des speichers\r
+ ldi r_mode,OW_READ_MEMORY\r
+ CRCInit1 ;Start with new CRC\r
+ rjmp h_readmemory2\r
+\r
+h_writememoryaddr:\r
+ cpi r_bytep,0 ;erstes Adressbyte ?\r
+ brne h_writememory_addr_byte1 ;nein dann weiter\r
+ andi r_rwbyte,0x1F ; nur Adressen zwischen 0 und 0x1F zulassen\r
+ sts addr,r_rwbyte ;speichern des ersten bytes\r
+ inc r_bytep\r
+ ;ldi r_bcount,1\r
+ rjmp handle_end\r
+h_writememory_addr_byte1: ;zweiters Addressbyte wird nicht gespeichert!\r
+ ldi r_mode,OW_WRITE_MEMORY ;weiter zu read Memory\r
+ ;ldi r_bcount,1 ;; _________________________________________________in handle_end integrieren.....\r
+ lds r_bytep,addr\r
+ rjmp handle_end ;read Memory Byte\r
+h_writememory:\r
+ lds r_bytep,addr\r
+ configZ pack,r_bytep\r
+ st Z,r_rwbyte\r
+ ;ldi r_bcount,1\r
+ ldi r_mode,OW_WRITE_MEMORY_CRC1\r
+ ldi r_sendflag,1 ;jetzt sendet der Slave zum Master\r
+ lds r_rwbyte,crc\r
+ com r_rwbyte\r
+ lds r_temp,crc+1\r
+ com r_temp\r
+ sts crcsave,r_temp\r
+ rjmp handle_end\r
+h_writememorycrc1:\r
+ lds r_rwbyte,crcsave\r
+ ;ldi r_bcount,1\r
+ ldi r_mode,OW_WRITE_MEMORY_CRC2\r
+ rjmp handle_end\r
+h_writememorycrc2:\r
+ lds r_temp,addr\r
+ configZ pack,r_temp\r
+ ld r_rwbyte,Z\r
+ ;ldi r_bcount,1\r
+ ldi r_mode,OW_WRITE_MEMORY_READBACK\r
+ rjmp handle_end\r
+h_writememoryreadback:\r
+ ldi r_temp,0x00\r
+ sts crc+1,r_temp\r
+ lds r_temp,addr\r
+ inc r_temp\r
+ sts addr,r_temp\r
+ sts crc,r_temp\r
+ ldi r_sendflag,0\r
+ ;ldi r_bcount,1\r
+ ldi r_mode,OW_WRITE_MEMORY\r
+ rjmp handle_end\r
+\r
+h_convert:\r
+ cpi r_bytep,0 ;erstes Adressbyte ?\r
+ brne h_convert_byte1 ;nein dann weiter\r
+ inc r_bytep\r
+ sts pack+0x20,r_rwbyte\r
+ ;ldi r_bcount,1\r
+ rjmp handle_end\r
+h_convert_byte1: ;zweies byte glesen go crc#\r
+ sts pack+0x21,r_rwbyte\r
+ lds r_rwbyte,crc\r
+ com r_rwbyte\r
+ lds r_temp,crc+1\r
+ com r_temp\r
+ sts crcsave,r_temp\r
+ ldi r_mode,OW_CONVERT_CRC1\r
+ ;ldi r_bcount,1\r
+ ldi r_sendflag,1\r
+ rjmp handle_end \r
+h_convertcrc1:\r
+ lds r_rwbyte,crcsave\r
+ ;ldi r_bcount,1\r
+ ldi r_mode,OW_CONVERT_CRC2\r
+ rjmp handle_end\r
+h_convertcrc2:\r
+ ldi r_temp,1\r
+ sts gcontrol,r_temp\r
+ ;ldi r_bcount,1\r
+ ldi r_mode,OW_CONVERT_CONV\r
+ ;clr r_sendflag\r
+ ldi r_sendflag,3 ;set bit 0 and 1 for no zero polling\r
+h_convert_conv:\r
+ ldi r_bcount,0\r
+ ldi r_rwbyte,0\r
+ rjmp handle_end_no_bcount \r
+\r
+\r
+\r
+\r
+#include "../common/OWPinInterrupt.s"\r
+.end
\ No newline at end of file
-
-Microsoft Visual Studio Solution File, Format Version 12.00
-# Atmel Studio Solution File, Format Version 11.00
-VisualStudioVersion = 14.0.23107.0
-MinimumVisualStudioVersion = 10.0.40219.1
-Project("{54F91283-7BC4-4236-8FF9-10F437C3AD48}") = "DS2450_APDS9960", "DS2450_APDS9960.cproj", "{DCE6C7E3-EE26-4D79-826B-08594B9AD897}"
-EndProject
-Global
- GlobalSection(SolutionConfigurationPlatforms) = preSolution
- Debug|AVR = Debug|AVR
- Release|AVR = Release|AVR
- EndGlobalSection
- GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {DCE6C7E3-EE26-4D79-826B-08594B9AD897}.Debug|AVR.ActiveCfg = Debug|AVR
- {DCE6C7E3-EE26-4D79-826B-08594B9AD897}.Debug|AVR.Build.0 = Debug|AVR
- {DCE6C7E3-EE26-4D79-826B-08594B9AD897}.Release|AVR.ActiveCfg = Release|AVR
- {DCE6C7E3-EE26-4D79-826B-08594B9AD897}.Release|AVR.Build.0 = Release|AVR
- EndGlobalSection
- GlobalSection(SolutionProperties) = preSolution
- HideSolutionNode = FALSE
- EndGlobalSection
-EndGlobal
+\r
+Microsoft Visual Studio Solution File, Format Version 12.00\r
+# Atmel Studio Solution File, Format Version 11.00\r
+VisualStudioVersion = 14.0.23107.0\r
+MinimumVisualStudioVersion = 10.0.40219.1\r
+Project("{54F91283-7BC4-4236-8FF9-10F437C3AD48}") = "DS2450_APDS9960", "DS2450_APDS9960.cproj", "{DCE6C7E3-EE26-4D79-826B-08594B9AD897}"\r
+EndProject\r
+Global\r
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution\r
+ Debug|AVR = Debug|AVR\r
+ Release|AVR = Release|AVR\r
+ EndGlobalSection\r
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution\r
+ {DCE6C7E3-EE26-4D79-826B-08594B9AD897}.Debug|AVR.ActiveCfg = Debug|AVR\r
+ {DCE6C7E3-EE26-4D79-826B-08594B9AD897}.Debug|AVR.Build.0 = Debug|AVR\r
+ {DCE6C7E3-EE26-4D79-826B-08594B9AD897}.Release|AVR.ActiveCfg = Release|AVR\r
+ {DCE6C7E3-EE26-4D79-826B-08594B9AD897}.Release|AVR.Build.0 = Release|AVR\r
+ EndGlobalSection\r
+ GlobalSection(SolutionProperties) = preSolution\r
+ HideSolutionNode = FALSE\r
+ EndGlobalSection\r
+EndGlobal\r
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="14.0">
- <PropertyGroup>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectVersion>7.0</ProjectVersion>
- <ToolchainName>com.Atmel.AVRGCC8.C</ToolchainName>
- <ProjectGuid>dce6c7e3-ee26-4d79-826b-08594b9ad897</ProjectGuid>
- <avrdevice>ATtiny84A</avrdevice>
- <avrdeviceseries>none</avrdeviceseries>
- <OutputType>Executable</OutputType>
- <Language>C</Language>
- <OutputFileName>$(MSBuildProjectName)</OutputFileName>
- <OutputFileExtension>.elf</OutputFileExtension>
- <OutputDirectory>$(MSBuildProjectDirectory)\$(Configuration)</OutputDirectory>
- <AssemblyName>DS2450</AssemblyName>
- <Name>DS2450_APDS9960</Name>
- <RootNamespace>DS2450</RootNamespace>
- <ToolchainFlavour>Native</ToolchainFlavour>
- <KeepTimersRunning>true</KeepTimersRunning>
- <OverrideVtor>false</OverrideVtor>
- <CacheFlash>true</CacheFlash>
- <ProgFlashFromRam>true</ProgFlashFromRam>
- <RamSnippetAddress>0x20000000</RamSnippetAddress>
- <UncachedRange />
- <preserveEEPROM>true</preserveEEPROM>
- <OverrideVtorValue>exception_table</OverrideVtorValue>
- <BootSegment>2</BootSegment>
- <eraseonlaunchrule>1</eraseonlaunchrule>
- <ExternalProgrammingToolCommand />
- <AsfFrameworkConfig>
- <framework-data>
- <options />
- <configurations />
- <files />
- <documentation help="" />
- <offline-documentation help="" />
- <dependencies>
- <content-extension eid="atmel.asf" uuidref="Atmel.ASF" version="3.28.1" />
- </dependencies>
- </framework-data>
- </AsfFrameworkConfig>
- <avrtool>com.atmel.avrdbg.tool.atmelice</avrtool>
- <avrtoolserialnumber>J41800000789</avrtoolserialnumber>
- <avrdeviceexpectedsignature>0x1E930C</avrdeviceexpectedsignature>
- <com_atmel_avrdbg_tool_atmelice>
- <ToolOptions>
- <InterfaceProperties>
- </InterfaceProperties>
- <InterfaceName>debugWIRE</InterfaceName>
- </ToolOptions>
- <ToolType>com.atmel.avrdbg.tool.atmelice</ToolType>
- <ToolNumber>J41800000789</ToolNumber>
- <ToolName>Atmel-ICE</ToolName>
- </com_atmel_avrdbg_tool_atmelice>
- <avrtoolinterface>debugWIRE</avrtoolinterface>
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)' == 'Release' ">
- <ToolchainSettings>
- <AvrGcc>
- <avrgcc.common.Device>-mmcu=attiny84a -B "%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.79\gcc\dev\attiny84a"</avrgcc.common.Device>
- <avrgcc.common.outputfiles.hex>True</avrgcc.common.outputfiles.hex>
- <avrgcc.common.outputfiles.lss>True</avrgcc.common.outputfiles.lss>
- <avrgcc.common.outputfiles.eep>True</avrgcc.common.outputfiles.eep>
- <avrgcc.common.outputfiles.srec>True</avrgcc.common.outputfiles.srec>
- <avrgcc.common.outputfiles.usersignatures>False</avrgcc.common.outputfiles.usersignatures>
- <avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>True</avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>
- <avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>True</avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>
- <avrgcc.compiler.symbols.DefSymbols>
- <ListValues>
- <Value>NDEBUG</Value>
- </ListValues>
- </avrgcc.compiler.symbols.DefSymbols>
- <avrgcc.compiler.directories.IncludePaths>
- <ListValues>
- <Value>%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.79\include</Value>
- </ListValues>
- </avrgcc.compiler.directories.IncludePaths>
- <avrgcc.compiler.optimization.level>Optimize for size (-Os)</avrgcc.compiler.optimization.level>
- <avrgcc.compiler.optimization.PackStructureMembers>True</avrgcc.compiler.optimization.PackStructureMembers>
- <avrgcc.compiler.optimization.AllocateBytesNeededForEnum>True</avrgcc.compiler.optimization.AllocateBytesNeededForEnum>
- <avrgcc.compiler.warnings.AllWarnings>True</avrgcc.compiler.warnings.AllWarnings>
- <avrgcc.linker.libraries.Libraries>
- <ListValues>
- <Value>libm</Value>
- </ListValues>
- </avrgcc.linker.libraries.Libraries>
- <avrgcc.assembler.general.IncludePaths>
- <ListValues>
- <Value>%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.79\include</Value>
- </ListValues>
- </avrgcc.assembler.general.IncludePaths>
- </AvrGcc>
- </ToolchainSettings>
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
- <ToolchainSettings>
- <AvrGcc>
- <avrgcc.common.Device>-mmcu=attiny84a -B "%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.79\gcc\dev\attiny84a"</avrgcc.common.Device>
- <avrgcc.common.outputfiles.hex>True</avrgcc.common.outputfiles.hex>
- <avrgcc.common.outputfiles.lss>True</avrgcc.common.outputfiles.lss>
- <avrgcc.common.outputfiles.eep>True</avrgcc.common.outputfiles.eep>
- <avrgcc.common.outputfiles.srec>True</avrgcc.common.outputfiles.srec>
- <avrgcc.common.outputfiles.usersignatures>False</avrgcc.common.outputfiles.usersignatures>
- <avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>True</avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>
- <avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>True</avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>
- <avrgcc.compiler.symbols.DefSymbols>
- <ListValues>
- <Value>DEBUG</Value>
- </ListValues>
- </avrgcc.compiler.symbols.DefSymbols>
- <avrgcc.compiler.directories.IncludePaths>
- <ListValues>
- <Value>%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.79\include</Value>
- </ListValues>
- </avrgcc.compiler.directories.IncludePaths>
- <avrgcc.compiler.optimization.level>Optimize (-O1)</avrgcc.compiler.optimization.level>
- <avrgcc.compiler.optimization.PackStructureMembers>True</avrgcc.compiler.optimization.PackStructureMembers>
- <avrgcc.compiler.optimization.AllocateBytesNeededForEnum>True</avrgcc.compiler.optimization.AllocateBytesNeededForEnum>
- <avrgcc.compiler.optimization.DebugLevel>Default (-g2)</avrgcc.compiler.optimization.DebugLevel>
- <avrgcc.compiler.warnings.AllWarnings>True</avrgcc.compiler.warnings.AllWarnings>
- <avrgcc.linker.libraries.Libraries>
- <ListValues>
- <Value>libm</Value>
- </ListValues>
- </avrgcc.linker.libraries.Libraries>
- <avrgcc.assembler.general.IncludePaths>
- <ListValues>
- <Value>%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.79\include</Value>
- </ListValues>
- </avrgcc.assembler.general.IncludePaths>
- <avrgcc.assembler.debugging.DebugLevel>Default (-Wa,-g)</avrgcc.assembler.debugging.DebugLevel>
- </AvrGcc>
- </ToolchainSettings>
- </PropertyGroup>
- <ItemGroup>
- <Compile Include="..\common\I2C\APDS9960.c">
- <SubType>compile</SubType>
- <Link>APDS9960.c</Link>
- </Compile>
- <Compile Include="..\common\I2C\USI_TWI_Master.c">
- <SubType>compile</SubType>
- <Link>USI_TWI_Master.c</Link>
- </Compile>
- <Compile Include="DS2450_APDS9960.c">
- <SubType>compile</SubType>
- </Compile>
- <Compile Include="OWDS2450.S">
- <SubType>compile</SubType>
- </Compile>
- </ItemGroup>
- <Import Project="$(AVRSTUDIO_EXE_PATH)\\Vs\\Compiler.targets" />
+<?xml version="1.0" encoding="utf-8"?>\r
+<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="14.0">\r
+ <PropertyGroup>\r
+ <SchemaVersion>2.0</SchemaVersion>\r
+ <ProjectVersion>7.0</ProjectVersion>\r
+ <ToolchainName>com.Atmel.AVRGCC8.C</ToolchainName>\r
+ <ProjectGuid>dce6c7e3-ee26-4d79-826b-08594b9ad897</ProjectGuid>\r
+ <avrdevice>ATtiny84A</avrdevice>\r
+ <avrdeviceseries>none</avrdeviceseries>\r
+ <OutputType>Executable</OutputType>\r
+ <Language>C</Language>\r
+ <OutputFileName>$(MSBuildProjectName)</OutputFileName>\r
+ <OutputFileExtension>.elf</OutputFileExtension>\r
+ <OutputDirectory>$(MSBuildProjectDirectory)\$(Configuration)</OutputDirectory>\r
+ <AssemblyName>DS2450</AssemblyName>\r
+ <Name>DS2450_APDS9960</Name>\r
+ <RootNamespace>DS2450</RootNamespace>\r
+ <ToolchainFlavour>Native</ToolchainFlavour>\r
+ <KeepTimersRunning>true</KeepTimersRunning>\r
+ <OverrideVtor>false</OverrideVtor>\r
+ <CacheFlash>true</CacheFlash>\r
+ <ProgFlashFromRam>true</ProgFlashFromRam>\r
+ <RamSnippetAddress>0x20000000</RamSnippetAddress>\r
+ <UncachedRange />\r
+ <preserveEEPROM>true</preserveEEPROM>\r
+ <OverrideVtorValue>exception_table</OverrideVtorValue>\r
+ <BootSegment>2</BootSegment>\r
+ <eraseonlaunchrule>1</eraseonlaunchrule>\r
+ <ExternalProgrammingToolCommand />\r
+ <AsfFrameworkConfig>\r
+ <framework-data>\r
+ <options />\r
+ <configurations />\r
+ <files />\r
+ <documentation help="" />\r
+ <offline-documentation help="" />\r
+ <dependencies>\r
+ <content-extension eid="atmel.asf" uuidref="Atmel.ASF" version="3.28.1" />\r
+ </dependencies>\r
+ </framework-data>\r
+ </AsfFrameworkConfig>\r
+ <avrtool>com.atmel.avrdbg.tool.atmelice</avrtool>\r
+ <avrtoolserialnumber>J41800000789</avrtoolserialnumber>\r
+ <avrdeviceexpectedsignature>0x1E930C</avrdeviceexpectedsignature>\r
+ <com_atmel_avrdbg_tool_atmelice>\r
+ <ToolOptions>\r
+ <InterfaceProperties>\r
+ </InterfaceProperties>\r
+ <InterfaceName>debugWIRE</InterfaceName>\r
+ </ToolOptions>\r
+ <ToolType>com.atmel.avrdbg.tool.atmelice</ToolType>\r
+ <ToolNumber>J41800000789</ToolNumber>\r
+ <ToolName>Atmel-ICE</ToolName>\r
+ </com_atmel_avrdbg_tool_atmelice>\r
+ <avrtoolinterface>debugWIRE</avrtoolinterface>\r
+ </PropertyGroup>\r
+ <PropertyGroup Condition=" '$(Configuration)' == 'Release' ">\r
+ <ToolchainSettings>\r
+ <AvrGcc>\r
+ <avrgcc.common.Device>-mmcu=attiny84a -B "%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.79\gcc\dev\attiny84a"</avrgcc.common.Device>\r
+ <avrgcc.common.outputfiles.hex>True</avrgcc.common.outputfiles.hex>\r
+ <avrgcc.common.outputfiles.lss>True</avrgcc.common.outputfiles.lss>\r
+ <avrgcc.common.outputfiles.eep>True</avrgcc.common.outputfiles.eep>\r
+ <avrgcc.common.outputfiles.srec>True</avrgcc.common.outputfiles.srec>\r
+ <avrgcc.common.outputfiles.usersignatures>False</avrgcc.common.outputfiles.usersignatures>\r
+ <avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>True</avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>\r
+ <avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>True</avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>\r
+ <avrgcc.compiler.symbols.DefSymbols>\r
+ <ListValues>\r
+ <Value>NDEBUG</Value>\r
+ </ListValues>\r
+ </avrgcc.compiler.symbols.DefSymbols>\r
+ <avrgcc.compiler.directories.IncludePaths>\r
+ <ListValues>\r
+ <Value>%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.79\include</Value>\r
+ </ListValues>\r
+ </avrgcc.compiler.directories.IncludePaths>\r
+ <avrgcc.compiler.optimization.level>Optimize for size (-Os)</avrgcc.compiler.optimization.level>\r
+ <avrgcc.compiler.optimization.PackStructureMembers>True</avrgcc.compiler.optimization.PackStructureMembers>\r
+ <avrgcc.compiler.optimization.AllocateBytesNeededForEnum>True</avrgcc.compiler.optimization.AllocateBytesNeededForEnum>\r
+ <avrgcc.compiler.warnings.AllWarnings>True</avrgcc.compiler.warnings.AllWarnings>\r
+ <avrgcc.linker.libraries.Libraries>\r
+ <ListValues>\r
+ <Value>libm</Value>\r
+ </ListValues>\r
+ </avrgcc.linker.libraries.Libraries>\r
+ <avrgcc.assembler.general.IncludePaths>\r
+ <ListValues>\r
+ <Value>%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.79\include</Value>\r
+ </ListValues>\r
+ </avrgcc.assembler.general.IncludePaths>\r
+ </AvrGcc>\r
+ </ToolchainSettings>\r
+ </PropertyGroup>\r
+ <PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">\r
+ <ToolchainSettings>\r
+ <AvrGcc>\r
+ <avrgcc.common.Device>-mmcu=attiny84a -B "%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.79\gcc\dev\attiny84a"</avrgcc.common.Device>\r
+ <avrgcc.common.outputfiles.hex>True</avrgcc.common.outputfiles.hex>\r
+ <avrgcc.common.outputfiles.lss>True</avrgcc.common.outputfiles.lss>\r
+ <avrgcc.common.outputfiles.eep>True</avrgcc.common.outputfiles.eep>\r
+ <avrgcc.common.outputfiles.srec>True</avrgcc.common.outputfiles.srec>\r
+ <avrgcc.common.outputfiles.usersignatures>False</avrgcc.common.outputfiles.usersignatures>\r
+ <avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>True</avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>\r
+ <avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>True</avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>\r
+ <avrgcc.compiler.symbols.DefSymbols>\r
+ <ListValues>\r
+ <Value>DEBUG</Value>\r
+ </ListValues>\r
+ </avrgcc.compiler.symbols.DefSymbols>\r
+ <avrgcc.compiler.directories.IncludePaths>\r
+ <ListValues>\r
+ <Value>%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.79\include</Value>\r
+ </ListValues>\r
+ </avrgcc.compiler.directories.IncludePaths>\r
+ <avrgcc.compiler.optimization.level>Optimize (-O1)</avrgcc.compiler.optimization.level>\r
+ <avrgcc.compiler.optimization.PackStructureMembers>True</avrgcc.compiler.optimization.PackStructureMembers>\r
+ <avrgcc.compiler.optimization.AllocateBytesNeededForEnum>True</avrgcc.compiler.optimization.AllocateBytesNeededForEnum>\r
+ <avrgcc.compiler.optimization.DebugLevel>Default (-g2)</avrgcc.compiler.optimization.DebugLevel>\r
+ <avrgcc.compiler.warnings.AllWarnings>True</avrgcc.compiler.warnings.AllWarnings>\r
+ <avrgcc.linker.libraries.Libraries>\r
+ <ListValues>\r
+ <Value>libm</Value>\r
+ </ListValues>\r
+ </avrgcc.linker.libraries.Libraries>\r
+ <avrgcc.assembler.general.IncludePaths>\r
+ <ListValues>\r
+ <Value>%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.79\include</Value>\r
+ </ListValues>\r
+ </avrgcc.assembler.general.IncludePaths>\r
+ <avrgcc.assembler.debugging.DebugLevel>Default (-Wa,-g)</avrgcc.assembler.debugging.DebugLevel>\r
+ </AvrGcc>\r
+ </ToolchainSettings>\r
+ </PropertyGroup>\r
+ <ItemGroup>\r
+ <Compile Include="..\common\I2C\APDS9960.c">\r
+ <SubType>compile</SubType>\r
+ <Link>APDS9960.c</Link>\r
+ </Compile>\r
+ <Compile Include="..\common\I2C\USI_TWI_Master.c">\r
+ <SubType>compile</SubType>\r
+ <Link>USI_TWI_Master.c</Link>\r
+ </Compile>\r
+ <Compile Include="DS2450_APDS9960.c">\r
+ <SubType>compile</SubType>\r
+ </Compile>\r
+ <Compile Include="OWDS2450.S">\r
+ <SubType>compile</SubType>\r
+ </Compile>\r
+ </ItemGroup>\r
+ <Import Project="$(AVRSTUDIO_EXE_PATH)\\Vs\\Compiler.targets" />\r
</Project>
\ No newline at end of file
--- /dev/null
+\r
+// Copyright (c) 2017, Tobias Mueller tm(at)tm3d.de\r
+// All rights reserved. \r
+// \r
+// Redistribution and use in source and binary forms, with or without \r
+// modification, are permitted provided that the following conditions are \r
+// met: \r
+// \r
+// * Redistributions of source code must retain the above copyright \r
+// notice, this list of conditions and the following disclaimer. \r
+// * Redistributions in binary form must reproduce the above copyright \r
+// notice, this list of conditions and the following disclaimer in the \r
+// documentation and/or other materials provided with the \r
+// distribution. \r
+// * All advertising materials mentioning features or use of this \r
+// software must display the following acknowledgement: This product \r
+// includes software developed by tm3d.de and its contributors. \r
+// * Neither the name of tm3d.de nor the names of its contributors may \r
+// be used to endorse or promote products derived from this software \r
+// without specific prior written permission. \r
+// \r
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \r
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT \r
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR \r
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT \r
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, \r
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT \r
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, \r
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY \r
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT \r
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE \r
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \r
+\r
+#define _CHANGEABLE_ID_\r
+#define _ZERO_POLLING_\r
+#define __4MHZ__\r
+\r
+#include "../common/OWConfig.s"\r
+#include "../common/OWCRC16.s"\r
+\r
+.extern pack,8\r
+.comm addr,1 ;zweites Adressbyte ist unnoetig (Warum auch immer fuer 32 Byte 16 Bit Adressen verwendet werden....)\r
+.comm crcsave,1 ; zwischenspeicherspeicher fuer crc nur zweites byte....\r
+//.extern am2302_temp,2\r
+\r
+\r
+\r
+.macro CHIP_INIT \r
+.endm\r
+\r
+.macro COMMAND_TABLE\r
+ rjmp h_readmemoryaddr\r
+ rjmp h_readmemory\r
+ rjmp h_readmemorycrc1\r
+ rjmp h_readmemorycrc2\r
+ rjmp h_writememoryaddr\r
+ rjmp h_writememory\r
+ rjmp h_writememorycrc1\r
+ rjmp h_writememorycrc2\r
+ rjmp h_writememoryreadback\r
+ rjmp h_convert\r
+ rjmp h_convertcrc1\r
+ rjmp h_convertcrc2\r
+ rjmp h_convert_conv\r
+.endm\r
+\r
+#include "../common/OWRomFunctions.s"\r
+#include "../common/OWTimerInterrupt.s"\r
+\r
+\r
+\r
+; Ab hier Geraeteabhaenging\r
+#define OW_READ_MEMORY_ADDR OW_FIRST_COMMAND+0\r
+#define OW_READ_MEMORY OW_FIRST_COMMAND+1\r
+#define OW_READ_MEMORY_CRC1 OW_FIRST_COMMAND+2\r
+#define OW_READ_MEMORY_CRC2 OW_FIRST_COMMAND+3\r
+#define OW_WRITE_MEMORY_ADDR OW_FIRST_COMMAND+4\r
+#define OW_WRITE_MEMORY OW_FIRST_COMMAND+5\r
+#define OW_WRITE_MEMORY_CRC1 OW_FIRST_COMMAND+6\r
+#define OW_WRITE_MEMORY_CRC2 OW_FIRST_COMMAND+7\r
+#define OW_WRITE_MEMORY_READBACK OW_FIRST_COMMAND+8\r
+#define OW_CONVERT OW_FIRST_COMMAND+9\r
+#define OW_CONVERT_CRC1 OW_FIRST_COMMAND+10\r
+#define OW_CONVERT_CRC2 OW_FIRST_COMMAND+11\r
+#define OW_CONVERT_CONV OW_FIRST_COMMAND+12\r
+\r
+;---------------------------------------------------\r
+; READ COMMAND and start operation\r
+;---------------------------------------------------\r
+\r
+\r
+h_readcommand:\r
+ clr r_bytep\r
+#ifndef _DIS_FLASH_\r
+ FLASH_COMMANDS ; muss zu erst sein....\r
+#endif\r
+ cset 0xAA,OW_READ_MEMORY_ADDR\r
+ cset 0x55,OW_WRITE_MEMORY_ADDR\r
+ cset 0x3C,OW_CONVERT\r
+ FW_CONFIG_INFO\r
+#ifdef _CHANGEABLE_ID_\r
+ CHANGE_ID_COMMANDS\r
+#endif\r
+ ldi r_mode,OW_SLEEP\r
+ rjmp handle_end\r
+\r
+\r
+h_readmemoryaddr:\r
+ cpi r_bytep,0 ;erstes Adressbyte ?\r
+ brne h_readmemory_addr_byte1 ;nein dann weiter\r
+ andi r_rwbyte,0x1F ; nur Adressen zwischen 0 und 0x1F zulassen\r
+ sts addr,r_rwbyte ;speichern des ersten bytes\r
+ rjmp handle_end_inc\r
+h_readmemory_addr_byte1: ;zweiters Addressbyte wird nicht gespeichert!\r
+ ldi r_mode,OW_READ_MEMORY ;weiter zu read Memory\r
+ ;;ldi r_bcount,1 ;ist unten\r
+ ldi r_sendflag,1 ;jetzt sendet der Slave zum Master\r
+ clr r_bytep\r
+ rjmp h_readmemory2\r
+h_readmemory:\r
+ lds r_bytep,addr\r
+ inc r_bytep\r
+ sts addr,r_bytep\r
+ andi r_bytep,0x07\r
+ breq h_readmemory_init_crc\r
+h_readmemory2:\r
+ lds r_bytep,addr\r
+ ;andi r_bytep,0x1F ist oben\r
+ configZ pack,r_bytep\r
+ ld r_rwbyte,Z\r
+ ;ldi r_bcount,1\r
+ rjmp handle_end ;sendet das Byte und geht zu h_readmemory\r
+h_readmemory_init_crc:; init erstes CRC byte\r
+ lds r_rwbyte,crc\r
+ com r_rwbyte\r
+ lds r_temp,crc+1\r
+ com r_temp\r
+ sts crcsave,r_temp\r
+ ldi r_mode,OW_READ_MEMORY_CRC1\r
+ ;ldi r_bcount,1\r
+ rjmp handle_end\r
+h_readmemory_end:\r
+ ldi r_mode,OW_SLEEP\r
+ clr r_sendflag\r
+ rjmp handle_end\r
+h_readmemorycrc1:;init zweites CRC Byte\r
+ lds r_rwbyte,crcsave\r
+ ;ldi r_bcount,1\r
+ ldi r_mode,OW_READ_MEMORY_CRC2\r
+ rjmp handle_end\r
+h_readmemorycrc2:;weiteres senden..... nach zweitem Byte\r
+ lds r_temp,addr\r
+ andi r_temp,0xE0\r
+ brne h_readmemory_end; ende des speichers\r
+ ldi r_mode,OW_READ_MEMORY\r
+ CRCInit1 ;Start with new CRC\r
+ rjmp h_readmemory2\r
+\r
+h_writememoryaddr:\r
+ cpi r_bytep,0 ;erstes Adressbyte ?\r
+ brne h_writememory_addr_byte1 ;nein dann weiter\r
+ andi r_rwbyte,0x1F ; nur Adressen zwischen 0 und 0x1F zulassen\r
+ sts addr,r_rwbyte ;speichern des ersten bytes\r
+ inc r_bytep\r
+ ;ldi r_bcount,1\r
+ rjmp handle_end\r
+h_writememory_addr_byte1: ;zweiters Addressbyte wird nicht gespeichert!\r
+ ldi r_mode,OW_WRITE_MEMORY ;weiter zu read Memory\r
+ ;ldi r_bcount,1 ;; _________________________________________________in handle_end integrieren.....\r
+ lds r_bytep,addr\r
+ rjmp handle_end ;read Memory Byte\r
+h_writememory:\r
+ lds r_bytep,addr\r
+ configZ pack,r_bytep\r
+ st Z,r_rwbyte\r
+ ;ldi r_bcount,1\r
+ ldi r_mode,OW_WRITE_MEMORY_CRC1\r
+ ldi r_sendflag,1 ;jetzt sendet der Slave zum Master\r
+ lds r_rwbyte,crc\r
+ com r_rwbyte\r
+ lds r_temp,crc+1\r
+ com r_temp\r
+ sts crcsave,r_temp\r
+ rjmp handle_end\r
+h_writememorycrc1:\r
+ lds r_rwbyte,crcsave\r
+ ;ldi r_bcount,1\r
+ ldi r_mode,OW_WRITE_MEMORY_CRC2\r
+ rjmp handle_end\r
+h_writememorycrc2:\r
+ lds r_temp,addr\r
+ configZ pack,r_temp\r
+ ld r_rwbyte,Z\r
+ ;ldi r_bcount,1\r
+ ldi r_mode,OW_WRITE_MEMORY_READBACK\r
+ rjmp handle_end\r
+h_writememoryreadback:\r
+ ldi r_temp,0x00\r
+ sts crc+1,r_temp\r
+ lds r_temp,addr\r
+ inc r_temp\r
+ sts addr,r_temp\r
+ sts crc,r_temp\r
+ ldi r_sendflag,0\r
+ ;ldi r_bcount,1\r
+ ldi r_mode,OW_WRITE_MEMORY\r
+ rjmp handle_end\r
+\r
+h_convert:\r
+ cpi r_bytep,0 ;erstes Adressbyte ?\r
+ brne h_convert_byte1 ;nein dann weiter\r
+ inc r_bytep\r
+ sts pack+0x20,r_rwbyte\r
+ ;ldi r_bcount,1\r
+ rjmp handle_end\r
+h_convert_byte1: ;zweies byte glesen go crc#\r
+ sts pack+0x21,r_rwbyte\r
+ lds r_rwbyte,crc\r
+ com r_rwbyte\r
+ lds r_temp,crc+1\r
+ com r_temp\r
+ sts crcsave,r_temp\r
+ ldi r_mode,OW_CONVERT_CRC1\r
+ ;ldi r_bcount,1\r
+ ldi r_sendflag,1\r
+ rjmp handle_end \r
+h_convertcrc1:\r
+ lds r_rwbyte,crcsave\r
+ ;ldi r_bcount,1\r
+ ldi r_mode,OW_CONVERT_CRC2\r
+ rjmp handle_end\r
+h_convertcrc2:\r
+ ldi r_temp,1\r
+ sts gcontrol,r_temp\r
+ ;ldi r_bcount,1\r
+ ldi r_mode,OW_CONVERT_CONV\r
+ ;clr r_sendflag\r
+ ldi r_sendflag,3 ;set bit 0 and 1 for no zero polling\r
+h_convert_conv:\r
+ ldi r_bcount,0\r
+ ldi r_rwbyte,0\r
+ rjmp handle_end_no_bcount \r
+\r
+\r
+\r
+\r
+#include "../common/OWPinInterrupt.s"\r
+.end
\ No newline at end of file
--- /dev/null
+\r
+Microsoft Visual Studio Solution File, Format Version 12.00\r
+# Atmel Studio Solution File, Format Version 11.00\r
+VisualStudioVersion = 14.0.23107.0\r
+MinimumVisualStudioVersion = 10.0.40219.1\r
+Project("{54F91283-7BC4-4236-8FF9-10F437C3AD48}") = "DS2450_BME680", "DS2450_BME680.cproj", "{DCE6C7E3-EE26-4D79-826B-08594B9AD897}"\r
+EndProject\r
+Global\r
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution\r
+ Debug|AVR = Debug|AVR\r
+ Release|AVR = Release|AVR\r
+ EndGlobalSection\r
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution\r
+ {DCE6C7E3-EE26-4D79-826B-08594B9AD897}.Debug|AVR.ActiveCfg = Debug|AVR\r
+ {DCE6C7E3-EE26-4D79-826B-08594B9AD897}.Debug|AVR.Build.0 = Debug|AVR\r
+ {DCE6C7E3-EE26-4D79-826B-08594B9AD897}.Release|AVR.ActiveCfg = Release|AVR\r
+ {DCE6C7E3-EE26-4D79-826B-08594B9AD897}.Release|AVR.Build.0 = Release|AVR\r
+ EndGlobalSection\r
+ GlobalSection(SolutionProperties) = preSolution\r
+ HideSolutionNode = FALSE\r
+ EndGlobalSection\r
+EndGlobal\r
--- /dev/null
+\r
+// Copyright (c) 2017, Tobias Mueller tm(at)tm3d.de\r
+// All rights reserved.\r
+//\r
+// Redistribution and use in source and binary forms, with or without\r
+// modification, are permitted provided that the following conditions are\r
+// met:\r
+//\r
+// * Redistributions of source code must retain the above copyright\r
+// notice, this list of conditions and the following disclaimer.\r
+// * Redistributions in binary form must reproduce the above copyright\r
+// notice, this list of conditions and the following disclaimer in the\r
+// documentation and/or other materials provided with the\r
+// distribution.\r
+// * All advertising materials mentioning features or use of this\r
+// software must display the following acknowledgement: This product\r
+// includes software developed by tm3d.de and its contributors.\r
+// * Neither the name of tm3d.de nor the names of its contributors may\r
+// be used to endorse or promote products derived from this software\r
+// without specific prior written permission.\r
+//\r
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\r
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\r
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\r
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\r
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\r
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\r
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\r
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\r
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+\r
+#define F_CPU 8000000UL\r
+#include <avr/io.h>\r
+#include <avr/interrupt.h>\r
+#include <util/delay.h>\r
+#include <avr/wdt.h>\r
+#include <avr/sleep.h>\r
+#include <avr/pgmspace.h>\r
+#include "../common/I2C/TWI_Master.h"\r
+#include "../common/I2C/BME680.h"\r
+\r
+extern void OWINIT();\r
+extern void EXTERN_SLEEP();\r
+\r
+uint8_t owid[8]={0x20, 0xA2, 0xD9, 0x84, 0x00, 0x16, 0x23, 0x20};/**/\r
+//uint8_t config_info[26]={0x03,13,0x03,13,0x03,13,0x3,15,0x02,20,20,20,20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};\r
+//uint8_t config_info[26]={1,14,4,8,2,8,11,18,0x02,24,24,24,24,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};\r
+uint8_t config_info[26]={1,13,4,13,2,8,11,8,0x02,24,24,24,24,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};\r
+\r
+\r
+#if (owid>128) \r
+#error "Variable not correct"\r
+#endif\r
+\r
+extern uint8_t mode;\r
+extern uint8_t gcontrol;\r
+extern uint8_t reset_indicator;\r
+extern uint8_t alarmflag;\r
+volatile uint8_t wdcounter=10;\r
+\r
+\r
+#if defined(__AVR_ATtiny24__)||defined(__AVR_ATtiny44__) || defined(__AVR_ATtiny84__) || defined(__AVR_ATtiny24A__)||defined(__AVR_ATtiny44A__) || defined(__AVR_ATtiny84A__)\r
+ISR(WATCHDOG_vect) {\r
+ #else\r
+ ISR(WDT_vect) {\r
+ #endif\r
+ wdcounter++;\r
+ // if (reset_indicator==1) reset_indicator++;\r
+ //else if (reset_indicator==2) mode=0;\r
+ }\r
+\r
+typedef union {\r
+ volatile uint8_t bytes[0x22];\r
+ struct {\r
+ //Page0\r
+ uint16_t A; //0\r
+ uint16_t B; //2\r
+ uint16_t C; //4\r
+ uint16_t D; //6\r
+ //Page1\r
+ uint8_t CSA1;\r
+ uint8_t CSA2;\r
+ uint8_t CSB1;\r
+ uint8_t CSB2;\r
+ uint8_t CSC1;\r
+ uint8_t CSC2;\r
+ uint8_t CSD1;\r
+ uint8_t CSD2;\r
+ //Page2\r
+ uint8_t LA;\r
+ uint8_t HA;\r
+ uint8_t LB;\r
+ uint8_t HB;\r
+ uint8_t LC;\r
+ uint8_t HC;\r
+ uint8_t LD;\r
+ uint8_t HD;\r
+ //Page3\r
+ uint8_t FC1;\r
+ uint8_t FC2;\r
+ uint8_t FC3;\r
+ uint8_t FC4;\r
+ uint8_t VCCP;\r
+ uint8_t FC5;\r
+ uint8_t FC6;\r
+ uint8_t FC7;\r
+ uint8_t convc1;\r
+ uint8_t convc2;\r
+ \r
+ \r
+ };\r
+} pack_t;\r
+volatile pack_t pack;\r
+\r
+\r
+int16_t T;\r
+uint16_t H;\r
+uint32_t P;\r
+uint16_t G;\r
+\r
+\r
+int main(void){\r
+ pack.A=0;\r
+ pack.B=0;\r
+ pack.C=0;\r
+ pack.D=0;\r
+ pack.CSA1=0x08;\r
+ pack.CSA2=0x8C;\r
+ pack.CSB1=0x08;\r
+ pack.CSB2=0x8C;\r
+ pack.CSC1=0x08;\r
+ pack.CSC2=0x8C;\r
+ pack.CSD1=0x08;\r
+ pack.CSD2=0x8C;\r
+ pack.HA=0xFF;\r
+ pack.LA=0x00;\r
+ pack.HB=0xFF;\r
+ pack.LB=0x00;\r
+ pack.HC=0xFF;\r
+ pack.LC=0x00;\r
+ pack.HD=0xFF;\r
+ pack.LD=0x00;\r
+ pack.VCCP=0;\r
+\r
+ PORTA=0xFF;\r
+ //PORTB=0xFF;\r
+ //PORTC=0xFF;\r
+// PORTD=0xFF;\r
+\r
+ OWINIT();\r
+\r
+ MCUCR &=~(1<<PUD); //All Pins Pullup...\r
+ MCUCR |=(1<<BODS);\r
+\r
+ //PORTA&=~((1<<PINA0)|(1<<PINA1)|(1<<PINA2)|(1<<PINA3));\r
+\r
+\r
+\r
+ WDTCSR |= (1<<WDCE) |(1<<WDE); // Enable the WD Change Bit//| (1<<WDE)\r
+ WDTCSR = (1<<WDIE) | // Enable WDT Interrupt\r
+ (1<<WDP3) | (1<<WDP0); // Set Timeout to ~8 seconds\r
+\r
+ wdcounter=4;\r
+ \r
+ gcontrol=1;\r
+ TWI_Master_Initialise();\r
+ \r
+ initBME680();\r
+ sei();\r
+ \r
+ //DDRB|=(1<<PINB1);\r
+\r
+ while(1) {\r
+ if (wdcounter>1) {\r
+ readBMP680(&T,&H,&P,&G);\r
+ wdcounter=0;\r
+ }\r
+\r
+ if (gcontrol) {\r
+ //PORTB|=(1<<PINB1);\r
+ uint8_t bb=1;\r
+ uint8_t bb1=1;\r
+ for(uint8_t i=0;i<4;i++){\r
+ if (pack.convc1&bb1) {\r
+ if (pack.convc2&(bb)) {pack.bytes[i*2]=0;pack.bytes[i*2+1]=0;}\r
+ bb=bb<<1;\r
+ if (pack.convc2&(bb)) {pack.bytes[i*2]=0xFF;pack.bytes[i*2+1]=0xFF;}\r
+ bb=bb<<1;\r
+ } else bb=bb<<2;\r
+ bb1=bb1<<1; \r
+ }\r
+ //CHanel A\r
+ if (pack.convc1&1) {\r
+ \r
+ //cli();pack.A=rlight[0];sei();\r
+ //cli();pack.A=r_gain;sei();\r
+ //cli();pack.A=T+32767;sei();\r
+ cli();pack.A=T;sei();\r
+ alarmflag=0;\r
+ if (pack.CSA2&0x08) //AEH\r
+ if (pack.bytes[1]>pack.HA) {alarmflag=1;pack.CSA2|=0x20;}\r
+ if (pack.CSA2&0x04) //AEL\r
+ if (pack.bytes[1]<pack.LA) {alarmflag=1;pack.CSA2|=0x10;}\r
+ }\r
+\r
+ if (pack.convc1&2) {\r
+ //cli();pack.B=rlight[1];sei();\r
+ //cli();pack.B=atime;sei();\r
+ cli();pack.B=H;sei();\r
+ if (pack.CSB2&0x08) //AEH\r
+ if (pack.bytes[1]>pack.HB) {alarmflag=1;pack.CSB2|=0x20;}\r
+ if (pack.CSB2&0x04) //AEL\r
+ if (pack.bytes[1]<pack.LB) {alarmflag=1;pack.CSB2|=0x10;}\r
+ }\r
+\r
+ if (pack.convc1&4) {\r
+ //cli();pack.C=rlight[2];sei();\r
+ cli();pack.C=P/10;sei();\r
+ if (pack.CSC2&0x08) //AEH\r
+ if (pack.bytes[1]>pack.HC) {alarmflag=1;pack.CSC2|=0x20;}\r
+ if (pack.CSC2&0x04) //AEL\r
+ if (pack.bytes[1]<pack.LC) {alarmflag=1;pack.CSC2|=0x10;}\r
+ } \r
+ if (pack.convc1&8) {\r
+ //cli();pack.D=rlight[3];sei();\r
+ cli();pack.D=G;sei();\r
+ if (pack.CSD2&0x08) //AEH\r
+ if (pack.bytes[1]>pack.HD) {alarmflag=1;pack.CSD2|=0x20;}\r
+ if (pack.CSD2&0x04) //AEL\r
+ if (pack.bytes[1]<pack.LD) {alarmflag=1;pack.CSD2|=0x10;}\r
+ }\r
+ \r
+ EXTERN_SLEEP();\r
+ //PORTB&=~(1<<PINB1);\r
+ }\r
+\r
+ uint8_t bb=1;\r
+ for(uint8_t i=0;i<4;i++) {\r
+ if (pack.bytes[8+i*2]&0x80) { //Chanel as output\r
+ if (pack.bytes[8+i*2]&0x40) {\r
+ //DDRA|=bb;\r
+ } else {\r
+ //DDRA&=~bb;\r
+ }\r
+ } else {\r
+ //DDRA&=~bb;\r
+ }\r
+ bb=bb*2;\r
+ }\r
+ \r
+#if defined(__AVR_ATtiny25__)||defined(__AVR_ATtiny45__) || defined(__AVR_ATtiny85__)\r
+ if (((TIMSK & (1<<TOIE0))==0)&& (mode==0))\r
+#endif \r
+#if defined(__AVR_ATtiny24__)||defined(__AVR_ATtiny44__) || defined(__AVR_ATtiny84__) ||defined(__AVR_ATtiny24A__)||defined(__AVR_ATtiny44A__) || defined(__AVR_ATtiny84A__) ||defined(__AVR_ATmega168__)||defined(__AVR_ATmega168A__) ||defined(__AVR_ATmega328__) ||defined(__AVR_ATmega328P__) ||defined(__AVR_ATmega328PB__)\r
+\r
+ if (((TIMSK0 & (1<<TOIE0))==0)&& (mode==0))\r
+#endif\r
+ {\r
+\r
+ MCUCR|=(1<<SE)|(1<<SM1);\r
+ MCUCR&=~(1<<ISC01);\r
+ } else {\r
+ MCUCR|=(1<<SE);\r
+ MCUCR&=~(1<<SM1);\r
+ }\r
+ asm("SLEEP");\r
+ }\r
+\r
+\r
+}
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>\r
+<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="14.0">\r
+ <PropertyGroup>\r
+ <SchemaVersion>2.0</SchemaVersion>\r
+ <ProjectVersion>7.0</ProjectVersion>\r
+ <ToolchainName>com.Atmel.AVRGCC8.C</ToolchainName>\r
+ <ProjectGuid>dce6c7e3-ee26-4d79-826b-08594b9ad897</ProjectGuid>\r
+ <avrdevice>ATtiny84A</avrdevice>\r
+ <avrdeviceseries>none</avrdeviceseries>\r
+ <OutputType>Executable</OutputType>\r
+ <Language>C</Language>\r
+ <OutputFileName>$(MSBuildProjectName)</OutputFileName>\r
+ <OutputFileExtension>.elf</OutputFileExtension>\r
+ <OutputDirectory>$(MSBuildProjectDirectory)\$(Configuration)</OutputDirectory>\r
+ <AssemblyName>DS2450</AssemblyName>\r
+ <Name>DS2450_BME680</Name>\r
+ <RootNamespace>DS2450</RootNamespace>\r
+ <ToolchainFlavour>Native</ToolchainFlavour>\r
+ <KeepTimersRunning>true</KeepTimersRunning>\r
+ <OverrideVtor>false</OverrideVtor>\r
+ <CacheFlash>true</CacheFlash>\r
+ <ProgFlashFromRam>true</ProgFlashFromRam>\r
+ <RamSnippetAddress>0x20000000</RamSnippetAddress>\r
+ <UncachedRange />\r
+ <preserveEEPROM>true</preserveEEPROM>\r
+ <OverrideVtorValue>exception_table</OverrideVtorValue>\r
+ <BootSegment>2</BootSegment>\r
+ <eraseonlaunchrule>0</eraseonlaunchrule>\r
+ <ExternalProgrammingToolCommand />\r
+ <AsfFrameworkConfig>\r
+ <framework-data>\r
+ <options />\r
+ <configurations />\r
+ <files />\r
+ <documentation help="" />\r
+ <offline-documentation help="" />\r
+ <dependencies>\r
+ <content-extension eid="atmel.asf" uuidref="Atmel.ASF" version="3.28.1" />\r
+ </dependencies>\r
+ </framework-data>\r
+ </AsfFrameworkConfig>\r
+ <avrtool>com.atmel.avrdbg.tool.atmelice</avrtool>\r
+ <avrtoolserialnumber>J41800000789</avrtoolserialnumber>\r
+ <avrdeviceexpectedsignature>0x1E930C</avrdeviceexpectedsignature>\r
+ <com_atmel_avrdbg_tool_atmelice>\r
+ <ToolOptions>\r
+ <InterfaceProperties>\r
+ <IspClock>125000</IspClock>\r
+ </InterfaceProperties>\r
+ <InterfaceName>ISP</InterfaceName>\r
+ </ToolOptions>\r
+ <ToolType>com.atmel.avrdbg.tool.atmelice</ToolType>\r
+ <ToolNumber>J41800000789</ToolNumber>\r
+ <ToolName>Atmel-ICE</ToolName>\r
+ </com_atmel_avrdbg_tool_atmelice>\r
+ <avrtoolinterface>ISP</avrtoolinterface>\r
+ <avrtoolinterfaceclock>125000</avrtoolinterfaceclock>\r
+ </PropertyGroup>\r
+ <PropertyGroup Condition=" '$(Configuration)' == 'Release' ">\r
+ <ToolchainSettings>\r
+ <AvrGcc>\r
+ <avrgcc.common.Device>-mmcu=attiny84a -B "%24(PackRepoDir)\atmel\ATtiny_DFP\1.1.102\gcc\dev\attiny84a"</avrgcc.common.Device>\r
+ <avrgcc.common.outputfiles.hex>True</avrgcc.common.outputfiles.hex>\r
+ <avrgcc.common.outputfiles.lss>True</avrgcc.common.outputfiles.lss>\r
+ <avrgcc.common.outputfiles.eep>True</avrgcc.common.outputfiles.eep>\r
+ <avrgcc.common.outputfiles.srec>True</avrgcc.common.outputfiles.srec>\r
+ <avrgcc.common.outputfiles.usersignatures>False</avrgcc.common.outputfiles.usersignatures>\r
+ <avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>True</avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>\r
+ <avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>True</avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>\r
+ <avrgcc.compiler.symbols.DefSymbols>\r
+ <ListValues>\r
+ <Value>NDEBUG</Value>\r
+ </ListValues>\r
+ </avrgcc.compiler.symbols.DefSymbols>\r
+ <avrgcc.compiler.directories.IncludePaths>\r
+ <ListValues>\r
+ <Value>%24(PackRepoDir)\atmel\ATtiny_DFP\1.1.102\include</Value>\r
+ </ListValues>\r
+ </avrgcc.compiler.directories.IncludePaths>\r
+ <avrgcc.compiler.optimization.level>Optimize for size (-Os)</avrgcc.compiler.optimization.level>\r
+ <avrgcc.compiler.optimization.PackStructureMembers>True</avrgcc.compiler.optimization.PackStructureMembers>\r
+ <avrgcc.compiler.optimization.AllocateBytesNeededForEnum>True</avrgcc.compiler.optimization.AllocateBytesNeededForEnum>\r
+ <avrgcc.compiler.warnings.AllWarnings>True</avrgcc.compiler.warnings.AllWarnings>\r
+ <avrgcc.linker.libraries.Libraries>\r
+ <ListValues>\r
+ <Value>libm</Value>\r
+ </ListValues>\r
+ </avrgcc.linker.libraries.Libraries>\r
+ <avrgcc.assembler.general.IncludePaths>\r
+ <ListValues>\r
+ <Value>%24(PackRepoDir)\atmel\ATtiny_DFP\1.1.102\include</Value>\r
+ </ListValues>\r
+ </avrgcc.assembler.general.IncludePaths>\r
+</AvrGcc>\r
+ </ToolchainSettings>\r
+ </PropertyGroup>\r
+ <PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">\r
+ <ToolchainSettings>\r
+ <AvrGcc>\r
+ <avrgcc.common.Device>-mmcu=attiny84a -B "%24(PackRepoDir)\atmel\ATtiny_DFP\1.1.102\gcc\dev\attiny84a"</avrgcc.common.Device>\r
+ <avrgcc.common.outputfiles.hex>True</avrgcc.common.outputfiles.hex>\r
+ <avrgcc.common.outputfiles.lss>True</avrgcc.common.outputfiles.lss>\r
+ <avrgcc.common.outputfiles.eep>True</avrgcc.common.outputfiles.eep>\r
+ <avrgcc.common.outputfiles.srec>True</avrgcc.common.outputfiles.srec>\r
+ <avrgcc.common.outputfiles.usersignatures>False</avrgcc.common.outputfiles.usersignatures>\r
+ <avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>True</avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>\r
+ <avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>True</avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>\r
+ <avrgcc.compiler.symbols.DefSymbols>\r
+ <ListValues>\r
+ <Value>DEBUG</Value>\r
+ </ListValues>\r
+ </avrgcc.compiler.symbols.DefSymbols>\r
+ <avrgcc.compiler.directories.IncludePaths>\r
+ <ListValues>\r
+ <Value>%24(PackRepoDir)\atmel\ATtiny_DFP\1.1.102\include</Value>\r
+ </ListValues>\r
+ </avrgcc.compiler.directories.IncludePaths>\r
+ <avrgcc.compiler.optimization.level>Optimize (-O1)</avrgcc.compiler.optimization.level>\r
+ <avrgcc.compiler.optimization.PackStructureMembers>True</avrgcc.compiler.optimization.PackStructureMembers>\r
+ <avrgcc.compiler.optimization.AllocateBytesNeededForEnum>True</avrgcc.compiler.optimization.AllocateBytesNeededForEnum>\r
+ <avrgcc.compiler.optimization.DebugLevel>Default (-g2)</avrgcc.compiler.optimization.DebugLevel>\r
+ <avrgcc.compiler.warnings.AllWarnings>True</avrgcc.compiler.warnings.AllWarnings>\r
+ <avrgcc.linker.libraries.Libraries>\r
+ <ListValues>\r
+ <Value>libm</Value>\r
+ </ListValues>\r
+ </avrgcc.linker.libraries.Libraries>\r
+ <avrgcc.assembler.general.IncludePaths>\r
+ <ListValues>\r
+ <Value>%24(PackRepoDir)\atmel\ATtiny_DFP\1.1.102\include</Value>\r
+ </ListValues>\r
+ </avrgcc.assembler.general.IncludePaths>\r
+ <avrgcc.assembler.debugging.DebugLevel>Default (-Wa,-g)</avrgcc.assembler.debugging.DebugLevel>\r
+</AvrGcc>\r
+ </ToolchainSettings>\r
+ </PropertyGroup>\r
+ <ItemGroup>\r
+ <Compile Include="..\common\I2C\BME680.c">\r
+ <SubType>compile</SubType>\r
+ <Link>BME680.c</Link>\r
+ </Compile>\r
+ <Compile Include="..\common\I2C\TWI_Master.c">\r
+ <SubType>compile</SubType>\r
+ <Link>TWI_Master.c</Link>\r
+ </Compile>\r
+ <Compile Include="DS2450_BME680.c">\r
+ <SubType>compile</SubType>\r
+ </Compile>\r
+ <Compile Include="OWDS2450.S">\r
+ <SubType>compile</SubType>\r
+ </Compile>\r
+ </ItemGroup>\r
+ <Import Project="$(AVRSTUDIO_EXE_PATH)\\Vs\\Compiler.targets" />\r
+</Project>
\ No newline at end of file
--- /dev/null
+\r
+// Copyright (c) 2017, Tobias Mueller tm(at)tm3d.de\r
+// All rights reserved. \r
+// \r
+// Redistribution and use in source and binary forms, with or without \r
+// modification, are permitted provided that the following conditions are \r
+// met: \r
+// \r
+// * Redistributions of source code must retain the above copyright \r
+// notice, this list of conditions and the following disclaimer. \r
+// * Redistributions in binary form must reproduce the above copyright \r
+// notice, this list of conditions and the following disclaimer in the \r
+// documentation and/or other materials provided with the \r
+// distribution. \r
+// * All advertising materials mentioning features or use of this \r
+// software must display the following acknowledgement: This product \r
+// includes software developed by tm3d.de and its contributors. \r
+// * Neither the name of tm3d.de nor the names of its contributors may \r
+// be used to endorse or promote products derived from this software \r
+// without specific prior written permission. \r
+// \r
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \r
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT \r
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR \r
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT \r
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, \r
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT \r
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, \r
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY \r
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT \r
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE \r
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \r
+\r
+#define _CHANGEABLE_ID_\r
+#define _ZERO_POLLING_\r
+#define __4MHZ__\r
+\r
+#include "../common/OWConfig.s"\r
+#include "../common/OWCRC16.s"\r
+\r
+.extern pack,8\r
+.comm addr,1 ;zweites Adressbyte ist unnoetig (Warum auch immer fuer 32 Byte 16 Bit Adressen verwendet werden....)\r
+.comm crcsave,1 ; zwischenspeicherspeicher fuer crc nur zweites byte....\r
+//.extern am2302_temp,2\r
+\r
+\r
+\r
+.macro CHIP_INIT \r
+.endm\r
+\r
+.macro COMMAND_TABLE\r
+ rjmp h_readmemoryaddr\r
+ rjmp h_readmemory\r
+ rjmp h_readmemorycrc1\r
+ rjmp h_readmemorycrc2\r
+ rjmp h_writememoryaddr\r
+ rjmp h_writememory\r
+ rjmp h_writememorycrc1\r
+ rjmp h_writememorycrc2\r
+ rjmp h_writememoryreadback\r
+ rjmp h_convert\r
+ rjmp h_convertcrc1\r
+ rjmp h_convertcrc2\r
+ rjmp h_convert_conv\r
+.endm\r
+\r
+#include "../common/OWRomFunctions.s"\r
+#include "../common/OWTimerInterrupt.s"\r
+\r
+\r
+\r
+; Ab hier Geraeteabhaenging\r
+#define OW_READ_MEMORY_ADDR OW_FIRST_COMMAND+0\r
+#define OW_READ_MEMORY OW_FIRST_COMMAND+1\r
+#define OW_READ_MEMORY_CRC1 OW_FIRST_COMMAND+2\r
+#define OW_READ_MEMORY_CRC2 OW_FIRST_COMMAND+3\r
+#define OW_WRITE_MEMORY_ADDR OW_FIRST_COMMAND+4\r
+#define OW_WRITE_MEMORY OW_FIRST_COMMAND+5\r
+#define OW_WRITE_MEMORY_CRC1 OW_FIRST_COMMAND+6\r
+#define OW_WRITE_MEMORY_CRC2 OW_FIRST_COMMAND+7\r
+#define OW_WRITE_MEMORY_READBACK OW_FIRST_COMMAND+8\r
+#define OW_CONVERT OW_FIRST_COMMAND+9\r
+#define OW_CONVERT_CRC1 OW_FIRST_COMMAND+10\r
+#define OW_CONVERT_CRC2 OW_FIRST_COMMAND+11\r
+#define OW_CONVERT_CONV OW_FIRST_COMMAND+12\r
+\r
+;---------------------------------------------------\r
+; READ COMMAND and start operation\r
+;---------------------------------------------------\r
+\r
+\r
+h_readcommand:\r
+ clr r_bytep\r
+#ifndef _DIS_FLASH_\r
+ FLASH_COMMANDS ; muss zu erst sein....\r
+#endif\r
+ cset 0xAA,OW_READ_MEMORY_ADDR\r
+ cset 0x55,OW_WRITE_MEMORY_ADDR\r
+ cset 0x3C,OW_CONVERT\r
+ FW_CONFIG_INFO\r
+#ifdef _CHANGEABLE_ID_\r
+ CHANGE_ID_COMMANDS\r
+#endif\r
+ ldi r_mode,OW_SLEEP\r
+ rjmp handle_end\r
+\r
+\r
+h_readmemoryaddr:\r
+ cpi r_bytep,0 ;erstes Adressbyte ?\r
+ brne h_readmemory_addr_byte1 ;nein dann weiter\r
+ andi r_rwbyte,0x1F ; nur Adressen zwischen 0 und 0x1F zulassen\r
+ sts addr,r_rwbyte ;speichern des ersten bytes\r
+ rjmp handle_end_inc\r
+h_readmemory_addr_byte1: ;zweiters Addressbyte wird nicht gespeichert!\r
+ ldi r_mode,OW_READ_MEMORY ;weiter zu read Memory\r
+ ;;ldi r_bcount,1 ;ist unten\r
+ ldi r_sendflag,1 ;jetzt sendet der Slave zum Master\r
+ clr r_bytep\r
+ rjmp h_readmemory2\r
+h_readmemory:\r
+ lds r_bytep,addr\r
+ inc r_bytep\r
+ sts addr,r_bytep\r
+ andi r_bytep,0x07\r
+ breq h_readmemory_init_crc\r
+h_readmemory2:\r
+ lds r_bytep,addr\r
+ ;andi r_bytep,0x1F ist oben\r
+ configZ pack,r_bytep\r
+ ld r_rwbyte,Z\r
+ ;ldi r_bcount,1\r
+ rjmp handle_end ;sendet das Byte und geht zu h_readmemory\r
+h_readmemory_init_crc:; init erstes CRC byte\r
+ lds r_rwbyte,crc\r
+ com r_rwbyte\r
+ lds r_temp,crc+1\r
+ com r_temp\r
+ sts crcsave,r_temp\r
+ ldi r_mode,OW_READ_MEMORY_CRC1\r
+ ;ldi r_bcount,1\r
+ rjmp handle_end\r
+h_readmemory_end:\r
+ ldi r_mode,OW_SLEEP\r
+ clr r_sendflag\r
+ rjmp handle_end\r
+h_readmemorycrc1:;init zweites CRC Byte\r
+ lds r_rwbyte,crcsave\r
+ ;ldi r_bcount,1\r
+ ldi r_mode,OW_READ_MEMORY_CRC2\r
+ rjmp handle_end\r
+h_readmemorycrc2:;weiteres senden..... nach zweitem Byte\r
+ lds r_temp,addr\r
+ andi r_temp,0xE0\r
+ brne h_readmemory_end; ende des speichers\r
+ ldi r_mode,OW_READ_MEMORY\r
+ CRCInit1 ;Start with new CRC\r
+ rjmp h_readmemory2\r
+\r
+h_writememoryaddr:\r
+ cpi r_bytep,0 ;erstes Adressbyte ?\r
+ brne h_writememory_addr_byte1 ;nein dann weiter\r
+ andi r_rwbyte,0x1F ; nur Adressen zwischen 0 und 0x1F zulassen\r
+ sts addr,r_rwbyte ;speichern des ersten bytes\r
+ inc r_bytep\r
+ ;ldi r_bcount,1\r
+ rjmp handle_end\r
+h_writememory_addr_byte1: ;zweiters Addressbyte wird nicht gespeichert!\r
+ ldi r_mode,OW_WRITE_MEMORY ;weiter zu read Memory\r
+ ;ldi r_bcount,1 ;; _________________________________________________in handle_end integrieren.....\r
+ lds r_bytep,addr\r
+ rjmp handle_end ;read Memory Byte\r
+h_writememory:\r
+ lds r_bytep,addr\r
+ configZ pack,r_bytep\r
+ st Z,r_rwbyte\r
+ ;ldi r_bcount,1\r
+ ldi r_mode,OW_WRITE_MEMORY_CRC1\r
+ ldi r_sendflag,1 ;jetzt sendet der Slave zum Master\r
+ lds r_rwbyte,crc\r
+ com r_rwbyte\r
+ lds r_temp,crc+1\r
+ com r_temp\r
+ sts crcsave,r_temp\r
+ rjmp handle_end\r
+h_writememorycrc1:\r
+ lds r_rwbyte,crcsave\r
+ ;ldi r_bcount,1\r
+ ldi r_mode,OW_WRITE_MEMORY_CRC2\r
+ rjmp handle_end\r
+h_writememorycrc2:\r
+ lds r_temp,addr\r
+ configZ pack,r_temp\r
+ ld r_rwbyte,Z\r
+ ;ldi r_bcount,1\r
+ ldi r_mode,OW_WRITE_MEMORY_READBACK\r
+ rjmp handle_end\r
+h_writememoryreadback:\r
+ ldi r_temp,0x00\r
+ sts crc+1,r_temp\r
+ lds r_temp,addr\r
+ inc r_temp\r
+ sts addr,r_temp\r
+ sts crc,r_temp\r
+ ldi r_sendflag,0\r
+ ;ldi r_bcount,1\r
+ ldi r_mode,OW_WRITE_MEMORY\r
+ rjmp handle_end\r
+\r
+h_convert:\r
+ cpi r_bytep,0 ;erstes Adressbyte ?\r
+ brne h_convert_byte1 ;nein dann weiter\r
+ inc r_bytep\r
+ sts pack+0x20,r_rwbyte\r
+ ;ldi r_bcount,1\r
+ rjmp handle_end\r
+h_convert_byte1: ;zweies byte glesen go crc#\r
+ sts pack+0x21,r_rwbyte\r
+ lds r_rwbyte,crc\r
+ com r_rwbyte\r
+ lds r_temp,crc+1\r
+ com r_temp\r
+ sts crcsave,r_temp\r
+ ldi r_mode,OW_CONVERT_CRC1\r
+ ;ldi r_bcount,1\r
+ ldi r_sendflag,1\r
+ rjmp handle_end \r
+h_convertcrc1:\r
+ lds r_rwbyte,crcsave\r
+ ;ldi r_bcount,1\r
+ ldi r_mode,OW_CONVERT_CRC2\r
+ rjmp handle_end\r
+h_convertcrc2:\r
+ ldi r_temp,1\r
+ sts gcontrol,r_temp\r
+ ;ldi r_bcount,1\r
+ ldi r_mode,OW_CONVERT_CONV\r
+ ;clr r_sendflag\r
+ ldi r_sendflag,3 ;set bit 0 and 1 for no zero polling\r
+h_convert_conv:\r
+ ldi r_bcount,0\r
+ ldi r_rwbyte,0\r
+ rjmp handle_end_no_bcount \r
+\r
+\r
+\r
+\r
+#include "../common/OWPinInterrupt.s"\r
+.end
\ No newline at end of file
--- /dev/null
+\r
+// Copyright (c) 2015, Tobias Mueller tm(at)tm3d.de\r
+// All rights reserved. \r
+// \r
+// Redistribution and use in source and binary forms, with or without \r
+// modification, are permitted provided that the following conditions are \r
+// met: \r
+// \r
+// * Redistributions of source code must retain the above copyright \r
+// notice, this list of conditions and the following disclaimer. \r
+// * Redistributions in binary form must reproduce the above copyright \r
+// notice, this list of conditions and the following disclaimer in the \r
+// documentation and/or other materials provided with the \r
+// distribution. \r
+// * All advertising materials mentioning features or use of this \r
+// software must display the following acknowledgement: This product \r
+// includes software developed by tm3d.de and its contributors. \r
+// * Neither the name of tm3d.de nor the names of its contributors may \r
+// be used to endorse or promote products derived from this software \r
+// without specific prior written permission. \r
+// \r
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \r
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT \r
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR \r
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT \r
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, \r
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT \r
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, \r
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY \r
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT \r
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE \r
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \r
+\r
+#define _CHANGEABLE_ID_\r
+#define _ZERO_POLLING_\r
+\r
+#include "../common/OWConfig.s"\r
+#include "../common/OWCRC16.s"\r
+\r
+.extern pack,8\r
+.comm addr,1 ;zweites Adressbyte ist unnoetig (Warum auch immer fuer 32 Byte 16 Bit Adressen verwendet werden....)\r
+.comm crcsave,1 ; zwischenspeicherspeicher fuer crc nur zweites byte....\r
+//.extern am2302_temp,2\r
+\r
+\r
+\r
+.macro CHIP_INIT \r
+.endm\r
+\r
+.macro COMMAND_TABLE\r
+ rjmp h_readmemoryaddr\r
+ rjmp h_readmemory\r
+ rjmp h_readmemorycrc1\r
+ rjmp h_readmemorycrc2\r
+ rjmp h_writememoryaddr\r
+ rjmp h_writememory\r
+ rjmp h_writememorycrc1\r
+ rjmp h_writememorycrc2\r
+ rjmp h_writememoryreadback\r
+ rjmp h_convert\r
+ rjmp h_convertcrc1\r
+ rjmp h_convertcrc2\r
+ rjmp h_convert_conv\r
+.endm\r
+\r
+#include "../common/OWRomFunctions.s"\r
+#include "../common/OWTimerInterrupt.s"\r
+\r
+\r
+\r
+; Ab hier Geraeteabhaenging\r
+#define OW_READ_MEMORY_ADDR OW_FIRST_COMMAND+0\r
+#define OW_READ_MEMORY OW_FIRST_COMMAND+1\r
+#define OW_READ_MEMORY_CRC1 OW_FIRST_COMMAND+2\r
+#define OW_READ_MEMORY_CRC2 OW_FIRST_COMMAND+3\r
+#define OW_WRITE_MEMORY_ADDR OW_FIRST_COMMAND+4\r
+#define OW_WRITE_MEMORY OW_FIRST_COMMAND+5\r
+#define OW_WRITE_MEMORY_CRC1 OW_FIRST_COMMAND+6\r
+#define OW_WRITE_MEMORY_CRC2 OW_FIRST_COMMAND+7\r
+#define OW_WRITE_MEMORY_READBACK OW_FIRST_COMMAND+8\r
+#define OW_CONVERT OW_FIRST_COMMAND+9\r
+#define OW_CONVERT_CRC1 OW_FIRST_COMMAND+10\r
+#define OW_CONVERT_CRC2 OW_FIRST_COMMAND+11\r
+#define OW_CONVERT_CONV OW_FIRST_COMMAND+12\r
+\r
+;---------------------------------------------------\r
+; READ COMMAND and start operation\r
+;---------------------------------------------------\r
+\r
+\r
+h_readcommand:\r
+ clr r_bytep\r
+#ifndef _DIS_FLASH_\r
+ FLASH_COMMANDS ; muss zu erst sein....\r
+#endif\r
+ cset 0xAA,OW_READ_MEMORY_ADDR\r
+ cset 0x55,OW_WRITE_MEMORY_ADDR\r
+ cset 0x3C,OW_CONVERT\r
+ FW_CONFIG_INFO\r
+#ifdef _CHANGEABLE_ID_\r
+ CHANGE_ID_COMMANDS\r
+#endif\r
+ ldi r_mode,OW_SLEEP\r
+ rjmp handle_end\r
+\r
+\r
+h_readmemoryaddr:\r
+ cpi r_bytep,0 ;erstes Adressbyte ?\r
+ brne h_readmemory_addr_byte1 ;nein dann weiter\r
+ andi r_rwbyte,0x1F ; nur Adressen zwischen 0 und 0x1F zulassen\r
+ sts addr,r_rwbyte ;speichern des ersten bytes\r
+ rjmp handle_end_inc\r
+h_readmemory_addr_byte1: ;zweiters Addressbyte wird nicht gespeichert!\r
+ ldi r_mode,OW_READ_MEMORY ;weiter zu read Memory\r
+ ;;ldi r_bcount,1 ;ist unten\r
+ ldi r_sendflag,1 ;jetzt sendet der Slave zum Master\r
+ clr r_bytep\r
+ rjmp h_readmemory2\r
+h_readmemory:\r
+ lds r_bytep,addr\r
+ inc r_bytep\r
+ sts addr,r_bytep\r
+ andi r_bytep,0x07\r
+ breq h_readmemory_init_crc\r
+h_readmemory2:\r
+ lds r_bytep,addr\r
+ ;andi r_bytep,0x1F ist oben\r
+ configZ pack,r_bytep\r
+ ld r_rwbyte,Z\r
+ ;ldi r_bcount,1\r
+ rjmp handle_end ;sendet das Byte und geht zu h_readmemory\r
+h_readmemory_init_crc:; init erstes CRC byte\r
+ lds r_rwbyte,crc\r
+ com r_rwbyte\r
+ lds r_temp,crc+1\r
+ com r_temp\r
+ sts crcsave,r_temp\r
+ ldi r_mode,OW_READ_MEMORY_CRC1\r
+ ;ldi r_bcount,1\r
+ rjmp handle_end\r
+h_readmemory_end:\r
+ ldi r_mode,OW_SLEEP\r
+ clr r_sendflag\r
+ rjmp handle_end\r
+h_readmemorycrc1:;init zweites CRC Byte\r
+ lds r_rwbyte,crcsave\r
+ ;ldi r_bcount,1\r
+ ldi r_mode,OW_READ_MEMORY_CRC2\r
+ rjmp handle_end\r
+h_readmemorycrc2:;weiteres senden..... nach zweitem Byte\r
+ lds r_temp,addr\r
+ andi r_temp,0xE0\r
+ brne h_readmemory_end; ende des speichers\r
+ ldi r_mode,OW_READ_MEMORY\r
+ CRCInit1 ;Start with new CRC\r
+ rjmp h_readmemory2\r
+\r
+h_writememoryaddr:\r
+ cpi r_bytep,0 ;erstes Adressbyte ?\r
+ brne h_writememory_addr_byte1 ;nein dann weiter\r
+ andi r_rwbyte,0x1F ; nur Adressen zwischen 0 und 0x1F zulassen\r
+ sts addr,r_rwbyte ;speichern des ersten bytes\r
+ inc r_bytep\r
+ ;ldi r_bcount,1\r
+ rjmp handle_end\r
+h_writememory_addr_byte1: ;zweiters Addressbyte wird nicht gespeichert!\r
+ ldi r_mode,OW_WRITE_MEMORY ;weiter zu read Memory\r
+ ;ldi r_bcount,1 ;; _________________________________________________in handle_end integrieren.....\r
+ lds r_bytep,addr\r
+ rjmp handle_end ;read Memory Byte\r
+h_writememory:\r
+ lds r_bytep,addr\r
+ configZ pack,r_bytep\r
+ st Z,r_rwbyte\r
+ ;ldi r_bcount,1\r
+ ldi r_mode,OW_WRITE_MEMORY_CRC1\r
+ ldi r_sendflag,1 ;jetzt sendet der Slave zum Master\r
+ lds r_rwbyte,crc\r
+ com r_rwbyte\r
+ lds r_temp,crc+1\r
+ com r_temp\r
+ sts crcsave,r_temp\r
+ rjmp handle_end\r
+h_writememorycrc1:\r
+ lds r_rwbyte,crcsave\r
+ ;ldi r_bcount,1\r
+ ldi r_mode,OW_WRITE_MEMORY_CRC2\r
+ rjmp handle_end\r
+h_writememorycrc2:\r
+ lds r_temp,addr\r
+ configZ pack,r_temp\r
+ ld r_rwbyte,Z\r
+ ;ldi r_bcount,1\r
+ ldi r_mode,OW_WRITE_MEMORY_READBACK\r
+ rjmp handle_end\r
+h_writememoryreadback:\r
+ ldi r_temp,0x00\r
+ sts crc+1,r_temp\r
+ lds r_temp,addr\r
+ inc r_temp\r
+ sts addr,r_temp\r
+ sts crc,r_temp\r
+ ldi r_sendflag,0\r
+ ;ldi r_bcount,1\r
+ ldi r_mode,OW_WRITE_MEMORY\r
+ rjmp handle_end\r
+\r
+h_convert:\r
+ cpi r_bytep,0 ;erstes Adressbyte ?\r
+ brne h_convert_byte1 ;nein dann weiter\r
+ inc r_bytep\r
+ sts pack+0x20,r_rwbyte\r
+ ;ldi r_bcount,1\r
+ rjmp handle_end\r
+h_convert_byte1: ;zweies byte glesen go crc#\r
+ sts pack+0x21,r_rwbyte\r
+ lds r_rwbyte,crc\r
+ com r_rwbyte\r
+ lds r_temp,crc+1\r
+ com r_temp\r
+ sts crcsave,r_temp\r
+ ldi r_mode,OW_CONVERT_CRC1\r
+ ;ldi r_bcount,1\r
+ ldi r_sendflag,1\r
+ rjmp handle_end \r
+h_convertcrc1:\r
+ lds r_rwbyte,crcsave\r
+ ;ldi r_bcount,1\r
+ ldi r_mode,OW_CONVERT_CRC2\r
+ rjmp handle_end\r
+h_convertcrc2:\r
+ ldi r_temp,1\r
+ sts gcontrol,r_temp\r
+ ;ldi r_bcount,1\r
+ ldi r_mode,OW_CONVERT_CONV\r
+ ;clr r_sendflag\r
+ ldi r_sendflag,3 ;set bit 0 and 1 for no zero polling\r
+h_convert_conv:\r
+ ldi r_bcount,0\r
+ ldi r_rwbyte,0\r
+ rjmp handle_end_no_bcount \r
+\r
+\r
+\r
+\r
+#include "../common/OWPinInterrupt.s"\r
+.end
\ No newline at end of file
--- /dev/null
+\r
+Microsoft Visual Studio Solution File, Format Version 12.00\r
+# Atmel Studio Solution File, Format Version 11.00\r
+VisualStudioVersion = 14.0.23107.0\r
+MinimumVisualStudioVersion = 10.0.40219.1\r
+Project("{54F91283-7BC4-4236-8FF9-10F437C3AD48}") = "DS2450_CDM7160", "DS2450_CDM7160.cproj", "{DCE6C7E3-EE26-4D79-826B-08594B9AD897}"\r
+EndProject\r
+Global\r
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution\r
+ Debug|AVR = Debug|AVR\r
+ Release|AVR = Release|AVR\r
+ EndGlobalSection\r
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution\r
+ {DCE6C7E3-EE26-4D79-826B-08594B9AD897}.Debug|AVR.ActiveCfg = Debug|AVR\r
+ {DCE6C7E3-EE26-4D79-826B-08594B9AD897}.Debug|AVR.Build.0 = Debug|AVR\r
+ {DCE6C7E3-EE26-4D79-826B-08594B9AD897}.Release|AVR.ActiveCfg = Release|AVR\r
+ {DCE6C7E3-EE26-4D79-826B-08594B9AD897}.Release|AVR.Build.0 = Release|AVR\r
+ EndGlobalSection\r
+ GlobalSection(SolutionProperties) = preSolution\r
+ HideSolutionNode = FALSE\r
+ EndGlobalSection\r
+EndGlobal\r
--- /dev/null
+// Copyright (c) 2017, Tobias Mueller tm(at)tm3d.de\r
+// All rights reserved.\r
+//\r
+// Redistribution and use in source and binary forms, with or without\r
+// modification, are permitted provided that the following conditions are\r
+// met:\r
+//\r
+// * Redistributions of source code must retain the above copyright\r
+// notice, this list of conditions and the following disclaimer.\r
+// * Redistributions in binary form must reproduce the above copyright\r
+// notice, this list of conditions and the following disclaimer in the\r
+// documentation and/or other materials provided with the\r
+// distribution.\r
+// * All advertising materials mentioning features or use of this\r
+// software must display the following acknowledgement: This product\r
+// includes software developed by tm3d.de and its contributors.\r
+// * Neither the name of tm3d.de nor the names of its contributors may\r
+// be used to endorse or promote products derived from this software\r
+// without specific prior written permission.\r
+//\r
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\r
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\r
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\r
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\r
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\r
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\r
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\r
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\r
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+\r
+#define F_CPU 8000000UL\r
+#include <avr/io.h>\r
+#include <avr/interrupt.h>\r
+#include <util/delay.h>\r
+#include <avr/wdt.h>\r
+#include <avr/sleep.h>\r
+#include <avr/pgmspace.h>\r
+#include "../common/I2C/USI_TWI_Master.h"\r
+#include "../common/I2C/CDM7160.h"\r
+extern void OWINIT();\r
+extern void EXTERN_SLEEP();\r
+//6A02160084D9A320\r
+//uint8_t owid[8]={0x20, 0xA2, 0xD9, 0x84, 0x00, 0x16, 0x02, 0x5D};/**/\r
+uint8_t owid[8]={0x20, 0xB3, 0xD9, 0x84, 0x00, 0x16, 0x02, 0x31};/**/\r
+uint8_t config_info[26]={0x10,13,0x0,0x0, 0,0, 0,0,0x02,16,0,0x00,0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};\r
+#if (owid>128) \r
+#error "Variable not correct"\r
+#endif\r
+\r
+extern uint8_t mode;\r
+extern uint8_t gcontrol;\r
+extern uint8_t reset_indicator;\r
+extern uint8_t alarmflag;\r
+volatile uint8_t wdcounter=10;\r
+\r
+\r
+#if defined(__AVR_ATtiny24__)||defined(__AVR_ATtiny44__) || defined(__AVR_ATtiny84__) || defined(__AVR_ATtiny24A__)||defined(__AVR_ATtiny44A__) || defined(__AVR_ATtiny84A__)\r
+ISR(WATCHDOG_vect) {\r
+#else\r
+ISR(WDT_vect) {\r
+#endif \r
+ wdcounter++;\r
+ if (reset_indicator==1) reset_indicator++;\r
+ else if (reset_indicator==2) mode=0;\r
+}\r
+\r
+typedef union {\r
+ volatile uint8_t bytes[0x20];\r
+ struct {\r
+ //Page0\r
+ uint16_t A; //0\r
+ uint16_t B; //2\r
+ uint16_t C; //4\r
+ uint16_t D; //6\r
+ //Page1\r
+ uint8_t CSA1;\r
+ uint8_t CSA2;\r
+ uint8_t CSB1;\r
+ uint8_t CSB2;\r
+ uint8_t CSC1;\r
+ uint8_t CSC2;\r
+ uint8_t CSD1;\r
+ uint8_t CSD2;\r
+ //Page2\r
+ uint8_t LA;\r
+ uint8_t HA;\r
+ uint8_t LB;\r
+ uint8_t HB;\r
+ uint8_t LC;\r
+ uint8_t HC;\r
+ uint8_t LD;\r
+ uint8_t HD;\r
+ //Page3\r
+ uint8_t FC1;\r
+ uint8_t FC2;\r
+ uint8_t FC3;\r
+ uint8_t FC4;\r
+ uint8_t VCCP;\r
+ uint8_t FC5;\r
+ uint8_t FC6;\r
+ uint8_t FC7;\r
+ uint8_t convc1;\r
+ uint8_t convc2;\r
+ \r
+ \r
+ };\r
+} pack_t;\r
+volatile pack_t pack;\r
+\r
+\r
+\r
+\r
+uint16_t CO2;\r
+\r
+\r
+\r
+\r
+\r
+int main(void){\r
+ pack.A=0;\r
+ pack.B=0;\r
+ pack.C=0;\r
+ pack.D=0;\r
+ pack.CSA1=0x08;\r
+ pack.CSA2=0x8C;\r
+ pack.CSB1=0x08;\r
+ pack.CSB2=0x8C;\r
+ pack.CSC1=0x08;\r
+ pack.CSC2=0x8C;\r
+ pack.CSD1=0x08;\r
+ pack.CSD2=0x8C;\r
+ pack.HA=0xFF;\r
+ pack.LA=0x00;\r
+ pack.HB=0xFF;\r
+ pack.LB=0x00;\r
+ pack.HC=0xFF;\r
+ pack.LC=0x00;\r
+ pack.HD=0xFF;\r
+ pack.LD=0x00;\r
+ pack.VCCP=0;\r
+ PORTB=0xFF-(1<<PORTB0); //Schalter kann gegen Masse sein und zieht dann immer Strom\r
+ DDRB|=(1<<PORTB0); //Als Ausgang und 0\r
+ \r
+ \r
+ OWINIT();\r
+\r
+ ACSR|=(1<<ACD); //Disable Comparator\r
+ ADCSRB|=(1<<ACME); //Disable Analog multiplexer\r
+ MCUCR &=~(1<<PUD); //All Pins Pullup...\r
+ MCUCR |=(1<<BODS);\r
+\r
+ \r
+ WDTCSR |= ((1<<WDCE) ); // Enable the WD Change Bit//| (1<<WDE)\r
+ WDTCSR |= (1<<WDIE) | // Enable WDT Interrupt\r
+ (1<<WDP3) | (1<<WDP0); // Set Timeout to ~8 seconds\r
+\r
+ \r
+ gcontrol=1;\r
+ \r
+ USI_TWI_Master_Initialise();\r
+ CDM7160softReset();\r
+ _delay_ms(200);\r
+\r
+ CDM7160setMode(0); //Power Down Mode\r
+ _delay_ms(200);\r
+ CDM7160setAvCount(0x3F);\r
+ CDM7160setFMode(1);\r
+ CO2=CDM7160getCO2();\r
+ CDM7160setMode(1);\r
+ _delay_ms(200);\r
+\r
+ sei();\r
+ \r
+ //DDRB|=(1<<PINB1);\r
+\r
+ while(1) {\r
+ \r
+ if (wdcounter>2) { \r
+ \r
+ CO2=CDM7160getCO2();\r
+\r
+ wdcounter=0;\r
+ }\r
+ \r
+\r
+ \r
+ \r
+\r
+\r
+ if (gcontrol) {\r
+ //PORTB|=(1<<PINB1);\r
+ uint8_t bb=1;\r
+ uint8_t bb1=1;\r
+ for(uint8_t i=0;i<4;i++){\r
+ if (pack.convc1&bb1) {\r
+ if (pack.convc2&(bb)) {pack.bytes[i*2]=0;pack.bytes[i*2+1]=0;}\r
+ bb=bb<<1;\r
+ if (pack.convc2&(bb)) {pack.bytes[i*2]=0xFF;pack.bytes[i*2+1]=0xFF;}\r
+ bb=bb<<1;\r
+ } else bb=bb<<2;\r
+ bb1=bb1<<1; \r
+ }\r
+ //CHanel A\r
+ if (pack.convc1&1) {\r
+ \r
+ cli();pack.A=CO2;sei();\r
+ //wdcounter=10;\r
+ alarmflag=0;\r
+ \r
+ if (pack.CSA2&0x08) //AEH\r
+ if (pack.bytes[1]>pack.HA) {alarmflag=1;pack.CSA2|=0x20;}\r
+ if (pack.CSA2&0x04) //AEL\r
+ if (pack.bytes[1]<pack.LA) {alarmflag=1;pack.CSA2|=0x10;}\r
+ }\r
+\r
+ if (pack.convc1&2) {\r
+\r
+ cli();pack.B=0;sei();\r
+ if (pack.CSB2&0x08) //AEH\r
+ if (pack.bytes[1]>pack.HB) {alarmflag=1;pack.CSB2|=0x20;}\r
+ if (pack.CSB2&0x04) //AEL\r
+ if (pack.bytes[1]<pack.LB) {alarmflag=1;pack.CSB2|=0x10;}\r
+ }\r
+\r
+ if (pack.convc1&4) {\r
+ \r
+ cli();pack.C=0;sei();\r
+ if (pack.CSC2&0x08) //AEH\r
+ if (pack.bytes[1]>pack.HC) {alarmflag=1;pack.CSC2|=0x20;}\r
+ if (pack.CSC2&0x04) //AEL\r
+ if (pack.bytes[1]<pack.LC) {alarmflag=1;pack.CSC2|=0x10;}\r
+ } \r
+ if (pack.convc1&8) {\r
+ \r
+ cli();pack.D=0;sei();\r
+ if (pack.CSD2&0x08) //AEH\r
+ if (pack.bytes[1]>pack.HD) {alarmflag=1;pack.CSD2|=0x20;}\r
+ if (pack.CSD2&0x04) //AEL\r
+ if (pack.bytes[1]<pack.LD) {alarmflag=1;pack.CSD2|=0x10;}\r
+ }\r
+ \r
+ EXTERN_SLEEP();\r
+ //PORTB&=~(1<<PINB1);\r
+ }\r
+\r
+ /*uint8_t bb=1;\r
+ for(uint8_t i=0;i<4;i++) {\r
+ if (pack.bytes[8+i*2]&0x80) { //Chanel as output\r
+ if (pack.bytes[8+i*2]&0x40) {\r
+ DDRA|=bb;\r
+ } else {\r
+ DDRA&=~bb;\r
+ }\r
+ } else {\r
+ DDRA&=~bb;\r
+ }\r
+ bb=bb*2;\r
+ }*/\r
+ \r
+#if defined(__AVR_ATtiny25__)||defined(__AVR_ATtiny45__) || defined(__AVR_ATtiny85__)\r
+ if (((TIMSK & (1<<TOIE0))==0)&& (mode==0))\r
+#endif \r
+#if defined(__AVR_ATtiny24__)||defined(__AVR_ATtiny44__) || defined(__AVR_ATtiny84__) ||defined(__AVR_ATtiny24A__)||defined(__AVR_ATtiny44A__) || defined(__AVR_ATtiny84A__)\r
+ if (((TIMSK0 & (1<<TOIE0))==0)&& (mode==0))\r
+#endif\r
+ {\r
+\r
+ MCUCR|=(1<<SE)|(1<<SM1);\r
+ MCUCR&=~(1<<ISC01);\r
+ } else {\r
+ MCUCR|=(1<<SE);\r
+ MCUCR&=~(1<<SM1);\r
+ }\r
+ asm("SLEEP");\r
+ }\r
+\r
+\r
+}
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>\r
+<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="14.0">\r
+ <PropertyGroup>\r
+ <SchemaVersion>2.0</SchemaVersion>\r
+ <ProjectVersion>7.0</ProjectVersion>\r
+ <ToolchainName>com.Atmel.AVRGCC8.C</ToolchainName>\r
+ <ProjectGuid>dce6c7e3-ee26-4d79-826b-08594b9ad897</ProjectGuid>\r
+ <avrdevice>ATtiny84A</avrdevice>\r
+ <avrdeviceseries>none</avrdeviceseries>\r
+ <OutputType>Executable</OutputType>\r
+ <Language>C</Language>\r
+ <OutputFileName>$(MSBuildProjectName)</OutputFileName>\r
+ <OutputFileExtension>.elf</OutputFileExtension>\r
+ <OutputDirectory>$(MSBuildProjectDirectory)\$(Configuration)</OutputDirectory>\r
+ <AssemblyName>DS2450</AssemblyName>\r
+ <Name>DS2450_CDM7160</Name>\r
+ <RootNamespace>DS2450</RootNamespace>\r
+ <ToolchainFlavour>Native</ToolchainFlavour>\r
+ <KeepTimersRunning>true</KeepTimersRunning>\r
+ <OverrideVtor>false</OverrideVtor>\r
+ <CacheFlash>true</CacheFlash>\r
+ <ProgFlashFromRam>true</ProgFlashFromRam>\r
+ <RamSnippetAddress>0x20000000</RamSnippetAddress>\r
+ <UncachedRange />\r
+ <preserveEEPROM>true</preserveEEPROM>\r
+ <OverrideVtorValue>exception_table</OverrideVtorValue>\r
+ <BootSegment>2</BootSegment>\r
+ <eraseonlaunchrule>1</eraseonlaunchrule>\r
+ <ExternalProgrammingToolCommand />\r
+ <AsfFrameworkConfig>\r
+ <framework-data>\r
+ <options />\r
+ <configurations />\r
+ <files />\r
+ <documentation help="" />\r
+ <offline-documentation help="" />\r
+ <dependencies>\r
+ <content-extension eid="atmel.asf" uuidref="Atmel.ASF" version="3.28.1" />\r
+ </dependencies>\r
+ </framework-data>\r
+ </AsfFrameworkConfig>\r
+ <avrtool>com.atmel.avrdbg.tool.atmelice</avrtool>\r
+ <avrtoolserialnumber>J41800000779</avrtoolserialnumber>\r
+ <avrdeviceexpectedsignature>0x1E930C</avrdeviceexpectedsignature>\r
+ <com_atmel_avrdbg_tool_atmelice>\r
+ <ToolOptions>\r
+ <InterfaceProperties>\r
+ </InterfaceProperties>\r
+ <InterfaceName>debugWIRE</InterfaceName>\r
+ </ToolOptions>\r
+ <ToolType>com.atmel.avrdbg.tool.atmelice</ToolType>\r
+ <ToolNumber>J41800000779</ToolNumber>\r
+ <ToolName>Atmel-ICE</ToolName>\r
+ </com_atmel_avrdbg_tool_atmelice>\r
+ <avrtoolinterface>debugWIRE</avrtoolinterface>\r
+ </PropertyGroup>\r
+ <PropertyGroup Condition=" '$(Configuration)' == 'Release' ">\r
+ <ToolchainSettings>\r
+ <AvrGcc>\r
+ <avrgcc.common.Device>-mmcu=attiny84a -B "%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.68\gcc\dev\attiny84a"</avrgcc.common.Device>\r
+ <avrgcc.common.outputfiles.hex>True</avrgcc.common.outputfiles.hex>\r
+ <avrgcc.common.outputfiles.lss>True</avrgcc.common.outputfiles.lss>\r
+ <avrgcc.common.outputfiles.eep>True</avrgcc.common.outputfiles.eep>\r
+ <avrgcc.common.outputfiles.srec>True</avrgcc.common.outputfiles.srec>\r
+ <avrgcc.common.outputfiles.usersignatures>False</avrgcc.common.outputfiles.usersignatures>\r
+ <avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>True</avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>\r
+ <avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>True</avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>\r
+ <avrgcc.compiler.symbols.DefSymbols>\r
+ <ListValues>\r
+ <Value>NDEBUG</Value>\r
+ </ListValues>\r
+ </avrgcc.compiler.symbols.DefSymbols>\r
+ <avrgcc.compiler.directories.IncludePaths>\r
+ <ListValues>\r
+ <Value>%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.68\include</Value>\r
+ </ListValues>\r
+ </avrgcc.compiler.directories.IncludePaths>\r
+ <avrgcc.compiler.optimization.level>Optimize for size (-Os)</avrgcc.compiler.optimization.level>\r
+ <avrgcc.compiler.optimization.PackStructureMembers>True</avrgcc.compiler.optimization.PackStructureMembers>\r
+ <avrgcc.compiler.optimization.AllocateBytesNeededForEnum>True</avrgcc.compiler.optimization.AllocateBytesNeededForEnum>\r
+ <avrgcc.compiler.warnings.AllWarnings>True</avrgcc.compiler.warnings.AllWarnings>\r
+ <avrgcc.compiler.miscellaneous.OtherFlags>-std=gnu99 -D__4MHZ__</avrgcc.compiler.miscellaneous.OtherFlags>\r
+ <avrgcc.linker.libraries.Libraries>\r
+ <ListValues>\r
+ <Value>libm</Value>\r
+ </ListValues>\r
+ </avrgcc.linker.libraries.Libraries>\r
+ <avrgcc.assembler.general.AssemblerFlags>-D__4MHZ__</avrgcc.assembler.general.AssemblerFlags>\r
+ </AvrGcc>\r
+ </ToolchainSettings>\r
+ </PropertyGroup>\r
+ <PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">\r
+ <ToolchainSettings>\r
+ <AvrGcc>\r
+ <avrgcc.common.Device>-mmcu=attiny84a -B "%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.68\gcc\dev\attiny84a"</avrgcc.common.Device>\r
+ <avrgcc.common.outputfiles.hex>True</avrgcc.common.outputfiles.hex>\r
+ <avrgcc.common.outputfiles.lss>True</avrgcc.common.outputfiles.lss>\r
+ <avrgcc.common.outputfiles.eep>True</avrgcc.common.outputfiles.eep>\r
+ <avrgcc.common.outputfiles.srec>True</avrgcc.common.outputfiles.srec>\r
+ <avrgcc.common.outputfiles.usersignatures>False</avrgcc.common.outputfiles.usersignatures>\r
+ <avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>True</avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>\r
+ <avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>True</avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>\r
+ <avrgcc.compiler.symbols.DefSymbols>\r
+ <ListValues>\r
+ <Value>DEBUG</Value>\r
+ </ListValues>\r
+ </avrgcc.compiler.symbols.DefSymbols>\r
+ <avrgcc.compiler.directories.IncludePaths>\r
+ <ListValues>\r
+ <Value>%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.68\include</Value>\r
+ </ListValues>\r
+ </avrgcc.compiler.directories.IncludePaths>\r
+ <avrgcc.compiler.optimization.level>Optimize (-O1)</avrgcc.compiler.optimization.level>\r
+ <avrgcc.compiler.optimization.PackStructureMembers>True</avrgcc.compiler.optimization.PackStructureMembers>\r
+ <avrgcc.compiler.optimization.AllocateBytesNeededForEnum>True</avrgcc.compiler.optimization.AllocateBytesNeededForEnum>\r
+ <avrgcc.compiler.optimization.DebugLevel>Default (-g2)</avrgcc.compiler.optimization.DebugLevel>\r
+ <avrgcc.compiler.warnings.AllWarnings>True</avrgcc.compiler.warnings.AllWarnings>\r
+ <avrgcc.linker.libraries.Libraries>\r
+ <ListValues>\r
+ <Value>libm</Value>\r
+ </ListValues>\r
+ </avrgcc.linker.libraries.Libraries>\r
+ <avrgcc.assembler.debugging.DebugLevel>Default (-Wa,-g)</avrgcc.assembler.debugging.DebugLevel>\r
+ </AvrGcc>\r
+ </ToolchainSettings>\r
+ </PropertyGroup>\r
+ <ItemGroup>\r
+ <Compile Include="..\common\I2C\CDM7160.c">\r
+ <SubType>compile</SubType>\r
+ <Link>CDM7160.c</Link>\r
+ </Compile>\r
+ <Compile Include="..\common\I2C\USI_TWI_Master.c">\r
+ <SubType>compile</SubType>\r
+ <Link>USI_TWI_Master.c</Link>\r
+ </Compile>\r
+ <Compile Include="..\common\OWDS2450.S">\r
+ <SubType>compile</SubType>\r
+ <Link>OWDS2450.S</Link>\r
+ </Compile>\r
+ <Compile Include="DS2450_CDM7160.c">\r
+ <SubType>compile</SubType>\r
+ </Compile>\r
+ </ItemGroup>\r
+ <Import Project="$(AVRSTUDIO_EXE_PATH)\\Vs\\Compiler.targets" />\r
+</Project>
\ No newline at end of file
--- /dev/null
+\r
+// Copyright (c) 2015, Tobias Mueller tm(at)tm3d.de\r
+// All rights reserved. \r
+// \r
+// Redistribution and use in source and binary forms, with or without \r
+// modification, are permitted provided that the following conditions are \r
+// met: \r
+// \r
+// * Redistributions of source code must retain the above copyright \r
+// notice, this list of conditions and the following disclaimer. \r
+// * Redistributions in binary form must reproduce the above copyright \r
+// notice, this list of conditions and the following disclaimer in the \r
+// documentation and/or other materials provided with the \r
+// distribution. \r
+// * All advertising materials mentioning features or use of this \r
+// software must display the following acknowledgement: This product \r
+// includes software developed by tm3d.de and its contributors. \r
+// * Neither the name of tm3d.de nor the names of its contributors may \r
+// be used to endorse or promote products derived from this software \r
+// without specific prior written permission. \r
+// \r
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \r
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT \r
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR \r
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT \r
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, \r
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT \r
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, \r
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY \r
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT \r
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE \r
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \r
+\r
+#define _CHANGEABLE_ID_\r
+#define _ZERO_POLLING_\r
+\r
+#include "../common/OWConfig.s"\r
+#include "../common/OWCRC16.s"\r
+\r
+.extern pack,8\r
+.comm addr,1 ;zweites Adressbyte ist unnoetig (Warum auch immer fuer 32 Byte 16 Bit Adressen verwendet werden....)\r
+.comm crcsave,1 ; zwischenspeicherspeicher fuer crc nur zweites byte....\r
+//.extern am2302_temp,2\r
+\r
+\r
+\r
+.macro CHIP_INIT \r
+.endm\r
+\r
+.macro COMMAND_TABLE\r
+ rjmp h_readmemoryaddr\r
+ rjmp h_readmemory\r
+ rjmp h_readmemorycrc1\r
+ rjmp h_readmemorycrc2\r
+ rjmp h_writememoryaddr\r
+ rjmp h_writememory\r
+ rjmp h_writememorycrc1\r
+ rjmp h_writememorycrc2\r
+ rjmp h_writememoryreadback\r
+ rjmp h_convert\r
+ rjmp h_convertcrc1\r
+ rjmp h_convertcrc2\r
+ rjmp h_convert_conv\r
+.endm\r
+\r
+#include "../common/OWRomFunctions.s"\r
+#include "../common/OWTimerInterrupt.s"\r
+\r
+\r
+\r
+; Ab hier Geraeteabhaenging\r
+#define OW_READ_MEMORY_ADDR OW_FIRST_COMMAND+0\r
+#define OW_READ_MEMORY OW_FIRST_COMMAND+1\r
+#define OW_READ_MEMORY_CRC1 OW_FIRST_COMMAND+2\r
+#define OW_READ_MEMORY_CRC2 OW_FIRST_COMMAND+3\r
+#define OW_WRITE_MEMORY_ADDR OW_FIRST_COMMAND+4\r
+#define OW_WRITE_MEMORY OW_FIRST_COMMAND+5\r
+#define OW_WRITE_MEMORY_CRC1 OW_FIRST_COMMAND+6\r
+#define OW_WRITE_MEMORY_CRC2 OW_FIRST_COMMAND+7\r
+#define OW_WRITE_MEMORY_READBACK OW_FIRST_COMMAND+8\r
+#define OW_CONVERT OW_FIRST_COMMAND+9\r
+#define OW_CONVERT_CRC1 OW_FIRST_COMMAND+10\r
+#define OW_CONVERT_CRC2 OW_FIRST_COMMAND+11\r
+#define OW_CONVERT_CONV OW_FIRST_COMMAND+12\r
+\r
+;---------------------------------------------------\r
+; READ COMMAND and start operation\r
+;---------------------------------------------------\r
+\r
+\r
+h_readcommand:\r
+ clr r_bytep\r
+#ifndef _DIS_FLASH_\r
+ FLASH_COMMANDS ; muss zu erst sein....\r
+#endif\r
+ cset 0xAA,OW_READ_MEMORY_ADDR\r
+ cset 0x55,OW_WRITE_MEMORY_ADDR\r
+ cset 0x3C,OW_CONVERT\r
+ FW_CONFIG_INFO\r
+#ifdef _CHANGEABLE_ID_\r
+ CHANGE_ID_COMMANDS\r
+#endif\r
+ ldi r_mode,OW_SLEEP\r
+ rjmp handle_end\r
+\r
+\r
+h_readmemoryaddr:\r
+ cpi r_bytep,0 ;erstes Adressbyte ?\r
+ brne h_readmemory_addr_byte1 ;nein dann weiter\r
+ andi r_rwbyte,0x1F ; nur Adressen zwischen 0 und 0x1F zulassen\r
+ sts addr,r_rwbyte ;speichern des ersten bytes\r
+ rjmp handle_end_inc\r
+h_readmemory_addr_byte1: ;zweiters Addressbyte wird nicht gespeichert!\r
+ ldi r_mode,OW_READ_MEMORY ;weiter zu read Memory\r
+ ;;ldi r_bcount,1 ;ist unten\r
+ ldi r_sendflag,1 ;jetzt sendet der Slave zum Master\r
+ clr r_bytep\r
+ rjmp h_readmemory2\r
+h_readmemory:\r
+ lds r_bytep,addr\r
+ inc r_bytep\r
+ sts addr,r_bytep\r
+ andi r_bytep,0x07\r
+ breq h_readmemory_init_crc\r
+h_readmemory2:\r
+ lds r_bytep,addr\r
+ ;andi r_bytep,0x1F ist oben\r
+ configZ pack,r_bytep\r
+ ld r_rwbyte,Z\r
+ ;ldi r_bcount,1\r
+ rjmp handle_end ;sendet das Byte und geht zu h_readmemory\r
+h_readmemory_init_crc:; init erstes CRC byte\r
+ lds r_rwbyte,crc\r
+ com r_rwbyte\r
+ lds r_temp,crc+1\r
+ com r_temp\r
+ sts crcsave,r_temp\r
+ ldi r_mode,OW_READ_MEMORY_CRC1\r
+ ;ldi r_bcount,1\r
+ rjmp handle_end\r
+h_readmemory_end:\r
+ ldi r_mode,OW_SLEEP\r
+ clr r_sendflag\r
+ rjmp handle_end\r
+h_readmemorycrc1:;init zweites CRC Byte\r
+ lds r_rwbyte,crcsave\r
+ ;ldi r_bcount,1\r
+ ldi r_mode,OW_READ_MEMORY_CRC2\r
+ rjmp handle_end\r
+h_readmemorycrc2:;weiteres senden..... nach zweitem Byte\r
+ lds r_temp,addr\r
+ andi r_temp,0xE0\r
+ brne h_readmemory_end; ende des speichers\r
+ ldi r_mode,OW_READ_MEMORY\r
+ CRCInit1 ;Start with new CRC\r
+ rjmp h_readmemory2\r
+\r
+h_writememoryaddr:\r
+ cpi r_bytep,0 ;erstes Adressbyte ?\r
+ brne h_writememory_addr_byte1 ;nein dann weiter\r
+ andi r_rwbyte,0x1F ; nur Adressen zwischen 0 und 0x1F zulassen\r
+ sts addr,r_rwbyte ;speichern des ersten bytes\r
+ inc r_bytep\r
+ ;ldi r_bcount,1\r
+ rjmp handle_end\r
+h_writememory_addr_byte1: ;zweiters Addressbyte wird nicht gespeichert!\r
+ ldi r_mode,OW_WRITE_MEMORY ;weiter zu read Memory\r
+ ;ldi r_bcount,1 ;; _________________________________________________in handle_end integrieren.....\r
+ lds r_bytep,addr\r
+ rjmp handle_end ;read Memory Byte\r
+h_writememory:\r
+ lds r_bytep,addr\r
+ configZ pack,r_bytep\r
+ st Z,r_rwbyte\r
+ ;ldi r_bcount,1\r
+ ldi r_mode,OW_WRITE_MEMORY_CRC1\r
+ ldi r_sendflag,1 ;jetzt sendet der Slave zum Master\r
+ lds r_rwbyte,crc\r
+ com r_rwbyte\r
+ lds r_temp,crc+1\r
+ com r_temp\r
+ sts crcsave,r_temp\r
+ rjmp handle_end\r
+h_writememorycrc1:\r
+ lds r_rwbyte,crcsave\r
+ ;ldi r_bcount,1\r
+ ldi r_mode,OW_WRITE_MEMORY_CRC2\r
+ rjmp handle_end\r
+h_writememorycrc2:\r
+ lds r_temp,addr\r
+ configZ pack,r_temp\r
+ ld r_rwbyte,Z\r
+ ;ldi r_bcount,1\r
+ ldi r_mode,OW_WRITE_MEMORY_READBACK\r
+ rjmp handle_end\r
+h_writememoryreadback:\r
+ ldi r_temp,0x00\r
+ sts crc+1,r_temp\r
+ lds r_temp,addr\r
+ inc r_temp\r
+ sts addr,r_temp\r
+ sts crc,r_temp\r
+ ldi r_sendflag,0\r
+ ;ldi r_bcount,1\r
+ ldi r_mode,OW_WRITE_MEMORY\r
+ rjmp handle_end\r
+\r
+h_convert:\r
+ cpi r_bytep,0 ;erstes Adressbyte ?\r
+ brne h_convert_byte1 ;nein dann weiter\r
+ inc r_bytep\r
+ sts pack+0x20,r_rwbyte\r
+ ;ldi r_bcount,1\r
+ rjmp handle_end\r
+h_convert_byte1: ;zweies byte glesen go crc#\r
+ sts pack+0x21,r_rwbyte\r
+ lds r_rwbyte,crc\r
+ com r_rwbyte\r
+ lds r_temp,crc+1\r
+ com r_temp\r
+ sts crcsave,r_temp\r
+ ldi r_mode,OW_CONVERT_CRC1\r
+ ;ldi r_bcount,1\r
+ ldi r_sendflag,1\r
+ rjmp handle_end \r
+h_convertcrc1:\r
+ lds r_rwbyte,crcsave\r
+ ;ldi r_bcount,1\r
+ ldi r_mode,OW_CONVERT_CRC2\r
+ rjmp handle_end\r
+h_convertcrc2:\r
+ ldi r_temp,1\r
+ sts gcontrol,r_temp\r
+ ;ldi r_bcount,1\r
+ ldi r_mode,OW_CONVERT_CONV\r
+ ;clr r_sendflag\r
+ ldi r_sendflag,3 ;set bit 0 and 1 for no zero polling\r
+h_convert_conv:\r
+ ldi r_bcount,0\r
+ ldi r_rwbyte,0\r
+ rjmp handle_end_no_bcount \r
+\r
+\r
+\r
+\r
+#include "../common/OWPinInterrupt.s"\r
+.end
\ No newline at end of file
--- /dev/null
+\r
+Microsoft Visual Studio Solution File, Format Version 12.00\r
+# Atmel Studio Solution File, Format Version 11.00\r
+VisualStudioVersion = 14.0.25420.1\r
+MinimumVisualStudioVersion = 10.0.40219.1\r
+Project("{54F91283-7BC4-4236-8FF9-10F437C3AD48}") = "DS2450_CDM7160_BMP280", "DS2450_CDM7160_BMP280.cproj", "{DCE6C7E3-EE26-4D79-826B-08594B9AD897}"\r
+EndProject\r
+Global\r
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution\r
+ Debug|AVR = Debug|AVR\r
+ Release|AVR = Release|AVR\r
+ EndGlobalSection\r
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution\r
+ {DCE6C7E3-EE26-4D79-826B-08594B9AD897}.Debug|AVR.ActiveCfg = Debug|AVR\r
+ {DCE6C7E3-EE26-4D79-826B-08594B9AD897}.Debug|AVR.Build.0 = Debug|AVR\r
+ {DCE6C7E3-EE26-4D79-826B-08594B9AD897}.Release|AVR.ActiveCfg = Release|AVR\r
+ {DCE6C7E3-EE26-4D79-826B-08594B9AD897}.Release|AVR.Build.0 = Release|AVR\r
+ EndGlobalSection\r
+ GlobalSection(SolutionProperties) = preSolution\r
+ HideSolutionNode = FALSE\r
+ EndGlobalSection\r
+EndGlobal\r
--- /dev/null
+\r
+// Copyright (c) 2018, Tobias Mueller tm(at)tm3d.de\r
+// All rights reserved.\r
+//\r
+// Redistribution and use in source and binary forms, with or without\r
+// modification, are permitted provided that the following conditions are\r
+// met:\r
+//\r
+// * Redistributions of source code must retain the above copyright\r
+// notice, this list of conditions and the following disclaimer.\r
+// * Redistributions in binary form must reproduce the above copyright\r
+// notice, this list of conditions and the following disclaimer in the\r
+// documentation and/or other materials provided with the\r
+// distribution.\r
+// * All advertising materials mentioning features or use of this\r
+// software must display the following acknowledgement: This product\r
+// includes software developed by tm3d.de and its contributors.\r
+// * Neither the name of tm3d.de nor the names of its contributors may\r
+// be used to endorse or promote products derived from this software\r
+// without specific prior written permission.\r
+//\r
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\r
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\r
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\r
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\r
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\r
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\r
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\r
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\r
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+\r
+#define F_CPU 8000000UL\r
+#include <avr/io.h>\r
+#include <avr/interrupt.h>\r
+#include <util/delay.h>\r
+#include <avr/wdt.h>\r
+#include <avr/sleep.h>\r
+#include <avr/pgmspace.h>\r
+#include "../common/I2C/TWI_Master.h"\r
+#include "../common/I2C/CDM7160.h"\r
+#include "../common/I2C/BMP280.h"\r
+#include "../common/owSlave_tools.h"\r
+\r
+OWST_EXTERN_VARS\r
+\r
+uint8_t owid[8]={0x20, 0xA2, 0xD9, 0x84, 0x00, 0x16, 0x02, 0x5D};/**/\r
+uint8_t config_info[26]={10,13,10,13, 2,16, 1,14,0x02,16,16,14,14,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};\r
+\r
+#if (owid>128) \r
+#error "Variable not correct"\r
+#endif\r
+\r
+OWST_WDT_ISR\r
+\r
+\r
+typedef union {\r
+ volatile uint8_t bytes[0x20];\r
+ struct {\r
+ //Page0\r
+ uint16_t A; //0\r
+ uint16_t B; //2\r
+ uint16_t C; //4\r
+ uint16_t D; //6\r
+ //Page1\r
+ uint8_t CSA1;\r
+ uint8_t CSA2;\r
+ uint8_t CSB1;\r
+ uint8_t CSB2;\r
+ uint8_t CSC1;\r
+ uint8_t CSC2;\r
+ uint8_t CSD1;\r
+ uint8_t CSD2;\r
+ //Page2\r
+ uint8_t LA;\r
+ uint8_t HA;\r
+ uint8_t LB;\r
+ uint8_t HB;\r
+ uint8_t LC;\r
+ uint8_t HC;\r
+ uint8_t LD;\r
+ uint8_t HD;\r
+ //Page3\r
+ uint8_t FC1;\r
+ uint8_t FC2;\r
+ uint8_t FC3;\r
+ uint8_t FC4;\r
+ uint8_t VCCP;\r
+ uint8_t FC5;\r
+ uint8_t FC6;\r
+ uint8_t FC7;\r
+ uint8_t convc1;\r
+ uint8_t convc2;\r
+ \r
+ \r
+ };\r
+} pack_t;\r
+volatile pack_t pack;\r
+\r
+\r
+\r
+\r
+\r
+ double temperatureC,humidityRH;\r
+ double l;\r
+uint32_t P;\r
+int32_t t;\r
+int16_t CO2;\r
+uint8_t max_adr=0;\r
+\r
+\r
+\r
+int main(void){\r
+ OWST_INIT_USI_ON\r
+ pack.A=0;\r
+ pack.B=0;\r
+ pack.C=0;\r
+ pack.D=0;\r
+ pack.CSA1=0x08;\r
+ pack.CSA2=0x8C;\r
+ pack.CSB1=0x08;\r
+ pack.CSB2=0x8C;\r
+ pack.CSC1=0x08;\r
+ pack.CSC2=0x8C;\r
+ pack.CSD1=0x08;\r
+ pack.CSD2=0x8C;\r
+ pack.HA=0xFF;\r
+ pack.LA=0x00;\r
+ pack.HB=0xFF;\r
+ pack.LB=0x00;\r
+ pack.HC=0xFF;\r
+ pack.LC=0x00;\r
+ pack.HD=0xFF;\r
+ pack.LD=0x00;\r
+ pack.VCCP=0;\r
+\r
+ OWINIT();\r
+\r
+ OWST_WDR_CONFIG8\r
+ OWST_EN_PULLUP\r
+ \r
+ gcontrol=1;\r
+ TWI_Master_Initialise();\r
+ CDM7160softReset();\r
+ _delay_ms(200);\r
+\r
+ CDM7160setMode(0); //Power Down Mode\r
+ _delay_ms(200);\r
+ CDM7160setAvCount(0x3F);\r
+ CDM7160setFMode(1);\r
+ CO2=CDM7160getCO2();\r
+ CDM7160setMode(1);\r
+ _delay_ms(200);\r
+ \r
+ bmp280Init();\r
+ \r
+ sei();\r
+ \r
+ //DDRB|=(1<<PINB1);\r
+\r
+ while(1) {\r
+ \r
+ if (wdcounter>3) { \r
+ \r
+ bmp280ConvertInt(&t,&P,1);\r
+ CO2=CDM7160getCO2();\r
+ wdcounter=0;\r
+ }\r
+ \r
+\r
+ \r
+ \r
+\r
+\r
+ if (gcontrol) {\r
+ //PORTB|=(1<<PINB1);\r
+ uint8_t bb=1;\r
+ uint8_t bb1=1;\r
+ for(uint8_t i=0;i<4;i++){\r
+ if (pack.convc1&bb1) {\r
+ if (pack.convc2&(bb)) {pack.bytes[i*2]=0;pack.bytes[i*2+1]=0;}\r
+ bb=bb<<1;\r
+ if (pack.convc2&(bb)) {pack.bytes[i*2]=0xFF;pack.bytes[i*2+1]=0xFF;}\r
+ bb=bb<<1;\r
+ } else bb=bb<<2;\r
+ bb1=bb1<<1; \r
+ }\r
+ //CHanel A\r
+ if (pack.convc1&1) {\r
+ /*if (pack.CSA2&0x01) ADMUX=0; else ADMUX=0x80;\r
+ _delay_us(100);\r
+ ADCSRA|=(1<<ADSC);\r
+ while ((ADCSRA&(1<<ADSC)));\r
+ cli();pack.A=ADC;sei();*/\r
+ double cc=(double)CO2/(P/101300.0*298.0/(273.0+t/100.0));\r
+ cli();pack.A=cc;sei();\r
+ wdcounter=10;\r
+ alarmflag=0;\r
+ \r
+ if (pack.CSA2&0x08) //AEH\r
+ if (pack.bytes[1]>pack.HA) {alarmflag=1;pack.CSA2|=0x20;}\r
+ if (pack.CSA2&0x04) //AEL\r
+ if (pack.bytes[1]<pack.LA) {alarmflag=1;pack.CSA2|=0x10;}\r
+ }\r
+\r
+ if (pack.convc1&2) {\r
+ /*if (pack.CSB2&0x01) ADMUX=1; else ADMUX=0x81;\r
+ _delay_us(100);\r
+ ADCSRA|=(1<<ADSC);\r
+ while ((ADCSRA&(1<<ADSC)));\r
+ cli();pack.B=ADC;sei();*/\r
+ wdcounter=10;\r
+ cli();pack.B=CO2;sei();\r
+ if (pack.CSB2&0x08) //AEH\r
+ if (pack.bytes[1]>pack.HB) {alarmflag=1;pack.CSB2|=0x20;}\r
+ if (pack.CSB2&0x04) //AEL\r
+ if (pack.bytes[1]<pack.LB) {alarmflag=1;pack.CSB2|=0x10;}\r
+ }\r
+\r
+ if (pack.convc1&4) {\r
+ /*if (pack.CSC2&0x01) ADMUX=2; else ADMUX=0x82;\r
+ _delay_us(100);\r
+ ADCSRA|=(1<<ADSC);\r
+ while ((ADCSRA&(1<<ADSC)));\r
+ cli();pack.C=ADC;sei();*/\r
+ wdcounter=10;\r
+ uint16_t hd=P/100.0*32.0;\r
+ cli();pack.C=hd;sei();\r
+ if (pack.CSC2&0x08) //AEH\r
+ if (pack.bytes[1]>pack.HC) {alarmflag=1;pack.CSC2|=0x20;}\r
+ if (pack.CSC2&0x04) //AEL\r
+ if (pack.bytes[1]<pack.LC) {alarmflag=1;pack.CSC2|=0x10;}\r
+ } \r
+ if (pack.convc1&8) {\r
+ /*if (pack.CSD2&0x01) ADMUX=3; else ADMUX=0x83;\r
+ _delay_us(100);\r
+ ADCSRA|=(1<<ADSC);\r
+ while ((ADCSRA&(1<<ADSC)));\r
+ cli();pack.D=ADC;sei();*/\r
+ wdcounter=10;\r
+ uint16_t ct=(t)+32767;\r
+ cli();pack.D=ct;sei();\r
+ if (pack.CSD2&0x08) //AEH\r
+ if (pack.bytes[1]>pack.HD) {alarmflag=1;pack.CSD2|=0x20;}\r
+ if (pack.CSD2&0x04) //AEL\r
+ if (pack.bytes[1]<pack.LD) {alarmflag=1;pack.CSD2|=0x10;}\r
+ }\r
+ \r
+ EXTERN_SLEEP();\r
+ //PORTB&=~(1<<PINB1);\r
+ }\r
+\r
+ /*uint8_t bb=1;\r
+ for(uint8_t i=0;i<4;i++) {\r
+ if (pack.bytes[8+i*2]&0x80) { //Chanel as output\r
+ if (pack.bytes[8+i*2]&0x40) {\r
+ DDRA|=bb;\r
+ } else {\r
+ DDRA&=~bb;\r
+ }\r
+ } else {\r
+ DDRA&=~bb;\r
+ }\r
+ bb=bb*2;\r
+ }*/\r
+ \r
+ OWST_MAIN_END\r
+ }\r
+\r
+\r
+}
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>\r
+<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="14.0">\r
+ <PropertyGroup>\r
+ <SchemaVersion>2.0</SchemaVersion>\r
+ <ProjectVersion>7.0</ProjectVersion>\r
+ <ToolchainName>com.Atmel.AVRGCC8.C</ToolchainName>\r
+ <ProjectGuid>dce6c7e3-ee26-4d79-826b-08594b9ad897</ProjectGuid>\r
+ <avrdevice>ATtiny84A</avrdevice>\r
+ <avrdeviceseries>none</avrdeviceseries>\r
+ <OutputType>Executable</OutputType>\r
+ <Language>C</Language>\r
+ <OutputFileName>$(MSBuildProjectName)</OutputFileName>\r
+ <OutputFileExtension>.elf</OutputFileExtension>\r
+ <OutputDirectory>$(MSBuildProjectDirectory)\$(Configuration)</OutputDirectory>\r
+ <AssemblyName>DS2450</AssemblyName>\r
+ <Name>DS2450_CDM7160_BMP280</Name>\r
+ <RootNamespace>DS2450</RootNamespace>\r
+ <ToolchainFlavour>Native</ToolchainFlavour>\r
+ <KeepTimersRunning>true</KeepTimersRunning>\r
+ <OverrideVtor>false</OverrideVtor>\r
+ <CacheFlash>true</CacheFlash>\r
+ <ProgFlashFromRam>true</ProgFlashFromRam>\r
+ <RamSnippetAddress>0x20000000</RamSnippetAddress>\r
+ <UncachedRange />\r
+ <preserveEEPROM>true</preserveEEPROM>\r
+ <OverrideVtorValue>exception_table</OverrideVtorValue>\r
+ <BootSegment>2</BootSegment>\r
+ <eraseonlaunchrule>1</eraseonlaunchrule>\r
+ <ExternalProgrammingToolCommand />\r
+ <AsfFrameworkConfig>\r
+ <framework-data>\r
+ <options />\r
+ <configurations />\r
+ <files />\r
+ <documentation help="" />\r
+ <offline-documentation help="" />\r
+ <dependencies>\r
+ <content-extension eid="atmel.asf" uuidref="Atmel.ASF" version="3.28.1" />\r
+ </dependencies>\r
+ </framework-data>\r
+ </AsfFrameworkConfig>\r
+ <avrtool>com.atmel.avrdbg.tool.atmelice</avrtool>\r
+ <avrtoolserialnumber>J41800000779</avrtoolserialnumber>\r
+ <avrdeviceexpectedsignature>0x1E930C</avrdeviceexpectedsignature>\r
+ <com_atmel_avrdbg_tool_atmelice>\r
+ <ToolOptions>\r
+ <InterfaceProperties>\r
+ </InterfaceProperties>\r
+ <InterfaceName>debugWIRE</InterfaceName>\r
+ </ToolOptions>\r
+ <ToolType>com.atmel.avrdbg.tool.atmelice</ToolType>\r
+ <ToolNumber>J41800000779</ToolNumber>\r
+ <ToolName>Atmel-ICE</ToolName>\r
+ </com_atmel_avrdbg_tool_atmelice>\r
+ <avrtoolinterface>debugWIRE</avrtoolinterface>\r
+ </PropertyGroup>\r
+ <PropertyGroup Condition=" '$(Configuration)' == 'Release' ">\r
+ <ToolchainSettings>\r
+ <AvrGcc>\r
+ <avrgcc.common.Device>-mmcu=attiny84a -B "%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.68\gcc\dev\attiny84a"</avrgcc.common.Device>\r
+ <avrgcc.common.outputfiles.hex>True</avrgcc.common.outputfiles.hex>\r
+ <avrgcc.common.outputfiles.lss>True</avrgcc.common.outputfiles.lss>\r
+ <avrgcc.common.outputfiles.eep>True</avrgcc.common.outputfiles.eep>\r
+ <avrgcc.common.outputfiles.srec>True</avrgcc.common.outputfiles.srec>\r
+ <avrgcc.common.outputfiles.usersignatures>False</avrgcc.common.outputfiles.usersignatures>\r
+ <avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>True</avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>\r
+ <avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>True</avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>\r
+ <avrgcc.compiler.symbols.DefSymbols>\r
+ <ListValues>\r
+ <Value>NDEBUG</Value>\r
+ </ListValues>\r
+ </avrgcc.compiler.symbols.DefSymbols>\r
+ <avrgcc.compiler.directories.IncludePaths>\r
+ <ListValues>\r
+ <Value>%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.68\include</Value>\r
+ </ListValues>\r
+ </avrgcc.compiler.directories.IncludePaths>\r
+ <avrgcc.compiler.optimization.level>Optimize for size (-Os)</avrgcc.compiler.optimization.level>\r
+ <avrgcc.compiler.optimization.PackStructureMembers>True</avrgcc.compiler.optimization.PackStructureMembers>\r
+ <avrgcc.compiler.optimization.AllocateBytesNeededForEnum>True</avrgcc.compiler.optimization.AllocateBytesNeededForEnum>\r
+ <avrgcc.compiler.warnings.AllWarnings>True</avrgcc.compiler.warnings.AllWarnings>\r
+ <avrgcc.linker.libraries.Libraries>\r
+ <ListValues>\r
+ <Value>libm</Value>\r
+ </ListValues>\r
+ </avrgcc.linker.libraries.Libraries>\r
+ </AvrGcc>\r
+ </ToolchainSettings>\r
+ </PropertyGroup>\r
+ <PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">\r
+ <ToolchainSettings>\r
+ <AvrGcc>\r
+ <avrgcc.common.Device>-mmcu=attiny84a -B "%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.68\gcc\dev\attiny84a"</avrgcc.common.Device>\r
+ <avrgcc.common.outputfiles.hex>True</avrgcc.common.outputfiles.hex>\r
+ <avrgcc.common.outputfiles.lss>True</avrgcc.common.outputfiles.lss>\r
+ <avrgcc.common.outputfiles.eep>True</avrgcc.common.outputfiles.eep>\r
+ <avrgcc.common.outputfiles.srec>True</avrgcc.common.outputfiles.srec>\r
+ <avrgcc.common.outputfiles.usersignatures>False</avrgcc.common.outputfiles.usersignatures>\r
+ <avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>True</avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>\r
+ <avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>True</avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>\r
+ <avrgcc.compiler.symbols.DefSymbols>\r
+ <ListValues>\r
+ <Value>DEBUG</Value>\r
+ </ListValues>\r
+ </avrgcc.compiler.symbols.DefSymbols>\r
+ <avrgcc.compiler.directories.IncludePaths>\r
+ <ListValues>\r
+ <Value>%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.68\include</Value>\r
+ </ListValues>\r
+ </avrgcc.compiler.directories.IncludePaths>\r
+ <avrgcc.compiler.optimization.level>Optimize (-O1)</avrgcc.compiler.optimization.level>\r
+ <avrgcc.compiler.optimization.PackStructureMembers>True</avrgcc.compiler.optimization.PackStructureMembers>\r
+ <avrgcc.compiler.optimization.AllocateBytesNeededForEnum>True</avrgcc.compiler.optimization.AllocateBytesNeededForEnum>\r
+ <avrgcc.compiler.optimization.DebugLevel>Default (-g2)</avrgcc.compiler.optimization.DebugLevel>\r
+ <avrgcc.compiler.warnings.AllWarnings>True</avrgcc.compiler.warnings.AllWarnings>\r
+ <avrgcc.linker.libraries.Libraries>\r
+ <ListValues>\r
+ <Value>libm</Value>\r
+ </ListValues>\r
+ </avrgcc.linker.libraries.Libraries>\r
+ <avrgcc.assembler.debugging.DebugLevel>Default (-Wa,-g)</avrgcc.assembler.debugging.DebugLevel>\r
+ </AvrGcc>\r
+ </ToolchainSettings>\r
+ </PropertyGroup>\r
+ <ItemGroup>\r
+ <Compile Include="..\common\I2C\BMP280.c">\r
+ <SubType>compile</SubType>\r
+ <Link>BMP280.c</Link>\r
+ </Compile>\r
+ <Compile Include="..\common\I2C\CDM7160.c">\r
+ <SubType>compile</SubType>\r
+ <Link>CDM7160.c</Link>\r
+ </Compile>\r
+ <Compile Include="..\common\I2C\TWI_Master.c">\r
+ <SubType>compile</SubType>\r
+ <Link>TWI_Master.c</Link>\r
+ </Compile>\r
+ <Compile Include="DS2450_CDM7160_BMP280.c">\r
+ <SubType>compile</SubType>\r
+ </Compile>\r
+ <Compile Include="OWDS2450.S">\r
+ <SubType>compile</SubType>\r
+ </Compile>\r
+ </ItemGroup>\r
+ <Import Project="$(AVRSTUDIO_EXE_PATH)\\Vs\\Compiler.targets" />\r
+</Project>
\ No newline at end of file
--- /dev/null
+\r
+Microsoft Visual Studio Solution File, Format Version 12.00\r
+# Atmel Studio Solution File, Format Version 11.00\r
+VisualStudioVersion = 14.0.23107.0\r
+MinimumVisualStudioVersion = 10.0.40219.1\r
+Project("{54F91283-7BC4-4236-8FF9-10F437C3AD48}") = "DS2450_DSM501A", "DS2450_DSM501A.cproj", "{DCE6C7E3-EE26-4D79-826B-08594B9AD897}"\r
+EndProject\r
+Global\r
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution\r
+ Debug|AVR = Debug|AVR\r
+ Release|AVR = Release|AVR\r
+ EndGlobalSection\r
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution\r
+ {DCE6C7E3-EE26-4D79-826B-08594B9AD897}.Debug|AVR.ActiveCfg = Debug|AVR\r
+ {DCE6C7E3-EE26-4D79-826B-08594B9AD897}.Debug|AVR.Build.0 = Debug|AVR\r
+ {DCE6C7E3-EE26-4D79-826B-08594B9AD897}.Release|AVR.ActiveCfg = Release|AVR\r
+ {DCE6C7E3-EE26-4D79-826B-08594B9AD897}.Release|AVR.Build.0 = Release|AVR\r
+ EndGlobalSection\r
+ GlobalSection(SolutionProperties) = preSolution\r
+ HideSolutionNode = FALSE\r
+ EndGlobalSection\r
+EndGlobal\r
--- /dev/null
+\r
+// Copyright (c) 2017, Tobias Mueller tm(at)tm3d.de\r
+// All rights reserved.\r
+//\r
+// Redistribution and use in source and binary forms, with or without\r
+// modification, are permitted provided that the following conditions are\r
+// met:\r
+//\r
+// * Redistributions of source code must retain the above copyright\r
+// notice, this list of conditions and the following disclaimer.\r
+// * Redistributions in binary form must reproduce the above copyright\r
+// notice, this list of conditions and the following disclaimer in the\r
+// documentation and/or other materials provided with the\r
+// distribution.\r
+// * All advertising materials mentioning features or use of this\r
+// software must display the following acknowledgement: This product\r
+// includes software developed by tm3d.de and its contributors.\r
+// * Neither the name of tm3d.de nor the names of its contributors may\r
+// be used to endorse or promote products derived from this software\r
+// without specific prior written permission.\r
+//\r
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\r
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\r
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\r
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\r
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\r
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\r
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\r
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\r
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+\r
+#define F_CPU 8000000UL\r
+#include <avr/io.h>\r
+#include <avr/interrupt.h>\r
+#include <util/delay.h>\r
+#include <avr/wdt.h>\r
+#include <avr/sleep.h>\r
+#include <avr/pgmspace.h>\r
+\r
+extern void OWINIT();\r
+extern void EXTERN_SLEEP();\r
+\r
+uint8_t owid[8]={0x20, 0xA2, 0xD9, 0x84, 0x00, 0x16, 0x02, 0x5D};/**/\r
+uint8_t config_info[26]={0x9,13,0x06,0x09,0x06,0x013,0x06,0x013,0x02,20,20,20,20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};\r
+#if (owid>128) \r
+#error "Variable not correct"\r
+#endif\r
+\r
+extern uint8_t mode;\r
+extern uint8_t gcontrol;\r
+extern uint8_t reset_indicator;\r
+extern uint8_t alarmflag;\r
+\r
+volatile uint16_t ltime_list[32];\r
+volatile uint16_t pcount_list[32];\r
+volatile uint8_t wsp=0;\r
+volatile uint16_t max_count;\r
+volatile uint16_t max_ptime=0;\r
+volatile uint16_t min_ptime=0;\r
+\r
+uint16_t ds;\r
+\r
+\r
+\r
+typedef union {\r
+ volatile uint8_t bytes[0x20];\r
+ struct {\r
+ //Page0\r
+ uint16_t A; //0\r
+ uint16_t B; //2\r
+ uint16_t C; //4\r
+ uint16_t D; //6\r
+ //Page1\r
+ uint8_t CSA1;\r
+ uint8_t CSA2;\r
+ uint8_t CSB1;\r
+ uint8_t CSB2;\r
+ uint8_t CSC1;\r
+ uint8_t CSC2;\r
+ uint8_t CSD1;\r
+ uint8_t CSD2;\r
+ //Page2\r
+ uint8_t LA;\r
+ uint8_t HA;\r
+ uint8_t LB;\r
+ uint8_t HB;\r
+ uint8_t LC;\r
+ uint8_t HC;\r
+ uint8_t LD;\r
+ uint8_t HD;\r
+ //Page3\r
+ uint8_t FC1;\r
+ uint8_t FC2;\r
+ uint8_t FC3;\r
+ uint8_t FC4;\r
+ uint8_t VCCP;\r
+ uint8_t FC5;\r
+ uint8_t FC6;\r
+ uint8_t FC7;\r
+ uint8_t convc1;\r
+ uint8_t convc2;\r
+ \r
+ \r
+ };\r
+} pack_t;\r
+volatile pack_t pack;\r
+\r
+volatile uint16_t count;\r
+volatile uint16_t ltime;\r
+volatile uint16_t startt;\r
+\r
+#define SEC_TIME 31250+300\r
+\r
+ISR(TIM1_OVF_vect){\r
+ TCNT1=~(SEC_TIME);\r
+ ltime_list[wsp]=ltime;\r
+ pcount_list[wsp]=count;\r
+ wsp++;\r
+ if (wsp>=32) wsp=0;\r
+ //if (count>max) max=count;\r
+ //if (mess) \r
+ //count=(SEC_TIME)\r
+ startt=~(SEC_TIME);\r
+ count=0;\r
+ ltime=0;\r
+ \r
+}\r
+#define PIN_WIND (1<<PINA2)\r
+#define PIN_REG PINA\r
+volatile uint8_t istat;\r
+volatile uint8_t mess=0;\r
+\r
+\r
+ISR(PCINT0_vect) {\r
+ if (((PIN_REG&PIN_WIND)==0)&&((istat&PIN_WIND)==PIN_WIND)) { \r
+ startt=TCNT1;\r
+ mess=1;\r
+ PORTB&=~(1<<PINB1);\r
+ }\r
+ if (((PIN_REG&PIN_WIND)==PIN_WIND)&&((istat&PIN_WIND)==0)) {\r
+ uint16_t duration=(+TCNT1-startt);\r
+ ltime+=duration;\r
+ count++;\r
+ if (min_ptime==0) min_ptime=duration;\r
+ if (duration>max_ptime)max_ptime=duration;\r
+ if (duration<min_ptime)min_ptime=duration;\r
+ \r
+ mess=0;\r
+ }\r
+\r
+ istat=PIN_REG;\r
+ \r
+}\r
+\r
+\r
+int main(void){\r
+ for(uint8_t i=0;i<16;i++) {ltime_list[i]=0;pcount_list[i]=0;}\r
+ pack.A=0;\r
+ pack.B=0;\r
+ pack.C=0;\r
+ pack.D=0;\r
+ pack.CSA1=0x08;\r
+ pack.CSA2=0x8C;\r
+ pack.CSB1=0x08;\r
+ pack.CSB2=0x8C;\r
+ pack.CSC1=0x08;\r
+ pack.CSC2=0x8C;\r
+ pack.CSD1=0x08;\r
+ pack.CSD2=0x8C;\r
+ pack.HA=0xFF;\r
+ pack.LA=0x00;\r
+ pack.HB=0xFF;\r
+ pack.LB=0x00;\r
+ pack.HC=0xFF;\r
+ pack.LC=0x00;\r
+ pack.HD=0xFF;\r
+ pack.LD=0x00;\r
+ pack.VCCP=0;\r
+ OWINIT();\r
+\r
+ MCUCR &=~(1<<PUD); //All Pins Pullup...\r
+ MCUCR |=(1<<BODS);\r
+ PORTA&=~((1<<PINA0)|(1<<PINA1)|(1<<PINA2)|(1<<PINA3));\r
+ ADCSRA=(1<<ADEN)|(1<ADPS0)|(1<<ADPS2);\r
+\r
+ \r
+ \r
+ gcontrol=1;\r
+ ADCSRB|=(1<<ADLAR); \r
+ sei();\r
+ \r
+ DDRB|=(1<<PINB1);\r
+ TCCR1B|=(1<<CS12); //8000000/256 =31250\r
+ TIMSK1|=(1<<TOIE1); \r
+ istat=PIN_REG;\r
+ GIMSK|=(1<<PCIE0);\r
+ PCMSK0=(PIN_WIND);\r
+ MCUCR &=~(1<<PUD); //All Pins Pullup...\r
+ PORTA|=0xFF; \r
+ while(1) {\r
+ //PORTB&=~(1<<PINB1);\r
+\r
+ if (gcontrol) {\r
+ //PORTB|=(1<<PINB1);\r
+ uint8_t bb=1;\r
+ uint8_t bb1=1;\r
+ for(uint8_t i=0;i<4;i++){\r
+ if (pack.convc1&bb1) {\r
+ if (pack.convc2&(bb)) {pack.bytes[i*2]=0;pack.bytes[i*2+1]=0;}\r
+ bb=bb<<1;\r
+ if (pack.convc2&(bb)) {pack.bytes[i*2]=0xFF;pack.bytes[i*2+1]=0xFF;}\r
+ bb=bb<<1;\r
+ } else bb=bb<<2;\r
+ bb1=bb1<<1; \r
+ }\r
+ //CHanel A\r
+ if (pack.convc1&1) {\r
+ //if (pack.CSA2&0x01) ADMUX=0; else ADMUX=0x80;\r
+ //_delay_us(100);\r
+ //ADCSRA|=(1<<ADSC);\r
+ //while ((ADCSRA&(1<<ADSC)));\r
+ //cli();pack.A=ADC;sei();\r
+ ds=0;\r
+ for(uint8_t i=0;i<32;i++) {\r
+ ds+=pcount_list[i];\r
+ //if (wspeed[i]>ds) ds=wspeed[i];\r
+ }\r
+ cli();pack.A=ds;sei();\r
+ alarmflag=0;\r
+ if (pack.CSA2&0x08) //AEH\r
+ if (pack.bytes[1]>pack.HA) {alarmflag=1;pack.CSA2|=0x20;}\r
+ if (pack.CSA2&0x04) //AEL\r
+ if (pack.bytes[1]<pack.LA) {alarmflag=1;pack.CSA2|=0x10;}\r
+ }\r
+\r
+ if (pack.convc1&2) {\r
+ double fds=0;\r
+ for(uint8_t i=0;i<32;i++) {\r
+ fds+=ltime_list[i];\r
+ //if (wspeed[i]>ds) ds=wspeed[i];\r
+ }\r
+ double lr=(fds/32.0)/(SEC_TIME)*65535/5.1;\r
+ cli();pack.B=lr;sei();\r
+ //max=0;\r
+ if (pack.CSB2&0x08) //AEH\r
+ if (pack.bytes[1]>pack.HB) {alarmflag=1;pack.CSB2|=0x20;}\r
+ if (pack.CSB2&0x04) //AEL\r
+ if (pack.bytes[1]<pack.LB) {alarmflag=1;pack.CSB2|=0x10;}\r
+ }\r
+\r
+ if (pack.convc1&4) {\r
+ double mu_sek=(double)max_ptime/(SEC_TIME)*1e6;\r
+ max_ptime=0;\r
+ cli();pack.C=mu_sek;sei();\r
+ if (pack.CSC2&0x08) //AEH\r
+ if (pack.bytes[1]>pack.HC) {alarmflag=1;pack.CSC2|=0x20;}\r
+ if (pack.CSC2&0x04) //AEL\r
+ if (pack.bytes[1]<pack.LC) {alarmflag=1;pack.CSC2|=0x10;}\r
+ } \r
+ if (pack.convc1&8) {\r
+ double mu_sek=(double)min_ptime/(SEC_TIME)*1e6;\r
+ min_ptime=0;\r
+ cli();pack.D=mu_sek;sei();\r
+ if (pack.CSD2&0x08) //AEH\r
+ if (pack.bytes[1]>pack.HD) {alarmflag=1;pack.CSD2|=0x20;}\r
+ if (pack.CSD2&0x04) //AEL\r
+ if (pack.bytes[1]<pack.LD) {alarmflag=1;pack.CSD2|=0x10;}\r
+ }\r
+ \r
+ EXTERN_SLEEP();\r
+ //\r
+ }\r
+\r
+ uint8_t bb=1;\r
+ for(uint8_t i=0;i<4;i++) {\r
+ if (pack.bytes[8+i*2]&0x80) { //Chanel as output\r
+ if (pack.bytes[8+i*2]&0x40) {\r
+ DDRA|=bb;\r
+ } else {\r
+ DDRA&=~bb;\r
+ }\r
+ } else {\r
+ DDRA&=~bb;\r
+ }\r
+ bb=bb*2;\r
+ }\r
+ if ((PORTB&(1<<PINB1))==0) {\r
+ _delay_ms(100);\r
+ PORTB|=(1<<PINB1);\r
+ }\r
+ \r
+#if defined(__AVR_ATtiny25__)||defined(__AVR_ATtiny45__) || defined(__AVR_ATtiny85__)\r
+ if (((TIMSK & (1<<TOIE0))==0)&& (mode==0))\r
+#endif \r
+#if defined(__AVR_ATtiny24__)||defined(__AVR_ATtiny44__) || defined(__AVR_ATtiny84__) ||defined(__AVR_ATtiny24A__)||defined(__AVR_ATtiny44A__) || defined(__AVR_ATtiny84A__)\r
+ if (((TIMSK0 & (1<<TOIE0))==0)&& (mode==0))\r
+#endif\r
+ {\r
+\r
+ MCUCR|=(1<<SE)|(1<<SM1);\r
+ MCUCR&=~(1<<ISC01);\r
+ } else {\r
+ MCUCR|=(1<<SE);\r
+ MCUCR&=~(1<<SM1);\r
+ }\r
+ // asm("SLEEP");\r
+ }\r
+\r
+\r
+}
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>\r
+<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="14.0">\r
+ <PropertyGroup>\r
+ <SchemaVersion>2.0</SchemaVersion>\r
+ <ProjectVersion>7.0</ProjectVersion>\r
+ <ToolchainName>com.Atmel.AVRGCC8.C</ToolchainName>\r
+ <ProjectGuid>dce6c7e3-ee26-4d79-826b-08594b9ad897</ProjectGuid>\r
+ <avrdevice>ATtiny84A</avrdevice>\r
+ <avrdeviceseries>none</avrdeviceseries>\r
+ <OutputType>Executable</OutputType>\r
+ <Language>C</Language>\r
+ <OutputFileName>$(MSBuildProjectName)</OutputFileName>\r
+ <OutputFileExtension>.elf</OutputFileExtension>\r
+ <OutputDirectory>$(MSBuildProjectDirectory)\$(Configuration)</OutputDirectory>\r
+ <AssemblyName>DS2450</AssemblyName>\r
+ <Name>DS2450_DSM501A</Name>\r
+ <RootNamespace>DS2450</RootNamespace>\r
+ <ToolchainFlavour>Native</ToolchainFlavour>\r
+ <KeepTimersRunning>true</KeepTimersRunning>\r
+ <OverrideVtor>false</OverrideVtor>\r
+ <CacheFlash>true</CacheFlash>\r
+ <ProgFlashFromRam>true</ProgFlashFromRam>\r
+ <RamSnippetAddress>0x20000000</RamSnippetAddress>\r
+ <UncachedRange />\r
+ <preserveEEPROM>true</preserveEEPROM>\r
+ <OverrideVtorValue>exception_table</OverrideVtorValue>\r
+ <BootSegment>2</BootSegment>\r
+ <eraseonlaunchrule>1</eraseonlaunchrule>\r
+ <ExternalProgrammingToolCommand />\r
+ <AsfFrameworkConfig>\r
+ <framework-data>\r
+ <options />\r
+ <configurations />\r
+ <files />\r
+ <documentation help="" />\r
+ <offline-documentation help="" />\r
+ <dependencies>\r
+ <content-extension eid="atmel.asf" uuidref="Atmel.ASF" version="3.28.1" />\r
+ </dependencies>\r
+ </framework-data>\r
+ </AsfFrameworkConfig>\r
+ <avrtool>com.atmel.avrdbg.tool.atmelice</avrtool>\r
+ <avrtoolserialnumber>J41800000789</avrtoolserialnumber>\r
+ <avrdeviceexpectedsignature>0x1E930C</avrdeviceexpectedsignature>\r
+ <com_atmel_avrdbg_tool_atmelice>\r
+ <ToolOptions>\r
+ <InterfaceProperties>\r
+ </InterfaceProperties>\r
+ <InterfaceName>debugWIRE</InterfaceName>\r
+ </ToolOptions>\r
+ <ToolType>com.atmel.avrdbg.tool.atmelice</ToolType>\r
+ <ToolNumber>J41800000789</ToolNumber>\r
+ <ToolName>Atmel-ICE</ToolName>\r
+ </com_atmel_avrdbg_tool_atmelice>\r
+ <avrtoolinterface>debugWIRE</avrtoolinterface>\r
+ </PropertyGroup>\r
+ <PropertyGroup Condition=" '$(Configuration)' == 'Release' ">\r
+ <ToolchainSettings>\r
+ <AvrGcc>\r
+ <avrgcc.common.Device>-mmcu=attiny84a -B "%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.79\gcc\dev\attiny84a"</avrgcc.common.Device>\r
+ <avrgcc.common.outputfiles.hex>True</avrgcc.common.outputfiles.hex>\r
+ <avrgcc.common.outputfiles.lss>True</avrgcc.common.outputfiles.lss>\r
+ <avrgcc.common.outputfiles.eep>True</avrgcc.common.outputfiles.eep>\r
+ <avrgcc.common.outputfiles.srec>True</avrgcc.common.outputfiles.srec>\r
+ <avrgcc.common.outputfiles.usersignatures>False</avrgcc.common.outputfiles.usersignatures>\r
+ <avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>True</avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>\r
+ <avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>True</avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>\r
+ <avrgcc.compiler.symbols.DefSymbols>\r
+ <ListValues>\r
+ <Value>NDEBUG</Value>\r
+ </ListValues>\r
+ </avrgcc.compiler.symbols.DefSymbols>\r
+ <avrgcc.compiler.directories.IncludePaths>\r
+ <ListValues>\r
+ <Value>%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.79\include</Value>\r
+ </ListValues>\r
+ </avrgcc.compiler.directories.IncludePaths>\r
+ <avrgcc.compiler.optimization.level>Optimize for size (-Os)</avrgcc.compiler.optimization.level>\r
+ <avrgcc.compiler.optimization.PackStructureMembers>True</avrgcc.compiler.optimization.PackStructureMembers>\r
+ <avrgcc.compiler.optimization.AllocateBytesNeededForEnum>True</avrgcc.compiler.optimization.AllocateBytesNeededForEnum>\r
+ <avrgcc.compiler.warnings.AllWarnings>True</avrgcc.compiler.warnings.AllWarnings>\r
+ <avrgcc.linker.libraries.Libraries>\r
+ <ListValues>\r
+ <Value>libm</Value>\r
+ </ListValues>\r
+ </avrgcc.linker.libraries.Libraries>\r
+ <avrgcc.assembler.general.IncludePaths>\r
+ <ListValues>\r
+ <Value>%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.79\include</Value>\r
+ </ListValues>\r
+ </avrgcc.assembler.general.IncludePaths>\r
+ </AvrGcc>\r
+ </ToolchainSettings>\r
+ </PropertyGroup>\r
+ <PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">\r
+ <ToolchainSettings>\r
+ <AvrGcc>\r
+ <avrgcc.common.Device>-mmcu=attiny84a -B "%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.79\gcc\dev\attiny84a"</avrgcc.common.Device>\r
+ <avrgcc.common.outputfiles.hex>True</avrgcc.common.outputfiles.hex>\r
+ <avrgcc.common.outputfiles.lss>True</avrgcc.common.outputfiles.lss>\r
+ <avrgcc.common.outputfiles.eep>True</avrgcc.common.outputfiles.eep>\r
+ <avrgcc.common.outputfiles.srec>True</avrgcc.common.outputfiles.srec>\r
+ <avrgcc.common.outputfiles.usersignatures>False</avrgcc.common.outputfiles.usersignatures>\r
+ <avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>True</avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>\r
+ <avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>True</avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>\r
+ <avrgcc.compiler.symbols.DefSymbols>\r
+ <ListValues>\r
+ <Value>DEBUG</Value>\r
+ </ListValues>\r
+ </avrgcc.compiler.symbols.DefSymbols>\r
+ <avrgcc.compiler.directories.IncludePaths>\r
+ <ListValues>\r
+ <Value>%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.79\include</Value>\r
+ </ListValues>\r
+ </avrgcc.compiler.directories.IncludePaths>\r
+ <avrgcc.compiler.optimization.level>Optimize (-O1)</avrgcc.compiler.optimization.level>\r
+ <avrgcc.compiler.optimization.PackStructureMembers>True</avrgcc.compiler.optimization.PackStructureMembers>\r
+ <avrgcc.compiler.optimization.AllocateBytesNeededForEnum>True</avrgcc.compiler.optimization.AllocateBytesNeededForEnum>\r
+ <avrgcc.compiler.optimization.DebugLevel>Default (-g2)</avrgcc.compiler.optimization.DebugLevel>\r
+ <avrgcc.compiler.warnings.AllWarnings>True</avrgcc.compiler.warnings.AllWarnings>\r
+ <avrgcc.linker.libraries.Libraries>\r
+ <ListValues>\r
+ <Value>libm</Value>\r
+ </ListValues>\r
+ </avrgcc.linker.libraries.Libraries>\r
+ <avrgcc.assembler.general.IncludePaths>\r
+ <ListValues>\r
+ <Value>%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.79\include</Value>\r
+ </ListValues>\r
+ </avrgcc.assembler.general.IncludePaths>\r
+ <avrgcc.assembler.debugging.DebugLevel>Default (-Wa,-g)</avrgcc.assembler.debugging.DebugLevel>\r
+ </AvrGcc>\r
+ </ToolchainSettings>\r
+ </PropertyGroup>\r
+ <ItemGroup>\r
+ <Compile Include="..\common\OWDS2450.S">\r
+ <SubType>compile</SubType>\r
+ <Link>OWDS2450.S</Link>\r
+ </Compile>\r
+ <Compile Include="DS2450_DSM501A.c">\r
+ <SubType>compile</SubType>\r
+ </Compile>\r
+ </ItemGroup>\r
+ <Import Project="$(AVRSTUDIO_EXE_PATH)\\Vs\\Compiler.targets" />\r
+</Project>
\ No newline at end of file
-
-Microsoft Visual Studio Solution File, Format Version 12.00
-# Atmel Studio Solution File, Format Version 11.00
-VisualStudioVersion = 14.0.23107.0
-MinimumVisualStudioVersion = 10.0.40219.1
-Project("{54F91283-7BC4-4236-8FF9-10F437C3AD48}") = "DS2450_IAQCORE", "DS2450_IAQCORE.cproj", "{DCE6C7E3-EE26-4D79-826B-08594B9AD897}"
-EndProject
-Global
- GlobalSection(SolutionConfigurationPlatforms) = preSolution
- Debug|AVR = Debug|AVR
- Release|AVR = Release|AVR
- EndGlobalSection
- GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {DCE6C7E3-EE26-4D79-826B-08594B9AD897}.Debug|AVR.ActiveCfg = Debug|AVR
- {DCE6C7E3-EE26-4D79-826B-08594B9AD897}.Debug|AVR.Build.0 = Debug|AVR
- {DCE6C7E3-EE26-4D79-826B-08594B9AD897}.Release|AVR.ActiveCfg = Release|AVR
- {DCE6C7E3-EE26-4D79-826B-08594B9AD897}.Release|AVR.Build.0 = Release|AVR
- EndGlobalSection
- GlobalSection(SolutionProperties) = preSolution
- HideSolutionNode = FALSE
- EndGlobalSection
-EndGlobal
+\r
+Microsoft Visual Studio Solution File, Format Version 12.00\r
+# Atmel Studio Solution File, Format Version 11.00\r
+VisualStudioVersion = 14.0.23107.0\r
+MinimumVisualStudioVersion = 10.0.40219.1\r
+Project("{54F91283-7BC4-4236-8FF9-10F437C3AD48}") = "DS2450_IAQCORE", "DS2450_IAQCORE.cproj", "{DCE6C7E3-EE26-4D79-826B-08594B9AD897}"\r
+EndProject\r
+Global\r
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution\r
+ Debug|AVR = Debug|AVR\r
+ Release|AVR = Release|AVR\r
+ EndGlobalSection\r
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution\r
+ {DCE6C7E3-EE26-4D79-826B-08594B9AD897}.Debug|AVR.ActiveCfg = Debug|AVR\r
+ {DCE6C7E3-EE26-4D79-826B-08594B9AD897}.Debug|AVR.Build.0 = Debug|AVR\r
+ {DCE6C7E3-EE26-4D79-826B-08594B9AD897}.Release|AVR.ActiveCfg = Release|AVR\r
+ {DCE6C7E3-EE26-4D79-826B-08594B9AD897}.Release|AVR.Build.0 = Release|AVR\r
+ EndGlobalSection\r
+ GlobalSection(SolutionProperties) = preSolution\r
+ HideSolutionNode = FALSE\r
+ EndGlobalSection\r
+EndGlobal\r
extern void EXTERN_SLEEP();\r
\r
uint8_t owid[8]={0x20, 0xA2, 0xD9, 0x84, 0x00, 0x16, 0x02, 0x5D};/**/\r
-uint8_t config_info[26]={0x06,13,0x06,13,0x06,13,0x06,13,0x02,20,20,20,20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};\r
+uint8_t config_info[26]={10,13,8,13,11,13,5,13,0x02,27,27,27,27,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};\r
\r
#if (owid>128) \r
#error "Variable not correct"\r
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="14.0">
- <PropertyGroup>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectVersion>7.0</ProjectVersion>
- <ToolchainName>com.Atmel.AVRGCC8.C</ToolchainName>
- <ProjectGuid>dce6c7e3-ee26-4d79-826b-08594b9ad897</ProjectGuid>
- <avrdevice>ATtiny84A</avrdevice>
- <avrdeviceseries>none</avrdeviceseries>
- <OutputType>Executable</OutputType>
- <Language>C</Language>
- <OutputFileName>$(MSBuildProjectName)</OutputFileName>
- <OutputFileExtension>.elf</OutputFileExtension>
- <OutputDirectory>$(MSBuildProjectDirectory)\$(Configuration)</OutputDirectory>
- <AssemblyName>DS2450</AssemblyName>
- <Name>DS2450_IAQCORE</Name>
- <RootNamespace>DS2450</RootNamespace>
- <ToolchainFlavour>Native</ToolchainFlavour>
- <KeepTimersRunning>true</KeepTimersRunning>
- <OverrideVtor>false</OverrideVtor>
- <CacheFlash>true</CacheFlash>
- <ProgFlashFromRam>true</ProgFlashFromRam>
- <RamSnippetAddress>0x20000000</RamSnippetAddress>
- <UncachedRange />
- <preserveEEPROM>true</preserveEEPROM>
- <OverrideVtorValue>exception_table</OverrideVtorValue>
- <BootSegment>2</BootSegment>
- <eraseonlaunchrule>1</eraseonlaunchrule>
- <ExternalProgrammingToolCommand />
- <AsfFrameworkConfig>
- <framework-data>
- <options />
- <configurations />
- <files />
- <documentation help="" />
- <offline-documentation help="" />
- <dependencies>
- <content-extension eid="atmel.asf" uuidref="Atmel.ASF" version="3.28.1" />
- </dependencies>
- </framework-data>
- </AsfFrameworkConfig>
- <avrtool />
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)' == 'Release' ">
- <ToolchainSettings>
- <AvrGcc>
- <avrgcc.common.Device>-mmcu=attiny84a -B "%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.79\gcc\dev\attiny84a"</avrgcc.common.Device>
- <avrgcc.common.outputfiles.hex>True</avrgcc.common.outputfiles.hex>
- <avrgcc.common.outputfiles.lss>True</avrgcc.common.outputfiles.lss>
- <avrgcc.common.outputfiles.eep>True</avrgcc.common.outputfiles.eep>
- <avrgcc.common.outputfiles.srec>True</avrgcc.common.outputfiles.srec>
- <avrgcc.common.outputfiles.usersignatures>False</avrgcc.common.outputfiles.usersignatures>
- <avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>True</avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>
- <avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>True</avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>
- <avrgcc.compiler.symbols.DefSymbols>
- <ListValues>
- <Value>NDEBUG</Value>
- </ListValues>
- </avrgcc.compiler.symbols.DefSymbols>
- <avrgcc.compiler.directories.IncludePaths>
- <ListValues>
- <Value>%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.79\include</Value>
- </ListValues>
- </avrgcc.compiler.directories.IncludePaths>
- <avrgcc.compiler.optimization.level>Optimize for size (-Os)</avrgcc.compiler.optimization.level>
- <avrgcc.compiler.optimization.PackStructureMembers>True</avrgcc.compiler.optimization.PackStructureMembers>
- <avrgcc.compiler.optimization.AllocateBytesNeededForEnum>True</avrgcc.compiler.optimization.AllocateBytesNeededForEnum>
- <avrgcc.compiler.warnings.AllWarnings>True</avrgcc.compiler.warnings.AllWarnings>
- <avrgcc.linker.libraries.Libraries>
- <ListValues>
- <Value>libm</Value>
- </ListValues>
- </avrgcc.linker.libraries.Libraries>
- <avrgcc.assembler.general.IncludePaths>
- <ListValues>
- <Value>%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.79\include</Value>
- </ListValues>
- </avrgcc.assembler.general.IncludePaths>
- </AvrGcc>
- </ToolchainSettings>
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
- <ToolchainSettings>
- <AvrGcc>
- <avrgcc.common.Device>-mmcu=attiny84a -B "%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.79\gcc\dev\attiny84a"</avrgcc.common.Device>
- <avrgcc.common.outputfiles.hex>True</avrgcc.common.outputfiles.hex>
- <avrgcc.common.outputfiles.lss>True</avrgcc.common.outputfiles.lss>
- <avrgcc.common.outputfiles.eep>True</avrgcc.common.outputfiles.eep>
- <avrgcc.common.outputfiles.srec>True</avrgcc.common.outputfiles.srec>
- <avrgcc.common.outputfiles.usersignatures>False</avrgcc.common.outputfiles.usersignatures>
- <avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>True</avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>
- <avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>True</avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>
- <avrgcc.compiler.symbols.DefSymbols>
- <ListValues>
- <Value>DEBUG</Value>
- </ListValues>
- </avrgcc.compiler.symbols.DefSymbols>
- <avrgcc.compiler.directories.IncludePaths>
- <ListValues>
- <Value>%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.79\include</Value>
- </ListValues>
- </avrgcc.compiler.directories.IncludePaths>
- <avrgcc.compiler.optimization.level>Optimize (-O1)</avrgcc.compiler.optimization.level>
- <avrgcc.compiler.optimization.PackStructureMembers>True</avrgcc.compiler.optimization.PackStructureMembers>
- <avrgcc.compiler.optimization.AllocateBytesNeededForEnum>True</avrgcc.compiler.optimization.AllocateBytesNeededForEnum>
- <avrgcc.compiler.optimization.DebugLevel>Default (-g2)</avrgcc.compiler.optimization.DebugLevel>
- <avrgcc.compiler.warnings.AllWarnings>True</avrgcc.compiler.warnings.AllWarnings>
- <avrgcc.linker.libraries.Libraries>
- <ListValues>
- <Value>libm</Value>
- </ListValues>
- </avrgcc.linker.libraries.Libraries>
- <avrgcc.assembler.general.IncludePaths>
- <ListValues>
- <Value>%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.79\include</Value>
- </ListValues>
- </avrgcc.assembler.general.IncludePaths>
- <avrgcc.assembler.debugging.DebugLevel>Default (-Wa,-g)</avrgcc.assembler.debugging.DebugLevel>
- </AvrGcc>
- </ToolchainSettings>
- </PropertyGroup>
- <ItemGroup>
- <Compile Include="..\common\I2C\IAQCORE.c">
- <SubType>compile</SubType>
- <Link>IAQCORE.c</Link>
- </Compile>
- <Compile Include="..\common\I2C\USI_TWI_Master.c">
- <SubType>compile</SubType>
- <Link>USI_TWI_Master.c</Link>
- </Compile>
- <Compile Include="DS2450_IAQCORE.c">
- <SubType>compile</SubType>
- </Compile>
- <Compile Include="OWDS2450.S">
- <SubType>compile</SubType>
- </Compile>
- </ItemGroup>
- <Import Project="$(AVRSTUDIO_EXE_PATH)\\Vs\\Compiler.targets" />
+<?xml version="1.0" encoding="utf-8"?>\r
+<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="14.0">\r
+ <PropertyGroup>\r
+ <SchemaVersion>2.0</SchemaVersion>\r
+ <ProjectVersion>7.0</ProjectVersion>\r
+ <ToolchainName>com.Atmel.AVRGCC8.C</ToolchainName>\r
+ <ProjectGuid>dce6c7e3-ee26-4d79-826b-08594b9ad897</ProjectGuid>\r
+ <avrdevice>ATtiny84A</avrdevice>\r
+ <avrdeviceseries>none</avrdeviceseries>\r
+ <OutputType>Executable</OutputType>\r
+ <Language>C</Language>\r
+ <OutputFileName>$(MSBuildProjectName)</OutputFileName>\r
+ <OutputFileExtension>.elf</OutputFileExtension>\r
+ <OutputDirectory>$(MSBuildProjectDirectory)\$(Configuration)</OutputDirectory>\r
+ <AssemblyName>DS2450</AssemblyName>\r
+ <Name>DS2450_IAQCORE</Name>\r
+ <RootNamespace>DS2450</RootNamespace>\r
+ <ToolchainFlavour>Native</ToolchainFlavour>\r
+ <KeepTimersRunning>true</KeepTimersRunning>\r
+ <OverrideVtor>false</OverrideVtor>\r
+ <CacheFlash>true</CacheFlash>\r
+ <ProgFlashFromRam>true</ProgFlashFromRam>\r
+ <RamSnippetAddress>0x20000000</RamSnippetAddress>\r
+ <UncachedRange />\r
+ <preserveEEPROM>true</preserveEEPROM>\r
+ <OverrideVtorValue>exception_table</OverrideVtorValue>\r
+ <BootSegment>2</BootSegment>\r
+ <eraseonlaunchrule>1</eraseonlaunchrule>\r
+ <ExternalProgrammingToolCommand />\r
+ <AsfFrameworkConfig>\r
+ <framework-data>\r
+ <options />\r
+ <configurations />\r
+ <files />\r
+ <documentation help="" />\r
+ <offline-documentation help="" />\r
+ <dependencies>\r
+ <content-extension eid="atmel.asf" uuidref="Atmel.ASF" version="3.28.1" />\r
+ </dependencies>\r
+ </framework-data>\r
+ </AsfFrameworkConfig>\r
+ <avrtool />\r
+ </PropertyGroup>\r
+ <PropertyGroup Condition=" '$(Configuration)' == 'Release' ">\r
+ <ToolchainSettings>\r
+ <AvrGcc>\r
+ <avrgcc.common.Device>-mmcu=attiny84a -B "%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.79\gcc\dev\attiny84a"</avrgcc.common.Device>\r
+ <avrgcc.common.outputfiles.hex>True</avrgcc.common.outputfiles.hex>\r
+ <avrgcc.common.outputfiles.lss>True</avrgcc.common.outputfiles.lss>\r
+ <avrgcc.common.outputfiles.eep>True</avrgcc.common.outputfiles.eep>\r
+ <avrgcc.common.outputfiles.srec>True</avrgcc.common.outputfiles.srec>\r
+ <avrgcc.common.outputfiles.usersignatures>False</avrgcc.common.outputfiles.usersignatures>\r
+ <avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>True</avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>\r
+ <avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>True</avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>\r
+ <avrgcc.compiler.symbols.DefSymbols>\r
+ <ListValues>\r
+ <Value>NDEBUG</Value>\r
+ </ListValues>\r
+ </avrgcc.compiler.symbols.DefSymbols>\r
+ <avrgcc.compiler.directories.IncludePaths>\r
+ <ListValues>\r
+ <Value>%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.79\include</Value>\r
+ </ListValues>\r
+ </avrgcc.compiler.directories.IncludePaths>\r
+ <avrgcc.compiler.optimization.level>Optimize for size (-Os)</avrgcc.compiler.optimization.level>\r
+ <avrgcc.compiler.optimization.PackStructureMembers>True</avrgcc.compiler.optimization.PackStructureMembers>\r
+ <avrgcc.compiler.optimization.AllocateBytesNeededForEnum>True</avrgcc.compiler.optimization.AllocateBytesNeededForEnum>\r
+ <avrgcc.compiler.warnings.AllWarnings>True</avrgcc.compiler.warnings.AllWarnings>\r
+ <avrgcc.linker.libraries.Libraries>\r
+ <ListValues>\r
+ <Value>libm</Value>\r
+ </ListValues>\r
+ </avrgcc.linker.libraries.Libraries>\r
+ <avrgcc.assembler.general.IncludePaths>\r
+ <ListValues>\r
+ <Value>%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.79\include</Value>\r
+ </ListValues>\r
+ </avrgcc.assembler.general.IncludePaths>\r
+ </AvrGcc>\r
+ </ToolchainSettings>\r
+ </PropertyGroup>\r
+ <PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">\r
+ <ToolchainSettings>\r
+ <AvrGcc>\r
+ <avrgcc.common.Device>-mmcu=attiny84a -B "%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.79\gcc\dev\attiny84a"</avrgcc.common.Device>\r
+ <avrgcc.common.outputfiles.hex>True</avrgcc.common.outputfiles.hex>\r
+ <avrgcc.common.outputfiles.lss>True</avrgcc.common.outputfiles.lss>\r
+ <avrgcc.common.outputfiles.eep>True</avrgcc.common.outputfiles.eep>\r
+ <avrgcc.common.outputfiles.srec>True</avrgcc.common.outputfiles.srec>\r
+ <avrgcc.common.outputfiles.usersignatures>False</avrgcc.common.outputfiles.usersignatures>\r
+ <avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>True</avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>\r
+ <avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>True</avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>\r
+ <avrgcc.compiler.symbols.DefSymbols>\r
+ <ListValues>\r
+ <Value>DEBUG</Value>\r
+ </ListValues>\r
+ </avrgcc.compiler.symbols.DefSymbols>\r
+ <avrgcc.compiler.directories.IncludePaths>\r
+ <ListValues>\r
+ <Value>%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.79\include</Value>\r
+ </ListValues>\r
+ </avrgcc.compiler.directories.IncludePaths>\r
+ <avrgcc.compiler.optimization.level>Optimize (-O1)</avrgcc.compiler.optimization.level>\r
+ <avrgcc.compiler.optimization.PackStructureMembers>True</avrgcc.compiler.optimization.PackStructureMembers>\r
+ <avrgcc.compiler.optimization.AllocateBytesNeededForEnum>True</avrgcc.compiler.optimization.AllocateBytesNeededForEnum>\r
+ <avrgcc.compiler.optimization.DebugLevel>Default (-g2)</avrgcc.compiler.optimization.DebugLevel>\r
+ <avrgcc.compiler.warnings.AllWarnings>True</avrgcc.compiler.warnings.AllWarnings>\r
+ <avrgcc.linker.libraries.Libraries>\r
+ <ListValues>\r
+ <Value>libm</Value>\r
+ </ListValues>\r
+ </avrgcc.linker.libraries.Libraries>\r
+ <avrgcc.assembler.general.IncludePaths>\r
+ <ListValues>\r
+ <Value>%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.79\include</Value>\r
+ </ListValues>\r
+ </avrgcc.assembler.general.IncludePaths>\r
+ <avrgcc.assembler.debugging.DebugLevel>Default (-Wa,-g)</avrgcc.assembler.debugging.DebugLevel>\r
+ </AvrGcc>\r
+ </ToolchainSettings>\r
+ </PropertyGroup>\r
+ <ItemGroup>\r
+ <Compile Include="..\common\I2C\IAQCORE.c">\r
+ <SubType>compile</SubType>\r
+ <Link>IAQCORE.c</Link>\r
+ </Compile>\r
+ <Compile Include="..\common\I2C\USI_TWI_Master.c">\r
+ <SubType>compile</SubType>\r
+ <Link>USI_TWI_Master.c</Link>\r
+ </Compile>\r
+ <Compile Include="DS2450_IAQCORE.c">\r
+ <SubType>compile</SubType>\r
+ </Compile>\r
+ <Compile Include="OWDS2450.S">\r
+ <SubType>compile</SubType>\r
+ </Compile>\r
+ </ItemGroup>\r
+ <Import Project="$(AVRSTUDIO_EXE_PATH)\\Vs\\Compiler.targets" />\r
</Project>
\ No newline at end of file
--- /dev/null
+\r
+Microsoft Visual Studio Solution File, Format Version 12.00\r
+# Atmel Studio Solution File, Format Version 11.00\r
+VisualStudioVersion = 14.0.23107.0\r
+MinimumVisualStudioVersion = 10.0.40219.1\r
+Project("{54F91283-7BC4-4236-8FF9-10F437C3AD48}") = "DS2450_LPS225HB", "DS2450_LPS225HB.cproj", "{DCE6C7E3-EE26-4D79-826B-08594B9AD897}"\r
+EndProject\r
+Global\r
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution\r
+ Debug|AVR = Debug|AVR\r
+ Release|AVR = Release|AVR\r
+ EndGlobalSection\r
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution\r
+ {DCE6C7E3-EE26-4D79-826B-08594B9AD897}.Debug|AVR.ActiveCfg = Debug|AVR\r
+ {DCE6C7E3-EE26-4D79-826B-08594B9AD897}.Debug|AVR.Build.0 = Debug|AVR\r
+ {DCE6C7E3-EE26-4D79-826B-08594B9AD897}.Release|AVR.ActiveCfg = Release|AVR\r
+ {DCE6C7E3-EE26-4D79-826B-08594B9AD897}.Release|AVR.Build.0 = Release|AVR\r
+ EndGlobalSection\r
+ GlobalSection(SolutionProperties) = preSolution\r
+ HideSolutionNode = FALSE\r
+ EndGlobalSection\r
+EndGlobal\r
--- /dev/null
+// Copyright (c) 2018, Tobias Mueller tm(at)tm3d.de\r
+// All rights reserved.\r
+//\r
+// Redistribution and use in source and binary forms, with or without\r
+// modification, are permitted provided that the following conditions are\r
+// met:\r
+//\r
+// * Redistributions of source code must retain the above copyright\r
+// notice, this list of conditions and the following disclaimer.\r
+// * Redistributions in binary form must reproduce the above copyright\r
+// notice, this list of conditions and the following disclaimer in the\r
+// documentation and/or other materials provided with the\r
+// distribution.\r
+// * All advertising materials mentioning features or use of this\r
+// software must display the following acknowledgement: This product\r
+// includes software developed by tm3d.de and its contributors.\r
+// * Neither the name of tm3d.de nor the names of its contributors may\r
+// be used to endorse or promote products derived from this software\r
+// without specific prior written permission.\r
+//\r
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\r
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\r
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\r
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\r
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\r
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\r
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\r
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\r
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+\r
+#define F_CPU 8000000UL\r
+#include <avr/io.h>\r
+#include <avr/interrupt.h>\r
+#include <util/delay.h>\r
+#include <avr/wdt.h>\r
+#include <avr/sleep.h>\r
+#include <avr/pgmspace.h>\r
+#include "../common/I2C/USI_TWI_Master.h"\r
+#include "../common/I2C/LPS225HB.h"\r
+extern void OWINIT();\r
+extern void EXTERN_SLEEP();\r
+\r
+uint8_t owid[8]={0x20, 0xA2, 0xD9, 0x84, 0x00, 0x16, 0x02, 0x5D};/**/\r
+uint8_t config_info[26]={0x02,16,0x01,14, 0,0, 0x0,0,0x02,14,14,0x00,0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};\r
+#if (owid>128) \r
+#error "Variable not correct"\r
+#endif\r
+\r
+extern uint8_t mode;\r
+extern uint8_t gcontrol;\r
+extern uint8_t reset_indicator;\r
+extern uint8_t alarmflag;\r
+volatile uint8_t wdcounter=10;\r
+\r
+\r
+#if defined(__AVR_ATtiny24__)||defined(__AVR_ATtiny44__) || defined(__AVR_ATtiny84__) || defined(__AVR_ATtiny24A__)||defined(__AVR_ATtiny44A__) || defined(__AVR_ATtiny84A__)\r
+ISR(WATCHDOG_vect) {\r
+#else\r
+ISR(WDT_vect) {\r
+#endif \r
+ wdcounter++;\r
+ if (reset_indicator==1) reset_indicator++;\r
+ else if (reset_indicator==2) mode=0;\r
+}\r
+\r
+typedef union {\r
+ volatile uint8_t bytes[0x20];\r
+ struct {\r
+ //Page0\r
+ uint16_t A; //0\r
+ uint16_t B; //2\r
+ uint16_t C; //4\r
+ uint16_t D; //6\r
+ //Page1\r
+ uint8_t CSA1;\r
+ uint8_t CSA2;\r
+ uint8_t CSB1;\r
+ uint8_t CSB2;\r
+ uint8_t CSC1;\r
+ uint8_t CSC2;\r
+ uint8_t CSD1;\r
+ uint8_t CSD2;\r
+ //Page2\r
+ uint8_t LA;\r
+ uint8_t HA;\r
+ uint8_t LB;\r
+ uint8_t HB;\r
+ uint8_t LC;\r
+ uint8_t HC;\r
+ uint8_t LD;\r
+ uint8_t HD;\r
+ //Page3\r
+ uint8_t FC1;\r
+ uint8_t FC2;\r
+ uint8_t FC3;\r
+ uint8_t FC4;\r
+ uint8_t VCCP;\r
+ uint8_t FC5;\r
+ uint8_t FC6;\r
+ uint8_t FC7;\r
+ uint8_t convc1;\r
+ uint8_t convc2;\r
+ \r
+ \r
+ };\r
+} pack_t;\r
+volatile pack_t pack;\r
+\r
+\r
+\r
+volatile int16_t am2302_temp;\r
+volatile uint16_t am2302_hum;\r
+\r
+\r
+uint8_t userRegister[1];\r
+int16_t sRH,sT;\r
+volatile double temperatureC,humidityRH;\r
+uint32_t P;\r
+int16_t t;\r
+\r
+\r
+\r
+\r
+int main(void){\r
+ pack.A=0;\r
+ pack.B=0;\r
+ pack.C=0;\r
+ pack.D=0;\r
+ pack.CSA1=0x08;\r
+ pack.CSA2=0x8C;\r
+ pack.CSB1=0x08;\r
+ pack.CSB2=0x8C;\r
+ pack.CSC1=0x08;\r
+ pack.CSC2=0x8C;\r
+ pack.CSD1=0x08;\r
+ pack.CSD2=0x8C;\r
+ pack.HA=0xFF;\r
+ pack.LA=0x00;\r
+ pack.HB=0xFF;\r
+ pack.LB=0x00;\r
+ pack.HC=0xFF;\r
+ pack.LC=0x00;\r
+ pack.HD=0xFF;\r
+ pack.LD=0x00;\r
+ pack.VCCP=0;\r
+ PORTB=0xFF-(1<<PORTB0); //Schalter kann gegen Masse sein und zieht dann immer Strom\r
+ DDRB|=(1<<PORTB0); //Als Ausgang und 0\r
+ PORTA=0xFF; //All Pull up;\r
+ PRR|=(1<<PRADC); // adc for save Power\r
+\r
+ ACSR|=(1<<ACD); //Disable Comparator\r
+ OWINIT();\r
+\r
+ MCUCR &=~(1<<PUD); //All Pins Pullup...\r
+ MCUCR |=(1<<BODS);\r
+ WDTCSR |= ((1<<WDCE) ); // Enable the WD Change Bit//| (1<<WDE)\r
+ WDTCSR |= (1<<WDIE) | // Enable WDT Interrupt\r
+ (1<<WDP3) | (1<<WDP0); // Set Timeout to ~8 seconds\r
+ \r
+ gcontrol=1;\r
+ \r
+ USI_TWI_Master_Initialise();\r
+ LPS225HB_Init() ;\r
+ \r
+ sei();\r
+ \r
+ //DDRB|=(1<<PINB1);\r
+\r
+ while(1) {\r
+ \r
+ if (wdcounter>3) { \r
+ LPS225HB_Readi(&t,&P);\r
+ \r
+ \r
+ wdcounter=0;\r
+ }\r
+ \r
+\r
+ \r
+ \r
+\r
+\r
+ if (gcontrol) {\r
+ //PORTB|=(1<<PINB1);\r
+ uint8_t bb=1;\r
+ uint8_t bb1=1;\r
+ for(uint8_t i=0;i<4;i++){\r
+ if (pack.convc1&bb1) {\r
+ if (pack.convc2&(bb)) {pack.bytes[i*2]=0;pack.bytes[i*2+1]=0;}\r
+ bb=bb<<1;\r
+ if (pack.convc2&(bb)) {pack.bytes[i*2]=0xFF;pack.bytes[i*2+1]=0xFF;}\r
+ bb=bb<<1;\r
+ } else bb=bb<<2;\r
+ bb1=bb1<<1; \r
+ }\r
+ //CHanel A\r
+ if (pack.convc1&1) {\r
+ /*if (pack.CSA2&0x01) ADMUX=0; else ADMUX=0x80;\r
+ _delay_us(100);\r
+ ADCSRA|=(1<<ADSC);\r
+ while ((ADCSRA&(1<<ADSC)));\r
+ cli();pack.A=ADC;sei();*/\r
+ cli();pack.A=P/128;sei();\r
+ wdcounter=10;\r
+ alarmflag=0;\r
+ if (pack.CSA2&0x08) //AEH\r
+ if (pack.bytes[1]>pack.HA) {alarmflag=1;pack.CSA2|=0x20;}\r
+ if (pack.CSA2&0x04) //AEL\r
+ if (pack.bytes[1]<pack.LA) {alarmflag=1;pack.CSA2|=0x10;}\r
+ }\r
+\r
+ if (pack.convc1&2) {\r
+ /*if (pack.CSB2&0x01) ADMUX=1; else ADMUX=0x81;\r
+ _delay_us(100);\r
+ ADCSRA|=(1<<ADSC);\r
+ while ((ADCSRA&(1<<ADSC)));\r
+ cli();pack.B=ADC;sei();*/\r
+ wdcounter=10;\r
+ uint16_t ct=(t)+32767;\r
+ cli();pack.B=ct;sei();\r
+ if (pack.CSB2&0x08) //AEH\r
+ if (pack.bytes[1]>pack.HB) {alarmflag=1;pack.CSB2|=0x20;}\r
+ if (pack.CSB2&0x04) //AEL\r
+ if (pack.bytes[1]<pack.LB) {alarmflag=1;pack.CSB2|=0x10;}\r
+ }\r
+\r
+ if (pack.convc1&4) {\r
+ /*if (pack.CSC2&0x01) ADMUX=2; else ADMUX=0x82;\r
+ _delay_us(100);\r
+ ADCSRA|=(1<<ADSC);\r
+ while ((ADCSRA&(1<<ADSC)));\r
+ cli();pack.C=ADC;sei();*/\r
+ wdcounter=10;\r
+ cli();pack.C=0;sei();\r
+ if (pack.CSC2&0x08) //AEH\r
+ if (pack.bytes[1]>pack.HC) {alarmflag=1;pack.CSC2|=0x20;}\r
+ if (pack.CSC2&0x04) //AEL\r
+ if (pack.bytes[1]<pack.LC) {alarmflag=1;pack.CSC2|=0x10;}\r
+ } \r
+ if (pack.convc1&8) {\r
+ /*if (pack.CSD2&0x01) ADMUX=3; else ADMUX=0x83;\r
+ _delay_us(100);\r
+ ADCSRA|=(1<<ADSC);\r
+ while ((ADCSRA&(1<<ADSC)));\r
+ cli();pack.D=ADC;sei();*/\r
+ wdcounter=10;\r
+ cli();pack.D=0;sei();\r
+ if (pack.CSD2&0x08) //AEH\r
+ if (pack.bytes[1]>pack.HD) {alarmflag=1;pack.CSD2|=0x20;}\r
+ if (pack.CSD2&0x04) //AEL\r
+ if (pack.bytes[1]<pack.LD) {alarmflag=1;pack.CSD2|=0x10;}\r
+ }\r
+ \r
+ EXTERN_SLEEP();\r
+ //PORTB&=~(1<<PINB1);\r
+ }\r
+\r
+ /*uint8_t bb=1;\r
+ for(uint8_t i=0;i<4;i++) {\r
+ if (pack.bytes[8+i*2]&0x80) { //Chanel as output\r
+ if (pack.bytes[8+i*2]&0x40) {\r
+ DDRA|=bb;\r
+ } else {\r
+ DDRA&=~bb;\r
+ }\r
+ } else {\r
+ DDRA&=~bb;\r
+ }\r
+ bb=bb*2;\r
+ }*/\r
+ \r
+#if defined(__AVR_ATtiny25__)||defined(__AVR_ATtiny45__) || defined(__AVR_ATtiny85__)\r
+ if (((TIMSK & (1<<TOIE0))==0)&& (mode==0))\r
+#endif \r
+#if defined(__AVR_ATtiny24__)||defined(__AVR_ATtiny44__) || defined(__AVR_ATtiny84__) ||defined(__AVR_ATtiny24A__)||defined(__AVR_ATtiny44A__) || defined(__AVR_ATtiny84A__)\r
+ if (((TIMSK0 & (1<<TOIE0))==0)&& (mode==0))\r
+#endif\r
+ {\r
+\r
+ MCUCR|=(1<<SE)|(1<<SM1);\r
+ MCUCR&=~(1<<ISC01);\r
+ } else {\r
+ MCUCR|=(1<<SE);\r
+ MCUCR&=~(1<<SM1);\r
+ }\r
+ // asm("SLEEP");\r
+ }\r
+\r
+\r
+}
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>\r
+<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="14.0">\r
+ <PropertyGroup>\r
+ <SchemaVersion>2.0</SchemaVersion>\r
+ <ProjectVersion>7.0</ProjectVersion>\r
+ <ToolchainName>com.Atmel.AVRGCC8.C</ToolchainName>\r
+ <ProjectGuid>dce6c7e3-ee26-4d79-826b-08594b9ad897</ProjectGuid>\r
+ <avrdevice>ATtiny84A</avrdevice>\r
+ <avrdeviceseries>none</avrdeviceseries>\r
+ <OutputType>Executable</OutputType>\r
+ <Language>C</Language>\r
+ <OutputFileName>$(MSBuildProjectName)</OutputFileName>\r
+ <OutputFileExtension>.elf</OutputFileExtension>\r
+ <OutputDirectory>$(MSBuildProjectDirectory)\$(Configuration)</OutputDirectory>\r
+ <AssemblyName>DS2450</AssemblyName>\r
+ <Name>DS2450_LPS225HB</Name>\r
+ <RootNamespace>DS2450</RootNamespace>\r
+ <ToolchainFlavour>Native</ToolchainFlavour>\r
+ <KeepTimersRunning>true</KeepTimersRunning>\r
+ <OverrideVtor>false</OverrideVtor>\r
+ <CacheFlash>true</CacheFlash>\r
+ <ProgFlashFromRam>true</ProgFlashFromRam>\r
+ <RamSnippetAddress>0x20000000</RamSnippetAddress>\r
+ <UncachedRange />\r
+ <preserveEEPROM>true</preserveEEPROM>\r
+ <OverrideVtorValue>exception_table</OverrideVtorValue>\r
+ <BootSegment>2</BootSegment>\r
+ <eraseonlaunchrule>1</eraseonlaunchrule>\r
+ <ExternalProgrammingToolCommand />\r
+ <AsfFrameworkConfig>\r
+ <framework-data>\r
+ <options />\r
+ <configurations />\r
+ <files />\r
+ <documentation help="" />\r
+ <offline-documentation help="" />\r
+ <dependencies>\r
+ <content-extension eid="atmel.asf" uuidref="Atmel.ASF" version="3.28.1" />\r
+ </dependencies>\r
+ </framework-data>\r
+ </AsfFrameworkConfig>\r
+ <avrtool>com.atmel.avrdbg.tool.atmelice</avrtool>\r
+ <avrtoolserialnumber>J41800000779</avrtoolserialnumber>\r
+ <avrdeviceexpectedsignature>0x1E930C</avrdeviceexpectedsignature>\r
+ <com_atmel_avrdbg_tool_atmelice>\r
+ <ToolOptions>\r
+ <InterfaceProperties>\r
+ </InterfaceProperties>\r
+ <InterfaceName>debugWIRE</InterfaceName>\r
+ </ToolOptions>\r
+ <ToolType>com.atmel.avrdbg.tool.atmelice</ToolType>\r
+ <ToolNumber>J41800000779</ToolNumber>\r
+ <ToolName>Atmel-ICE</ToolName>\r
+ </com_atmel_avrdbg_tool_atmelice>\r
+ <avrtoolinterface>debugWIRE</avrtoolinterface>\r
+ </PropertyGroup>\r
+ <PropertyGroup Condition=" '$(Configuration)' == 'Release' ">\r
+ <ToolchainSettings>\r
+ <AvrGcc>\r
+ <avrgcc.common.Device>-mmcu=attiny84a -B "%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.68\gcc\dev\attiny84a"</avrgcc.common.Device>\r
+ <avrgcc.common.outputfiles.hex>True</avrgcc.common.outputfiles.hex>\r
+ <avrgcc.common.outputfiles.lss>True</avrgcc.common.outputfiles.lss>\r
+ <avrgcc.common.outputfiles.eep>True</avrgcc.common.outputfiles.eep>\r
+ <avrgcc.common.outputfiles.srec>True</avrgcc.common.outputfiles.srec>\r
+ <avrgcc.common.outputfiles.usersignatures>False</avrgcc.common.outputfiles.usersignatures>\r
+ <avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>True</avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>\r
+ <avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>True</avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>\r
+ <avrgcc.compiler.symbols.DefSymbols>\r
+ <ListValues>\r
+ <Value>NDEBUG</Value>\r
+ </ListValues>\r
+ </avrgcc.compiler.symbols.DefSymbols>\r
+ <avrgcc.compiler.directories.IncludePaths>\r
+ <ListValues>\r
+ <Value>%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.68\include</Value>\r
+ </ListValues>\r
+ </avrgcc.compiler.directories.IncludePaths>\r
+ <avrgcc.compiler.optimization.level>Optimize for size (-Os)</avrgcc.compiler.optimization.level>\r
+ <avrgcc.compiler.optimization.PackStructureMembers>True</avrgcc.compiler.optimization.PackStructureMembers>\r
+ <avrgcc.compiler.optimization.AllocateBytesNeededForEnum>True</avrgcc.compiler.optimization.AllocateBytesNeededForEnum>\r
+ <avrgcc.compiler.warnings.AllWarnings>True</avrgcc.compiler.warnings.AllWarnings>\r
+ <avrgcc.linker.libraries.Libraries>\r
+ <ListValues>\r
+ <Value>libm</Value>\r
+ </ListValues>\r
+ </avrgcc.linker.libraries.Libraries>\r
+ </AvrGcc>\r
+ </ToolchainSettings>\r
+ </PropertyGroup>\r
+ <PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">\r
+ <ToolchainSettings>\r
+ <AvrGcc>\r
+ <avrgcc.common.Device>-mmcu=attiny84a -B "%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.68\gcc\dev\attiny84a"</avrgcc.common.Device>\r
+ <avrgcc.common.outputfiles.hex>True</avrgcc.common.outputfiles.hex>\r
+ <avrgcc.common.outputfiles.lss>True</avrgcc.common.outputfiles.lss>\r
+ <avrgcc.common.outputfiles.eep>True</avrgcc.common.outputfiles.eep>\r
+ <avrgcc.common.outputfiles.srec>True</avrgcc.common.outputfiles.srec>\r
+ <avrgcc.common.outputfiles.usersignatures>False</avrgcc.common.outputfiles.usersignatures>\r
+ <avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>True</avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>\r
+ <avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>True</avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>\r
+ <avrgcc.compiler.symbols.DefSymbols>\r
+ <ListValues>\r
+ <Value>DEBUG</Value>\r
+ </ListValues>\r
+ </avrgcc.compiler.symbols.DefSymbols>\r
+ <avrgcc.compiler.directories.IncludePaths>\r
+ <ListValues>\r
+ <Value>%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.68\include</Value>\r
+ </ListValues>\r
+ </avrgcc.compiler.directories.IncludePaths>\r
+ <avrgcc.compiler.optimization.level>Optimize (-O1)</avrgcc.compiler.optimization.level>\r
+ <avrgcc.compiler.optimization.PackStructureMembers>True</avrgcc.compiler.optimization.PackStructureMembers>\r
+ <avrgcc.compiler.optimization.AllocateBytesNeededForEnum>True</avrgcc.compiler.optimization.AllocateBytesNeededForEnum>\r
+ <avrgcc.compiler.optimization.DebugLevel>Default (-g2)</avrgcc.compiler.optimization.DebugLevel>\r
+ <avrgcc.compiler.warnings.AllWarnings>True</avrgcc.compiler.warnings.AllWarnings>\r
+ <avrgcc.linker.libraries.Libraries>\r
+ <ListValues>\r
+ <Value>libm</Value>\r
+ </ListValues>\r
+ </avrgcc.linker.libraries.Libraries>\r
+ <avrgcc.assembler.debugging.DebugLevel>Default (-Wa,-g)</avrgcc.assembler.debugging.DebugLevel>\r
+ </AvrGcc>\r
+ </ToolchainSettings>\r
+ </PropertyGroup>\r
+ <ItemGroup>\r
+ <Compile Include="..\common\I2C\LPS225HB.c">\r
+ <SubType>compile</SubType>\r
+ <Link>LPS225HB.c</Link>\r
+ </Compile>\r
+ <Compile Include="..\common\I2C\USI_TWI_Master.c">\r
+ <SubType>compile</SubType>\r
+ <Link>USI_TWI_Master.c</Link>\r
+ </Compile>\r
+ <Compile Include="DS2450_LPS225HB.c">\r
+ <SubType>compile</SubType>\r
+ </Compile>\r
+ <Compile Include="OWDS2450.S">\r
+ <SubType>compile</SubType>\r
+ </Compile>\r
+ </ItemGroup>\r
+ <Import Project="$(AVRSTUDIO_EXE_PATH)\\Vs\\Compiler.targets" />\r
+</Project>
\ No newline at end of file
--- /dev/null
+\r
+// Copyright (c) 2015, Tobias Mueller tm(at)tm3d.de\r
+// All rights reserved. \r
+// \r
+// Redistribution and use in source and binary forms, with or without \r
+// modification, are permitted provided that the following conditions are \r
+// met: \r
+// \r
+// * Redistributions of source code must retain the above copyright \r
+// notice, this list of conditions and the following disclaimer. \r
+// * Redistributions in binary form must reproduce the above copyright \r
+// notice, this list of conditions and the following disclaimer in the \r
+// documentation and/or other materials provided with the \r
+// distribution. \r
+// * All advertising materials mentioning features or use of this \r
+// software must display the following acknowledgement: This product \r
+// includes software developed by tm3d.de and its contributors. \r
+// * Neither the name of tm3d.de nor the names of its contributors may \r
+// be used to endorse or promote products derived from this software \r
+// without specific prior written permission. \r
+// \r
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \r
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT \r
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR \r
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT \r
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, \r
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT \r
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, \r
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY \r
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT \r
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE \r
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \r
+\r
+#define _CHANGEABLE_ID_\r
+#define _ZERO_POLLING_\r
+\r
+#include "../common/OWConfig.s"\r
+#include "../common/OWCRC16.s"\r
+\r
+.extern pack,8\r
+.comm addr,1 ;zweites Adressbyte ist unnoetig (Warum auch immer fuer 32 Byte 16 Bit Adressen verwendet werden....)\r
+.comm crcsave,1 ; zwischenspeicherspeicher fuer crc nur zweites byte....\r
+//.extern am2302_temp,2\r
+\r
+\r
+\r
+.macro CHIP_INIT \r
+.endm\r
+\r
+.macro COMMAND_TABLE\r
+ rjmp h_readmemoryaddr\r
+ rjmp h_readmemory\r
+ rjmp h_readmemorycrc1\r
+ rjmp h_readmemorycrc2\r
+ rjmp h_writememoryaddr\r
+ rjmp h_writememory\r
+ rjmp h_writememorycrc1\r
+ rjmp h_writememorycrc2\r
+ rjmp h_writememoryreadback\r
+ rjmp h_convert\r
+ rjmp h_convertcrc1\r
+ rjmp h_convertcrc2\r
+ rjmp h_convert_conv\r
+.endm\r
+\r
+#include "../common/OWRomFunctions.s"\r
+#include "../common/OWTimerInterrupt.s"\r
+\r
+\r
+\r
+; Ab hier Geraeteabhaenging\r
+#define OW_READ_MEMORY_ADDR OW_FIRST_COMMAND+0\r
+#define OW_READ_MEMORY OW_FIRST_COMMAND+1\r
+#define OW_READ_MEMORY_CRC1 OW_FIRST_COMMAND+2\r
+#define OW_READ_MEMORY_CRC2 OW_FIRST_COMMAND+3\r
+#define OW_WRITE_MEMORY_ADDR OW_FIRST_COMMAND+4\r
+#define OW_WRITE_MEMORY OW_FIRST_COMMAND+5\r
+#define OW_WRITE_MEMORY_CRC1 OW_FIRST_COMMAND+6\r
+#define OW_WRITE_MEMORY_CRC2 OW_FIRST_COMMAND+7\r
+#define OW_WRITE_MEMORY_READBACK OW_FIRST_COMMAND+8\r
+#define OW_CONVERT OW_FIRST_COMMAND+9\r
+#define OW_CONVERT_CRC1 OW_FIRST_COMMAND+10\r
+#define OW_CONVERT_CRC2 OW_FIRST_COMMAND+11\r
+#define OW_CONVERT_CONV OW_FIRST_COMMAND+12\r
+\r
+;---------------------------------------------------\r
+; READ COMMAND and start operation\r
+;---------------------------------------------------\r
+\r
+\r
+h_readcommand:\r
+ clr r_bytep\r
+#ifndef _DIS_FLASH_\r
+ FLASH_COMMANDS ; muss zu erst sein....\r
+#endif\r
+ cset 0xAA,OW_READ_MEMORY_ADDR\r
+ cset 0x55,OW_WRITE_MEMORY_ADDR\r
+ cset 0x3C,OW_CONVERT\r
+ FW_CONFIG_INFO\r
+#ifdef _CHANGEABLE_ID_\r
+ CHANGE_ID_COMMANDS\r
+#endif\r
+ ldi r_mode,OW_SLEEP\r
+ rjmp handle_end\r
+\r
+\r
+h_readmemoryaddr:\r
+ cpi r_bytep,0 ;erstes Adressbyte ?\r
+ brne h_readmemory_addr_byte1 ;nein dann weiter\r
+ andi r_rwbyte,0x1F ; nur Adressen zwischen 0 und 0x1F zulassen\r
+ sts addr,r_rwbyte ;speichern des ersten bytes\r
+ rjmp handle_end_inc\r
+h_readmemory_addr_byte1: ;zweiters Addressbyte wird nicht gespeichert!\r
+ ldi r_mode,OW_READ_MEMORY ;weiter zu read Memory\r
+ ;;ldi r_bcount,1 ;ist unten\r
+ ldi r_sendflag,1 ;jetzt sendet der Slave zum Master\r
+ clr r_bytep\r
+ rjmp h_readmemory2\r
+h_readmemory:\r
+ lds r_bytep,addr\r
+ inc r_bytep\r
+ sts addr,r_bytep\r
+ andi r_bytep,0x07\r
+ breq h_readmemory_init_crc\r
+h_readmemory2:\r
+ lds r_bytep,addr\r
+ ;andi r_bytep,0x1F ist oben\r
+ configZ pack,r_bytep\r
+ ld r_rwbyte,Z\r
+ ;ldi r_bcount,1\r
+ rjmp handle_end ;sendet das Byte und geht zu h_readmemory\r
+h_readmemory_init_crc:; init erstes CRC byte\r
+ lds r_rwbyte,crc\r
+ com r_rwbyte\r
+ lds r_temp,crc+1\r
+ com r_temp\r
+ sts crcsave,r_temp\r
+ ldi r_mode,OW_READ_MEMORY_CRC1\r
+ ;ldi r_bcount,1\r
+ rjmp handle_end\r
+h_readmemory_end:\r
+ ldi r_mode,OW_SLEEP\r
+ clr r_sendflag\r
+ rjmp handle_end\r
+h_readmemorycrc1:;init zweites CRC Byte\r
+ lds r_rwbyte,crcsave\r
+ ;ldi r_bcount,1\r
+ ldi r_mode,OW_READ_MEMORY_CRC2\r
+ rjmp handle_end\r
+h_readmemorycrc2:;weiteres senden..... nach zweitem Byte\r
+ lds r_temp,addr\r
+ andi r_temp,0xE0\r
+ brne h_readmemory_end; ende des speichers\r
+ ldi r_mode,OW_READ_MEMORY\r
+ CRCInit1 ;Start with new CRC\r
+ rjmp h_readmemory2\r
+\r
+h_writememoryaddr:\r
+ cpi r_bytep,0 ;erstes Adressbyte ?\r
+ brne h_writememory_addr_byte1 ;nein dann weiter\r
+ andi r_rwbyte,0x1F ; nur Adressen zwischen 0 und 0x1F zulassen\r
+ sts addr,r_rwbyte ;speichern des ersten bytes\r
+ inc r_bytep\r
+ ;ldi r_bcount,1\r
+ rjmp handle_end\r
+h_writememory_addr_byte1: ;zweiters Addressbyte wird nicht gespeichert!\r
+ ldi r_mode,OW_WRITE_MEMORY ;weiter zu read Memory\r
+ ;ldi r_bcount,1 ;; _________________________________________________in handle_end integrieren.....\r
+ lds r_bytep,addr\r
+ rjmp handle_end ;read Memory Byte\r
+h_writememory:\r
+ lds r_bytep,addr\r
+ configZ pack,r_bytep\r
+ st Z,r_rwbyte\r
+ ;ldi r_bcount,1\r
+ ldi r_mode,OW_WRITE_MEMORY_CRC1\r
+ ldi r_sendflag,1 ;jetzt sendet der Slave zum Master\r
+ lds r_rwbyte,crc\r
+ com r_rwbyte\r
+ lds r_temp,crc+1\r
+ com r_temp\r
+ sts crcsave,r_temp\r
+ rjmp handle_end\r
+h_writememorycrc1:\r
+ lds r_rwbyte,crcsave\r
+ ;ldi r_bcount,1\r
+ ldi r_mode,OW_WRITE_MEMORY_CRC2\r
+ rjmp handle_end\r
+h_writememorycrc2:\r
+ lds r_temp,addr\r
+ configZ pack,r_temp\r
+ ld r_rwbyte,Z\r
+ ;ldi r_bcount,1\r
+ ldi r_mode,OW_WRITE_MEMORY_READBACK\r
+ rjmp handle_end\r
+h_writememoryreadback:\r
+ ldi r_temp,0x00\r
+ sts crc+1,r_temp\r
+ lds r_temp,addr\r
+ inc r_temp\r
+ sts addr,r_temp\r
+ sts crc,r_temp\r
+ ldi r_sendflag,0\r
+ ;ldi r_bcount,1\r
+ ldi r_mode,OW_WRITE_MEMORY\r
+ rjmp handle_end\r
+\r
+h_convert:\r
+ cpi r_bytep,0 ;erstes Adressbyte ?\r
+ brne h_convert_byte1 ;nein dann weiter\r
+ inc r_bytep\r
+ sts pack+0x20,r_rwbyte\r
+ ;ldi r_bcount,1\r
+ rjmp handle_end\r
+h_convert_byte1: ;zweies byte glesen go crc#\r
+ sts pack+0x21,r_rwbyte\r
+ lds r_rwbyte,crc\r
+ com r_rwbyte\r
+ lds r_temp,crc+1\r
+ com r_temp\r
+ sts crcsave,r_temp\r
+ ldi r_mode,OW_CONVERT_CRC1\r
+ ;ldi r_bcount,1\r
+ ldi r_sendflag,1\r
+ rjmp handle_end \r
+h_convertcrc1:\r
+ lds r_rwbyte,crcsave\r
+ ;ldi r_bcount,1\r
+ ldi r_mode,OW_CONVERT_CRC2\r
+ rjmp handle_end\r
+h_convertcrc2:\r
+ ldi r_temp,1\r
+ sts gcontrol,r_temp\r
+ ;ldi r_bcount,1\r
+ ldi r_mode,OW_CONVERT_CONV\r
+ ;clr r_sendflag\r
+ ldi r_sendflag,3 ;set bit 0 and 1 for no zero polling\r
+h_convert_conv:\r
+ ldi r_bcount,0\r
+ ldi r_rwbyte,0\r
+ rjmp handle_end_no_bcount \r
+\r
+\r
+\r
+\r
+#include "../common/OWPinInterrupt.s"\r
+.end
\ No newline at end of file
--- /dev/null
+\r
+Microsoft Visual Studio Solution File, Format Version 12.00\r
+# Atmel Studio Solution File, Format Version 11.00\r
+VisualStudioVersion = 14.0.23107.0\r
+MinimumVisualStudioVersion = 10.0.40219.1\r
+Project("{54F91283-7BC4-4236-8FF9-10F437C3AD48}") = "DS2450_MAX44008", "DS2450_MAX44008.cproj", "{DCE6C7E3-EE26-4D79-826B-08594B9AD897}"\r
+EndProject\r
+Global\r
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution\r
+ Debug|AVR = Debug|AVR\r
+ Release|AVR = Release|AVR\r
+ EndGlobalSection\r
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution\r
+ {DCE6C7E3-EE26-4D79-826B-08594B9AD897}.Debug|AVR.ActiveCfg = Debug|AVR\r
+ {DCE6C7E3-EE26-4D79-826B-08594B9AD897}.Debug|AVR.Build.0 = Debug|AVR\r
+ {DCE6C7E3-EE26-4D79-826B-08594B9AD897}.Release|AVR.ActiveCfg = Release|AVR\r
+ {DCE6C7E3-EE26-4D79-826B-08594B9AD897}.Release|AVR.Build.0 = Release|AVR\r
+ EndGlobalSection\r
+ GlobalSection(SolutionProperties) = preSolution\r
+ HideSolutionNode = FALSE\r
+ EndGlobalSection\r
+EndGlobal\r
--- /dev/null
+\r
+// Copyright (c) 2017, Tobias Mueller tm(at)tm3d.de\r
+// All rights reserved.\r
+//\r
+// Redistribution and use in source and binary forms, with or without\r
+// modification, are permitted provided that the following conditions are\r
+// met:\r
+//\r
+// * Redistributions of source code must retain the above copyright\r
+// notice, this list of conditions and the following disclaimer.\r
+// * Redistributions in binary form must reproduce the above copyright\r
+// notice, this list of conditions and the following disclaimer in the\r
+// documentation and/or other materials provided with the\r
+// distribution.\r
+// * All advertising materials mentioning features or use of this\r
+// software must display the following acknowledgement: This product\r
+// includes software developed by tm3d.de and its contributors.\r
+// * Neither the name of tm3d.de nor the names of its contributors may\r
+// be used to endorse or promote products derived from this software\r
+// without specific prior written permission.\r
+//\r
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\r
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\r
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\r
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\r
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\r
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\r
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\r
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\r
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+\r
+#define F_CPU 8000000UL\r
+#include <avr/io.h>\r
+#include <avr/interrupt.h>\r
+#include <util/delay.h>\r
+#include <avr/wdt.h>\r
+#include <avr/sleep.h>\r
+#include <avr/pgmspace.h>\r
+#include "../common/I2C/USI_TWI_Master.h"\r
+\r
+extern void OWINIT();\r
+extern void EXTERN_SLEEP();\r
+\r
+uint8_t owid[8]={0x20, 0xA2, 0xD9, 0x84, 0x00, 0x16, 0x02, 0x5D};/**/\r
+uint8_t config_info[26]={0x06,0x09,0x06,0x09,0x06,0x09,0x06,0x09,0x02,20,20,20,20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};\r
+\r
+#if (owid>128) \r
+#error "Variable not correct"\r
+#endif\r
+\r
+extern uint8_t mode;\r
+extern uint8_t gcontrol;\r
+extern uint8_t reset_indicator;\r
+extern uint8_t alarmflag;\r
+\r
+\r
+typedef union {\r
+ volatile uint8_t bytes[0x20];\r
+ struct {\r
+ //Page0\r
+ uint16_t A; //0\r
+ uint16_t B; //2\r
+ uint16_t C; //4\r
+ uint16_t D; //6\r
+ //Page1\r
+ uint8_t CSA1;\r
+ uint8_t CSA2;\r
+ uint8_t CSB1;\r
+ uint8_t CSB2;\r
+ uint8_t CSC1;\r
+ uint8_t CSC2;\r
+ uint8_t CSD1;\r
+ uint8_t CSD2;\r
+ //Page2\r
+ uint8_t LA;\r
+ uint8_t HA;\r
+ uint8_t LB;\r
+ uint8_t HB;\r
+ uint8_t LC;\r
+ uint8_t HC;\r
+ uint8_t LD;\r
+ uint8_t HD;\r
+ //Page3\r
+ uint8_t FC1;\r
+ uint8_t FC2;\r
+ uint8_t FC3;\r
+ uint8_t FC4;\r
+ uint8_t VCCP;\r
+ uint8_t FC5;\r
+ uint8_t FC6;\r
+ uint8_t FC7;\r
+ uint8_t convc1;\r
+ uint8_t convc2;\r
+ \r
+ \r
+ };\r
+} pack_t;\r
+volatile pack_t pack;\r
+\r
+\r
+ uint8_t checkMAX44008(uint8_t nr) {\r
+ volatile uint8_t b1;\r
+ nr=(nr<<1)&0x02f;\r
+ \r
+ I2c_StartCondition();\r
+ I2c_WriteByte(0b10000000|nr);\r
+ I2c_WriteByte(0x00);\r
+ I2c_StartCondition();\r
+ I2c_WriteByte (0b10000001|nr);\r
+ b1 =I2c_ReadByte(NO_ACK);\r
+ I2c_StopCondition();\r
+ return b1!=0xFF;\r
+ \r
+ }\r
+\r
+\r
+\r
+int main(void){\r
+ pack.A=0;\r
+ pack.B=0;\r
+ pack.C=0;\r
+ pack.D=0;\r
+ pack.CSA1=0x08;\r
+ pack.CSA2=0x8C;\r
+ pack.CSB1=0x08;\r
+ pack.CSB2=0x8C;\r
+ pack.CSC1=0x08;\r
+ pack.CSC2=0x8C;\r
+ pack.CSD1=0x08;\r
+ pack.CSD2=0x8C;\r
+ pack.HA=0xFF;\r
+ pack.LA=0x00;\r
+ pack.HB=0xFF;\r
+ pack.LB=0x00;\r
+ pack.HC=0xFF;\r
+ pack.LC=0x00;\r
+ pack.HD=0xFF;\r
+ pack.LD=0x00;\r
+ pack.VCCP=0;\r
+\r
+ PORTA=0xFF;\r
+ PORTB=0xFF;\r
+\r
+ OWINIT();\r
+\r
+ MCUCR &=~(1<<PUD); //All Pins Pullup...\r
+ MCUCR |=(1<<BODS);\r
+ //PORTA&=~((1<<PINA0)|(1<<PINA1)|(1<<PINA2)|(1<<PINA3));\r
+\r
+ ADCSRA=(1<<ADEN)|(1<ADPS0)|(1<<ADPS2);\r
+\r
+ \r
+ \r
+ gcontrol=1;\r
+ ADCSRB|=(1<<ADLAR); \r
+ USI_TWI_Master_Initialise();\r
+ \r
+\r
+\r
+\r
+ sei();\r
+ \r
+ //DDRB|=(1<<PINB1);\r
+\r
+ while(1) {\r
+\r
+\r
+ if (gcontrol) {\r
+ //PORTB|=(1<<PINB1);\r
+ uint8_t bb=1;\r
+ uint8_t bb1=1;\r
+ for(uint8_t i=0;i<4;i++){\r
+ if (pack.convc1&bb1) {\r
+ if (pack.convc2&(bb)) {pack.bytes[i*2]=0;pack.bytes[i*2+1]=0;}\r
+ bb=bb<<1;\r
+ if (pack.convc2&(bb)) {pack.bytes[i*2]=0xFF;pack.bytes[i*2+1]=0xFF;}\r
+ bb=bb<<1;\r
+ } else bb=bb<<2;\r
+ bb1=bb1<<1; \r
+ }\r
+ //CHanel A\r
+ if (pack.convc1&1) {\r
+ if (pack.CSA2&0x01) ADMUX=0; else ADMUX=0x80;\r
+ _delay_us(100);\r
+ ADCSRA|=(1<<ADSC);\r
+ while ((ADCSRA&(1<<ADSC)));\r
+ cli();pack.A=ADC;sei();\r
+ pack.A= checkMAX44008(0);\r
+ alarmflag=0;\r
+ if (pack.CSA2&0x08) //AEH\r
+ if (pack.bytes[1]>pack.HA) {alarmflag=1;pack.CSA2|=0x20;}\r
+ if (pack.CSA2&0x04) //AEL\r
+ if (pack.bytes[1]<pack.LA) {alarmflag=1;pack.CSA2|=0x10;}\r
+ }\r
+\r
+ if (pack.convc1&2) {\r
+ if (pack.CSB2&0x01) ADMUX=1; else ADMUX=0x81;\r
+ _delay_us(100);\r
+ ADCSRA|=(1<<ADSC);\r
+ while ((ADCSRA&(1<<ADSC)));\r
+ cli();pack.B=ADC;sei();\r
+ pack.B= checkMAX44008(1);\r
+ if (pack.CSB2&0x08) //AEH\r
+ if (pack.bytes[1]>pack.HB) {alarmflag=1;pack.CSB2|=0x20;}\r
+ if (pack.CSB2&0x04) //AEL\r
+ if (pack.bytes[1]<pack.LB) {alarmflag=1;pack.CSB2|=0x10;}\r
+ }\r
+\r
+ if (pack.convc1&4) {\r
+ if (pack.CSC2&0x01) ADMUX=2; else ADMUX=0x82;\r
+ _delay_us(100);\r
+ ADCSRA|=(1<<ADSC);\r
+ while ((ADCSRA&(1<<ADSC)));\r
+ cli();pack.C=ADC;sei();\r
+ if (pack.CSC2&0x08) //AEH\r
+ if (pack.bytes[1]>pack.HC) {alarmflag=1;pack.CSC2|=0x20;}\r
+ if (pack.CSC2&0x04) //AEL\r
+ if (pack.bytes[1]<pack.LC) {alarmflag=1;pack.CSC2|=0x10;}\r
+ } \r
+ if (pack.convc1&8) {\r
+ if (pack.CSD2&0x01) ADMUX=3; else ADMUX=0x83;\r
+ _delay_us(100);\r
+ ADCSRA|=(1<<ADSC);\r
+ while ((ADCSRA&(1<<ADSC)));\r
+ cli();pack.D=ADC;sei();\r
+ if (pack.CSD2&0x08) //AEH\r
+ if (pack.bytes[1]>pack.HD) {alarmflag=1;pack.CSD2|=0x20;}\r
+ if (pack.CSD2&0x04) //AEL\r
+ if (pack.bytes[1]<pack.LD) {alarmflag=1;pack.CSD2|=0x10;}\r
+ }\r
+ \r
+ EXTERN_SLEEP();\r
+ //PORTB&=~(1<<PINB1);\r
+ }\r
+\r
+ uint8_t bb=1;\r
+ for(uint8_t i=0;i<4;i++) {\r
+ if (pack.bytes[8+i*2]&0x80) { //Chanel as output\r
+ if (pack.bytes[8+i*2]&0x40) {\r
+ DDRA|=bb;\r
+ } else {\r
+ DDRA&=~bb;\r
+ }\r
+ } else {\r
+ DDRA&=~bb;\r
+ }\r
+ bb=bb*2;\r
+ }\r
+ \r
+#if defined(__AVR_ATtiny25__)||defined(__AVR_ATtiny45__) || defined(__AVR_ATtiny85__)\r
+ if (((TIMSK & (1<<TOIE0))==0)&& (mode==0))\r
+#endif \r
+#if defined(__AVR_ATtiny24__)||defined(__AVR_ATtiny44__) || defined(__AVR_ATtiny84__) ||defined(__AVR_ATtiny24A__)||defined(__AVR_ATtiny44A__) || defined(__AVR_ATtiny84A__)\r
+ if (((TIMSK0 & (1<<TOIE0))==0)&& (mode==0))\r
+#endif\r
+ {\r
+\r
+ MCUCR|=(1<<SE)|(1<<SM1);\r
+ MCUCR&=~(1<<ISC01);\r
+ } else {\r
+ MCUCR|=(1<<SE);\r
+ MCUCR&=~(1<<SM1);\r
+ }\r
+ // asm("SLEEP");\r
+ }\r
+\r
+\r
+}
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>\r
+<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="14.0">\r
+ <PropertyGroup>\r
+ <SchemaVersion>2.0</SchemaVersion>\r
+ <ProjectVersion>7.0</ProjectVersion>\r
+ <ToolchainName>com.Atmel.AVRGCC8.C</ToolchainName>\r
+ <ProjectGuid>dce6c7e3-ee26-4d79-826b-08594b9ad897</ProjectGuid>\r
+ <avrdevice>ATtiny84A</avrdevice>\r
+ <avrdeviceseries>none</avrdeviceseries>\r
+ <OutputType>Executable</OutputType>\r
+ <Language>C</Language>\r
+ <OutputFileName>$(MSBuildProjectName)</OutputFileName>\r
+ <OutputFileExtension>.elf</OutputFileExtension>\r
+ <OutputDirectory>$(MSBuildProjectDirectory)\$(Configuration)</OutputDirectory>\r
+ <AssemblyName>DS2450</AssemblyName>\r
+ <Name>DS2450_MAX44008</Name>\r
+ <RootNamespace>DS2450</RootNamespace>\r
+ <ToolchainFlavour>Native</ToolchainFlavour>\r
+ <KeepTimersRunning>true</KeepTimersRunning>\r
+ <OverrideVtor>false</OverrideVtor>\r
+ <CacheFlash>true</CacheFlash>\r
+ <ProgFlashFromRam>true</ProgFlashFromRam>\r
+ <RamSnippetAddress>0x20000000</RamSnippetAddress>\r
+ <UncachedRange />\r
+ <preserveEEPROM>true</preserveEEPROM>\r
+ <OverrideVtorValue>exception_table</OverrideVtorValue>\r
+ <BootSegment>2</BootSegment>\r
+ <eraseonlaunchrule>1</eraseonlaunchrule>\r
+ <ExternalProgrammingToolCommand />\r
+ <AsfFrameworkConfig>\r
+ <framework-data>\r
+ <options />\r
+ <configurations />\r
+ <files />\r
+ <documentation help="" />\r
+ <offline-documentation help="" />\r
+ <dependencies>\r
+ <content-extension eid="atmel.asf" uuidref="Atmel.ASF" version="3.28.1" />\r
+ </dependencies>\r
+ </framework-data>\r
+ </AsfFrameworkConfig>\r
+ <avrtool />\r
+ </PropertyGroup>\r
+ <PropertyGroup Condition=" '$(Configuration)' == 'Release' ">\r
+ <ToolchainSettings>\r
+ <AvrGcc>\r
+ <avrgcc.common.Device>-mmcu=attiny84a -B "%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.79\gcc\dev\attiny84a"</avrgcc.common.Device>\r
+ <avrgcc.common.outputfiles.hex>True</avrgcc.common.outputfiles.hex>\r
+ <avrgcc.common.outputfiles.lss>True</avrgcc.common.outputfiles.lss>\r
+ <avrgcc.common.outputfiles.eep>True</avrgcc.common.outputfiles.eep>\r
+ <avrgcc.common.outputfiles.srec>True</avrgcc.common.outputfiles.srec>\r
+ <avrgcc.common.outputfiles.usersignatures>False</avrgcc.common.outputfiles.usersignatures>\r
+ <avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>True</avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>\r
+ <avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>True</avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>\r
+ <avrgcc.compiler.symbols.DefSymbols>\r
+ <ListValues>\r
+ <Value>NDEBUG</Value>\r
+ </ListValues>\r
+ </avrgcc.compiler.symbols.DefSymbols>\r
+ <avrgcc.compiler.directories.IncludePaths>\r
+ <ListValues>\r
+ <Value>%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.79\include</Value>\r
+ </ListValues>\r
+ </avrgcc.compiler.directories.IncludePaths>\r
+ <avrgcc.compiler.optimization.level>Optimize for size (-Os)</avrgcc.compiler.optimization.level>\r
+ <avrgcc.compiler.optimization.PackStructureMembers>True</avrgcc.compiler.optimization.PackStructureMembers>\r
+ <avrgcc.compiler.optimization.AllocateBytesNeededForEnum>True</avrgcc.compiler.optimization.AllocateBytesNeededForEnum>\r
+ <avrgcc.compiler.warnings.AllWarnings>True</avrgcc.compiler.warnings.AllWarnings>\r
+ <avrgcc.linker.libraries.Libraries>\r
+ <ListValues>\r
+ <Value>libm</Value>\r
+ </ListValues>\r
+ </avrgcc.linker.libraries.Libraries>\r
+ <avrgcc.assembler.general.IncludePaths>\r
+ <ListValues>\r
+ <Value>%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.79\include</Value>\r
+ </ListValues>\r
+ </avrgcc.assembler.general.IncludePaths>\r
+ </AvrGcc>\r
+ </ToolchainSettings>\r
+ </PropertyGroup>\r
+ <PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">\r
+ <ToolchainSettings>\r
+ <AvrGcc>\r
+ <avrgcc.common.Device>-mmcu=attiny84a -B "%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.79\gcc\dev\attiny84a"</avrgcc.common.Device>\r
+ <avrgcc.common.outputfiles.hex>True</avrgcc.common.outputfiles.hex>\r
+ <avrgcc.common.outputfiles.lss>True</avrgcc.common.outputfiles.lss>\r
+ <avrgcc.common.outputfiles.eep>True</avrgcc.common.outputfiles.eep>\r
+ <avrgcc.common.outputfiles.srec>True</avrgcc.common.outputfiles.srec>\r
+ <avrgcc.common.outputfiles.usersignatures>False</avrgcc.common.outputfiles.usersignatures>\r
+ <avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>True</avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>\r
+ <avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>True</avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>\r
+ <avrgcc.compiler.symbols.DefSymbols>\r
+ <ListValues>\r
+ <Value>DEBUG</Value>\r
+ </ListValues>\r
+ </avrgcc.compiler.symbols.DefSymbols>\r
+ <avrgcc.compiler.directories.IncludePaths>\r
+ <ListValues>\r
+ <Value>%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.79\include</Value>\r
+ </ListValues>\r
+ </avrgcc.compiler.directories.IncludePaths>\r
+ <avrgcc.compiler.optimization.level>Optimize (-O1)</avrgcc.compiler.optimization.level>\r
+ <avrgcc.compiler.optimization.PackStructureMembers>True</avrgcc.compiler.optimization.PackStructureMembers>\r
+ <avrgcc.compiler.optimization.AllocateBytesNeededForEnum>True</avrgcc.compiler.optimization.AllocateBytesNeededForEnum>\r
+ <avrgcc.compiler.optimization.DebugLevel>Default (-g2)</avrgcc.compiler.optimization.DebugLevel>\r
+ <avrgcc.compiler.warnings.AllWarnings>True</avrgcc.compiler.warnings.AllWarnings>\r
+ <avrgcc.linker.libraries.Libraries>\r
+ <ListValues>\r
+ <Value>libm</Value>\r
+ </ListValues>\r
+ </avrgcc.linker.libraries.Libraries>\r
+ <avrgcc.assembler.general.IncludePaths>\r
+ <ListValues>\r
+ <Value>%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.79\include</Value>\r
+ </ListValues>\r
+ </avrgcc.assembler.general.IncludePaths>\r
+ <avrgcc.assembler.debugging.DebugLevel>Default (-Wa,-g)</avrgcc.assembler.debugging.DebugLevel>\r
+ </AvrGcc>\r
+ </ToolchainSettings>\r
+ </PropertyGroup>\r
+ <ItemGroup>\r
+ <Compile Include="..\common\I2C\USI_TWI_Master.c">\r
+ <SubType>compile</SubType>\r
+ <Link>USI_TWI_Master.c</Link>\r
+ </Compile>\r
+ <Compile Include="DS2450_MAX44008.c">\r
+ <SubType>compile</SubType>\r
+ </Compile>\r
+ <Compile Include="OWDS2450.S">\r
+ <SubType>compile</SubType>\r
+ </Compile>\r
+ </ItemGroup>\r
+ <Import Project="$(AVRSTUDIO_EXE_PATH)\\Vs\\Compiler.targets" />\r
+</Project>
\ No newline at end of file
--- /dev/null
+\r
+// Copyright (c) 2017, Tobias Mueller tm(at)tm3d.de\r
+// All rights reserved. \r
+// \r
+// Redistribution and use in source and binary forms, with or without \r
+// modification, are permitted provided that the following conditions are \r
+// met: \r
+// \r
+// * Redistributions of source code must retain the above copyright \r
+// notice, this list of conditions and the following disclaimer. \r
+// * Redistributions in binary form must reproduce the above copyright \r
+// notice, this list of conditions and the following disclaimer in the \r
+// documentation and/or other materials provided with the \r
+// distribution. \r
+// * All advertising materials mentioning features or use of this \r
+// software must display the following acknowledgement: This product \r
+// includes software developed by tm3d.de and its contributors. \r
+// * Neither the name of tm3d.de nor the names of its contributors may \r
+// be used to endorse or promote products derived from this software \r
+// without specific prior written permission. \r
+// \r
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \r
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT \r
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR \r
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT \r
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, \r
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT \r
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, \r
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY \r
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT \r
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE \r
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \r
+\r
+#define _CHANGEABLE_ID_\r
+#define _ZERO_POLLING_\r
+#define __4MHZ__\r
+\r
+#include "../common/OWConfig.s"\r
+#include "../common/OWCRC16.s"\r
+\r
+.extern pack,8\r
+.comm addr,1 ;zweites Adressbyte ist unnoetig (Warum auch immer fuer 32 Byte 16 Bit Adressen verwendet werden....)\r
+.comm crcsave,1 ; zwischenspeicherspeicher fuer crc nur zweites byte....\r
+//.extern am2302_temp,2\r
+\r
+\r
+\r
+.macro CHIP_INIT \r
+.endm\r
+\r
+.macro COMMAND_TABLE\r
+ rjmp h_readmemoryaddr\r
+ rjmp h_readmemory\r
+ rjmp h_readmemorycrc1\r
+ rjmp h_readmemorycrc2\r
+ rjmp h_writememoryaddr\r
+ rjmp h_writememory\r
+ rjmp h_writememorycrc1\r
+ rjmp h_writememorycrc2\r
+ rjmp h_writememoryreadback\r
+ rjmp h_convert\r
+ rjmp h_convertcrc1\r
+ rjmp h_convertcrc2\r
+ rjmp h_convert_conv\r
+.endm\r
+\r
+#include "../common/OWRomFunctions.s"\r
+#include "../common/OWTimerInterrupt.s"\r
+\r
+\r
+\r
+; Ab hier Geraeteabhaenging\r
+#define OW_READ_MEMORY_ADDR OW_FIRST_COMMAND+0\r
+#define OW_READ_MEMORY OW_FIRST_COMMAND+1\r
+#define OW_READ_MEMORY_CRC1 OW_FIRST_COMMAND+2\r
+#define OW_READ_MEMORY_CRC2 OW_FIRST_COMMAND+3\r
+#define OW_WRITE_MEMORY_ADDR OW_FIRST_COMMAND+4\r
+#define OW_WRITE_MEMORY OW_FIRST_COMMAND+5\r
+#define OW_WRITE_MEMORY_CRC1 OW_FIRST_COMMAND+6\r
+#define OW_WRITE_MEMORY_CRC2 OW_FIRST_COMMAND+7\r
+#define OW_WRITE_MEMORY_READBACK OW_FIRST_COMMAND+8\r
+#define OW_CONVERT OW_FIRST_COMMAND+9\r
+#define OW_CONVERT_CRC1 OW_FIRST_COMMAND+10\r
+#define OW_CONVERT_CRC2 OW_FIRST_COMMAND+11\r
+#define OW_CONVERT_CONV OW_FIRST_COMMAND+12\r
+\r
+;---------------------------------------------------\r
+; READ COMMAND and start operation\r
+;---------------------------------------------------\r
+\r
+\r
+h_readcommand:\r
+ clr r_bytep\r
+#ifndef _DIS_FLASH_\r
+ FLASH_COMMANDS ; muss zu erst sein....\r
+#endif\r
+ cset 0xAA,OW_READ_MEMORY_ADDR\r
+ cset 0x55,OW_WRITE_MEMORY_ADDR\r
+ cset 0x3C,OW_CONVERT\r
+ FW_CONFIG_INFO\r
+#ifdef _CHANGEABLE_ID_\r
+ CHANGE_ID_COMMANDS\r
+#endif\r
+ ldi r_mode,OW_SLEEP\r
+ rjmp handle_end\r
+\r
+\r
+h_readmemoryaddr:\r
+ cpi r_bytep,0 ;erstes Adressbyte ?\r
+ brne h_readmemory_addr_byte1 ;nein dann weiter\r
+ andi r_rwbyte,0x1F ; nur Adressen zwischen 0 und 0x1F zulassen\r
+ sts addr,r_rwbyte ;speichern des ersten bytes\r
+ rjmp handle_end_inc\r
+h_readmemory_addr_byte1: ;zweiters Addressbyte wird nicht gespeichert!\r
+ ldi r_mode,OW_READ_MEMORY ;weiter zu read Memory\r
+ ;;ldi r_bcount,1 ;ist unten\r
+ ldi r_sendflag,1 ;jetzt sendet der Slave zum Master\r
+ clr r_bytep\r
+ rjmp h_readmemory2\r
+h_readmemory:\r
+ lds r_bytep,addr\r
+ inc r_bytep\r
+ sts addr,r_bytep\r
+ andi r_bytep,0x07\r
+ breq h_readmemory_init_crc\r
+h_readmemory2:\r
+ lds r_bytep,addr\r
+ ;andi r_bytep,0x1F ist oben\r
+ configZ pack,r_bytep\r
+ ld r_rwbyte,Z\r
+ ;ldi r_bcount,1\r
+ rjmp handle_end ;sendet das Byte und geht zu h_readmemory\r
+h_readmemory_init_crc:; init erstes CRC byte\r
+ lds r_rwbyte,crc\r
+ com r_rwbyte\r
+ lds r_temp,crc+1\r
+ com r_temp\r
+ sts crcsave,r_temp\r
+ ldi r_mode,OW_READ_MEMORY_CRC1\r
+ ;ldi r_bcount,1\r
+ rjmp handle_end\r
+h_readmemory_end:\r
+ ldi r_mode,OW_SLEEP\r
+ clr r_sendflag\r
+ rjmp handle_end\r
+h_readmemorycrc1:;init zweites CRC Byte\r
+ lds r_rwbyte,crcsave\r
+ ;ldi r_bcount,1\r
+ ldi r_mode,OW_READ_MEMORY_CRC2\r
+ rjmp handle_end\r
+h_readmemorycrc2:;weiteres senden..... nach zweitem Byte\r
+ lds r_temp,addr\r
+ andi r_temp,0xE0\r
+ brne h_readmemory_end; ende des speichers\r
+ ldi r_mode,OW_READ_MEMORY\r
+ CRCInit1 ;Start with new CRC\r
+ rjmp h_readmemory2\r
+\r
+h_writememoryaddr:\r
+ cpi r_bytep,0 ;erstes Adressbyte ?\r
+ brne h_writememory_addr_byte1 ;nein dann weiter\r
+ andi r_rwbyte,0x1F ; nur Adressen zwischen 0 und 0x1F zulassen\r
+ sts addr,r_rwbyte ;speichern des ersten bytes\r
+ inc r_bytep\r
+ ;ldi r_bcount,1\r
+ rjmp handle_end\r
+h_writememory_addr_byte1: ;zweiters Addressbyte wird nicht gespeichert!\r
+ ldi r_mode,OW_WRITE_MEMORY ;weiter zu read Memory\r
+ ;ldi r_bcount,1 ;; _________________________________________________in handle_end integrieren.....\r
+ lds r_bytep,addr\r
+ rjmp handle_end ;read Memory Byte\r
+h_writememory:\r
+ lds r_bytep,addr\r
+ configZ pack,r_bytep\r
+ st Z,r_rwbyte\r
+ ;ldi r_bcount,1\r
+ ldi r_mode,OW_WRITE_MEMORY_CRC1\r
+ ldi r_sendflag,1 ;jetzt sendet der Slave zum Master\r
+ lds r_rwbyte,crc\r
+ com r_rwbyte\r
+ lds r_temp,crc+1\r
+ com r_temp\r
+ sts crcsave,r_temp\r
+ rjmp handle_end\r
+h_writememorycrc1:\r
+ lds r_rwbyte,crcsave\r
+ ;ldi r_bcount,1\r
+ ldi r_mode,OW_WRITE_MEMORY_CRC2\r
+ rjmp handle_end\r
+h_writememorycrc2:\r
+ lds r_temp,addr\r
+ configZ pack,r_temp\r
+ ld r_rwbyte,Z\r
+ ;ldi r_bcount,1\r
+ ldi r_mode,OW_WRITE_MEMORY_READBACK\r
+ rjmp handle_end\r
+h_writememoryreadback:\r
+ ldi r_temp,0x00\r
+ sts crc+1,r_temp\r
+ lds r_temp,addr\r
+ inc r_temp\r
+ sts addr,r_temp\r
+ sts crc,r_temp\r
+ ldi r_sendflag,0\r
+ ;ldi r_bcount,1\r
+ ldi r_mode,OW_WRITE_MEMORY\r
+ rjmp handle_end\r
+\r
+h_convert:\r
+ cpi r_bytep,0 ;erstes Adressbyte ?\r
+ brne h_convert_byte1 ;nein dann weiter\r
+ inc r_bytep\r
+ sts pack+0x20,r_rwbyte\r
+ ;ldi r_bcount,1\r
+ rjmp handle_end\r
+h_convert_byte1: ;zweies byte glesen go crc#\r
+ sts pack+0x21,r_rwbyte\r
+ lds r_rwbyte,crc\r
+ com r_rwbyte\r
+ lds r_temp,crc+1\r
+ com r_temp\r
+ sts crcsave,r_temp\r
+ ldi r_mode,OW_CONVERT_CRC1\r
+ ;ldi r_bcount,1\r
+ ldi r_sendflag,1\r
+ rjmp handle_end \r
+h_convertcrc1:\r
+ lds r_rwbyte,crcsave\r
+ ;ldi r_bcount,1\r
+ ldi r_mode,OW_CONVERT_CRC2\r
+ rjmp handle_end\r
+h_convertcrc2:\r
+ ldi r_temp,1\r
+ sts gcontrol,r_temp\r
+ ;ldi r_bcount,1\r
+ ldi r_mode,OW_CONVERT_CONV\r
+ ;clr r_sendflag\r
+ ldi r_sendflag,3 ;set bit 0 and 1 for no zero polling\r
+h_convert_conv:\r
+ ldi r_bcount,0\r
+ ldi r_rwbyte,0\r
+ rjmp handle_end_no_bcount \r
+\r
+\r
+\r
+\r
+#include "../common/OWPinInterrupt.s"\r
+.end
\ No newline at end of file
--- /dev/null
+\r
+Microsoft Visual Studio Solution File, Format Version 12.00\r
+# Atmel Studio Solution File, Format Version 11.00\r
+VisualStudioVersion = 14.0.23107.0\r
+MinimumVisualStudioVersion = 10.0.40219.1\r
+Project("{54F91283-7BC4-4236-8FF9-10F437C3AD48}") = "DS2450_SGP30", "DS2450_SGP30.cproj", "{DCE6C7E3-EE26-4D79-826B-08594B9AD897}"\r
+EndProject\r
+Global\r
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution\r
+ Debug|AVR = Debug|AVR\r
+ Release|AVR = Release|AVR\r
+ EndGlobalSection\r
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution\r
+ {DCE6C7E3-EE26-4D79-826B-08594B9AD897}.Debug|AVR.ActiveCfg = Debug|AVR\r
+ {DCE6C7E3-EE26-4D79-826B-08594B9AD897}.Debug|AVR.Build.0 = Debug|AVR\r
+ {DCE6C7E3-EE26-4D79-826B-08594B9AD897}.Release|AVR.ActiveCfg = Release|AVR\r
+ {DCE6C7E3-EE26-4D79-826B-08594B9AD897}.Release|AVR.Build.0 = Release|AVR\r
+ EndGlobalSection\r
+ GlobalSection(SolutionProperties) = preSolution\r
+ HideSolutionNode = FALSE\r
+ EndGlobalSection\r
+EndGlobal\r
--- /dev/null
+\r
+// Copyright (c) 2017, Tobias Mueller tm(at)tm3d.de\r
+// All rights reserved.\r
+//\r
+// Redistribution and use in source and binary forms, with or without\r
+// modification, are permitted provided that the following conditions are\r
+// met:\r
+//\r
+// * Redistributions of source code must retain the above copyright\r
+// notice, this list of conditions and the following disclaimer.\r
+// * Redistributions in binary form must reproduce the above copyright\r
+// notice, this list of conditions and the following disclaimer in the\r
+// documentation and/or other materials provided with the\r
+// distribution.\r
+// * All advertising materials mentioning features or use of this\r
+// software must display the following acknowledgement: This product\r
+// includes software developed by tm3d.de and its contributors.\r
+// * Neither the name of tm3d.de nor the names of its contributors may\r
+// be used to endorse or promote products derived from this software\r
+// without specific prior written permission.\r
+//\r
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\r
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\r
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\r
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\r
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\r
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\r
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\r
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\r
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+\r
+#define F_CPU 8000000UL\r
+#include <avr/io.h>\r
+#include <avr/interrupt.h>\r
+#include <util/delay.h>\r
+#include <avr/wdt.h>\r
+#include <avr/sleep.h>\r
+#include <avr/pgmspace.h>\r
+#include "../common/I2C/USI_TWI_Master.h"\r
+#include "../common/I2C/SGP30.h"\r
+\r
+extern void OWINIT();\r
+extern void EXTERN_SLEEP();\r
+\r
+uint8_t owid[8]={0x20, 0xA2, 0xD9, 0x84, 0x00, 0x16, 0x23, 0x20};/**/\r
+//uint8_t config_info[26]={0x03,13,0x03,13,0x03,13,0x3,15,0x02,20,20,20,20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};\r
+uint8_t config_info[26]={10,13,8,13,8,13,8,13,0x02,25,25,25,25,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};\r
+\r
+#if (owid>128) \r
+#error "Variable not correct"\r
+#endif\r
+\r
+extern uint8_t mode;\r
+extern uint8_t gcontrol;\r
+extern uint8_t reset_indicator;\r
+extern uint8_t alarmflag;\r
+volatile uint8_t wdcounter=10;\r
+\r
+\r
+#if defined(__AVR_ATtiny24__)||defined(__AVR_ATtiny44__) || defined(__AVR_ATtiny84__) || defined(__AVR_ATtiny24A__)||defined(__AVR_ATtiny44A__) || defined(__AVR_ATtiny84A__)\r
+ISR(WATCHDOG_vect) {\r
+ #else\r
+ ISR(WDT_vect) {\r
+ #endif\r
+ wdcounter++;\r
+ if (reset_indicator==1) reset_indicator++;\r
+ else if (reset_indicator==2) mode=0;\r
+ }\r
+\r
+typedef union {\r
+ volatile uint8_t bytes[0x20];\r
+ struct {\r
+ //Page0\r
+ uint16_t A; //0\r
+ uint16_t B; //2\r
+ uint16_t C; //4\r
+ uint16_t D; //6\r
+ //Page1\r
+ uint8_t CSA1;\r
+ uint8_t CSA2;\r
+ uint8_t CSB1;\r
+ uint8_t CSB2;\r
+ uint8_t CSC1;\r
+ uint8_t CSC2;\r
+ uint8_t CSD1;\r
+ uint8_t CSD2;\r
+ //Page2\r
+ uint8_t LA;\r
+ uint8_t HA;\r
+ uint8_t LB;\r
+ uint8_t HB;\r
+ uint8_t LC;\r
+ uint8_t HC;\r
+ uint8_t LD;\r
+ uint8_t HD;\r
+ //Page3\r
+ uint8_t FC1;\r
+ uint8_t FC2;\r
+ uint8_t FC3;\r
+ uint8_t FC4;\r
+ uint8_t VCCP;\r
+ uint8_t FC5;\r
+ uint8_t FC6;\r
+ uint8_t FC7;\r
+ uint8_t convc1;\r
+ uint8_t convc2;\r
+ \r
+ \r
+ };\r
+} pack_t;\r
+volatile pack_t pack;\r
+\r
+\r
+uint16_t CO2;\r
+uint16_t VOC;\r
+uint16_t ETH;\r
+uint16_t H2;\r
+\r
+\r
+int main(void){\r
+ pack.A=0;\r
+ pack.B=0;\r
+ pack.C=0;\r
+ pack.D=0;\r
+ pack.CSA1=0x08;\r
+ pack.CSA2=0x8C;\r
+ pack.CSB1=0x08;\r
+ pack.CSB2=0x8C;\r
+ pack.CSC1=0x08;\r
+ pack.CSC2=0x8C;\r
+ pack.CSD1=0x08;\r
+ pack.CSD2=0x8C;\r
+ pack.HA=0xFF;\r
+ pack.LA=0x00;\r
+ pack.HB=0xFF;\r
+ pack.LB=0x00;\r
+ pack.HC=0xFF;\r
+ pack.LC=0x00;\r
+ pack.HD=0xFF;\r
+ pack.LD=0x00;\r
+ pack.VCCP=0;\r
+\r
+ PORTA=0xFF;\r
+ PORTB=0xFF;\r
+\r
+ OWINIT();\r
+\r
+ MCUCR &=~(1<<PUD); //All Pins Pullup...\r
+ MCUCR |=(1<<BODS);\r
+ //PORTA&=~((1<<PINA0)|(1<<PINA1)|(1<<PINA2)|(1<<PINA3));\r
+\r
+ WDTCSR |= ((1<<WDCE) ); // Enable the WD Change Bit//| (1<<WDE)\r
+ WDTCSR |= (1<<WDIE) | // Enable WDT Interrupt\r
+ (1<<WDP2) | (1<<WDP1); // Set Timeout to ~1 seconds\r
+\r
+ wdcounter=4;\r
+ \r
+ gcontrol=1;\r
+ USI_TWI_Master_Initialise();\r
+ initSGP30();\r
+ _delay_ms(200);\r
+ runSGP30(&CO2,&VOC,Ð,&H2);\r
+ \r
+ sei();\r
+ \r
+ //DDRB|=(1<<PINB1);\r
+\r
+ while(1) {\r
+ if (wdcounter>1) {\r
+ runSGP30(&CO2,&VOC,Ð,&H2);\r
+ wdcounter=0;\r
+ }\r
+\r
+ if (gcontrol) {\r
+ //PORTB|=(1<<PINB1);\r
+ uint8_t bb=1;\r
+ uint8_t bb1=1;\r
+ for(uint8_t i=0;i<4;i++){\r
+ if (pack.convc1&bb1) {\r
+ if (pack.convc2&(bb)) {pack.bytes[i*2]=0;pack.bytes[i*2+1]=0;}\r
+ bb=bb<<1;\r
+ if (pack.convc2&(bb)) {pack.bytes[i*2]=0xFF;pack.bytes[i*2+1]=0xFF;}\r
+ bb=bb<<1;\r
+ } else bb=bb<<2;\r
+ bb1=bb1<<1; \r
+ }\r
+ //CHanel A\r
+ if (pack.convc1&1) {\r
+ \r
+ //cli();pack.A=rlight[0];sei();\r
+ //cli();pack.A=r_gain;sei();\r
+ cli();pack.A=CO2;sei();\r
+ alarmflag=0;\r
+ if (pack.CSA2&0x08) //AEH\r
+ if (pack.bytes[1]>pack.HA) {alarmflag=1;pack.CSA2|=0x20;}\r
+ if (pack.CSA2&0x04) //AEL\r
+ if (pack.bytes[1]<pack.LA) {alarmflag=1;pack.CSA2|=0x10;}\r
+ }\r
+\r
+ if (pack.convc1&2) {\r
+ //cli();pack.B=rlight[1];sei();\r
+ //cli();pack.B=atime;sei();\r
+ cli();pack.B=VOC;sei();\r
+ if (pack.CSB2&0x08) //AEH\r
+ if (pack.bytes[1]>pack.HB) {alarmflag=1;pack.CSB2|=0x20;}\r
+ if (pack.CSB2&0x04) //AEL\r
+ if (pack.bytes[1]<pack.LB) {alarmflag=1;pack.CSB2|=0x10;}\r
+ }\r
+\r
+ if (pack.convc1&4) {\r
+ //cli();pack.C=rlight[2];sei();\r
+ cli();pack.C=ETH;sei();\r
+ if (pack.CSC2&0x08) //AEH\r
+ if (pack.bytes[1]>pack.HC) {alarmflag=1;pack.CSC2|=0x20;}\r
+ if (pack.CSC2&0x04) //AEL\r
+ if (pack.bytes[1]<pack.LC) {alarmflag=1;pack.CSC2|=0x10;}\r
+ } \r
+ if (pack.convc1&8) {\r
+ //cli();pack.D=rlight[3];sei();\r
+ cli();pack.D=H2;sei();\r
+ if (pack.CSD2&0x08) //AEH\r
+ if (pack.bytes[1]>pack.HD) {alarmflag=1;pack.CSD2|=0x20;}\r
+ if (pack.CSD2&0x04) //AEL\r
+ if (pack.bytes[1]<pack.LD) {alarmflag=1;pack.CSD2|=0x10;}\r
+ }\r
+ \r
+ EXTERN_SLEEP();\r
+ //PORTB&=~(1<<PINB1);\r
+ }\r
+\r
+ uint8_t bb=1;\r
+ for(uint8_t i=0;i<4;i++) {\r
+ if (pack.bytes[8+i*2]&0x80) { //Chanel as output\r
+ if (pack.bytes[8+i*2]&0x40) {\r
+ DDRA|=bb;\r
+ } else {\r
+ DDRA&=~bb;\r
+ }\r
+ } else {\r
+ DDRA&=~bb;\r
+ }\r
+ bb=bb*2;\r
+ }\r
+ \r
+#if defined(__AVR_ATtiny25__)||defined(__AVR_ATtiny45__) || defined(__AVR_ATtiny85__)\r
+ if (((TIMSK & (1<<TOIE0))==0)&& (mode==0))\r
+#endif \r
+#if defined(__AVR_ATtiny24__)||defined(__AVR_ATtiny44__) || defined(__AVR_ATtiny84__) ||defined(__AVR_ATtiny24A__)||defined(__AVR_ATtiny44A__) || defined(__AVR_ATtiny84A__)\r
+ if (((TIMSK0 & (1<<TOIE0))==0)&& (mode==0))\r
+#endif\r
+ {\r
+\r
+ MCUCR|=(1<<SE)|(1<<SM1);\r
+ MCUCR&=~(1<<ISC01);\r
+ } else {\r
+ MCUCR|=(1<<SE);\r
+ MCUCR&=~(1<<SM1);\r
+ }\r
+ // asm("SLEEP");\r
+ }\r
+\r
+\r
+}
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>\r
+<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="14.0">\r
+ <PropertyGroup>\r
+ <SchemaVersion>2.0</SchemaVersion>\r
+ <ProjectVersion>7.0</ProjectVersion>\r
+ <ToolchainName>com.Atmel.AVRGCC8.C</ToolchainName>\r
+ <ProjectGuid>dce6c7e3-ee26-4d79-826b-08594b9ad897</ProjectGuid>\r
+ <avrdevice>ATtiny84A</avrdevice>\r
+ <avrdeviceseries>none</avrdeviceseries>\r
+ <OutputType>Executable</OutputType>\r
+ <Language>C</Language>\r
+ <OutputFileName>$(MSBuildProjectName)</OutputFileName>\r
+ <OutputFileExtension>.elf</OutputFileExtension>\r
+ <OutputDirectory>$(MSBuildProjectDirectory)\$(Configuration)</OutputDirectory>\r
+ <AssemblyName>DS2450</AssemblyName>\r
+ <Name>DS2450_SGP30</Name>\r
+ <RootNamespace>DS2450</RootNamespace>\r
+ <ToolchainFlavour>Native</ToolchainFlavour>\r
+ <KeepTimersRunning>true</KeepTimersRunning>\r
+ <OverrideVtor>false</OverrideVtor>\r
+ <CacheFlash>true</CacheFlash>\r
+ <ProgFlashFromRam>true</ProgFlashFromRam>\r
+ <RamSnippetAddress>0x20000000</RamSnippetAddress>\r
+ <UncachedRange />\r
+ <preserveEEPROM>true</preserveEEPROM>\r
+ <OverrideVtorValue>exception_table</OverrideVtorValue>\r
+ <BootSegment>2</BootSegment>\r
+ <eraseonlaunchrule>1</eraseonlaunchrule>\r
+ <ExternalProgrammingToolCommand />\r
+ <AsfFrameworkConfig>\r
+ <framework-data>\r
+ <options />\r
+ <configurations />\r
+ <files />\r
+ <documentation help="" />\r
+ <offline-documentation help="" />\r
+ <dependencies>\r
+ <content-extension eid="atmel.asf" uuidref="Atmel.ASF" version="3.28.1" />\r
+ </dependencies>\r
+ </framework-data>\r
+ </AsfFrameworkConfig>\r
+ <avrtool>com.atmel.avrdbg.tool.atmelice</avrtool>\r
+ <avrtoolserialnumber>J41800000789</avrtoolserialnumber>\r
+ <avrdeviceexpectedsignature>0x1E930C</avrdeviceexpectedsignature>\r
+ <com_atmel_avrdbg_tool_atmelice>\r
+ <ToolOptions>\r
+ <InterfaceProperties>\r
+ <IspClock>125000</IspClock>\r
+ </InterfaceProperties>\r
+ <InterfaceName>debugWIRE</InterfaceName>\r
+ </ToolOptions>\r
+ <ToolType>com.atmel.avrdbg.tool.atmelice</ToolType>\r
+ <ToolNumber>J41800000789</ToolNumber>\r
+ <ToolName>Atmel-ICE</ToolName>\r
+ </com_atmel_avrdbg_tool_atmelice>\r
+ <avrtoolinterface>debugWIRE</avrtoolinterface>\r
+ <avrtoolinterfaceclock>125000</avrtoolinterfaceclock>\r
+ </PropertyGroup>\r
+ <PropertyGroup Condition=" '$(Configuration)' == 'Release' ">\r
+ <ToolchainSettings>\r
+ <AvrGcc>\r
+ <avrgcc.common.Device>-mmcu=attiny84a -B "%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.79\gcc\dev\attiny84a"</avrgcc.common.Device>\r
+ <avrgcc.common.outputfiles.hex>True</avrgcc.common.outputfiles.hex>\r
+ <avrgcc.common.outputfiles.lss>True</avrgcc.common.outputfiles.lss>\r
+ <avrgcc.common.outputfiles.eep>True</avrgcc.common.outputfiles.eep>\r
+ <avrgcc.common.outputfiles.srec>True</avrgcc.common.outputfiles.srec>\r
+ <avrgcc.common.outputfiles.usersignatures>False</avrgcc.common.outputfiles.usersignatures>\r
+ <avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>True</avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>\r
+ <avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>True</avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>\r
+ <avrgcc.compiler.symbols.DefSymbols>\r
+ <ListValues>\r
+ <Value>NDEBUG</Value>\r
+ <Value>__4MHZ__</Value>\r
+ </ListValues>\r
+ </avrgcc.compiler.symbols.DefSymbols>\r
+ <avrgcc.compiler.directories.IncludePaths>\r
+ <ListValues>\r
+ <Value>%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.79\include</Value>\r
+ </ListValues>\r
+ </avrgcc.compiler.directories.IncludePaths>\r
+ <avrgcc.compiler.optimization.level>Optimize for size (-Os)</avrgcc.compiler.optimization.level>\r
+ <avrgcc.compiler.optimization.PackStructureMembers>True</avrgcc.compiler.optimization.PackStructureMembers>\r
+ <avrgcc.compiler.optimization.AllocateBytesNeededForEnum>True</avrgcc.compiler.optimization.AllocateBytesNeededForEnum>\r
+ <avrgcc.compiler.warnings.AllWarnings>True</avrgcc.compiler.warnings.AllWarnings>\r
+ <avrgcc.linker.libraries.Libraries>\r
+ <ListValues>\r
+ <Value>libm</Value>\r
+ </ListValues>\r
+ </avrgcc.linker.libraries.Libraries>\r
+ <avrgcc.assembler.general.AssemblerFlags>-D __4MHZ__</avrgcc.assembler.general.AssemblerFlags>\r
+ <avrgcc.assembler.general.IncludePaths>\r
+ <ListValues>\r
+ <Value>%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.79\include</Value>\r
+ </ListValues>\r
+ </avrgcc.assembler.general.IncludePaths>\r
+ </AvrGcc>\r
+ </ToolchainSettings>\r
+ </PropertyGroup>\r
+ <PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">\r
+ <ToolchainSettings>\r
+ <AvrGcc>\r
+ <avrgcc.common.Device>-mmcu=attiny84a -B "%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.79\gcc\dev\attiny84a"</avrgcc.common.Device>\r
+ <avrgcc.common.outputfiles.hex>True</avrgcc.common.outputfiles.hex>\r
+ <avrgcc.common.outputfiles.lss>True</avrgcc.common.outputfiles.lss>\r
+ <avrgcc.common.outputfiles.eep>True</avrgcc.common.outputfiles.eep>\r
+ <avrgcc.common.outputfiles.srec>True</avrgcc.common.outputfiles.srec>\r
+ <avrgcc.common.outputfiles.usersignatures>False</avrgcc.common.outputfiles.usersignatures>\r
+ <avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>True</avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>\r
+ <avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>True</avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>\r
+ <avrgcc.compiler.symbols.DefSymbols>\r
+ <ListValues>\r
+ <Value>DEBUG</Value>\r
+ <Value>__4MHZ__</Value>\r
+ </ListValues>\r
+ </avrgcc.compiler.symbols.DefSymbols>\r
+ <avrgcc.compiler.directories.IncludePaths>\r
+ <ListValues>\r
+ <Value>%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.79\include</Value>\r
+ </ListValues>\r
+ </avrgcc.compiler.directories.IncludePaths>\r
+ <avrgcc.compiler.optimization.level>Optimize (-O1)</avrgcc.compiler.optimization.level>\r
+ <avrgcc.compiler.optimization.PackStructureMembers>True</avrgcc.compiler.optimization.PackStructureMembers>\r
+ <avrgcc.compiler.optimization.AllocateBytesNeededForEnum>True</avrgcc.compiler.optimization.AllocateBytesNeededForEnum>\r
+ <avrgcc.compiler.optimization.DebugLevel>Default (-g2)</avrgcc.compiler.optimization.DebugLevel>\r
+ <avrgcc.compiler.warnings.AllWarnings>True</avrgcc.compiler.warnings.AllWarnings>\r
+ <avrgcc.linker.libraries.Libraries>\r
+ <ListValues>\r
+ <Value>libm</Value>\r
+ </ListValues>\r
+ </avrgcc.linker.libraries.Libraries>\r
+ <avrgcc.assembler.general.AssemblerFlags>-D __4MHZ__</avrgcc.assembler.general.AssemblerFlags>\r
+ <avrgcc.assembler.general.IncludePaths>\r
+ <ListValues>\r
+ <Value>%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.79\include</Value>\r
+ </ListValues>\r
+ </avrgcc.assembler.general.IncludePaths>\r
+ <avrgcc.assembler.debugging.DebugLevel>Default (-Wa,-g)</avrgcc.assembler.debugging.DebugLevel>\r
+ </AvrGcc>\r
+ </ToolchainSettings>\r
+ </PropertyGroup>\r
+ <ItemGroup>\r
+ <Compile Include="..\common\I2C\SGP30.c">\r
+ <SubType>compile</SubType>\r
+ <Link>SGP30.c</Link>\r
+ </Compile>\r
+ <Compile Include="..\common\I2C\USI_TWI_Master.c">\r
+ <SubType>compile</SubType>\r
+ <Link>USI_TWI_Master.c</Link>\r
+ </Compile>\r
+ <Compile Include="DS2450_SGP30.c">\r
+ <SubType>compile</SubType>\r
+ </Compile>\r
+ <Compile Include="OWDS2450.S">\r
+ <SubType>compile</SubType>\r
+ </Compile>\r
+ </ItemGroup>\r
+ <Import Project="$(AVRSTUDIO_EXE_PATH)\\Vs\\Compiler.targets" />\r
+</Project>
\ No newline at end of file
--- /dev/null
+\r
+// Copyright (c) 2017, Tobias Mueller tm(at)tm3d.de\r
+// All rights reserved. \r
+// \r
+// Redistribution and use in source and binary forms, with or without \r
+// modification, are permitted provided that the following conditions are \r
+// met: \r
+// \r
+// * Redistributions of source code must retain the above copyright \r
+// notice, this list of conditions and the following disclaimer. \r
+// * Redistributions in binary form must reproduce the above copyright \r
+// notice, this list of conditions and the following disclaimer in the \r
+// documentation and/or other materials provided with the \r
+// distribution. \r
+// * All advertising materials mentioning features or use of this \r
+// software must display the following acknowledgement: This product \r
+// includes software developed by tm3d.de and its contributors. \r
+// * Neither the name of tm3d.de nor the names of its contributors may \r
+// be used to endorse or promote products derived from this software \r
+// without specific prior written permission. \r
+// \r
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \r
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT \r
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR \r
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT \r
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, \r
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT \r
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, \r
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY \r
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT \r
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE \r
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \r
+\r
+#define _CHANGEABLE_ID_\r
+#define _ZERO_POLLING_\r
+//#define __4MHZ__\r
+\r
+\r
+\r
+#include "../common/OWConfig.s"\r
+#include "../common/OWCRC16.s"\r
+\r
+.extern pack,8\r
+.comm addr,1 ;zweites Adressbyte ist unnoetig (Warum auch immer fuer 32 Byte 16 Bit Adressen verwendet werden....)\r
+.comm crcsave,1 ; zwischenspeicherspeicher fuer crc nur zweites byte....\r
+//.extern am2302_temp,2\r
+\r
+\r
+\r
+.macro CHIP_INIT \r
+.endm\r
+\r
+.macro COMMAND_TABLE\r
+ rjmp h_readmemoryaddr\r
+ rjmp h_readmemory\r
+ rjmp h_readmemorycrc1\r
+ rjmp h_readmemorycrc2\r
+ rjmp h_writememoryaddr\r
+ rjmp h_writememory\r
+ rjmp h_writememorycrc1\r
+ rjmp h_writememorycrc2\r
+ rjmp h_writememoryreadback\r
+ rjmp h_convert\r
+ rjmp h_convertcrc1\r
+ rjmp h_convertcrc2\r
+ rjmp h_convert_conv\r
+.endm\r
+\r
+#include "../common/OWRomFunctions.s"\r
+#include "../common/OWTimerInterrupt.s"\r
+\r
+\r
+\r
+; Ab hier Geraeteabhaenging\r
+#define OW_READ_MEMORY_ADDR OW_FIRST_COMMAND+0\r
+#define OW_READ_MEMORY OW_FIRST_COMMAND+1\r
+#define OW_READ_MEMORY_CRC1 OW_FIRST_COMMAND+2\r
+#define OW_READ_MEMORY_CRC2 OW_FIRST_COMMAND+3\r
+#define OW_WRITE_MEMORY_ADDR OW_FIRST_COMMAND+4\r
+#define OW_WRITE_MEMORY OW_FIRST_COMMAND+5\r
+#define OW_WRITE_MEMORY_CRC1 OW_FIRST_COMMAND+6\r
+#define OW_WRITE_MEMORY_CRC2 OW_FIRST_COMMAND+7\r
+#define OW_WRITE_MEMORY_READBACK OW_FIRST_COMMAND+8\r
+#define OW_CONVERT OW_FIRST_COMMAND+9\r
+#define OW_CONVERT_CRC1 OW_FIRST_COMMAND+10\r
+#define OW_CONVERT_CRC2 OW_FIRST_COMMAND+11\r
+#define OW_CONVERT_CONV OW_FIRST_COMMAND+12\r
+\r
+;---------------------------------------------------\r
+; READ COMMAND and start operation\r
+;---------------------------------------------------\r
+\r
+\r
+h_readcommand:\r
+ clr r_bytep\r
+#ifndef _DIS_FLASH_\r
+ FLASH_COMMANDS ; muss zu erst sein....\r
+#endif\r
+ cset 0xAA,OW_READ_MEMORY_ADDR\r
+ cset 0x55,OW_WRITE_MEMORY_ADDR\r
+ cset 0x3C,OW_CONVERT\r
+ FW_CONFIG_INFO\r
+#ifdef _CHANGEABLE_ID_\r
+ CHANGE_ID_COMMANDS\r
+#endif\r
+ ldi r_mode,OW_SLEEP\r
+ rjmp handle_end\r
+\r
+\r
+h_readmemoryaddr:\r
+ cpi r_bytep,0 ;erstes Adressbyte ?\r
+ brne h_readmemory_addr_byte1 ;nein dann weiter\r
+ andi r_rwbyte,0x1F ; nur Adressen zwischen 0 und 0x1F zulassen\r
+ sts addr,r_rwbyte ;speichern des ersten bytes\r
+ rjmp handle_end_inc\r
+h_readmemory_addr_byte1: ;zweiters Addressbyte wird nicht gespeichert!\r
+ ldi r_mode,OW_READ_MEMORY ;weiter zu read Memory\r
+ ;;ldi r_bcount,1 ;ist unten\r
+ ldi r_sendflag,1 ;jetzt sendet der Slave zum Master\r
+ clr r_bytep\r
+ rjmp h_readmemory2\r
+h_readmemory:\r
+ lds r_bytep,addr\r
+ inc r_bytep\r
+ sts addr,r_bytep\r
+ andi r_bytep,0x07\r
+ breq h_readmemory_init_crc\r
+h_readmemory2:\r
+ lds r_bytep,addr\r
+ ;andi r_bytep,0x1F ist oben\r
+ configZ pack,r_bytep\r
+ ld r_rwbyte,Z\r
+ ;ldi r_bcount,1\r
+ rjmp handle_end ;sendet das Byte und geht zu h_readmemory\r
+h_readmemory_init_crc:; init erstes CRC byte\r
+ lds r_rwbyte,crc\r
+ com r_rwbyte\r
+ lds r_temp,crc+1\r
+ com r_temp\r
+ sts crcsave,r_temp\r
+ ldi r_mode,OW_READ_MEMORY_CRC1\r
+ ;ldi r_bcount,1\r
+ rjmp handle_end\r
+h_readmemory_end:\r
+ ldi r_mode,OW_SLEEP\r
+ clr r_sendflag\r
+ rjmp handle_end\r
+h_readmemorycrc1:;init zweites CRC Byte\r
+ lds r_rwbyte,crcsave\r
+ ;ldi r_bcount,1\r
+ ldi r_mode,OW_READ_MEMORY_CRC2\r
+ rjmp handle_end\r
+h_readmemorycrc2:;weiteres senden..... nach zweitem Byte\r
+ lds r_temp,addr\r
+ andi r_temp,0xE0\r
+ brne h_readmemory_end; ende des speichers\r
+ ldi r_mode,OW_READ_MEMORY\r
+ CRCInit1 ;Start with new CRC\r
+ rjmp h_readmemory2\r
+\r
+h_writememoryaddr:\r
+ cpi r_bytep,0 ;erstes Adressbyte ?\r
+ brne h_writememory_addr_byte1 ;nein dann weiter\r
+ andi r_rwbyte,0x1F ; nur Adressen zwischen 0 und 0x1F zulassen\r
+ sts addr,r_rwbyte ;speichern des ersten bytes\r
+ inc r_bytep\r
+ ;ldi r_bcount,1\r
+ rjmp handle_end\r
+h_writememory_addr_byte1: ;zweiters Addressbyte wird nicht gespeichert!\r
+ ldi r_mode,OW_WRITE_MEMORY ;weiter zu read Memory\r
+ ;ldi r_bcount,1 ;; _________________________________________________in handle_end integrieren.....\r
+ lds r_bytep,addr\r
+ rjmp handle_end ;read Memory Byte\r
+h_writememory:\r
+ lds r_bytep,addr\r
+ configZ pack,r_bytep\r
+ st Z,r_rwbyte\r
+ ;ldi r_bcount,1\r
+ ldi r_mode,OW_WRITE_MEMORY_CRC1\r
+ ldi r_sendflag,1 ;jetzt sendet der Slave zum Master\r
+ lds r_rwbyte,crc\r
+ com r_rwbyte\r
+ lds r_temp,crc+1\r
+ com r_temp\r
+ sts crcsave,r_temp\r
+ rjmp handle_end\r
+h_writememorycrc1:\r
+ lds r_rwbyte,crcsave\r
+ ;ldi r_bcount,1\r
+ ldi r_mode,OW_WRITE_MEMORY_CRC2\r
+ rjmp handle_end\r
+h_writememorycrc2:\r
+ lds r_temp,addr\r
+ configZ pack,r_temp\r
+ ld r_rwbyte,Z\r
+ ;ldi r_bcount,1\r
+ ldi r_mode,OW_WRITE_MEMORY_READBACK\r
+ rjmp handle_end\r
+h_writememoryreadback:\r
+ ldi r_temp,0x00\r
+ sts crc+1,r_temp\r
+ lds r_temp,addr\r
+ inc r_temp\r
+ sts addr,r_temp\r
+ sts crc,r_temp\r
+ ldi r_sendflag,0\r
+ ;ldi r_bcount,1\r
+ ldi r_mode,OW_WRITE_MEMORY\r
+ rjmp handle_end\r
+\r
+h_convert:\r
+ cpi r_bytep,0 ;erstes Adressbyte ?\r
+ brne h_convert_byte1 ;nein dann weiter\r
+ inc r_bytep\r
+ sts pack+0x20,r_rwbyte\r
+ ;ldi r_bcount,1\r
+ rjmp handle_end\r
+h_convert_byte1: ;zweies byte glesen go crc#\r
+ sts pack+0x21,r_rwbyte\r
+ lds r_rwbyte,crc\r
+ com r_rwbyte\r
+ lds r_temp,crc+1\r
+ com r_temp\r
+ sts crcsave,r_temp\r
+ ldi r_mode,OW_CONVERT_CRC1\r
+ ;ldi r_bcount,1\r
+ ldi r_sendflag,1\r
+ rjmp handle_end \r
+h_convertcrc1:\r
+ lds r_rwbyte,crcsave\r
+ ;ldi r_bcount,1\r
+ ldi r_mode,OW_CONVERT_CRC2\r
+ rjmp handle_end\r
+h_convertcrc2:\r
+ ldi r_temp,1\r
+ sts gcontrol,r_temp\r
+ ;ldi r_bcount,1\r
+ ldi r_mode,OW_CONVERT_CONV\r
+ ;clr r_sendflag\r
+ ldi r_sendflag,3 ;set bit 0 and 1 for no zero polling\r
+h_convert_conv:\r
+ ldi r_bcount,0\r
+ ldi r_rwbyte,0\r
+ rjmp handle_end_no_bcount \r
+\r
+\r
+\r
+\r
+#include "../common/OWPinInterrupt.s"\r
+.end
\ No newline at end of file
-
-Microsoft Visual Studio Solution File, Format Version 12.00
-# Atmel Studio Solution File, Format Version 11.00
-VisualStudioVersion = 14.0.23107.0
-MinimumVisualStudioVersion = 10.0.40219.1
-Project("{54F91283-7BC4-4236-8FF9-10F437C3AD48}") = "DS2450_SHT2X_BMP280", "DS2450_SHT2X_BMP280.cproj", "{DCE6C7E3-EE26-4D79-826B-08594B9AD897}"
-EndProject
-Global
- GlobalSection(SolutionConfigurationPlatforms) = preSolution
- Debug|AVR = Debug|AVR
- Release|AVR = Release|AVR
- EndGlobalSection
- GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {DCE6C7E3-EE26-4D79-826B-08594B9AD897}.Debug|AVR.ActiveCfg = Debug|AVR
- {DCE6C7E3-EE26-4D79-826B-08594B9AD897}.Debug|AVR.Build.0 = Debug|AVR
- {DCE6C7E3-EE26-4D79-826B-08594B9AD897}.Release|AVR.ActiveCfg = Release|AVR
- {DCE6C7E3-EE26-4D79-826B-08594B9AD897}.Release|AVR.Build.0 = Release|AVR
- EndGlobalSection
- GlobalSection(SolutionProperties) = preSolution
- HideSolutionNode = FALSE
- EndGlobalSection
-EndGlobal
+\r
+Microsoft Visual Studio Solution File, Format Version 12.00\r
+# Atmel Studio Solution File, Format Version 11.00\r
+VisualStudioVersion = 14.0.23107.0\r
+MinimumVisualStudioVersion = 10.0.40219.1\r
+Project("{54F91283-7BC4-4236-8FF9-10F437C3AD48}") = "DS2450_SHT2X_BMP280", "DS2450_SHT2X_BMP280.cproj", "{DCE6C7E3-EE26-4D79-826B-08594B9AD897}"\r
+EndProject\r
+Global\r
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution\r
+ Debug|AVR = Debug|AVR\r
+ Release|AVR = Release|AVR\r
+ EndGlobalSection\r
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution\r
+ {DCE6C7E3-EE26-4D79-826B-08594B9AD897}.Debug|AVR.ActiveCfg = Debug|AVR\r
+ {DCE6C7E3-EE26-4D79-826B-08594B9AD897}.Debug|AVR.Build.0 = Debug|AVR\r
+ {DCE6C7E3-EE26-4D79-826B-08594B9AD897}.Release|AVR.ActiveCfg = Release|AVR\r
+ {DCE6C7E3-EE26-4D79-826B-08594B9AD897}.Release|AVR.Build.0 = Release|AVR\r
+ EndGlobalSection\r
+ GlobalSection(SolutionProperties) = preSolution\r
+ HideSolutionNode = FALSE\r
+ EndGlobalSection\r
+EndGlobal\r
#include <avr/sleep.h>\r
#include <avr/pgmspace.h>\r
#include "../common/I2C/USI_TWI_Master.h"\r
-#include "../common/I2C/SHT2x.h"\r
+#include "../common/I2C/SHT2xV2.h"\r
#include "../common/I2C/BMP280.h"\r
#include "../common/I2C/MAX44009.h"\r
-extern void OWINIT();\r
-extern void EXTERN_SLEEP();\r
+#include "../common/owSlave_tools.h"\r
+#include "../common/calibr.h"\r
+\r
+OWST_EXTERN_VARS\r
\r
uint8_t owid[8]={0x20, 0xA2, 0xD9, 0x84, 0x00, 0x16, 0x02, 0x5D};/**/\r
uint8_t config_info[26]={0x01,14,0x04,0x08, 0x03,15, 0x02,16,0x02,7,7,15,14,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};\r
#error "Variable not correct"\r
#endif\r
\r
-extern uint8_t mode;\r
-extern uint8_t gcontrol;\r
-extern uint8_t reset_indicator;\r
-extern uint8_t alarmflag;\r
-volatile uint8_t wdcounter=10;\r
-\r
+OWST_WDT_ISR\r
\r
-#if defined(__AVR_ATtiny24__)||defined(__AVR_ATtiny44__) || defined(__AVR_ATtiny84__) || defined(__AVR_ATtiny24A__)||defined(__AVR_ATtiny44A__) || defined(__AVR_ATtiny84A__)\r
-ISR(WATCHDOG_vect) {\r
-#else\r
-ISR(WDT_vect) {\r
-#endif \r
- wdcounter++;\r
- if (reset_indicator==1) reset_indicator++;\r
- else if (reset_indicator==2) mode=0;\r
-}\r
\r
typedef union {\r
volatile uint8_t bytes[0x20];\r
\r
\r
\r
-volatile int16_t am2302_temp;\r
-volatile uint16_t am2302_hum;\r
\r
\r
-uint8_t userRegister[1];\r
-int16_t sRH,sT;\r
-volatile double temperatureC,humidityRH;\r
-volatile double l;\r
+ double temperatureC,humidityRH;\r
+ double l;\r
uint32_t P;\r
int32_t t;\r
uint8_t max_adr=0;\r
\r
\r
int main(void){\r
+ OWST_INIT_USI_ON\r
pack.A=0;\r
pack.B=0;\r
pack.C=0;\r
pack.HD=0xFF;\r
pack.LD=0x00;\r
pack.VCCP=0;\r
- PORTB=0xFF-(1<<PORTB0); //Schalter kann gegen Masse sein und zieht dann immer Strom\r
- DDRB|=(1<<PORTB0); //Als Ausgang und 0\r
- PORTA=0xFF; //All Pull up;\r
- PRR|=(1<<PRADC); // adc for save Power\r
\r
- ACSR|=(1<<ACD); //Disable Comparator\r
OWINIT();\r
\r
- MCUCR &=~(1<<PUD); //All Pins Pullup...\r
- MCUCR |=(1<<BODS);\r
- WDTCSR |= ((1<<WDCE) ); // Enable the WD Change Bit//| (1<<WDE)\r
- WDTCSR |= (1<<WDIE) | // Enable WDT Interrupt\r
- (1<<WDP3) | (1<<WDP0); // Set Timeout to ~8 seconds\r
+ OWST_WDR_CONFIG8\r
+ OWST_EN_PULLUP\r
\r
gcontrol=1;\r
\r
- USI_TWI_Master_Initialise();\r
+ initSHT2x();\r
+ _delay_ms(10);\r
bmp280Init();\r
- SHT2x_SoftReset();\r
- SHT2x_ReadUserRegister(userRegister);\r
- //(userRegister & ~SHT2x_RES_MASK) | SHT2x_RES_10_13BIT;\r
- SHT2x_WriteUserRegister(userRegister); //write changed user reg\r
- // --- measure humidity with "Hold Master Mode (HM)" ---\r
- //SHT2x_MeasurePoll(HUMIDITY, &sRH);\r
- // --- measure temperature with "Polling Mode" (no hold master) ---\r
- //SHT2x_MeasurePoll(TEMP, &sT);\r
- //-- calculate humidity and temperature --\r
- //temperatureC = SHT2x_CalcTemperatureC(sT);\r
- //humidityRH = SHT2x_CalcRH(sRH);\r
if (checkMAX44009(0)) max_adr=0; else max_adr=1 ;\r
\r
sei();\r
while(1) {\r
\r
if (wdcounter>3) { \r
- SHT2x_MeasurePoll(HUMIDITY, &sRH);\r
- // --- measure temperature with "Polling Mode" (no hold master) ---\r
- SHT2x_MeasurePoll(TEMP, &sT);\r
- //-- calculate humidity and temperature --\r
- temperatureC = SHT2x_CalcTemperatureC(sT);\r
- humidityRH = SHT2x_CalcRH(sRH);\r
+ getSHT2xHumTemp(&temperatureC,&humidityRH);\r
+ humidityRH=calibr_hum(temperatureC,-0.2,humidityRH);\r
+ temperatureC =temperatureC -0.2;\r
bmp280ConvertInt(&t,&P,1);\r
l=MAX44009getlux(max_adr);\r
if (l<0.030) l=0.030; //Darf nicht 0 sein. minimum -35°C Sensor minimum 0.045\r
while ((ADCSRA&(1<<ADSC)));\r
cli();pack.B=ADC;sei();*/\r
wdcounter=10;\r
- cli();pack.B=humidityRH*100;sei();\r
+ uint16_t hb=humidityRH*100;\r
+ cli();pack.B=hb;sei();\r
if (pack.CSB2&0x08) //AEH\r
if (pack.bytes[1]>pack.HB) {alarmflag=1;pack.CSB2|=0x20;}\r
if (pack.CSB2&0x04) //AEL\r
while ((ADCSRA&(1<<ADSC)));\r
cli();pack.D=ADC;sei();*/\r
wdcounter=10;\r
- cli();pack.D=P/100.0*32.0;sei();\r
+ uint16_t hd=P/100.0*32.0;\r
+ cli();pack.D=hd;sei();\r
if (pack.CSD2&0x08) //AEH\r
if (pack.bytes[1]>pack.HD) {alarmflag=1;pack.CSD2|=0x20;}\r
if (pack.CSD2&0x04) //AEL\r
bb=bb*2;\r
}*/\r
\r
-#if defined(__AVR_ATtiny25__)||defined(__AVR_ATtiny45__) || defined(__AVR_ATtiny85__)\r
- if (((TIMSK & (1<<TOIE0))==0)&& (mode==0))\r
-#endif \r
-#if defined(__AVR_ATtiny24__)||defined(__AVR_ATtiny44__) || defined(__AVR_ATtiny84__) ||defined(__AVR_ATtiny24A__)||defined(__AVR_ATtiny44A__) || defined(__AVR_ATtiny84A__)\r
- if (((TIMSK0 & (1<<TOIE0))==0)&& (mode==0))\r
-#endif\r
- {\r
-\r
- MCUCR|=(1<<SE)|(1<<SM1);\r
- MCUCR&=~(1<<ISC01);\r
- } else {\r
- MCUCR|=(1<<SE);\r
- MCUCR&=~(1<<SM1);\r
- }\r
- // asm("SLEEP");\r
+ OWST_MAIN_END\r
}\r
\r
\r
<eraseonlaunchrule>1</eraseonlaunchrule>\r
<ExternalProgrammingToolCommand />\r
<AsfFrameworkConfig>\r
- <framework-data xmlns="">\r
+ <framework-data>\r
<options />\r
<configurations />\r
<files />\r
<documentation help="" />\r
<offline-documentation help="" />\r
<dependencies>\r
- <content-extension eid="atmel.asf" uuidref="Atmel.ASF" version="3.27.3" />\r
+ <content-extension eid="atmel.asf" uuidref="Atmel.ASF" version="3.28.1" />\r
</dependencies>\r
</framework-data>\r
</AsfFrameworkConfig>\r
</ToolchainSettings>\r
</PropertyGroup>\r
<ItemGroup>\r
+ <Compile Include="..\common\calibr.c">\r
+ <SubType>compile</SubType>\r
+ <Link>calibr.c</Link>\r
+ </Compile>\r
<Compile Include="..\common\I2C\BMP280.c">\r
<SubType>compile</SubType>\r
<Link>BMP280.c</Link>\r
<SubType>compile</SubType>\r
<Link>MAX44009.c</Link>\r
</Compile>\r
- <Compile Include="..\common\I2C\SHT2x.c">\r
- <SubType>compile</SubType>\r
- <Link>SHT2x.c</Link>\r
- </Compile>\r
- <Compile Include="..\common\I2C\TSL256x.c">\r
+ <Compile Include="..\common\I2C\SHT2xV2.c">\r
<SubType>compile</SubType>\r
- <Link>TSL256x.c</Link>\r
+ <Link>SHT2xV2.c</Link>\r
</Compile>\r
<Compile Include="..\common\I2C\USI_TWI_Master.c">\r
<SubType>compile</SubType>\r
-
-Microsoft Visual Studio Solution File, Format Version 12.00
-# Atmel Studio Solution File, Format Version 11.00
-VisualStudioVersion = 14.0.23107.0
-MinimumVisualStudioVersion = 10.0.40219.1
-Project("{54F91283-7BC4-4236-8FF9-10F437C3AD48}") = "DS2450_SHT2X_MAX44009", "DS2450_SHT2X_MAX44009.cproj", "{DCE6C7E3-EE26-4D79-826B-08594B9AD897}"
-EndProject
-Global
- GlobalSection(SolutionConfigurationPlatforms) = preSolution
- Debug|AVR = Debug|AVR
- Release|AVR = Release|AVR
- EndGlobalSection
- GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {DCE6C7E3-EE26-4D79-826B-08594B9AD897}.Debug|AVR.ActiveCfg = Debug|AVR
- {DCE6C7E3-EE26-4D79-826B-08594B9AD897}.Debug|AVR.Build.0 = Debug|AVR
- {DCE6C7E3-EE26-4D79-826B-08594B9AD897}.Release|AVR.ActiveCfg = Release|AVR
- {DCE6C7E3-EE26-4D79-826B-08594B9AD897}.Release|AVR.Build.0 = Release|AVR
- EndGlobalSection
- GlobalSection(SolutionProperties) = preSolution
- HideSolutionNode = FALSE
- EndGlobalSection
-EndGlobal
+\r
+Microsoft Visual Studio Solution File, Format Version 12.00\r
+# Atmel Studio Solution File, Format Version 11.00\r
+VisualStudioVersion = 14.0.23107.0\r
+MinimumVisualStudioVersion = 10.0.40219.1\r
+Project("{54F91283-7BC4-4236-8FF9-10F437C3AD48}") = "DS2450_SHT2X_MAX44009", "DS2450_SHT2X_MAX44009.cproj", "{DCE6C7E3-EE26-4D79-826B-08594B9AD897}"\r
+EndProject\r
+Global\r
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution\r
+ Debug|AVR = Debug|AVR\r
+ Release|AVR = Release|AVR\r
+ EndGlobalSection\r
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution\r
+ {DCE6C7E3-EE26-4D79-826B-08594B9AD897}.Debug|AVR.ActiveCfg = Debug|AVR\r
+ {DCE6C7E3-EE26-4D79-826B-08594B9AD897}.Debug|AVR.Build.0 = Debug|AVR\r
+ {DCE6C7E3-EE26-4D79-826B-08594B9AD897}.Release|AVR.ActiveCfg = Release|AVR\r
+ {DCE6C7E3-EE26-4D79-826B-08594B9AD897}.Release|AVR.Build.0 = Release|AVR\r
+ EndGlobalSection\r
+ GlobalSection(SolutionProperties) = preSolution\r
+ HideSolutionNode = FALSE\r
+ EndGlobalSection\r
+EndGlobal\r
#include <avr/wdt.h>\r
#include <avr/sleep.h>\r
#include <avr/pgmspace.h>\r
-#include "../common/I2C/USI_TWI_Master.h"\r
+#include "../common/I2C/TWI_Master.h"\r
#include "../common/I2C/SHT2x.h"\r
#include "../common/I2C/MAX44009.h"\r
extern void OWINIT();\r
\r
gcontrol=1;\r
\r
- USI_TWI_Master_Initialise();\r
+ TWI_Master_Initialise();\r
SHT2x_SoftReset();\r
SHT2x_ReadUserRegister(userRegister);\r
//(userRegister & ~SHT2x_RES_MASK) | SHT2x_RES_10_13BIT;\r
MCUCR|=(1<<SE);\r
MCUCR&=~(1<<SM1);\r
}\r
- // asm("SLEEP");\r
+ asm("SLEEP");\r
}\r
\r
\r
<eraseonlaunchrule>1</eraseonlaunchrule>\r
<ExternalProgrammingToolCommand />\r
<AsfFrameworkConfig>\r
- <framework-data xmlns="">\r
- <options />\r
- <configurations />\r
- <files />\r
- <documentation help="" />\r
- <offline-documentation help="" />\r
- <dependencies>\r
- <content-extension eid="atmel.asf" uuidref="Atmel.ASF" version="3.27.3" />\r
- </dependencies>\r
- </framework-data>\r
+ <framework-data>\r
+ <options />\r
+ <configurations />\r
+ <files />\r
+ <documentation help="" />\r
+ <offline-documentation help="" />\r
+ <dependencies>\r
+ <content-extension eid="atmel.asf" uuidref="Atmel.ASF" version="3.28.1" />\r
+ </dependencies>\r
+</framework-data>\r
</AsfFrameworkConfig>\r
<avrtool>com.atmel.avrdbg.tool.atmelice</avrtool>\r
<avrtoolserialnumber>J41800000779</avrtoolserialnumber>\r
<SubType>compile</SubType>\r
<Link>TSL256x.c</Link>\r
</Compile>\r
- <Compile Include="..\common\I2C\USI_TWI_Master.c">\r
+ <Compile Include="..\common\I2C\TWI_Master.c">\r
<SubType>compile</SubType>\r
- <Link>USI_TWI_Master.c</Link>\r
+ <Link>TWI_Master.c</Link>\r
</Compile>\r
<Compile Include="DS2450_SHT2X_MAX44009.c">\r
<SubType>compile</SubType>\r
--- /dev/null
+\r
+Microsoft Visual Studio Solution File, Format Version 12.00\r
+# Atmel Studio Solution File, Format Version 11.00\r
+VisualStudioVersion = 14.0.23107.0\r
+MinimumVisualStudioVersion = 10.0.40219.1\r
+Project("{54F91283-7BC4-4236-8FF9-10F437C3AD48}") = "DS2450_SHT3X", "DS2450_SHT3X.cproj", "{DCE6C7E3-EE26-4D79-826B-08594B9AD897}"\r
+EndProject\r
+Global\r
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution\r
+ Debug|AVR = Debug|AVR\r
+ Release|AVR = Release|AVR\r
+ EndGlobalSection\r
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution\r
+ {DCE6C7E3-EE26-4D79-826B-08594B9AD897}.Debug|AVR.ActiveCfg = Debug|AVR\r
+ {DCE6C7E3-EE26-4D79-826B-08594B9AD897}.Debug|AVR.Build.0 = Debug|AVR\r
+ {DCE6C7E3-EE26-4D79-826B-08594B9AD897}.Release|AVR.ActiveCfg = Release|AVR\r
+ {DCE6C7E3-EE26-4D79-826B-08594B9AD897}.Release|AVR.Build.0 = Release|AVR\r
+ EndGlobalSection\r
+ GlobalSection(SolutionProperties) = preSolution\r
+ HideSolutionNode = FALSE\r
+ EndGlobalSection\r
+EndGlobal\r
--- /dev/null
+// Copyright (c) 2017, Tobias Mueller tm(at)tm3d.de\r
+// All rights reserved.\r
+//\r
+// Redistribution and use in source and binary forms, with or without\r
+// modification, are permitted provided that the following conditions are\r
+// met:\r
+//\r
+// * Redistributions of source code must retain the above copyright\r
+// notice, this list of conditions and the following disclaimer.\r
+// * Redistributions in binary form must reproduce the above copyright\r
+// notice, this list of conditions and the following disclaimer in the\r
+// documentation and/or other materials provided with the\r
+// distribution.\r
+// * All advertising materials mentioning features or use of this\r
+// software must display the following acknowledgement: This product\r
+// includes software developed by tm3d.de and its contributors.\r
+// * Neither the name of tm3d.de nor the names of its contributors may\r
+// be used to endorse or promote products derived from this software\r
+// without specific prior written permission.\r
+//\r
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\r
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\r
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\r
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\r
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\r
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\r
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\r
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\r
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+\r
+#define F_CPU 8000000UL\r
+#include <avr/io.h>\r
+#include <avr/interrupt.h>\r
+#include <util/delay.h>\r
+#include <avr/wdt.h>\r
+#include <avr/sleep.h>\r
+#include <avr/pgmspace.h>\r
+#include "../common/I2C/USI_TWI_Master.h"\r
+#include "../common/I2C/SHT3x.h"\r
+#include "../common/calibr.h"\r
+extern void OWINIT();\r
+extern void EXTERN_SLEEP();\r
+//6A02160084D9A320\r
+//uint8_t owid[8]={0x20, 0xA2, 0xD9, 0x84, 0x00, 0x16, 0x02, 0x5D};/**/\r
+uint8_t owid[8]={0x20, 0xA3, 0xD9, 0x84, 0x00, 0x16, 0x02, 0x6A};/**/\r
+uint8_t config_info[26]={0x01,14,0x04,0x08, 0,0, 0,0,0x02,21,21,0x00,0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};\r
+#if (owid>128) \r
+#error "Variable not correct"\r
+#endif\r
+\r
+extern uint8_t mode;\r
+extern uint8_t gcontrol;\r
+extern uint8_t reset_indicator;\r
+extern uint8_t alarmflag;\r
+volatile uint8_t wdcounter=10;\r
+\r
+\r
+#if defined(__AVR_ATtiny24__)||defined(__AVR_ATtiny44__) || defined(__AVR_ATtiny84__) || defined(__AVR_ATtiny24A__)||defined(__AVR_ATtiny44A__) || defined(__AVR_ATtiny84A__)\r
+ISR(WATCHDOG_vect) {\r
+#else\r
+ISR(WDT_vect) {\r
+#endif \r
+ wdcounter++;\r
+ if (reset_indicator==1) reset_indicator++;\r
+ else if (reset_indicator==2) mode=0;\r
+}\r
+\r
+typedef union {\r
+ volatile uint8_t bytes[0x20];\r
+ struct {\r
+ //Page0\r
+ uint16_t A; //0\r
+ uint16_t B; //2\r
+ uint16_t C; //4\r
+ uint16_t D; //6\r
+ //Page1\r
+ uint8_t CSA1;\r
+ uint8_t CSA2;\r
+ uint8_t CSB1;\r
+ uint8_t CSB2;\r
+ uint8_t CSC1;\r
+ uint8_t CSC2;\r
+ uint8_t CSD1;\r
+ uint8_t CSD2;\r
+ //Page2\r
+ uint8_t LA;\r
+ uint8_t HA;\r
+ uint8_t LB;\r
+ uint8_t HB;\r
+ uint8_t LC;\r
+ uint8_t HC;\r
+ uint8_t LD;\r
+ uint8_t HD;\r
+ //Page3\r
+ uint8_t FC1;\r
+ uint8_t FC2;\r
+ uint8_t FC3;\r
+ uint8_t FC4;\r
+ uint8_t VCCP;\r
+ uint8_t FC5;\r
+ uint8_t FC6;\r
+ uint8_t FC7;\r
+ uint8_t convc1;\r
+ uint8_t convc2;\r
+ \r
+ \r
+ };\r
+} pack_t;\r
+volatile pack_t pack;\r
+\r
+\r
+\r
+volatile int16_t am2302_temp;\r
+volatile uint16_t am2302_hum;\r
+\r
+\r
+uint8_t userRegister[1];\r
+int16_t sRH,sT;\r
+ double temperatureC,humidityRH;\r
+uint32_t P;\r
+int32_t t;\r
+\r
+\r
+\r
+\r
+int main(void){\r
+ pack.A=0;\r
+ pack.B=0;\r
+ pack.C=0;\r
+ pack.D=0;\r
+ pack.CSA1=0x08;\r
+ pack.CSA2=0x8C;\r
+ pack.CSB1=0x08;\r
+ pack.CSB2=0x8C;\r
+ pack.CSC1=0x08;\r
+ pack.CSC2=0x8C;\r
+ pack.CSD1=0x08;\r
+ pack.CSD2=0x8C;\r
+ pack.HA=0xFF;\r
+ pack.LA=0x00;\r
+ pack.HB=0xFF;\r
+ pack.LB=0x00;\r
+ pack.HC=0xFF;\r
+ pack.LC=0x00;\r
+ pack.HD=0xFF;\r
+ pack.LD=0x00;\r
+ pack.VCCP=0;\r
+ PORTB=0xFF-(1<<PORTB0); //Schalter kann gegen Masse sein und zieht dann immer Strom\r
+ DDRB|=(1<<PORTB0); //Als Ausgang und 0\r
+ PORTA=0xFF; //All Pull up;\r
+ PRR|=(1<<PRADC); // adc for save Power\r
+\r
+ ACSR|=(1<<ACD); //Disable Comparator\r
+ OWINIT();\r
+\r
+ MCUCR &=~(1<<PUD); //All Pins Pullup...\r
+ MCUCR |=(1<<BODS);\r
+ WDTCSR |= ((1<<WDCE) ); // Enable the WD Change Bit//| (1<<WDE)\r
+ WDTCSR |= (1<<WDIE) | // Enable WDT Interrupt\r
+ (1<<WDP3) | (1<<WDP0); // Set Timeout to ~8 seconds\r
+ \r
+ gcontrol=1;\r
+ \r
+ USI_TWI_Master_Initialise();\r
+\r
+ initSHT3x(0);\r
+ _delay_ms(100);\r
+ getSHT3xHumTemp(0,&temperatureC,&humidityRH);\r
+\r
+ sei();\r
+ \r
+ //DDRB|=(1<<PINB1);\r
+\r
+ while(1) {\r
+ \r
+ if (wdcounter>3) { \r
+ \r
+ getSHT3xHumTemp(0,&temperatureC,&humidityRH);\r
+\r
+ wdcounter=0;\r
+ }\r
+ \r
+\r
+ \r
+ \r
+\r
+\r
+ if (gcontrol) {\r
+ //PORTB|=(1<<PINB1);\r
+ uint8_t bb=1;\r
+ uint8_t bb1=1;\r
+ for(uint8_t i=0;i<4;i++){\r
+ if (pack.convc1&bb1) {\r
+ if (pack.convc2&(bb)) {pack.bytes[i*2]=0;pack.bytes[i*2+1]=0;}\r
+ bb=bb<<1;\r
+ if (pack.convc2&(bb)) {pack.bytes[i*2]=0xFF;pack.bytes[i*2+1]=0xFF;}\r
+ bb=bb<<1;\r
+ } else bb=bb<<2;\r
+ bb1=bb1<<1; \r
+ }\r
+ //CHanel A\r
+ if (pack.convc1&1) {\r
+ /*if (pack.CSA2&0x01) ADMUX=0; else ADMUX=0x80;\r
+ _delay_us(100);\r
+ ADCSRA|=(1<<ADSC);\r
+ while ((ADCSRA&(1<<ADSC)));\r
+ cli();pack.A=ADC;sei();*/\r
+ uint16_t ct=(temperatureC*100.0)+32767;\r
+ cli();pack.A=ct;sei();\r
+ wdcounter=10;\r
+ alarmflag=0;\r
+ \r
+ if (pack.CSA2&0x08) //AEH\r
+ if (pack.bytes[1]>pack.HA) {alarmflag=1;pack.CSA2|=0x20;}\r
+ if (pack.CSA2&0x04) //AEL\r
+ if (pack.bytes[1]<pack.LA) {alarmflag=1;pack.CSA2|=0x10;}\r
+ }\r
+\r
+ if (pack.convc1&2) {\r
+ /*if (pack.CSB2&0x01) ADMUX=1; else ADMUX=0x81;\r
+ _delay_us(100);\r
+ ADCSRA|=(1<<ADSC);\r
+ while ((ADCSRA&(1<<ADSC)));\r
+ cli();pack.B=ADC;sei();*/\r
+ wdcounter=10;\r
+ cli();pack.B=humidityRH*100;sei();\r
+ if (pack.CSB2&0x08) //AEH\r
+ if (pack.bytes[1]>pack.HB) {alarmflag=1;pack.CSB2|=0x20;}\r
+ if (pack.CSB2&0x04) //AEL\r
+ if (pack.bytes[1]<pack.LB) {alarmflag=1;pack.CSB2|=0x10;}\r
+ }\r
+\r
+ if (pack.convc1&4) {\r
+ /*if (pack.CSC2&0x01) ADMUX=2; else ADMUX=0x82;\r
+ _delay_us(100);\r
+ ADCSRA|=(1<<ADSC);\r
+ while ((ADCSRA&(1<<ADSC)));\r
+ cli();pack.C=ADC;sei();*/\r
+ wdcounter=10;\r
+ cli();pack.C=0;sei();\r
+ if (pack.CSC2&0x08) //AEH\r
+ if (pack.bytes[1]>pack.HC) {alarmflag=1;pack.CSC2|=0x20;}\r
+ if (pack.CSC2&0x04) //AEL\r
+ if (pack.bytes[1]<pack.LC) {alarmflag=1;pack.CSC2|=0x10;}\r
+ } \r
+ if (pack.convc1&8) {\r
+ /*if (pack.CSD2&0x01) ADMUX=3; else ADMUX=0x83;\r
+ _delay_us(100);\r
+ ADCSRA|=(1<<ADSC);\r
+ while ((ADCSRA&(1<<ADSC)));\r
+ cli();pack.D=ADC;sei();*/\r
+ wdcounter=10;\r
+ cli();pack.D=P/100.0*32.0;sei();\r
+ if (pack.CSD2&0x08) //AEH\r
+ if (pack.bytes[1]>pack.HD) {alarmflag=1;pack.CSD2|=0x20;}\r
+ if (pack.CSD2&0x04) //AEL\r
+ if (pack.bytes[1]<pack.LD) {alarmflag=1;pack.CSD2|=0x10;}\r
+ }\r
+ \r
+ EXTERN_SLEEP();\r
+ //PORTB&=~(1<<PINB1);\r
+ }\r
+\r
+ /*uint8_t bb=1;\r
+ for(uint8_t i=0;i<4;i++) {\r
+ if (pack.bytes[8+i*2]&0x80) { //Chanel as output\r
+ if (pack.bytes[8+i*2]&0x40) {\r
+ DDRA|=bb;\r
+ } else {\r
+ DDRA&=~bb;\r
+ }\r
+ } else {\r
+ DDRA&=~bb;\r
+ }\r
+ bb=bb*2;\r
+ }*/\r
+ \r
+#if defined(__AVR_ATtiny25__)||defined(__AVR_ATtiny45__) || defined(__AVR_ATtiny85__)\r
+ if (((TIMSK & (1<<TOIE0))==0)&& (mode==0))\r
+#endif \r
+#if defined(__AVR_ATtiny24__)||defined(__AVR_ATtiny44__) || defined(__AVR_ATtiny84__) ||defined(__AVR_ATtiny24A__)||defined(__AVR_ATtiny44A__) || defined(__AVR_ATtiny84A__)\r
+ if (((TIMSK0 & (1<<TOIE0))==0)&& (mode==0))\r
+#endif\r
+ {\r
+\r
+ MCUCR|=(1<<SE)|(1<<SM1);\r
+ MCUCR&=~(1<<ISC01);\r
+ } else {\r
+ MCUCR|=(1<<SE);\r
+ MCUCR&=~(1<<SM1);\r
+ }\r
+ asm("SLEEP");\r
+ }\r
+\r
+\r
+}
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>\r
+<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="14.0">\r
+ <PropertyGroup>\r
+ <SchemaVersion>2.0</SchemaVersion>\r
+ <ProjectVersion>7.0</ProjectVersion>\r
+ <ToolchainName>com.Atmel.AVRGCC8.C</ToolchainName>\r
+ <ProjectGuid>dce6c7e3-ee26-4d79-826b-08594b9ad897</ProjectGuid>\r
+ <avrdevice>ATtiny84A</avrdevice>\r
+ <avrdeviceseries>none</avrdeviceseries>\r
+ <OutputType>Executable</OutputType>\r
+ <Language>C</Language>\r
+ <OutputFileName>$(MSBuildProjectName)</OutputFileName>\r
+ <OutputFileExtension>.elf</OutputFileExtension>\r
+ <OutputDirectory>$(MSBuildProjectDirectory)\$(Configuration)</OutputDirectory>\r
+ <AssemblyName>DS2450</AssemblyName>\r
+ <Name>DS2450_SHT3X</Name>\r
+ <RootNamespace>DS2450</RootNamespace>\r
+ <ToolchainFlavour>Native</ToolchainFlavour>\r
+ <KeepTimersRunning>true</KeepTimersRunning>\r
+ <OverrideVtor>false</OverrideVtor>\r
+ <CacheFlash>true</CacheFlash>\r
+ <ProgFlashFromRam>true</ProgFlashFromRam>\r
+ <RamSnippetAddress>0x20000000</RamSnippetAddress>\r
+ <UncachedRange />\r
+ <preserveEEPROM>true</preserveEEPROM>\r
+ <OverrideVtorValue>exception_table</OverrideVtorValue>\r
+ <BootSegment>2</BootSegment>\r
+ <eraseonlaunchrule>1</eraseonlaunchrule>\r
+ <ExternalProgrammingToolCommand />\r
+ <AsfFrameworkConfig>\r
+ <framework-data>\r
+ <options />\r
+ <configurations />\r
+ <files />\r
+ <documentation help="" />\r
+ <offline-documentation help="" />\r
+ <dependencies>\r
+ <content-extension eid="atmel.asf" uuidref="Atmel.ASF" version="3.28.1" />\r
+ </dependencies>\r
+ </framework-data>\r
+ </AsfFrameworkConfig>\r
+ <avrtool>com.atmel.avrdbg.tool.atmelice</avrtool>\r
+ <avrtoolserialnumber>J41800000779</avrtoolserialnumber>\r
+ <avrdeviceexpectedsignature>0x1E930C</avrdeviceexpectedsignature>\r
+ <com_atmel_avrdbg_tool_atmelice>\r
+ <ToolOptions>\r
+ <InterfaceProperties>\r
+ </InterfaceProperties>\r
+ <InterfaceName>debugWIRE</InterfaceName>\r
+ </ToolOptions>\r
+ <ToolType>com.atmel.avrdbg.tool.atmelice</ToolType>\r
+ <ToolNumber>J41800000779</ToolNumber>\r
+ <ToolName>Atmel-ICE</ToolName>\r
+ </com_atmel_avrdbg_tool_atmelice>\r
+ <avrtoolinterface>debugWIRE</avrtoolinterface>\r
+ </PropertyGroup>\r
+ <PropertyGroup Condition=" '$(Configuration)' == 'Release' ">\r
+ <ToolchainSettings>\r
+ <AvrGcc>\r
+ <avrgcc.common.Device>-mmcu=attiny84a -B "%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.68\gcc\dev\attiny84a"</avrgcc.common.Device>\r
+ <avrgcc.common.outputfiles.hex>True</avrgcc.common.outputfiles.hex>\r
+ <avrgcc.common.outputfiles.lss>True</avrgcc.common.outputfiles.lss>\r
+ <avrgcc.common.outputfiles.eep>True</avrgcc.common.outputfiles.eep>\r
+ <avrgcc.common.outputfiles.srec>True</avrgcc.common.outputfiles.srec>\r
+ <avrgcc.common.outputfiles.usersignatures>False</avrgcc.common.outputfiles.usersignatures>\r
+ <avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>True</avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>\r
+ <avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>True</avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>\r
+ <avrgcc.compiler.symbols.DefSymbols>\r
+ <ListValues>\r
+ <Value>NDEBUG</Value>\r
+ </ListValues>\r
+ </avrgcc.compiler.symbols.DefSymbols>\r
+ <avrgcc.compiler.directories.IncludePaths>\r
+ <ListValues>\r
+ <Value>%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.68\include</Value>\r
+ </ListValues>\r
+ </avrgcc.compiler.directories.IncludePaths>\r
+ <avrgcc.compiler.optimization.level>Optimize for size (-Os)</avrgcc.compiler.optimization.level>\r
+ <avrgcc.compiler.optimization.PackStructureMembers>True</avrgcc.compiler.optimization.PackStructureMembers>\r
+ <avrgcc.compiler.optimization.AllocateBytesNeededForEnum>True</avrgcc.compiler.optimization.AllocateBytesNeededForEnum>\r
+ <avrgcc.compiler.warnings.AllWarnings>True</avrgcc.compiler.warnings.AllWarnings>\r
+ <avrgcc.compiler.miscellaneous.OtherFlags>-std=gnu99 -D__4MHZ__</avrgcc.compiler.miscellaneous.OtherFlags>\r
+ <avrgcc.linker.libraries.Libraries>\r
+ <ListValues>\r
+ <Value>libm</Value>\r
+ </ListValues>\r
+ </avrgcc.linker.libraries.Libraries>\r
+ <avrgcc.assembler.general.AssemblerFlags>-D__4MHZ__</avrgcc.assembler.general.AssemblerFlags>\r
+</AvrGcc>\r
+ </ToolchainSettings>\r
+ </PropertyGroup>\r
+ <PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">\r
+ <ToolchainSettings>\r
+ <AvrGcc>\r
+ <avrgcc.common.Device>-mmcu=attiny84a -B "%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.68\gcc\dev\attiny84a"</avrgcc.common.Device>\r
+ <avrgcc.common.outputfiles.hex>True</avrgcc.common.outputfiles.hex>\r
+ <avrgcc.common.outputfiles.lss>True</avrgcc.common.outputfiles.lss>\r
+ <avrgcc.common.outputfiles.eep>True</avrgcc.common.outputfiles.eep>\r
+ <avrgcc.common.outputfiles.srec>True</avrgcc.common.outputfiles.srec>\r
+ <avrgcc.common.outputfiles.usersignatures>False</avrgcc.common.outputfiles.usersignatures>\r
+ <avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>True</avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>\r
+ <avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>True</avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>\r
+ <avrgcc.compiler.symbols.DefSymbols>\r
+ <ListValues>\r
+ <Value>DEBUG</Value>\r
+ </ListValues>\r
+ </avrgcc.compiler.symbols.DefSymbols>\r
+ <avrgcc.compiler.directories.IncludePaths>\r
+ <ListValues>\r
+ <Value>%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.68\include</Value>\r
+ </ListValues>\r
+ </avrgcc.compiler.directories.IncludePaths>\r
+ <avrgcc.compiler.optimization.level>Optimize (-O1)</avrgcc.compiler.optimization.level>\r
+ <avrgcc.compiler.optimization.PackStructureMembers>True</avrgcc.compiler.optimization.PackStructureMembers>\r
+ <avrgcc.compiler.optimization.AllocateBytesNeededForEnum>True</avrgcc.compiler.optimization.AllocateBytesNeededForEnum>\r
+ <avrgcc.compiler.optimization.DebugLevel>Default (-g2)</avrgcc.compiler.optimization.DebugLevel>\r
+ <avrgcc.compiler.warnings.AllWarnings>True</avrgcc.compiler.warnings.AllWarnings>\r
+ <avrgcc.linker.libraries.Libraries>\r
+ <ListValues>\r
+ <Value>libm</Value>\r
+ </ListValues>\r
+ </avrgcc.linker.libraries.Libraries>\r
+ <avrgcc.assembler.debugging.DebugLevel>Default (-Wa,-g)</avrgcc.assembler.debugging.DebugLevel>\r
+ </AvrGcc>\r
+ </ToolchainSettings>\r
+ </PropertyGroup>\r
+ <ItemGroup>\r
+ <Compile Include="..\common\calibr.c">\r
+ <SubType>compile</SubType>\r
+ <Link>calibr.c</Link>\r
+ </Compile>\r
+ <Compile Include="..\common\I2C\SHT3x.c">\r
+ <SubType>compile</SubType>\r
+ <Link>SHT3x.c</Link>\r
+ </Compile>\r
+ <Compile Include="..\common\I2C\USI_TWI_Master.c">\r
+ <SubType>compile</SubType>\r
+ <Link>USI_TWI_Master.c</Link>\r
+ </Compile>\r
+ <Compile Include="DS2450_SHT3X.c">\r
+ <SubType>compile</SubType>\r
+ </Compile>\r
+ <Compile Include="OWDS2450.S">\r
+ <SubType>compile</SubType>\r
+ </Compile>\r
+ </ItemGroup>\r
+ <Import Project="$(AVRSTUDIO_EXE_PATH)\\Vs\\Compiler.targets" />\r
+</Project>
\ No newline at end of file
--- /dev/null
+\r
+// Copyright (c) 2015, Tobias Mueller tm(at)tm3d.de\r
+// All rights reserved. \r
+// \r
+// Redistribution and use in source and binary forms, with or without \r
+// modification, are permitted provided that the following conditions are \r
+// met: \r
+// \r
+// * Redistributions of source code must retain the above copyright \r
+// notice, this list of conditions and the following disclaimer. \r
+// * Redistributions in binary form must reproduce the above copyright \r
+// notice, this list of conditions and the following disclaimer in the \r
+// documentation and/or other materials provided with the \r
+// distribution. \r
+// * All advertising materials mentioning features or use of this \r
+// software must display the following acknowledgement: This product \r
+// includes software developed by tm3d.de and its contributors. \r
+// * Neither the name of tm3d.de nor the names of its contributors may \r
+// be used to endorse or promote products derived from this software \r
+// without specific prior written permission. \r
+// \r
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \r
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT \r
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR \r
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT \r
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, \r
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT \r
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, \r
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY \r
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT \r
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE \r
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \r
+\r
+#define _CHANGEABLE_ID_\r
+#define _ZERO_POLLING_\r
+\r
+#include "../common/OWConfig.s"\r
+#include "../common/OWCRC16.s"\r
+\r
+.extern pack,8\r
+.comm addr,1 ;zweites Adressbyte ist unnoetig (Warum auch immer fuer 32 Byte 16 Bit Adressen verwendet werden....)\r
+.comm crcsave,1 ; zwischenspeicherspeicher fuer crc nur zweites byte....\r
+//.extern am2302_temp,2\r
+\r
+\r
+\r
+.macro CHIP_INIT \r
+.endm\r
+\r
+.macro COMMAND_TABLE\r
+ rjmp h_readmemoryaddr\r
+ rjmp h_readmemory\r
+ rjmp h_readmemorycrc1\r
+ rjmp h_readmemorycrc2\r
+ rjmp h_writememoryaddr\r
+ rjmp h_writememory\r
+ rjmp h_writememorycrc1\r
+ rjmp h_writememorycrc2\r
+ rjmp h_writememoryreadback\r
+ rjmp h_convert\r
+ rjmp h_convertcrc1\r
+ rjmp h_convertcrc2\r
+ rjmp h_convert_conv\r
+.endm\r
+\r
+#include "../common/OWRomFunctions.s"\r
+#include "../common/OWTimerInterrupt.s"\r
+\r
+\r
+\r
+; Ab hier Geraeteabhaenging\r
+#define OW_READ_MEMORY_ADDR OW_FIRST_COMMAND+0\r
+#define OW_READ_MEMORY OW_FIRST_COMMAND+1\r
+#define OW_READ_MEMORY_CRC1 OW_FIRST_COMMAND+2\r
+#define OW_READ_MEMORY_CRC2 OW_FIRST_COMMAND+3\r
+#define OW_WRITE_MEMORY_ADDR OW_FIRST_COMMAND+4\r
+#define OW_WRITE_MEMORY OW_FIRST_COMMAND+5\r
+#define OW_WRITE_MEMORY_CRC1 OW_FIRST_COMMAND+6\r
+#define OW_WRITE_MEMORY_CRC2 OW_FIRST_COMMAND+7\r
+#define OW_WRITE_MEMORY_READBACK OW_FIRST_COMMAND+8\r
+#define OW_CONVERT OW_FIRST_COMMAND+9\r
+#define OW_CONVERT_CRC1 OW_FIRST_COMMAND+10\r
+#define OW_CONVERT_CRC2 OW_FIRST_COMMAND+11\r
+#define OW_CONVERT_CONV OW_FIRST_COMMAND+12\r
+\r
+;---------------------------------------------------\r
+; READ COMMAND and start operation\r
+;---------------------------------------------------\r
+\r
+\r
+h_readcommand:\r
+ clr r_bytep\r
+#ifndef _DIS_FLASH_\r
+ FLASH_COMMANDS ; muss zu erst sein....\r
+#endif\r
+ cset 0xAA,OW_READ_MEMORY_ADDR\r
+ cset 0x55,OW_WRITE_MEMORY_ADDR\r
+ cset 0x3C,OW_CONVERT\r
+ FW_CONFIG_INFO\r
+#ifdef _CHANGEABLE_ID_\r
+ CHANGE_ID_COMMANDS\r
+#endif\r
+ ldi r_mode,OW_SLEEP\r
+ rjmp handle_end\r
+\r
+\r
+h_readmemoryaddr:\r
+ cpi r_bytep,0 ;erstes Adressbyte ?\r
+ brne h_readmemory_addr_byte1 ;nein dann weiter\r
+ andi r_rwbyte,0x1F ; nur Adressen zwischen 0 und 0x1F zulassen\r
+ sts addr,r_rwbyte ;speichern des ersten bytes\r
+ rjmp handle_end_inc\r
+h_readmemory_addr_byte1: ;zweiters Addressbyte wird nicht gespeichert!\r
+ ldi r_mode,OW_READ_MEMORY ;weiter zu read Memory\r
+ ;;ldi r_bcount,1 ;ist unten\r
+ ldi r_sendflag,1 ;jetzt sendet der Slave zum Master\r
+ clr r_bytep\r
+ rjmp h_readmemory2\r
+h_readmemory:\r
+ lds r_bytep,addr\r
+ inc r_bytep\r
+ sts addr,r_bytep\r
+ andi r_bytep,0x07\r
+ breq h_readmemory_init_crc\r
+h_readmemory2:\r
+ lds r_bytep,addr\r
+ ;andi r_bytep,0x1F ist oben\r
+ configZ pack,r_bytep\r
+ ld r_rwbyte,Z\r
+ ;ldi r_bcount,1\r
+ rjmp handle_end ;sendet das Byte und geht zu h_readmemory\r
+h_readmemory_init_crc:; init erstes CRC byte\r
+ lds r_rwbyte,crc\r
+ com r_rwbyte\r
+ lds r_temp,crc+1\r
+ com r_temp\r
+ sts crcsave,r_temp\r
+ ldi r_mode,OW_READ_MEMORY_CRC1\r
+ ;ldi r_bcount,1\r
+ rjmp handle_end\r
+h_readmemory_end:\r
+ ldi r_mode,OW_SLEEP\r
+ clr r_sendflag\r
+ rjmp handle_end\r
+h_readmemorycrc1:;init zweites CRC Byte\r
+ lds r_rwbyte,crcsave\r
+ ;ldi r_bcount,1\r
+ ldi r_mode,OW_READ_MEMORY_CRC2\r
+ rjmp handle_end\r
+h_readmemorycrc2:;weiteres senden..... nach zweitem Byte\r
+ lds r_temp,addr\r
+ andi r_temp,0xE0\r
+ brne h_readmemory_end; ende des speichers\r
+ ldi r_mode,OW_READ_MEMORY\r
+ CRCInit1 ;Start with new CRC\r
+ rjmp h_readmemory2\r
+\r
+h_writememoryaddr:\r
+ cpi r_bytep,0 ;erstes Adressbyte ?\r
+ brne h_writememory_addr_byte1 ;nein dann weiter\r
+ andi r_rwbyte,0x1F ; nur Adressen zwischen 0 und 0x1F zulassen\r
+ sts addr,r_rwbyte ;speichern des ersten bytes\r
+ inc r_bytep\r
+ ;ldi r_bcount,1\r
+ rjmp handle_end\r
+h_writememory_addr_byte1: ;zweiters Addressbyte wird nicht gespeichert!\r
+ ldi r_mode,OW_WRITE_MEMORY ;weiter zu read Memory\r
+ ;ldi r_bcount,1 ;; _________________________________________________in handle_end integrieren.....\r
+ lds r_bytep,addr\r
+ rjmp handle_end ;read Memory Byte\r
+h_writememory:\r
+ lds r_bytep,addr\r
+ configZ pack,r_bytep\r
+ st Z,r_rwbyte\r
+ ;ldi r_bcount,1\r
+ ldi r_mode,OW_WRITE_MEMORY_CRC1\r
+ ldi r_sendflag,1 ;jetzt sendet der Slave zum Master\r
+ lds r_rwbyte,crc\r
+ com r_rwbyte\r
+ lds r_temp,crc+1\r
+ com r_temp\r
+ sts crcsave,r_temp\r
+ rjmp handle_end\r
+h_writememorycrc1:\r
+ lds r_rwbyte,crcsave\r
+ ;ldi r_bcount,1\r
+ ldi r_mode,OW_WRITE_MEMORY_CRC2\r
+ rjmp handle_end\r
+h_writememorycrc2:\r
+ lds r_temp,addr\r
+ configZ pack,r_temp\r
+ ld r_rwbyte,Z\r
+ ;ldi r_bcount,1\r
+ ldi r_mode,OW_WRITE_MEMORY_READBACK\r
+ rjmp handle_end\r
+h_writememoryreadback:\r
+ ldi r_temp,0x00\r
+ sts crc+1,r_temp\r
+ lds r_temp,addr\r
+ inc r_temp\r
+ sts addr,r_temp\r
+ sts crc,r_temp\r
+ ldi r_sendflag,0\r
+ ;ldi r_bcount,1\r
+ ldi r_mode,OW_WRITE_MEMORY\r
+ rjmp handle_end\r
+\r
+h_convert:\r
+ cpi r_bytep,0 ;erstes Adressbyte ?\r
+ brne h_convert_byte1 ;nein dann weiter\r
+ inc r_bytep\r
+ sts pack+0x20,r_rwbyte\r
+ ;ldi r_bcount,1\r
+ rjmp handle_end\r
+h_convert_byte1: ;zweies byte glesen go crc#\r
+ sts pack+0x21,r_rwbyte\r
+ lds r_rwbyte,crc\r
+ com r_rwbyte\r
+ lds r_temp,crc+1\r
+ com r_temp\r
+ sts crcsave,r_temp\r
+ ldi r_mode,OW_CONVERT_CRC1\r
+ ;ldi r_bcount,1\r
+ ldi r_sendflag,1\r
+ rjmp handle_end \r
+h_convertcrc1:\r
+ lds r_rwbyte,crcsave\r
+ ;ldi r_bcount,1\r
+ ldi r_mode,OW_CONVERT_CRC2\r
+ rjmp handle_end\r
+h_convertcrc2:\r
+ ldi r_temp,1\r
+ sts gcontrol,r_temp\r
+ ;ldi r_bcount,1\r
+ ldi r_mode,OW_CONVERT_CONV\r
+ ;clr r_sendflag\r
+ ldi r_sendflag,3 ;set bit 0 and 1 for no zero polling\r
+h_convert_conv:\r
+ ldi r_bcount,0\r
+ ldi r_rwbyte,0\r
+ rjmp handle_end_no_bcount \r
+\r
+\r
+\r
+\r
+#include "../common/OWPinInterrupt.s"\r
+.end
\ No newline at end of file
--- /dev/null
+\r
+Microsoft Visual Studio Solution File, Format Version 12.00\r
+# Atmel Studio Solution File, Format Version 11.00\r
+VisualStudioVersion = 14.0.23107.0\r
+MinimumVisualStudioVersion = 10.0.40219.1\r
+Project("{54F91283-7BC4-4236-8FF9-10F437C3AD48}") = "DS2450_VOC_SHT", "DS2450_VOC_SHT.cproj", "{DCE6C7E3-EE26-4D79-826B-08594B9AD897}"\r
+EndProject\r
+Global\r
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution\r
+ Debug|AVR = Debug|AVR\r
+ Release|AVR = Release|AVR\r
+ EndGlobalSection\r
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution\r
+ {DCE6C7E3-EE26-4D79-826B-08594B9AD897}.Debug|AVR.ActiveCfg = Debug|AVR\r
+ {DCE6C7E3-EE26-4D79-826B-08594B9AD897}.Debug|AVR.Build.0 = Debug|AVR\r
+ {DCE6C7E3-EE26-4D79-826B-08594B9AD897}.Release|AVR.ActiveCfg = Release|AVR\r
+ {DCE6C7E3-EE26-4D79-826B-08594B9AD897}.Release|AVR.Build.0 = Release|AVR\r
+ EndGlobalSection\r
+ GlobalSection(SolutionProperties) = preSolution\r
+ HideSolutionNode = FALSE\r
+ EndGlobalSection\r
+EndGlobal\r
--- /dev/null
+\r
+// Copyright (c) 2017, Tobias Mueller tm(at)tm3d.de\r
+// All rights reserved.\r
+//\r
+// Redistribution and use in source and binary forms, with or without\r
+// modification, are permitted provided that the following conditions are\r
+// met:\r
+//\r
+// * Redistributions of source code must retain the above copyright\r
+// notice, this list of conditions and the following disclaimer.\r
+// * Redistributions in binary form must reproduce the above copyright\r
+// notice, this list of conditions and the following disclaimer in the\r
+// documentation and/or other materials provided with the\r
+// distribution.\r
+// * All advertising materials mentioning features or use of this\r
+// software must display the following acknowledgement: This product\r
+// includes software developed by tm3d.de and its contributors.\r
+// * Neither the name of tm3d.de nor the names of its contributors may\r
+// be used to endorse or promote products derived from this software\r
+// without specific prior written permission.\r
+//\r
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\r
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\r
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\r
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\r
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\r
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\r
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\r
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\r
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+\r
+// Copyright (c) 2017, Tobias Mueller tm(at)tm3d.de\r
+// All rights reserved.\r
+//\r
+// Redistribution and use in source and binary forms, with or without\r
+// modification, are permitted provided that the following conditions are\r
+// met:\r
+//\r
+// * Redistributions of source code must retain the above copyright\r
+// notice, this list of conditions and the following disclaimer.\r
+// * Redistributions in binary form must reproduce the above copyright\r
+// notice, this list of conditions and the following disclaimer in the\r
+// documentation and/or other materials provided with the\r
+// distribution.\r
+// * All advertising materials mentioning features or use of this\r
+// software must display the following acknowledgement: This product\r
+// includes software developed by tm3d.de and its contributors.\r
+// * Neither the name of tm3d.de nor the names of its contributors may\r
+// be used to endorse or promote products derived from this software\r
+// without specific prior written permission.\r
+//\r
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\r
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\r
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\r
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\r
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\r
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\r
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\r
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\r
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+\r
+//!!!!!Max Program size 7551 Byte\r
+\r
+\r
+\r
+\r
+#define F_CPU 8000000UL\r
+#include <avr/io.h>\r
+#include <avr/interrupt.h>\r
+#include <util/delay.h>\r
+#include <avr/wdt.h>\r
+#include <avr/sleep.h>\r
+#include <avr/pgmspace.h>\r
+#include "../common/I2C/USI_TWI_Master.h"\r
+#include "../common/I2C/MAX1164x.h"\r
+#include "../common/I2C/SHT2xV2.h"\r
+#include "../common/calibr.h"\r
+\r
+extern void OWINIT();\r
+extern void EXTERN_SLEEP();\r
+\r
+uint8_t owid[8]={0x20, 0xA2, 0xD9, 0x84, 0x00, 0x16, 0x02, 0x5D};/**/\r
+uint8_t config_info[26]={0x01,14,0x04,0x08, 8,8,11,0x08,0x02,7,7,17,17,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};\r
+\r
+#if (owid>128) \r
+#error "Variable not correct"\r
+#endif\r
+\r
+extern uint8_t mode;\r
+extern uint8_t gcontrol;\r
+extern uint8_t reset_indicator;\r
+extern uint8_t alarmflag;\r
+volatile uint8_t wdcounter=1;\r
+\r
+#if defined(__AVR_ATtiny24__)||defined(__AVR_ATtiny44__) || defined(__AVR_ATtiny84__) || defined(__AVR_ATtiny24A__)||defined(__AVR_ATtiny44A__) || defined(__AVR_ATtiny84A__)\r
+ISR(WATCHDOG_vect) {\r
+#else\r
+ISR(WDT_vect) {\r
+#endif\r
+ wdcounter++;\r
+ if (reset_indicator==1) reset_indicator++;\r
+ else if (reset_indicator==2) mode=0;\r
+}\r
+\r
+\r
+typedef union {\r
+ volatile uint8_t bytes[0x20];\r
+ struct {\r
+ //Page0\r
+ uint16_t A; //0\r
+ uint16_t B; //2\r
+ uint16_t C; //4\r
+ uint16_t D; //6\r
+ //Page1\r
+ uint8_t CSA1;\r
+ uint8_t CSA2;\r
+ uint8_t CSB1;\r
+ uint8_t CSB2;\r
+ uint8_t CSC1;\r
+ uint8_t CSC2;\r
+ uint8_t CSD1;\r
+ uint8_t CSD2;\r
+ //Page2\r
+ uint8_t LA;\r
+ uint8_t HA;\r
+ uint8_t LB;\r
+ uint8_t HB;\r
+ uint8_t LC;\r
+ uint8_t HC;\r
+ uint8_t LD;\r
+ uint8_t HD;\r
+ //Page3\r
+ uint8_t FC1;\r
+ uint8_t FC2;\r
+ uint8_t FC3;\r
+ uint8_t FC4;\r
+ uint8_t VCCP;\r
+ uint8_t FC5;\r
+ uint8_t FC6;\r
+ uint8_t FC7;\r
+ uint8_t convc1;\r
+ uint8_t convc2;\r
+ \r
+ \r
+ };\r
+} pack_t;\r
+volatile pack_t pack;\r
+\r
+\r
+\r
+\r
+\r
+volatile int16_t am2302_temp;\r
+volatile uint16_t am2302_hum;\r
+\r
+\r
+uint8_t userRegister[1];\r
+int16_t sRH,sT;\r
+double temperatureC,humidityRH,hhum;\r
+double l;\r
+double RH;\r
+double TC;\r
+\r
+\r
+uint8_t max_adr=0;\r
+#define CH0_M MAX1164x_C_SCAN0|MAX1164x_C_SGL\r
+#define CH1_M MAX1164x_C_SCAN0|MAX1164x_C_SGL|MAX1164x_C_CS0\r
+#define CH0_CH1 MAX1164x_C_SCAN0\r
+//|MAX1164x_C_CS0\r
+\r
+uint16_t weekmaxarr[8];\r
+\r
+//Kompensieren der Abhänigkeit von RS/RO von Temperatur und Luftfeuchte\r
+inline double interp(double t, double h) {\r
+ double h2;\r
+ double t2;\r
+ h2=h*h;\r
+ t2=t*t;\r
+ return 4.76111e-9*h2*t2-3.96956e-7*h2*t+0.0000408889*h2-1.07132e-6*h*t2+0.000115968*h*t-0.0101333*h+0.000163806*t2-0.0241179*t+1.80591;\r
+}\r
+\r
+double R0;\r
+uint16_t mr;\r
+uint8_t startup=10;\r
+double ip;\r
+\r
+\r
+int testSW(void) {\r
+ uint8_t r;\r
+ DDRB&=~(1<<PORTB0); //Eingang\r
+ __asm__ __volatile__ ("nop");\r
+ PORTB|=(1<<PORTB0); //Pullup\r
+ __asm__ __volatile__ ("nop");\r
+ __asm__ __volatile__ ("nop");\r
+ __asm__ __volatile__ ("nop");\r
+ __asm__ __volatile__ ("nop");\r
+ __asm__ __volatile__ ("nop");\r
+ r=PINB&(1<<PORTB0);\r
+ __asm__ __volatile__ ("nop");\r
+ PORTB&=~(1<<PORTB0);\r
+ __asm__ __volatile__ ("nop");\r
+ DDRB|=(1<<PORTB0); //Eingang\r
+ return (r==0); //Offen mal HIH4030\r
+ \r
+ \r
+}\r
+\r
+#define EEPROM_R0 0\r
+#define EEPROM_R0d 2\r
+#define EEPROM_R0w 4\r
+#define EEPROM_dol 6\r
+\r
+\r
+uint16_t readEEPROM(uint8_t addr,uint16_t def) {\r
+ uint16_t hr;\r
+ while(EECR & (1<<EEPE));\r
+ EEARL=addr+1;\r
+ EECR |= (1<<EERE);\r
+ hr=EEDR;\r
+ if (hr!=0xFF) {\r
+ hr=hr<<8;\r
+ while(EECR & (1<<EEPE));\r
+ EEARL=addr;\r
+ EECR |= (1<<EERE);\r
+ hr|=EEDR;\r
+ return hr;\r
+ }\r
+ return def;\r
+}\r
+\r
+void writeEEPROM(uint8_t addr,uint16_t val) {\r
+ while(EECR & (1<<EEPE));\r
+ EECR = (0<<EEPM1)|(0<<EEPM0);\r
+ EEARL = addr;\r
+ EEDR = val&0xFF;\r
+ EECR |= (1<<EEMPE);\r
+ EECR |= (1<<EEPE);\r
+ while(EECR & (1<<EEPE));\r
+ EECR = (0<<EEPM1)|(0<<EEPM0);\r
+ EEARL = addr+1;\r
+ EEDR = val>>8;\r
+ EECR |= (1<<EEMPE);\r
+ EECR |= (1<<EEPE);\r
+}\r
+\r
+uint16_t pR0;\r
+uint16_t pVS;\r
+uint8_t pcmode;\r
+int16_t pip;\r
+uint16_t ptol_s8;\r
+uint16_t ptol_d;\r
+uint16_t pr_day_max;\r
+uint16_t pr_week_max;\r
+uint16_t RA;\r
+\r
+int main(void){\r
+ pack.A=0;\r
+ pack.B=0;\r
+ pack.C=0;\r
+ pack.D=0;\r
+ pack.CSA1=0x08;\r
+ pack.CSA2=0x8C;\r
+ pack.CSB1=0x08;\r
+ pack.CSB2=0x8C;\r
+ pack.CSC1=0x08;\r
+ pack.CSC2=0x8C;\r
+ pack.CSD1=0x08;\r
+ pack.CSD2=0x8C;\r
+ pack.HA=0xFF;\r
+ pack.LA=0x00;\r
+ pack.HB=0xFF;\r
+ pack.LB=0x00;\r
+ pack.HC=0xFF;\r
+ pack.LC=0x00;\r
+ pack.HD=0xFF;\r
+ pack.LD=0x00;\r
+ pack.VCCP=0;\r
+\r
+ PRR|=(1<<PRADC); // adc for save Power\r
+ PORTA=0xFF;\r
+ PORTB=0xFF-(1<<PORTB0); //Schalter kann gegen Masse sein und zieht dann immer Strom\r
+ DDRB|=(1<<PORTB0); //Als Ausgang und 0\r
+ OWINIT();\r
+ DDRB|=(1<<PINB1);//Ausgang und 1\r
+ DDRA|=(1<<PINA0);\r
+ \r
+ WDTCSR |= ((1<<WDCE) ); // Enable the WD Change Bit//| (1<<WDE)\r
+ WDTCSR |= (1<<WDIE) | // Enable WDT Interrupt\r
+ //(1<<WDP0) |(1<<WDP2) | (1<<WDP1); // Set Timeout to ~2 seconds\r
+ (1<<WDP3) | (1<<WDP0); // Set Timeout to ~8 seconds\r
+\r
+ MCUSR=0;\r
+ if (testSW()) {\r
+ writeEEPROM(EEPROM_R0,0xFF);\r
+ writeEEPROM(EEPROM_R0d,0xFF); //Maximum des Tages\r
+ writeEEPROM(EEPROM_R0w,0xFF); //Maximum der Letzten 7 Tage\r
+ writeEEPROM(EEPROM_dol,0xFF); //Anzahl der Betriebstage\r
+\r
+ }\r
+\r
+\r
+ \r
+ OWINIT();\r
+ pcmode=0;\r
+ pR0=readEEPROM(EEPROM_R0,1);\r
+ R0=pR0/100.0;\r
+ \r
+ pr_day_max=readEEPROM(EEPROM_R0d,1);\r
+ pr_week_max=readEEPROM(EEPROM_R0w,1);\r
+ ptol_d=readEEPROM(EEPROM_dol,0);\r
+ ptol_s8=0; //Tag faengt mit Einschalten an\r
+ for(uint8_t i=0;i<7;i++) {\r
+ weekmaxarr[i]=pr_week_max;\r
+ }\r
+\r
+ USI_TWI_Master_Initialise();\r
+ initSHT2x();\r
+ _delay_ms(100);\r
+ MAX1164x_config(MAX1164x_S_SEL2|MAX1164x_S_SEL0,CH0_M);//#define MAX1164x_C_CS0\r
+ _delay_ms(30); //Internal Referenz start\r
+ //2970 -> 1,5V\r
+ gcontrol=1;\r
+ \r
+ sei();\r
+ \r
+ //DDRB|=(1<<PINB1);\r
+\r
+ while(1) {\r
+ if (testSW()) {\r
+ R0=1;\r
+ pR0=0;\r
+ writeEEPROM(EEPROM_R0,0);\r
+ }\r
+\r
+\r
+ if (wdcounter>0) { //8s\r
+ ptol_s8++;\r
+ if (ptol_s8>(10000)) {//10800 ist theortisch der Tag aber meistens zu lang\r
+ ptol_s8=0;\r
+ ptol_d++; //rund 180 Jahre :-)\r
+ pr_week_max=0;\r
+ weekmaxarr[7]=pr_day_max;\r
+ for(uint8_t i=0;i<7;i++) {\r
+ weekmaxarr[i]=weekmaxarr[i+1];\r
+ //maximum of week\r
+ if (weekmaxarr[i]>pr_week_max) pr_week_max=weekmaxarr[i];\r
+ }\r
+ if (ptol_d>7) {\r
+ pR0=pr_week_max;\r
+ } else {\r
+ pR0=pr_day_max;\r
+ }\r
+ //R0=//R0-0.5*(pack2.R0/100-R0);\r
+ R0=R0-(R0-pR0/100.0)*0.5 ;\r
+ pR0=R0*100;\r
+ writeEEPROM(EEPROM_R0,pR0);\r
+ writeEEPROM(EEPROM_R0d,pr_day_max); //Maximum des Tages\r
+ writeEEPROM(EEPROM_R0w,pr_week_max); //Maximum der Letzten 7 Tage\r
+ writeEEPROM(EEPROM_dol,ptol_d); //Anzahl der Betriebstage\r
+ pr_day_max=0;\r
+ }\r
+ if (startup!=0) startup--;\r
+ getSHT2xHumTemp(&temperatureC,&humidityRH);\r
+ ip=interp(temperatureC,humidityRH);\r
+ pip=ip*1000;\r
+ RH=calibr_hum(temperatureC,-0.2,humidityRH);\r
+ TC =temperatureC -0.2;\r
+ mr=0;\r
+ //Kritische Sektion !___Ein Breakpoint in dieser Section kann den TGS8100 zerstoeren!___________________________\r
+ PORTB&=~(1<<PINB1); //Auf 0 Ziehen\r
+ _delay_us(150);\r
+ mr+=MAX1164x_read();\r
+ _delay_us(150);\r
+ mr+=MAX1164x_read();\r
+ PORTB|=(1<<PINB1);\r
+ //ENDE Kritische Sektion !______________________________\r
+ //l=mr/2.0*2.048/4096;\r
+ // l maximal 2 mr max 4096 //mr 2V=8000\r
+ \r
+ if (pcmode) { //cmode=0 V 0..2 V cmode=1 V 1.5..3.5V\r
+ //l+=1.5; //Spannung real\r
+ mr+=6000;\r
+ }\r
+ //if (l>1.8) {\r
+ if (mr>7200) {\r
+ if (pcmode==0) {\r
+ MAX1164x_config(MAX1164x_S_SEL2|MAX1164x_S_SEL0,CH0_CH1);\r
+ pcmode=1;\r
+ }\r
+ }\r
+ //if (l<1.6) {\r
+ if (mr<6400) {\r
+ if (pcmode==1) {\r
+ MAX1164x_config(MAX1164x_S_SEL2|MAX1164x_S_SEL0,CH0_M);\r
+ pcmode=0;\r
+ }\r
+ \r
+ \r
+ }\r
+ pVS=mr*5/2;\r
+ l=mr/4000.0;\r
+ l=( 3/l- 1) *30;\r
+ RA=l*100;\r
+ \r
+ l=l/ip;\r
+ \r
+ if (startup==0){\r
+ if (l>R0) {\r
+ R0=l;\r
+ pR0=R0*100;\r
+ writeEEPROM(EEPROM_R0,pR0);\r
+\r
+ }\r
+ if (l*100>pr_day_max) {\r
+ pr_day_max=l*100;\r
+ }\r
+ l=exp((1-(l/R0))*6.05)-1;// exp((1-($val)/55)*5.75); (5.75 geht über 125 6.05 geht bis 240... mittlere Linie im Datenblatt)\r
+ //l=(l/R0*100.0);\r
+ l=l*100; //fuer DS2450\r
+\r
+ } \r
+ else l=0; //negative Werte am Anfang verhintern\r
+ wdcounter=0;\r
+ \r
+ }\r
+\r
+\r
+ if (gcontrol) {\r
+ //PORTB|=(1<<PINB1);\r
+ uint8_t bb=1;\r
+ uint8_t bb1=1;\r
+ for(uint8_t i=0;i<4;i++){\r
+ if (pack.convc1&bb1) {\r
+ if (pack.convc2&(bb)) {pack.bytes[i*2]=0;pack.bytes[i*2+1]=0;}\r
+ bb=bb<<1;\r
+ if (pack.convc2&(bb)) {pack.bytes[i*2]=0xFF;pack.bytes[i*2+1]=0xFF;}\r
+ bb=bb<<1;\r
+ } else bb=bb<<2;\r
+ bb1=bb1<<1; \r
+ }\r
+ //CHanel A\r
+ if (pack.convc1&1) {\r
+ uint16_t ct=(temperatureC*100.0)+32767;\r
+ cli();pack.A=ct;sei();\r
+ alarmflag=0;\r
+ if (pack.CSA2&0x08) //AEH\r
+ if (pack.bytes[1]>pack.HA) {alarmflag=1;pack.CSA2|=0x20;}\r
+ if (pack.CSA2&0x04) //AEL\r
+ if (pack.bytes[1]<pack.LA) {alarmflag=1;pack.CSA2|=0x10;}\r
+ }\r
+\r
+ if (pack.convc1&2) {\r
+ cli();pack.B=humidityRH*100;sei();\r
+ if (pack.CSB2&0x08) //AEH\r
+ if (pack.bytes[1]>pack.HB) {alarmflag=1;pack.CSB2|=0x20;}\r
+ if (pack.CSB2&0x04) //AEL\r
+ if (pack.bytes[1]<pack.LB) {alarmflag=1;pack.CSB2|=0x10;}\r
+ }\r
+\r
+ if (pack.convc1&4) {\r
+ cli();pack.C=l;sei();\r
+ if (pack.CSC2&0x08) //AEH\r
+ if (pack.bytes[1]>pack.HC) {alarmflag=1;pack.CSC2|=0x20;}\r
+ if (pack.CSC2&0x04) //AEL\r
+ if (pack.bytes[1]<pack.LC) {alarmflag=1;pack.CSC2|=0x10;}\r
+ } \r
+ if (pack.convc1&8) {\r
+ if (pack.CSD2&0x01) ADMUX=3; else ADMUX=0x83;\r
+ _delay_us(100);\r
+ ADCSRA|=(1<<ADSC);\r
+ while ((ADCSRA&(1<<ADSC)));\r
+ cli();pack.D=RA;sei();\r
+ if (pack.CSD2&0x08) //AEH\r
+ if (pack.bytes[1]>pack.HD) {alarmflag=1;pack.CSD2|=0x20;}\r
+ if (pack.CSD2&0x04) //AEL\r
+ if (pack.bytes[1]<pack.LD) {alarmflag=1;pack.CSD2|=0x10;}\r
+ }\r
+ \r
+ EXTERN_SLEEP();\r
+ //PORTB&=~(1<<PINB1);\r
+ }\r
+\r
+ uint8_t bb=1;\r
+ for(uint8_t i=0;i<4;i++) {\r
+ if (pack.bytes[8+i*2]&0x80) { //Chanel as output\r
+ if (pack.bytes[8+i*2]&0x40) {\r
+ DDRA|=bb;\r
+ } else {\r
+ DDRA&=~bb;\r
+ }\r
+ } else {\r
+ DDRA&=~bb;\r
+ }\r
+ bb=bb*2;\r
+ }\r
+ \r
+#if defined(__AVR_ATtiny25__)||defined(__AVR_ATtiny45__) || defined(__AVR_ATtiny85__)\r
+ if (((TIMSK & (1<<TOIE0))==0)&& (mode==0))\r
+#endif \r
+#if defined(__AVR_ATtiny24__)||defined(__AVR_ATtiny44__) || defined(__AVR_ATtiny84__) ||defined(__AVR_ATtiny24A__)||defined(__AVR_ATtiny44A__) || defined(__AVR_ATtiny84A__)\r
+ if (((TIMSK0 & (1<<TOIE0))==0)&& (mode==0))\r
+#endif\r
+ {\r
+\r
+ MCUCR|=(1<<SE)|(1<<SM1);\r
+ MCUCR&=~(1<<ISC01);\r
+ } else {\r
+ MCUCR|=(1<<SE);\r
+ MCUCR&=~(1<<SM1);\r
+ }\r
+ // asm("SLEEP");\r
+ }\r
+\r
+\r
+}
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>\r
+<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="14.0">\r
+ <PropertyGroup>\r
+ <SchemaVersion>2.0</SchemaVersion>\r
+ <ProjectVersion>7.0</ProjectVersion>\r
+ <ToolchainName>com.Atmel.AVRGCC8.C</ToolchainName>\r
+ <ProjectGuid>dce6c7e3-ee26-4d79-826b-08594b9ad897</ProjectGuid>\r
+ <avrdevice>ATtiny84A</avrdevice>\r
+ <avrdeviceseries>none</avrdeviceseries>\r
+ <OutputType>Executable</OutputType>\r
+ <Language>C</Language>\r
+ <OutputFileName>$(MSBuildProjectName)</OutputFileName>\r
+ <OutputFileExtension>.elf</OutputFileExtension>\r
+ <OutputDirectory>$(MSBuildProjectDirectory)\$(Configuration)</OutputDirectory>\r
+ <AssemblyName>DS2450</AssemblyName>\r
+ <Name>DS2450_VOC_SHT</Name>\r
+ <RootNamespace>DS2450</RootNamespace>\r
+ <ToolchainFlavour>Native</ToolchainFlavour>\r
+ <KeepTimersRunning>true</KeepTimersRunning>\r
+ <OverrideVtor>false</OverrideVtor>\r
+ <CacheFlash>true</CacheFlash>\r
+ <ProgFlashFromRam>true</ProgFlashFromRam>\r
+ <RamSnippetAddress>0x20000000</RamSnippetAddress>\r
+ <UncachedRange />\r
+ <preserveEEPROM>true</preserveEEPROM>\r
+ <OverrideVtorValue>exception_table</OverrideVtorValue>\r
+ <BootSegment>2</BootSegment>\r
+ <eraseonlaunchrule>1</eraseonlaunchrule>\r
+ <ExternalProgrammingToolCommand />\r
+ <AsfFrameworkConfig>\r
+ <framework-data>\r
+ <options />\r
+ <configurations />\r
+ <files />\r
+ <documentation help="" />\r
+ <offline-documentation help="" />\r
+ <dependencies>\r
+ <content-extension eid="atmel.asf" uuidref="Atmel.ASF" version="3.28.1" />\r
+ </dependencies>\r
+</framework-data>\r
+ </AsfFrameworkConfig>\r
+ <avrtool />\r
+ </PropertyGroup>\r
+ <PropertyGroup Condition=" '$(Configuration)' == 'Release' ">\r
+ <ToolchainSettings>\r
+ <AvrGcc>\r
+ <avrgcc.common.Device>-mmcu=attiny84a -B "%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.79\gcc\dev\attiny84a"</avrgcc.common.Device>\r
+ <avrgcc.common.outputfiles.hex>True</avrgcc.common.outputfiles.hex>\r
+ <avrgcc.common.outputfiles.lss>True</avrgcc.common.outputfiles.lss>\r
+ <avrgcc.common.outputfiles.eep>True</avrgcc.common.outputfiles.eep>\r
+ <avrgcc.common.outputfiles.srec>True</avrgcc.common.outputfiles.srec>\r
+ <avrgcc.common.outputfiles.usersignatures>False</avrgcc.common.outputfiles.usersignatures>\r
+ <avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>True</avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>\r
+ <avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>True</avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>\r
+ <avrgcc.compiler.symbols.DefSymbols>\r
+ <ListValues>\r
+ <Value>NDEBUG</Value>\r
+ </ListValues>\r
+ </avrgcc.compiler.symbols.DefSymbols>\r
+ <avrgcc.compiler.directories.IncludePaths>\r
+ <ListValues>\r
+ <Value>%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.79\include</Value>\r
+ </ListValues>\r
+ </avrgcc.compiler.directories.IncludePaths>\r
+ <avrgcc.compiler.optimization.level>Optimize for size (-Os)</avrgcc.compiler.optimization.level>\r
+ <avrgcc.compiler.optimization.PackStructureMembers>True</avrgcc.compiler.optimization.PackStructureMembers>\r
+ <avrgcc.compiler.optimization.AllocateBytesNeededForEnum>True</avrgcc.compiler.optimization.AllocateBytesNeededForEnum>\r
+ <avrgcc.compiler.warnings.AllWarnings>True</avrgcc.compiler.warnings.AllWarnings>\r
+ <avrgcc.linker.libraries.Libraries>\r
+ <ListValues>\r
+ <Value>libm</Value>\r
+ </ListValues>\r
+ </avrgcc.linker.libraries.Libraries>\r
+ <avrgcc.assembler.general.IncludePaths>\r
+ <ListValues>\r
+ <Value>%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.79\include</Value>\r
+ </ListValues>\r
+ </avrgcc.assembler.general.IncludePaths>\r
+ </AvrGcc>\r
+ </ToolchainSettings>\r
+ </PropertyGroup>\r
+ <PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">\r
+ <ToolchainSettings>\r
+ <AvrGcc>\r
+ <avrgcc.common.Device>-mmcu=attiny84a -B "%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.79\gcc\dev\attiny84a"</avrgcc.common.Device>\r
+ <avrgcc.common.outputfiles.hex>True</avrgcc.common.outputfiles.hex>\r
+ <avrgcc.common.outputfiles.lss>True</avrgcc.common.outputfiles.lss>\r
+ <avrgcc.common.outputfiles.eep>True</avrgcc.common.outputfiles.eep>\r
+ <avrgcc.common.outputfiles.srec>True</avrgcc.common.outputfiles.srec>\r
+ <avrgcc.common.outputfiles.usersignatures>False</avrgcc.common.outputfiles.usersignatures>\r
+ <avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>True</avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>\r
+ <avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>True</avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>\r
+ <avrgcc.compiler.symbols.DefSymbols>\r
+ <ListValues>\r
+ <Value>DEBUG</Value>\r
+ </ListValues>\r
+ </avrgcc.compiler.symbols.DefSymbols>\r
+ <avrgcc.compiler.directories.IncludePaths>\r
+ <ListValues>\r
+ <Value>%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.79\include</Value>\r
+ </ListValues>\r
+ </avrgcc.compiler.directories.IncludePaths>\r
+ <avrgcc.compiler.optimization.level>Optimize (-O1)</avrgcc.compiler.optimization.level>\r
+ <avrgcc.compiler.optimization.PackStructureMembers>True</avrgcc.compiler.optimization.PackStructureMembers>\r
+ <avrgcc.compiler.optimization.AllocateBytesNeededForEnum>True</avrgcc.compiler.optimization.AllocateBytesNeededForEnum>\r
+ <avrgcc.compiler.optimization.DebugLevel>Default (-g2)</avrgcc.compiler.optimization.DebugLevel>\r
+ <avrgcc.compiler.warnings.AllWarnings>True</avrgcc.compiler.warnings.AllWarnings>\r
+ <avrgcc.linker.libraries.Libraries>\r
+ <ListValues>\r
+ <Value>libm</Value>\r
+ </ListValues>\r
+ </avrgcc.linker.libraries.Libraries>\r
+ <avrgcc.assembler.general.IncludePaths>\r
+ <ListValues>\r
+ <Value>%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.79\include</Value>\r
+ </ListValues>\r
+ </avrgcc.assembler.general.IncludePaths>\r
+ <avrgcc.assembler.debugging.DebugLevel>Default (-Wa,-g)</avrgcc.assembler.debugging.DebugLevel>\r
+ </AvrGcc>\r
+ </ToolchainSettings>\r
+ </PropertyGroup>\r
+ <ItemGroup>\r
+ <Compile Include="..\common\calibr.c">\r
+ <SubType>compile</SubType>\r
+ <Link>calibr.c</Link>\r
+ </Compile>\r
+ <Compile Include="..\common\I2C\MAX1164x.c">\r
+ <SubType>compile</SubType>\r
+ <Link>MAX1164x.c</Link>\r
+ </Compile>\r
+ <Compile Include="..\common\I2C\SHT2xV2.c">\r
+ <SubType>compile</SubType>\r
+ <Link>SHT2xV2.c</Link>\r
+ </Compile>\r
+ <Compile Include="..\common\I2C\USI_TWI_Master.c">\r
+ <SubType>compile</SubType>\r
+ <Link>USI_TWI_Master.c</Link>\r
+ </Compile>\r
+ <Compile Include="DS2450_VOC_SHT.c">\r
+ <SubType>compile</SubType>\r
+ </Compile>\r
+ <Compile Include="OWDS2450.S">\r
+ <SubType>compile</SubType>\r
+ </Compile>\r
+ </ItemGroup>\r
+ <Import Project="$(AVRSTUDIO_EXE_PATH)\\Vs\\Compiler.targets" />\r
+</Project>
\ No newline at end of file
--- /dev/null
+\r
+// Copyright (c) 2015, Tobias Mueller tm(at)tm3d.de\r
+// All rights reserved. \r
+// \r
+// Redistribution and use in source and binary forms, with or without \r
+// modification, are permitted provided that the following conditions are \r
+// met: \r
+// \r
+// * Redistributions of source code must retain the above copyright \r
+// notice, this list of conditions and the following disclaimer. \r
+// * Redistributions in binary form must reproduce the above copyright \r
+// notice, this list of conditions and the following disclaimer in the \r
+// documentation and/or other materials provided with the \r
+// distribution. \r
+// * All advertising materials mentioning features or use of this \r
+// software must display the following acknowledgement: This product \r
+// includes software developed by tm3d.de and its contributors. \r
+// * Neither the name of tm3d.de nor the names of its contributors may \r
+// be used to endorse or promote products derived from this software \r
+// without specific prior written permission. \r
+// \r
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \r
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT \r
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR \r
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT \r
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, \r
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT \r
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, \r
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY \r
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT \r
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE \r
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \r
+\r
+#define _CHANGEABLE_ID_\r
+#define _ZERO_POLLING_\r
+\r
+#include "../common/OWConfig.s"\r
+#include "../common/OWCRC16.s"\r
+\r
+.extern pack,8\r
+.comm addr,1 ;zweites Adressbyte ist unnoetig (Warum auch immer fuer 32 Byte 16 Bit Adressen verwendet werden....)\r
+.comm crcsave,1 ; zwischenspeicherspeicher fuer crc nur zweites byte....\r
+//.extern am2302_temp,2\r
+\r
+\r
+\r
+.macro CHIP_INIT \r
+.endm\r
+\r
+.macro COMMAND_TABLE\r
+ rjmp h_readmemoryaddr\r
+ rjmp h_readmemory\r
+ rjmp h_readmemorycrc1\r
+ rjmp h_readmemorycrc2\r
+ rjmp h_writememoryaddr\r
+ rjmp h_writememory\r
+ rjmp h_writememorycrc1\r
+ rjmp h_writememorycrc2\r
+ rjmp h_writememoryreadback\r
+ rjmp h_convert\r
+ rjmp h_convertcrc1\r
+ rjmp h_convertcrc2\r
+ rjmp h_convert_conv\r
+.endm\r
+\r
+#include "../common/OWRomFunctions.s"\r
+#include "../common/OWTimerInterrupt.s"\r
+\r
+\r
+\r
+; Ab hier Geraeteabhaenging\r
+#define OW_READ_MEMORY_ADDR OW_FIRST_COMMAND+0\r
+#define OW_READ_MEMORY OW_FIRST_COMMAND+1\r
+#define OW_READ_MEMORY_CRC1 OW_FIRST_COMMAND+2\r
+#define OW_READ_MEMORY_CRC2 OW_FIRST_COMMAND+3\r
+#define OW_WRITE_MEMORY_ADDR OW_FIRST_COMMAND+4\r
+#define OW_WRITE_MEMORY OW_FIRST_COMMAND+5\r
+#define OW_WRITE_MEMORY_CRC1 OW_FIRST_COMMAND+6\r
+#define OW_WRITE_MEMORY_CRC2 OW_FIRST_COMMAND+7\r
+#define OW_WRITE_MEMORY_READBACK OW_FIRST_COMMAND+8\r
+#define OW_CONVERT OW_FIRST_COMMAND+9\r
+#define OW_CONVERT_CRC1 OW_FIRST_COMMAND+10\r
+#define OW_CONVERT_CRC2 OW_FIRST_COMMAND+11\r
+#define OW_CONVERT_CONV OW_FIRST_COMMAND+12\r
+\r
+;---------------------------------------------------\r
+; READ COMMAND and start operation\r
+;---------------------------------------------------\r
+\r
+\r
+h_readcommand:\r
+ clr r_bytep\r
+#ifndef _DIS_FLASH_\r
+ FLASH_COMMANDS ; muss zu erst sein....\r
+#endif\r
+ cset 0xAA,OW_READ_MEMORY_ADDR\r
+ cset 0x55,OW_WRITE_MEMORY_ADDR\r
+ cset 0x3C,OW_CONVERT\r
+ FW_CONFIG_INFO\r
+#ifdef _CHANGEABLE_ID_\r
+ CHANGE_ID_COMMANDS\r
+#endif\r
+ ldi r_mode,OW_SLEEP\r
+ rjmp handle_end\r
+\r
+\r
+h_readmemoryaddr:\r
+ cpi r_bytep,0 ;erstes Adressbyte ?\r
+ brne h_readmemory_addr_byte1 ;nein dann weiter\r
+ andi r_rwbyte,0x1F ; nur Adressen zwischen 0 und 0x1F zulassen\r
+ sts addr,r_rwbyte ;speichern des ersten bytes\r
+ rjmp handle_end_inc\r
+h_readmemory_addr_byte1: ;zweiters Addressbyte wird nicht gespeichert!\r
+ ldi r_mode,OW_READ_MEMORY ;weiter zu read Memory\r
+ ;;ldi r_bcount,1 ;ist unten\r
+ ldi r_sendflag,1 ;jetzt sendet der Slave zum Master\r
+ clr r_bytep\r
+ rjmp h_readmemory2\r
+h_readmemory:\r
+ lds r_bytep,addr\r
+ inc r_bytep\r
+ sts addr,r_bytep\r
+ andi r_bytep,0x07\r
+ breq h_readmemory_init_crc\r
+h_readmemory2:\r
+ lds r_bytep,addr\r
+ ;andi r_bytep,0x1F ist oben\r
+ configZ pack,r_bytep\r
+ ld r_rwbyte,Z\r
+ ;ldi r_bcount,1\r
+ rjmp handle_end ;sendet das Byte und geht zu h_readmemory\r
+h_readmemory_init_crc:; init erstes CRC byte\r
+ lds r_rwbyte,crc\r
+ com r_rwbyte\r
+ lds r_temp,crc+1\r
+ com r_temp\r
+ sts crcsave,r_temp\r
+ ldi r_mode,OW_READ_MEMORY_CRC1\r
+ ;ldi r_bcount,1\r
+ rjmp handle_end\r
+h_readmemory_end:\r
+ ldi r_mode,OW_SLEEP\r
+ clr r_sendflag\r
+ rjmp handle_end\r
+h_readmemorycrc1:;init zweites CRC Byte\r
+ lds r_rwbyte,crcsave\r
+ ;ldi r_bcount,1\r
+ ldi r_mode,OW_READ_MEMORY_CRC2\r
+ rjmp handle_end\r
+h_readmemorycrc2:;weiteres senden..... nach zweitem Byte\r
+ lds r_temp,addr\r
+ andi r_temp,0xE0\r
+ brne h_readmemory_end; ende des speichers\r
+ ldi r_mode,OW_READ_MEMORY\r
+ CRCInit1 ;Start with new CRC\r
+ rjmp h_readmemory2\r
+\r
+h_writememoryaddr:\r
+ cpi r_bytep,0 ;erstes Adressbyte ?\r
+ brne h_writememory_addr_byte1 ;nein dann weiter\r
+ andi r_rwbyte,0x1F ; nur Adressen zwischen 0 und 0x1F zulassen\r
+ sts addr,r_rwbyte ;speichern des ersten bytes\r
+ inc r_bytep\r
+ ;ldi r_bcount,1\r
+ rjmp handle_end\r
+h_writememory_addr_byte1: ;zweiters Addressbyte wird nicht gespeichert!\r
+ ldi r_mode,OW_WRITE_MEMORY ;weiter zu read Memory\r
+ ;ldi r_bcount,1 ;; _________________________________________________in handle_end integrieren.....\r
+ lds r_bytep,addr\r
+ rjmp handle_end ;read Memory Byte\r
+h_writememory:\r
+ lds r_bytep,addr\r
+ configZ pack,r_bytep\r
+ st Z,r_rwbyte\r
+ ;ldi r_bcount,1\r
+ ldi r_mode,OW_WRITE_MEMORY_CRC1\r
+ ldi r_sendflag,1 ;jetzt sendet der Slave zum Master\r
+ lds r_rwbyte,crc\r
+ com r_rwbyte\r
+ lds r_temp,crc+1\r
+ com r_temp\r
+ sts crcsave,r_temp\r
+ rjmp handle_end\r
+h_writememorycrc1:\r
+ lds r_rwbyte,crcsave\r
+ ;ldi r_bcount,1\r
+ ldi r_mode,OW_WRITE_MEMORY_CRC2\r
+ rjmp handle_end\r
+h_writememorycrc2:\r
+ lds r_temp,addr\r
+ configZ pack,r_temp\r
+ ld r_rwbyte,Z\r
+ ;ldi r_bcount,1\r
+ ldi r_mode,OW_WRITE_MEMORY_READBACK\r
+ rjmp handle_end\r
+h_writememoryreadback:\r
+ ldi r_temp,0x00\r
+ sts crc+1,r_temp\r
+ lds r_temp,addr\r
+ inc r_temp\r
+ sts addr,r_temp\r
+ sts crc,r_temp\r
+ ldi r_sendflag,0\r
+ ;ldi r_bcount,1\r
+ ldi r_mode,OW_WRITE_MEMORY\r
+ rjmp handle_end\r
+\r
+h_convert:\r
+ cpi r_bytep,0 ;erstes Adressbyte ?\r
+ brne h_convert_byte1 ;nein dann weiter\r
+ inc r_bytep\r
+ sts pack+0x20,r_rwbyte\r
+ ;ldi r_bcount,1\r
+ rjmp handle_end\r
+h_convert_byte1: ;zweies byte glesen go crc#\r
+ sts pack+0x21,r_rwbyte\r
+ lds r_rwbyte,crc\r
+ com r_rwbyte\r
+ lds r_temp,crc+1\r
+ com r_temp\r
+ sts crcsave,r_temp\r
+ ldi r_mode,OW_CONVERT_CRC1\r
+ ;ldi r_bcount,1\r
+ ldi r_sendflag,1\r
+ rjmp handle_end \r
+h_convertcrc1:\r
+ lds r_rwbyte,crcsave\r
+ ;ldi r_bcount,1\r
+ ldi r_mode,OW_CONVERT_CRC2\r
+ rjmp handle_end\r
+h_convertcrc2:\r
+ ldi r_temp,1\r
+ sts gcontrol,r_temp\r
+ ;ldi r_bcount,1\r
+ ldi r_mode,OW_CONVERT_CONV\r
+ ;clr r_sendflag\r
+ ldi r_sendflag,3 ;set bit 0 and 1 for no zero polling\r
+h_convert_conv:\r
+ ldi r_bcount,0\r
+ ldi r_rwbyte,0\r
+ rjmp handle_end_no_bcount \r
+\r
+\r
+\r
+\r
+#include "../common/OWPinInterrupt.s"\r
+.end
\ No newline at end of file
\r
#include <util/delay.h>\r
#include <avr/pgmspace.h>\r
+#include <avr/interrupt.h>\r
\r
-#include "USI_TWI_Master.h"\r
+#include "TWI_Master.h"\r
#include "BME680.h"\r
\r
#define WC 0b11101100\r
8e6, 4e6, 2e6, 1e6,499500.4995, 248262.1648, 125000, 63004.03226,
31281.28128, 15625, 7812.5, 3906.25,1953.125,976.5625, 488.28125, 244.140625};\r
\r
+const float lookup_k1_range1[16] = {
+ 1, 1, 1, 1, 1,0.99, 1, 0.992,
+1, 1, 0.998, 0.995, 1, 0.99, 1, 1};
+const float lookup_k2_range1[16] = {
+ 8e6, 4e6, 2e6, 1e6,499500.4995, 248262.1648, 125000, 63004.03226,
+31281.28128, 15625, 7812.5, 3906.25,1953.125,976.5625, 488.28125, 244.140625};\r
+\r
+\r
double bme680_compensate_gas_double(uint16_t gas_adc_u16, uint8_t gas_range_u8)
{
double gas_res_d = 0;
double var1 = 0;
float a1= pgm_read_float(&(lookup_k1_range[gas_range_u8]));
float a2= pgm_read_float(&(lookup_k2_range[gas_range_u8]));
+ //float a1=lookup_k1_range1[gas_range_u8];
+ //float a2=lookup_k2_range1[gas_range_u8];
range_switching_error_val = calib.range_switching_error;
var1 = (1340.0 + (5.0 * range_switching_error_val))*a1;
+
gas_res_d = var1*a2/(gas_adc_u16-512.0+var1);
return gas_res_d;
}
I2c_StopCondition();\r
*G=(((uint16_t)g1)<<2)|(g2>>6);\r
*P=*G;\r
+ \r
*G= bme680_compensate_gas_double(*G,g2&0xF)/10.0;\r
\r
int32_t temp_comp = 0;\r
*H=g2;\r
//*P=\r
\r
-\r
}\r
\r
#include <util/delay.h>\r
#include <avr/wdt.h>\r
#include <avr/sleep.h>\r
-#include "USI_TWI_Master.h"\r
+#include "TWI_Master.h"\r
\r
uint16_t dig_T1;\r
int16_t dig_T2;\r
}\r
\r
void bmp280Init(void) {\r
+ I2c_StartCondition();\r
+ I2c_WriteByte(0xEC);\r
+ I2c_WriteByte(0xF4);\r
+ I2c_WriteByte(0b01010111); //2x Temp over 16x Press over Normal mode\r
+ I2c_WriteByte(0b11100000); //4s time / no IIfilter\r
+ I2c_StopCondition();\r
dig_T1=bmp280ReadShort(0x88);\r
dig_T2=bmp280ReadShort(0x8A);\r
dig_T3=bmp280ReadShort(0x8C);\r
dig_P7=bmp280ReadShort(0x9A);\r
dig_P8=bmp280ReadShort(0x9C);\r
dig_P9=bmp280ReadShort(0x9E);\r
- I2c_StartCondition();\r
- I2c_WriteByte(0xEC);\r
- I2c_WriteByte(0xF4);\r
- I2c_WriteByte(0b01010111); //2x Temp over 16x Press over Normal mode\r
- I2c_WriteByte(0b11100000); //4s time / no IIfilter\r
- I2c_StopCondition();\r
+ \r
\r
\r
}\r
\r
\r
}\r
+#define BMP280_S32_t int32_t\r
+// Returns temperature in DegC, double precision. Output value of \9351.23\94 equals 51.23 DegC.\r
+// t_fine carries fine temperature as global value\r
+BMP280_S32_t t_fine;\r
+double bmp280_compensate_T_double(BMP280_S32_t adc_T)\r
+{\r
+ double var1, var2, T;\r
+ var1 = (((double)adc_T)/16384.0 - ((double)dig_T1)/1024.0) * ((double)dig_T2);\r
+ var2 = ((((double)adc_T)/131072.0 - ((double)dig_T1)/8192.0) *\r
+ (((double)adc_T)/131072.0 - ((double) dig_T1)/8192.0)) * ((double)dig_T3);\r
+ t_fine = (BMP280_S32_t)(var1 + var2);\r
+ T = (var1 + var2) / 5120.0;\r
+ return T;\r
+}\r
+// Returns pressure in Pa as double. Output value of \9396386.2\94 equals 96386.2 Pa = 963.862 hPa\r
+double bmp280_compensate_P_double(BMP280_S32_t adc_P)\r
+{\r
+ double var1, var2, p;\r
+ var1 = ((double)t_fine/2.0) - 64000.0;\r
+ var2 = var1 * var1 * ((double)dig_P6) / 32768.0;\r
+ var2 = var2 + var1 * ((double)dig_P5) * 2.0;\r
+ var2 = (var2/4.0)+(((double)dig_P4) * 65536.0);\r
+ var1 = (((double)dig_P3) * var1 * var1 / 524288.0 + ((double)dig_P2) * var1) / 524288.0;\r
+ var1 = (1.0 + var1 / 32768.0)*((double)dig_P1);\r
+ if (var1 == 0.0)\r
+ {\r
+ return 0; // avoid exception caused by division by zero\r
+ }\r
+ p = 1048576.0 - (double)adc_P;\r
+ p = (p - (var2 / 4096.0)) * 6250.0 / var1;\r
+ var1 = ((double)dig_P9) * p * p / 2147483648.0;\r
+ var2 = p * ((double)dig_P8) / 32768.0;\r
+ p = p + (var1 + var2 + ((double)dig_P7)) / 16.0;\r
+ return p;\r
+}\r
+\r
+void bmp280ConvertInt_df(int32_t * temperature,uint32_t *pressure,uint8_t oss) {\r
+ //bmp280Init();\r
+ double var1, var2, T;\r
+ int32_t adc_T=bmp280ReadTemp();\r
+ var1 = (((double)adc_T)/16384.0 - ((double)dig_T1)/1024.0) * ((double)dig_T2);\r
+ var2 = ((((double)adc_T)/131072.0 - ((double)dig_T1)/8192.0) *\r
+ (((double)adc_T)/131072.0 - ((double) dig_T1)/8192.0)) * ((double)dig_T3);\r
+ t_fine = (BMP280_S32_t)(var1 + var2);\r
+ T = (var1 + var2) / 5120.0;\r
+\r
+ int32_t adc_P= bmp280ReadPressure(oss);\r
+ double p;\r
+ var1 = ((double)t_fine/2.0) - 64000.0;\r
+ var2 = var1 * var1 * ((double)dig_P6) / 32768.0;\r
+ var2 = var2 + var1 * ((double)dig_P5) * 2.0;\r
+ var2 = (var2/4.0)+(((double)dig_P4) * 65536.0);\r
+ var1 = (((double)dig_P3) * var1 * var1 / 524288.0 + ((double)dig_P2) * var1) / 524288.0;\r
+ var1 = (1.0 + var1 / 32768.0)*((double)dig_P1);\r
+ if (var1 == 0.0)\r
+ {\r
+ return ; // avoid exception caused by division by zero\r
+ }\r
+ p = 1048576.0 - (double)adc_P;\r
+ p = (p - (var2 / 4096.0)) * 6250.0 / var1;\r
+ var1 = ((double)dig_P9) * p * p / 2147483648.0;\r
+ var2 = p * ((double)dig_P8) / 32768.0;\r
+ p = p + (var1 + var2 + ((double)dig_P7)) / 16.0;\r
+ *temperature=(int32_t) (T*100.0);\r
+ *pressure=(uint32_t) p;\r
+ return;\r
+}\r
+\r
+\r
\r
void bmp280ConvertInt(int32_t * temperature,uint32_t *pressure,uint8_t oss) {\r
int32_t var1,var2,T,t_fine;\r
- \r
- \r
int32_t adc_T=bmp280ReadTemp();\r
var1 = ((((adc_T>>3) - ((int32_t)dig_T1<<1))) * ((int32_t)dig_T2)) >> 11;\r
var2 = ((((((adc_T>>4) - ((int32_t)dig_T1)) * ((adc_T>>4) - (int32_t)dig_T1))) >> 12) *((int32_t)dig_T3)) >> 14;\r
T = (t_fine * 5 + 128) >> 8;\r
*temperature=T;\r
int32_t adc_P= bmp280ReadPressure(oss);\r
- uint32_t p;\r
+ int32_t p;\r
var1 = (((int32_t)t_fine)>>1) - (int32_t)64000;\r
var2 = (((var1>>2) * (var1>>2)) >> 11 ) * ((int32_t)dig_P6);\r
var2 = var2 + ((var1*((int32_t)dig_P5))<<1);\r
var1 = (((int32_t)dig_P9) * ((int32_t)(((p>>3) * (p>>3))>>13)))>>12;\r
var2 = (((int32_t)(p>>2)) * ((int32_t)dig_P8))>>13;\r
p = (uint32_t)((int32_t)p + ((var1 + var2 + dig_P7) >> 4));\r
- *pressure=p;\r
+\r
+ *pressure=(uint32_t)(p);\r
\r
}\r
\r
int32_t bmp280ReadPressure_simple();\r
void bmp280Convert(double * temperature, double * pressure,uint8_t oss);\r
void bmp280ConvertInt(int32_t * temperature,uint32_t *pressure,uint8_t oss);\r
+void bmp280ConvertInt_df(int32_t * temperature,uint32_t *pressure,uint8_t oss);\r
void bmp280ConvertIntP(int32_t temp256,uint32_t *pressure) ;\r
void bmp280ConvertIntP1(uint32_t *pressure) ;\r
\r
#include <util/delay.h>\r
\r
\r
-#include "USI_TWI_Master.h"\r
+#include "TWI_Master.h"\r
#include "CDM7160.h"\r
\r
\r
--- /dev/null
+// Copyright (c) 2017, Tobias Mueller tm(at)tm3d.de\r
+// All rights reserved.\r
+//\r
+// Redistribution and use in source and binary forms, with or without\r
+// modification, are permitted provided that the following conditions are\r
+// met:\r
+//\r
+// * Redistributions of source code must retain the above copyright\r
+// notice, this list of conditions and the following disclaimer.\r
+// * Redistributions in binary form must reproduce the above copyright\r
+// notice, this list of conditions and the following disclaimer in the\r
+// documentation and/or other materials provided with the\r
+// distribution.\r
+// * All advertising materials mentioning features or use of this\r
+// software must display the following acknowledgement: This product\r
+// includes software developed by tm3d.de and its contributors.\r
+// * Neither the name of tm3d.de nor the names of its contributors may\r
+// be used to endorse or promote products derived from this software\r
+// without specific prior written permission.\r
+//\r
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\r
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\r
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\r
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\r
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\r
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\r
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\r
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\r
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+\r
+//---------- Includes ----------------------------------------------------------\r
+#define F_CPU 8000000UL\r
+#include <avr/io.h>\r
+#include <avr/interrupt.h>\r
+#include <util/delay.h>\r
+#include <avr/wdt.h>\r
+#include <avr/sleep.h>\r
+#include "TWI_Master.h"\r
+#include "HDC2010.h"\r
+typedef enum{\r
+ I2C_ADR_W = 130, // sensor I2C address + write bit //ADR=VDD\r
+ I2C_ADR_R = 131 // sensor I2C address + read bit\r
+}etI2cHeader;\r
+\r
+uint8_t HDC2010_Init() {\r
+ volatile uint8_t error=0;\r
+ /*I2c_StartCondition();\r
+ error |= I2c_WriteByte (I2C_ADR_W); // I2C Adr\r
+ error |= I2c_WriteByte (0x02); // Config\r
+ error |= I2c_WriteByte (0x0); // 14 bit\r
+ error |= I2c_WriteByte (0x0); // \r
+ I2c_StopCondition();*/\r
+ return error;\r
+\r
+}\r
+\r
+uint8_t HDC2010_Readf(double * temperature, double * hum) { \r
+ int16_t t;\r
+ uint16_t h;\r
+ uint8_t error=0;\r
+ error=HDC2010_Readi(&t,&h);\r
+ *temperature=(double)t/65536.0*165.0-40.0;\r
+ *hum=(double)h/65536.0*100;\r
+ return error;\r
+\r
+}\r
+uint8_t HDC2010_Readi(int16_t * temperature, uint16_t * hum) {\r
+ volatile uint8_t error=0;\r
+ I2c_StartCondition();\r
+ error |= I2c_WriteByte (I2C_ADR_W); // I2C Adr\r
+ error |= I2c_WriteByte (0x0F); //\r
+ error |= I2c_WriteByte (0x01); //\r
+ I2c_StopCondition();\r
+ _delay_ms(10);\r
+ I2c_StartCondition();\r
+ error |= I2c_WriteByte (I2C_ADR_W); // I2C Adr\r
+ error |= I2c_WriteByte (0x0); //\r
+ I2c_StartCondition();\r
+ error |= I2c_WriteByte (I2C_ADR_R); //I2C address\r
+ *temperature=0;\r
+ *temperature |= I2c_ReadByte(ACK);\r
+ *temperature |= I2c_ReadByte(ACK)<<8; \r
+ *hum=0;\r
+ *hum|= I2c_ReadByte(ACK);\r
+ *hum|= I2c_ReadByte(NO_ACK)<<8;\r
+ I2c_StopCondition();\r
+\r
+ return error;\r
+ }\r
+\r
+/*\r
+\r
+const uint16_t POLYNOMIAL = 0x131; //P(x)=x^8+x^5+x^4+1 = 100110001\r
+\r
+\r
+//==============================================================================\r
+uint8_t SHT2x_CheckCrc(uint8_t data[], uint8_t nbrOfBytes, uint8_t checksum)\r
+//==============================================================================\r
+{\r
+ uint8_t crc = 0;\r
+ uint8_t byteCtr;\r
+ //calculates 8-Bit checksum with given polynomial\r
+ for (byteCtr = 0; byteCtr < nbrOfBytes; ++byteCtr)\r
+ { crc ^= (data[byteCtr]);\r
+ for (uint8_t bit = 8; bit > 0; --bit)\r
+ { if (crc & 0x80) crc = (crc << 1) ^ POLYNOMIAL;\r
+ else crc = (crc << 1);\r
+ }\r
+ }\r
+ if (crc != checksum) return CHECKSUM_ERROR;\r
+ else return 0;\r
+}\r
+//===========================================================================\r
+uint8_t SHT2x_ReadUserRegister(uint8_t *pRegisterValue)\r
+//===========================================================================\r
+{\r
+ uint8_t checksum; //variable for checksum byte\r
+ uint8_t error=0; //variable for error code\r
+ I2c_StartCondition();\r
+ error |= I2c_WriteByte (I2C_ADR_W);\r
+ error |= I2c_WriteByte (USER_REG_R);\r
+ I2c_StartCondition();\r
+ error |= I2c_WriteByte (I2C_ADR_R);\r
+ *pRegisterValue = I2c_ReadByte(ACK);\r
+ checksum=I2c_ReadByte(NO_ACK);\r
+ error |= SHT2x_CheckCrc (pRegisterValue,1,checksum);\r
+ I2c_StopCondition();\r
+ return error;\r
+}\r
+//===========================================================================\r
+uint8_t SHT2x_WriteUserRegister(uint8_t *pRegisterValue)\r
+//===========================================================================\r
+{\r
+ uint8_t error=0; //variable for error code\r
+ I2c_StartCondition();\r
+ error |= I2c_WriteByte (I2C_ADR_W);\r
+ error |= I2c_WriteByte (USER_REG_W);\r
+ error |= I2c_WriteByte (*pRegisterValue);\r
+ I2c_StopCondition();\r
+ return error;\r
+}\r
+//===========================================================================\r
+uint8_t SHT2x_MeasureHM(etSHT2xMeasureType eSHT2xMeasureType, int16_t *pMeasurand)\r
+//===========================================================================\r
+{\r
+ uint8_t checksum; //checksum\r
+ uint8_t data[2]; //data array for checksum verification\r
+ uint8_t error=0; //error variable\r
+ uint16_t i; //counting variable\r
+ //-- write I2C sensor address and command --\r
+ I2c_StartCondition();\r
+ error |= I2c_WriteByte (I2C_ADR_W); // I2C Adr\r
+ switch(eSHT2xMeasureType)\r
+ { case HUMIDITY: error |= I2c_WriteByte (TRIG_RH_MEASUREMENT_HM); break;\r
+ case TEMP : error |= I2c_WriteByte (TRIG_T_MEASUREMENT_HM); break;\r
+ //default: assert(0);\r
+ }\r
+ //-- wait until hold master is released --\r
+ I2c_StartCondition();\r
+ error |= I2c_WriteByte (I2C_ADR_R);\r
+ //SCL=HIGH; // set SCL I/O port as input\r
+ DDR_USI&=~(1<<PIN_USI_SCL);\r
+ for(i=0; i<1000; i++) // wait until master hold is released or ;;;;; Son quatsch.... 1000 s *kopfschuettel*\r
+ { _delay_ms(1); // a timeout (~1s) is reached\r
+ //if (SCL_CONF==1) break;\r
+ if (PIN_USI&(1<<PIN_USI_SCL)) break;\r
+ }\r
+ //-- check for timeout --\r
+ //Was wenn der SHT2x die leitung auf 0 laesst? Kurzschluss???\r
+ if((PIN_USI&(1<<PIN_USI_SCL))==0) error |= TIME_OUT_ERROR; else DDR_USI|=(1<<PIN_USI_SCL);\r
+ \r
+ //-- read two data bytes and one checksum byte --\r
+ *pMeasurand=((data[0] = I2c_ReadByte(ACK))>>8) & 0xFF;\r
+ *pMeasurand|=0xFF & (data[1] = I2c_ReadByte(ACK));\r
+// pMeasurand->s16.u8H = data[0] = I2c_ReadByte(ACK);\r
+// pMeasurand->s16.u8L = data[1] = I2c_ReadByte(ACK);\r
+\r
+ checksum=I2c_ReadByte(NO_ACK);\r
+ //-- verify checksum --\r
+ error |= SHT2x_CheckCrc (data,2,checksum);\r
+ I2c_StopCondition();\r
+ return error;\r
+}\r
+//===========================================================================\r
+uint8_t SHT2x_MeasurePoll(etSHT2xMeasureType eSHT2xMeasureType, int16_t *pMeasurand)\r
+//===========================================================================\r
+{\r
+ uint8_t checksum; //checksum\r
+ uint8_t data[2]; //data array for checksum verification\r
+ uint8_t error=0; //error variable\r
+ uint16_t i=0; //counting variable\r
+ //-- write I2C sensor address and command --\r
+ I2c_StartCondition();\r
+ error |= I2c_WriteByte (I2C_ADR_W); // I2C Adr\r
+ switch(eSHT2xMeasureType)\r
+ { case HUMIDITY: error |= I2c_WriteByte (TRIG_RH_MEASUREMENT_POLL); break;\r
+ case TEMP : error |= I2c_WriteByte (TRIG_T_MEASUREMENT_POLL); break;\r
+ //default: assert(0);\r
+ }\r
+ //-- poll every 10ms for measurement ready. Timeout after 20 retries (200ms)--\r
+ do\r
+ { I2c_StartCondition();\r
+ _delay_ms(200); //delay 10ms\r
+ if(i++ >= 20) break;\r
+ } while(I2c_WriteByte (I2C_ADR_R) == ACK_ERROR);\r
+ if (i>=20) error |= TIME_OUT_ERROR;\r
+ //-- read two data bytes and one checksum byte --\r
+ data[0]=I2c_ReadByte(ACK);\r
+ data[1]=I2c_ReadByte(ACK);\r
+ *pMeasurand=(data[0]<<8)|data[1];\r
+ \r
+// pMeasurand->s16.u8H = data[0] = I2c_ReadByte(ACK);\r
+// pMeasurand->s16.u8L = data[1] = I2c_ReadByte(ACK);\r
+ checksum=I2c_ReadByte(NO_ACK);\r
+ //-- verify checksum --\r
+ error |= SHT2x_CheckCrc (data,2,checksum);\r
+ I2c_StopCondition();\r
+ return error;\r
+}\r
+//===========================================================================\r
+uint8_t SHT2x_SoftReset(void)\r
+//===========================================================================\r
+{\r
+ uint8_t error=0; //error variable\r
+ I2c_StartCondition();\r
+ error |= I2c_WriteByte (I2C_ADR_W); // I2C Adr\r
+ error |= I2c_WriteByte (SOFT_RESET); // Command\r
+ I2c_StopCondition();\r
+ _delay_ms(15); // wait till sensor has restarted\r
+ return error;\r
+}\r
+//==============================================================================\r
+float SHT2x_CalcRH(uint16_t u16sRH)\r
+//==============================================================================\r
+{\r
+ double humidityRH; // variable for result\r
+ u16sRH &= ~0x0003; // clear bits [1..0] (status bits)\r
+ //-- calculate relative humidity [%RH] --\r
+ humidityRH = -6.0 + 125.0/65536 * (double)u16sRH; // RH= -6 + 125 * SRH/2^16\r
+ return humidityRH;\r
+}\r
+//==============================================================================\r
+float SHT2x_CalcTemperatureC(uint16_t u16sT)\r
+//==============================================================================\r
+{\r
+ double temperatureC; // variable for result\r
+ u16sT &= ~0x0003; // clear bits [1..0] (status bits)\r
+ //-- calculate temperature [°C] --\r
+ temperatureC= -46.85 + 175.72/65536 *(double)u16sT; //T= -46.85 + 175.72 * ST/2^16\r
+ return temperatureC;\r
+}\r
+//==============================================================================\r
+uint8_t SHT2x_GetSerialNumber(uint8_t u8SerialNumber[])\r
+//==============================================================================\r
+{\r
+ uint8_t error=0; //error variable\r
+ //Read from memory location 1\r
+ I2c_StartCondition();\r
+ error |= I2c_WriteByte (I2C_ADR_W); //I2C address\r
+ error |= I2c_WriteByte (0xFA); //Command for readout on-chip memory\r
+ error |= I2c_WriteByte (0x0F); //on-chip memory address\r
+ I2c_StartCondition();\r
+ error |= I2c_WriteByte (I2C_ADR_R); //I2C address\r
+ u8SerialNumber[5] = I2c_ReadByte(ACK); //Read SNB_3\r
+ I2c_ReadByte(ACK); //Read CRC SNB_3 (CRC is not analyzed)\r
+ u8SerialNumber[4] = I2c_ReadByte(ACK); //Read SNB_2\r
+ I2c_ReadByte(ACK); //Read CRC SNB_2 (CRC is not analyzed)\r
+ u8SerialNumber[3] = I2c_ReadByte(ACK); //Read SNB_1\r
+ I2c_ReadByte(ACK); //Read CRC SNB_1 (CRC is not analyzed)\r
+ u8SerialNumber[2] = I2c_ReadByte(ACK); //Read SNB_0\r
+ I2c_ReadByte(NO_ACK); //Read CRC SNB_0 (CRC is not analyzed)\r
+ I2c_StopCondition();\r
+ //Read from memory location 2\r
+ I2c_StartCondition();\r
+ error |= I2c_WriteByte (I2C_ADR_W); //I2C address\r
+ error |= I2c_WriteByte (0xFC); //Command for readout on-chip memory\r
+ error |= I2c_WriteByte (0xC9); //on-chip memory address\r
+ I2c_StartCondition();\r
+ error |= I2c_WriteByte (I2C_ADR_R); //I2C address\r
+ u8SerialNumber[1] = I2c_ReadByte(ACK); //Read SNC_1\r
+ u8SerialNumber[0] = I2c_ReadByte(ACK); //Read SNC_0\r
+ I2c_ReadByte(ACK); //Read CRC SNC0/1 (CRC is not analyzed)\r
+ u8SerialNumber[7] = I2c_ReadByte(ACK); //Read SNA_1\r
+ u8SerialNumber[6] = I2c_ReadByte(ACK); //Read SNA_0\r
+ I2c_ReadByte(NO_ACK); //Read CRC SNA0/1 (CRC is not analyzed)\r
+ I2c_StopCondition();\r
+ return error;\r
+}\r
+*/
\ No newline at end of file
--- /dev/null
+#ifndef HDC2010_H\r
+#define HDC2010_H\r
+// Copyright (c) 2017, Tobias Mueller tm(at)tm3d.de\r
+// All rights reserved.\r
+//\r
+// Redistribution and use in source and binary forms, with or without\r
+// modification, are permitted provided that the following conditions are\r
+// met:\r
+//\r
+// * Redistributions of source code must retain the above copyright\r
+// notice, this list of conditions and the following disclaimer.\r
+// * Redistributions in binary form must reproduce the above copyright\r
+// notice, this list of conditions and the following disclaimer in the\r
+// documentation and/or other materials provided with the\r
+// distribution.\r
+// * All advertising materials mentioning features or use of this\r
+// software must display the following acknowledgement: This product\r
+// includes software developed by tm3d.de and its contributors.\r
+// * Neither the name of tm3d.de nor the names of its contributors may\r
+// be used to endorse or promote products derived from this software\r
+// without specific prior written permission.\r
+//\r
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\r
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\r
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\r
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\r
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\r
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\r
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\r
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\r
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+\r
+\r
+uint8_t HDC2010_Init();\r
+\r
+uint8_t HDC2010_Readf(double * temperature, double * hum);\r
+uint8_t HDC2010_Readi(int16_t * temperature, uint16_t * hum);\r
+\r
+\r
+#endif\r
--- /dev/null
+// Copyright (c) 2018, Tobias Mueller tm(at)tm3d.de\r
+// All rights reserved.\r
+//\r
+// Redistribution and use in source and binary forms, with or without\r
+// modification, are permitted provided that the following conditions are\r
+// met:\r
+//\r
+// * Redistributions of source code must retain the above copyright\r
+// notice, this list of conditions and the following disclaimer.\r
+// * Redistributions in binary form must reproduce the above copyright\r
+// notice, this list of conditions and the following disclaimer in the\r
+// documentation and/or other materials provided with the\r
+// distribution.\r
+// * All advertising materials mentioning features or use of this\r
+// software must display the following acknowledgement: This product\r
+// includes software developed by tm3d.de and its contributors.\r
+// * Neither the name of tm3d.de nor the names of its contributors may\r
+// be used to endorse or promote products derived from this software\r
+// without specific prior written permission.\r
+//\r
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\r
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\r
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\r
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\r
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\r
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\r
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\r
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\r
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+\r
+//---------- Includes ----------------------------------------------------------\r
+#define F_CPU 8000000UL\r
+#include <avr/io.h>\r
+#include <avr/interrupt.h>\r
+#include <util/delay.h>\r
+#include <avr/wdt.h>\r
+#include <avr/sleep.h>\r
+#include "USI_TWI_Master.h"\r
+#include "LPS225HB.h"\r
+typedef enum{\r
+ I2C_ADR_W = 0b10111000, // sensor I2C address + write bit //ADR=VDD\r
+ I2C_ADR_R = 0b10111001 // sensor I2C address + read bit\r
+}etI2cHeader;\r
+\r
+uint8_t LPS225HB_Init() {\r
+ volatile uint8_t error=0;\r
+ /*I2c_StartCondition();\r
+ error |= I2c_WriteByte (I2C_ADR_W); // I2C Adr\r
+ error |= I2c_WriteByte (0x02); // Config\r
+ error |= I2c_WriteByte (0x0); // 14 bit\r
+ error |= I2c_WriteByte (0x0); // \r
+ I2c_StopCondition();*/\r
+\r
+\r
+ I2c_StartCondition();\r
+ error |= I2c_WriteByte (I2C_ADR_W); // I2C Adr\r
+ error |= I2c_WriteByte (0x11); //\r
+ //error |= I2c_WriteByte (0b01110001); //\r
+ error |= I2c_WriteByte (0b00010100); //\r
+ I2c_StopCondition();\r
+ return error;\r
+\r
+}\r
+\r
+uint8_t LPS225HB_Readf(double * temperature, double * pressure) { \r
+ int16_t t;\r
+ uint32_t p;\r
+ uint8_t error=0;\r
+ error= LPS225HB_Readi(&t,&p);\r
+ *temperature=(double)t/100.0;\r
+ *pressure=(double)p/4096.0;\r
+ return error;\r
+\r
+}\r
+uint8_t readReg(uint8_t reg) {\r
+ volatile uint8_t error=0;\r
+ uint8_t ret;\r
+ I2c_StartCondition();\r
+ error |= I2c_WriteByte (I2C_ADR_W); // I2C Adr\r
+ error |= I2c_WriteByte (reg); //\r
+ I2c_StartCondition();\r
+ error |= I2c_WriteByte (I2C_ADR_R); //I2C address\r
+ ret= I2c_ReadByte(NO_ACK);\r
+ I2c_StopCondition();\r
+ return ret;\r
+}\r
+\r
+uint8_t LPS225HB_Readi(int16_t * temperature, uint32_t * pressure) {\r
+ volatile uint8_t error=0;\r
+ I2c_StartCondition();\r
+ error |= I2c_WriteByte (I2C_ADR_W); // I2C Adr\r
+ error |= I2c_WriteByte (0x11); //\r
+ //error |= I2c_WriteByte (0b00000001); //\r
+ error |= I2c_WriteByte (0b01010001); //\r
+ I2c_StopCondition();\r
+ _delay_ms(1000);\r
+// uint16_t status=0;\r
+// status=readReg(0x27);\r
+// status|=readReg(0x26)<<8;\r
+// *pressure=0;\r
+// *pressure|= readReg(0x28);\r
+// *pressure|= ((uint32_t)readReg(0x29))<<8;\r
+// *pressure|= ((uint32_t)readReg(0x2A))<<16;\r
+\r
+\r
+ I2c_StartCondition();\r
+ error |= I2c_WriteByte (I2C_ADR_W); // I2C Adr\r
+ error |= I2c_WriteByte (0x28); //\r
+ I2c_StartCondition();\r
+ error |= I2c_WriteByte (I2C_ADR_R); //I2C address\r
+// status= I2c_ReadByte(ACK)<<8;\r
+// status|= I2c_ReadByte(ACK);\r
+\r
+\r
+ *pressure=0;\r
+ *pressure|= I2c_ReadByte(ACK);\r
+ *pressure|= ((uint32_t)I2c_ReadByte(ACK))<<8;\r
+ *pressure|= ((uint32_t)I2c_ReadByte(ACK))<<16;\r
+ *temperature=0;\r
+ *temperature |= I2c_ReadByte(ACK);\r
+ *temperature |= ((int16_t)I2c_ReadByte(NO_ACK)<<8); \r
+ I2c_StopCondition();\r
+ //*temperature=status;\r
+\r
+ return error;\r
+ }\r
+\r
--- /dev/null
+#ifndef LPS225HB_H\r
+#define LPS225HB_H\r
+// Copyright (c) 2018, Tobias Mueller tm(at)tm3d.de\r
+// All rights reserved.\r
+//\r
+// Redistribution and use in source and binary forms, with or without\r
+// modification, are permitted provided that the following conditions are\r
+// met:\r
+//\r
+// * Redistributions of source code must retain the above copyright\r
+// notice, this list of conditions and the following disclaimer.\r
+// * Redistributions in binary form must reproduce the above copyright\r
+// notice, this list of conditions and the following disclaimer in the\r
+// documentation and/or other materials provided with the\r
+// distribution.\r
+// * All advertising materials mentioning features or use of this\r
+// software must display the following acknowledgement: This product\r
+// includes software developed by tm3d.de and its contributors.\r
+// * Neither the name of tm3d.de nor the names of its contributors may\r
+// be used to endorse or promote products derived from this software\r
+// without specific prior written permission.\r
+//\r
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\r
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\r
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\r
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\r
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\r
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\r
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\r
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\r
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+\r
+\r
+uint8_t LPS225HB_Init();\r
+\r
+uint8_t LPS225HB_Readf(double * temperature, double * pressure);\r
+uint8_t LPS225HB_Readi(int16_t * temperature, uint32_t * pressure);\r
+\r
+\r
+#endif\r
#include <util/delay.h>\r
\r
\r
-#include "USI_TWI_Master.h"\r
+#include "TWI_Master.h"\r
#include "MAX44009.h"\r
\r
uint8_t checkMAX44009(uint8_t nr) {\r
void read_baseline(uint16_t *b1,uint16_t *b2) {\r
*b1=readEEPROM(0,0xFFFF);\r
*b2=readEEPROM(2,0xFFFF);\r
+ *b1=0xFFFF;\r
+ *b2=0xFFFF;\r
}\r
\r
void set_baseline(uint16_t b1,uint16_t b2) {\r
#include <util/delay.h>\r
#include <avr/wdt.h>\r
#include <avr/sleep.h>\r
-#include "USI_TWI_Master.h"\r
+#include "TWI_Master.h"\r
#include "SHT2x.h"\r
\r
const uint16_t POLYNOMIAL = 0x131; //P(x)=x^8+x^5+x^4+1 = 100110001\r
#define F_CPU 8000000UL\r
#include <avr/io.h>\r
#include <util/delay.h>\r
-#include "USI_TWI_Master.h"\r
+#include "TWI_Master.h"\r
#include "SHT2xV2.h"\r
\r
uint8_t initSHT2x(){\r
if (calcCRCSHT2x(t1,t2)==tc)\r
*temp=-46.85 + 175.72/65536 *(double)(((uint16_t)t1<<8)|(t2&0xF8));\r
else ret=0;\r
- if (calcCRCSHT2x(f1,f2)==fc)\r
+ if (calcCRCSHT2x(f1,f2)==fc) {\r
*hum=-6.0+125.0/65536*(double)(((uint16_t)f1<<8)|(f2&0xF8));\r
+ *hum=(*hum)-((100.0/(*hum)*2.5)-2.5);\r
+ }\r
else ret=0;\r
+ //*temp=20;\r
+ //*hum=10;\r
return ret;\r
}\r
\r
#define F_CPU 8000000UL\r
#include <avr/io.h>\r
#include <util/delay.h>\r
-#include "USI_TWI_Master.h"\r
+#include "TWI_Master.h"\r
#include "SHT3x.h"\r
\r
uint8_t initSHT3x(uint8_t adrline){\r
#include <util/delay.h>\r
#include <avr/wdt.h>\r
#include <avr/sleep.h>\r
-#include "USI_TWI_Master.h"\r
+#include "TWI_Master.h"\r
\r
void TSL256x_init() {\r
I2c_StartCondition();\r
--- /dev/null
+\r
+#ifdef __4MHZ__\r
+#define F_CPU 4000000UL\r
+#else\r
+#define F_CPU 8000000UL\r
+#endif\r
+#include <avr/io.h>\r
+#include "TWI_Master.h"\r
+#include <util/delay.h>\r
+\r
+#if defined(__AVR_AT90Mega169__) | defined(__AVR_ATmega169PA__) | \\r
+defined(__AVR_AT90Mega165__) | defined(__AVR_ATmega165__) | \\r
+defined(__AVR_ATmega325__) | defined(__AVR_ATmega3250__) | \\r
+defined(__AVR_ATmega645__) | defined(__AVR_ATmega6450__) | \\r
+defined(__AVR_ATmega329__) | defined(__AVR_ATmega3290__) | \\r
+defined(__AVR_ATmega649__) | defined(__AVR_ATmega6490__) |\\r
+defined(__AVR_ATtiny25__) | defined(__AVR_ATtiny45__) | defined(__AVR_ATtiny85__) | \\r
+defined(__AVR_AT90Tiny26__) | defined(__AVR_ATtiny26__) |\\r
+defined(__AVR_AT90Tiny2313__) | defined(__AVR_ATtiny2313__) |\\r
+defined(__AVR_ATtiny84__) | defined(__AVR_ATtiny84A__)\r
+\r
+unsigned char USI_TWI_Master_Transfer( unsigned char );\r
+unsigned char USI_TWI_Master_Stop( void );\r
+\r
+union USI_TWI_state\r
+{\r
+ unsigned char errorState; // Can reuse the TWI_state for error states due to that it will not be need if there exists an error.\r
+ struct\r
+ {\r
+ unsigned char addressMode : 1;\r
+ unsigned char masterWriteDataMode : 1;\r
+ unsigned char unused : 6;\r
+ }; \r
+} USI_TWI_state;\r
+\r
+/*---------------------------------------------------------------\r
+ USI TWI single master initialization function\r
+---------------------------------------------------------------*/\r
+void TWI_Master_Initialise( void )\r
+{\r
+ PORT_USI |= (1<<PIN_USI_SDA); // Enable pullup on SDA, to set high as released state.\r
+ PORT_USI |= (1<<PIN_USI_SCL); // Enable pullup on SCL, to set high as released state.\r
+ \r
+ DDR_USI |= (1<<PIN_USI_SCL); // Enable SCL as output.\r
+ DDR_USI |= (1<<PIN_USI_SDA); // Enable SDA as output.\r
+ \r
+ USIDR = 0xFF; // Preload dataregister with "released level" data.\r
+ USICR = (0<<USISIE)|(0<<USIOIE)| // Disable Interrupts.\r
+ (1<<USIWM1)|(0<<USIWM0)| // Set USI in Two-wire mode.\r
+ (1<<USICS1)|(0<<USICS0)|(1<<USICLK)| // Software stobe as counter clock source\r
+ (0<<USITC);\r
+ USISR = (1<<USISIF)|(1<<USIOIF)|(1<<USIPF)|(1<<USIDC)| // Clear flags,\r
+ (0x0<<USICNT0); // and reset counter.\r
+}\r
+\r
+/*---------------------------------------------------------------\r
+Use this function to get hold of the error message from the last transmission\r
+---------------------------------------------------------------*/\r
+unsigned char USI_TWI_Get_State_Info( void )\r
+{\r
+ return ( USI_TWI_state.errorState ); // Return error state.\r
+}\r
+\r
+/*---------------------------------------------------------------\r
+ USI Transmit and receive function. LSB of first byte in data \r
+ indicates if a read or write cycles is performed. If set a read\r
+ operation is performed.\r
+\r
+ Function generates (Repeated) Start Condition, sends address and\r
+ R/W, Reads/Writes Data, and verifies/sends ACK.\r
+ \r
+ Success or error code is returned. Error codes are defined in \r
+ USI_TWI_Master.h\r
+---------------------------------------------------------------*/\r
+unsigned char USI_TWI_Start_Transceiver_With_Data( unsigned char *msg, unsigned char msgSize)\r
+{\r
+ unsigned char tempUSISR_8bit = (1<<USISIF)|(1<<USIOIF)|(1<<USIPF)|(1<<USIDC)| // Prepare register value to: Clear flags, and\r
+ (0x0<<USICNT0); // set USI to shift 8 bits i.e. count 16 clock edges.\r
+ unsigned char tempUSISR_1bit = (1<<USISIF)|(1<<USIOIF)|(1<<USIPF)|(1<<USIDC)| // Prepare register value to: Clear flags, and\r
+ (0xE<<USICNT0); // set USI to shift 1 bit i.e. count 2 clock edges.\r
+\r
+ USI_TWI_state.errorState = 0;\r
+ USI_TWI_state.addressMode = TRUE;\r
+\r
+#ifdef PARAM_VERIFICATION\r
+ if(msg > (unsigned char*)RAMEND) // Test if address is outside SRAM space\r
+ {\r
+ USI_TWI_state.errorState = USI_TWI_DATA_OUT_OF_BOUND;\r
+ return (FALSE);\r
+ }\r
+ if(msgSize <= 1) // Test if the transmission buffer is empty\r
+ {\r
+ USI_TWI_state.errorState = USI_TWI_NO_DATA;\r
+ return (FALSE);\r
+ }\r
+#endif\r
+\r
+#ifdef NOISE_TESTING // Test if any unexpected conditions have arrived prior to this execution.\r
+ if( USISR & (1<<USISIF) )\r
+ {\r
+ USI_TWI_state.errorState = USI_TWI_UE_START_CON;\r
+ return (FALSE);\r
+ }\r
+ if( USISR & (1<<USIPF) )\r
+ {\r
+ USI_TWI_state.errorState = USI_TWI_UE_STOP_CON;\r
+ return (FALSE);\r
+ }\r
+ if( USISR & (1<<USIDC) )\r
+ {\r
+ USI_TWI_state.errorState = USI_TWI_UE_DATA_COL;\r
+ return (FALSE);\r
+ }\r
+#endif\r
+\r
+ if ( !(*msg & (1<<TWI_READ_BIT)) ) // The LSB in the address byte determines if is a masterRead or masterWrite operation.\r
+ {\r
+ USI_TWI_state.masterWriteDataMode = TRUE;\r
+ }\r
+\r
+/* Release SCL to ensure that (repeated) Start can be performed */\r
+ PORT_USI |= (1<<PIN_USI_SCL); // Release SCL.\r
+ while( !(PIN_USI & (1<<PIN_USI_SCL)) ); // Verify that SCL becomes high.\r
+#ifdef TWI_FAST_MODE\r
+ _delay_us( T4_TWI/4 ); // Delay for T4TWI if TWI_FAST_MODE\r
+#else\r
+ _delay_us( T2_TWI/4 ); // Delay for T2TWI if TWI_STANDARD_MODE\r
+#endif\r
+\r
+/* Generate Start Condition */\r
+ PORT_USI &= ~(1<<PIN_USI_SDA); // Force SDA LOW.\r
+ _delay_us( T4_TWI/4 ); \r
+ PORT_USI &= ~(1<<PIN_USI_SCL); // Pull SCL LOW.\r
+ PORT_USI |= (1<<PIN_USI_SDA); // Release SDA.\r
+\r
+#ifdef SIGNAL_VERIFY\r
+ if( !(USISR & (1<<USISIF)) )\r
+ {\r
+ USI_TWI_state.errorState = USI_TWI_MISSING_START_CON; \r
+ return (FALSE);\r
+ }\r
+#endif\r
+\r
+/*Write address and Read/Write data */\r
+ do\r
+ {\r
+ /* If masterWrite cycle (or inital address tranmission)*/\r
+ if (USI_TWI_state.addressMode || USI_TWI_state.masterWriteDataMode)\r
+ {\r
+ /* Write a byte */\r
+ PORT_USI &= ~(1<<PIN_USI_SCL); // Pull SCL LOW.\r
+ USIDR = *(msg++); // Setup data.\r
+ USI_TWI_Master_Transfer( tempUSISR_8bit ); // Send 8 bits on bus.\r
+ \r
+ /* Clock and verify (N)ACK from slave */\r
+ DDR_USI &= ~(1<<PIN_USI_SDA); // Enable SDA as input.\r
+ if( USI_TWI_Master_Transfer( tempUSISR_1bit ) & (1<<TWI_NACK_BIT) ) \r
+ {\r
+ if ( USI_TWI_state.addressMode )\r
+ USI_TWI_state.errorState = USI_TWI_NO_ACK_ON_ADDRESS;\r
+ else\r
+ USI_TWI_state.errorState = USI_TWI_NO_ACK_ON_DATA;\r
+ return (FALSE);\r
+ }\r
+ USI_TWI_state.addressMode = FALSE; // Only perform address transmission once.\r
+ }\r
+ /* Else masterRead cycle*/\r
+ else\r
+ {\r
+ /* Read a data byte */\r
+ DDR_USI &= ~(1<<PIN_USI_SDA); // Enable SDA as input.\r
+ *(msg++) = USI_TWI_Master_Transfer( tempUSISR_8bit );\r
+\r
+ /* Prepare to generate ACK (or NACK in case of End Of Transmission) */\r
+ if( msgSize == 1) // If transmission of last byte was performed.\r
+ {\r
+ USIDR = 0xFF; // Load NACK to confirm End Of Transmission.\r
+ }\r
+ else\r
+ {\r
+ USIDR = 0x00; // Load ACK. Set data register bit 7 (output for SDA) low.\r
+ }\r
+ USI_TWI_Master_Transfer( tempUSISR_1bit ); // Generate ACK/NACK.\r
+ }\r
+ }while( --msgSize) ; // Until all data sent/received.\r
+ \r
+ USI_TWI_Master_Stop(); // Send a STOP condition on the TWI bus.\r
+\r
+/* Transmission successfully completed*/\r
+ return (TRUE);\r
+}\r
+\r
+/*---------------------------------------------------------------\r
+ Core function for shifting data in and out from the USI.\r
+ Data to be sent has to be placed into the USIDR prior to calling\r
+ this function. Data read, will be return'ed from the function.\r
+---------------------------------------------------------------*/\r
+unsigned char USI_TWI_Master_Transfer( unsigned char temp )\r
+{\r
+ USISR = temp; // Set USISR according to temp.\r
+ // Prepare clocking.\r
+ temp = (0<<USISIE)|(0<<USIOIE)| // Interrupts disabled\r
+ (1<<USIWM1)|(0<<USIWM0)| // Set USI in Two-wire mode.\r
+ (1<<USICS1)|(0<<USICS0)|(1<<USICLK)| // Software clock strobe as source.\r
+ (1<<USITC); // Toggle Clock Port.\r
+ do\r
+ {\r
+ _delay_us( T2_TWI/4 ); \r
+ USICR = temp; // Generate positve SCL edge.\r
+ while( !(PIN_USI & (1<<PIN_USI_SCL)) );// Wait for SCL to go high.\r
+ _delay_us( T4_TWI/4 ); \r
+ USICR = temp; // Generate negative SCL edge.\r
+ }while( !(USISR & (1<<USIOIF)) ); // Check for transfer complete.\r
+ \r
+ _delay_us( T2_TWI/4 ); \r
+ temp = USIDR; // Read out data.\r
+ USIDR = 0xFF; // Release SDA.\r
+ DDR_USI |= (1<<PIN_USI_SDA); // Enable SDA as output.\r
+\r
+ return temp; // Return the data from the USIDR\r
+}\r
+\r
+/*---------------------------------------------------------------\r
+ Function for generating a TWI Stop Condition. Used to release \r
+ the TWI bus.\r
+---------------------------------------------------------------*/\r
+unsigned char USI_TWI_Master_Stop( void )\r
+{\r
+ PORT_USI &= ~(1<<PIN_USI_SDA); // Pull SDA low.\r
+ PORT_USI |= (1<<PIN_USI_SCL); // Release SCL.\r
+ while( !(PIN_USI & (1<<PIN_USI_SCL)) ); // Wait for SCL to go high.\r
+ _delay_us( T4_TWI/4 ); \r
+ PORT_USI |= (1<<PIN_USI_SDA); // Release SDA.\r
+ _delay_us( T2_TWI/4 ); \r
+ \r
+#ifdef SIGNAL_VERIFY\r
+ if( !(USISR & (1<<USIPF)) )\r
+ {\r
+ USI_TWI_state.errorState = USI_TWI_MISSING_STOP_CON; \r
+ return (FALSE);\r
+ }\r
+#endif\r
+\r
+ return (TRUE);\r
+}\r
+\r
+\r
+\r
+unsigned char I2c_WriteByte(unsigned char msg) {\r
+ unsigned char tempUSISR_8bit = (1<<USISIF)|(1<<USIOIF)|(1<<USIPF)|(1<<USIDC)| // Prepare register value to: Clear flags, and\r
+ (0x0<<USICNT0); // set USI to shift 8 bits i.e. count 16 clock edges.\r
+ unsigned char tempUSISR_1bit = (1<<USISIF)|(1<<USIOIF)|(1<<USIPF)|(1<<USIDC)| // Prepare register value to: Clear flags, and\r
+ (0xE<<USICNT0); // set USI to shift 1 bit i.e. count 2 clock edges.\r
+\r
+ /* Write a byte */\r
+ PORT_USI &= ~(1<<PIN_USI_SCL); // Pull SCL LOW.\r
+ USIDR = msg; // Setup data.\r
+ USI_TWI_Master_Transfer( tempUSISR_8bit ); // Send 8 bits on bus.\r
+ /* Clock and verify (N)ACK from slave */\r
+ DDR_USI &= ~(1<<PIN_USI_SDA); // Enable SDA as input.\r
+ if( USI_TWI_Master_Transfer( tempUSISR_1bit ) & (1<<TWI_NACK_BIT) ){\r
+ if ( USI_TWI_state.addressMode )\r
+ USI_TWI_state.errorState = USI_TWI_NO_ACK_ON_ADDRESS;\r
+ else\r
+ USI_TWI_state.errorState = USI_TWI_NO_ACK_ON_DATA;\r
+ return 2;\r
+ }\r
+ return 0;\r
+}\r
+unsigned char I2c_ReadByte(unsigned char ack_mode) {\r
+ unsigned char tempUSISR_8bit = (1<<USISIF)|(1<<USIOIF)|(1<<USIPF)|(1<<USIDC)| // Prepare register value to: Clear flags, and\r
+ (0x0<<USICNT0); // set USI to shift 8 bits i.e. count 16 clock edges.\r
+ unsigned char tempUSISR_1bit = (1<<USISIF)|(1<<USIOIF)|(1<<USIPF)|(1<<USIDC)| // Prepare register value to: Clear flags, and\r
+ (0xE<<USICNT0); // set USI to shift 1 bit i.e. count 2 clock edges.\r
+ \r
+ /* Read a data byte */\r
+ DDR_USI &= ~(1<<PIN_USI_SDA); // Enable SDA as input.\r
+ unsigned char msg = USI_TWI_Master_Transfer( tempUSISR_8bit );\r
+\r
+ /* Prepare to generate ACK (or NACK in case of End Of Transmission) */\r
+ if( ack_mode == NO_ACK) { // If transmission of last byte was performed.\r
+ USIDR = 0xFF; // Load NACK to confirm End Of Transmission.\r
+ } else {\r
+ USIDR = 0x00; // Load ACK. Set data register bit 7 (output for SDA) low.\r
+ }\r
+ USI_TWI_Master_Transfer( tempUSISR_1bit ); // Generate ACK/NACK.\r
+ return msg;\r
+}\r
+\r
+void I2c_StartCondition(void) {\r
+/* Release SCL to ensure that (repeated) Start can be performed */\r
+PORT_USI |= (1<<PIN_USI_SCL); // Release SCL.\r
+while( !(PIN_USI & (1<<PIN_USI_SCL)) ); // Verify that SCL becomes high.\r
+#ifdef TWI_FAST_MODE\r
+_delay_us( T4_TWI/4 ); // Delay for T4TWI if TWI_FAST_MODE\r
+#else\r
+_delay_us( T2_TWI/4 ); // Delay for T2TWI if TWI_STANDARD_MODE\r
+#endif\r
+\r
+/* Generate Start Condition */\r
+PORT_USI &= ~(1<<PIN_USI_SDA); // Force SDA LOW.\r
+_delay_us( T4_TWI/4 );\r
+PORT_USI &= ~(1<<PIN_USI_SCL); // Pull SCL LOW.\r
+PORT_USI |= (1<<PIN_USI_SDA); // Release SDA.\r
+ \r
+ \r
+}\r
+void I2c_StopCondition(void) {\r
+ USI_TWI_Master_Stop();\r
+}\r
+\r
+#endif\r
+\r
+\r
+\r
+\r
+#if defined(__AVR_ATmega328PB__)| defined(__AVR_ATmega328P__)\r
+\r
+\r
+#include <util/twi.h>\r
+\r
+void TWI_Wait_Busy() {\r
+ _delay_us(100);\r
+ while (!( TWCR & (1<<TWINT) )); \r
+}\r
+\r
+\r
+void TWI_Master_Initialise( void ) {\r
+ TWBR = TWI_TWBR; // Set bit rate register (Baud rate). Defined in header file.Driver presumes prescaler to be 00.\r TWSR=0;\r TWDR = 0xFF; // Default content = SDA released.\r TWCR = (1<<TWEN)| // Enable TWI-interface and release TWI pins.\r (0<<TWIE)|(0<<TWINT)| // Disable Interrupt.\r (0<<TWEA)|(0<<TWSTA)|(0<<TWSTO)| // No Signal requests.\r (0<<TWWC);\r
+ \r
+}\r
+\r
+unsigned char I2c_WriteByte(unsigned char msg) {\r
+ uint8_t twst;\r TWDR = msg;\r TWCR = (1<<TWINT) | (1<<TWEN);\r TWI_Wait_Busy();\r // check value of TWI Status Register. Mask prescaler bits\r twst = TW_STATUS & 0xF8;\r if( twst != TW_MT_DATA_ACK) return 1;\r return 0;\r
+}\r
+unsigned char I2c_ReadByte(unsigned char ack_mode) {\r
+ TWCR = (1<<TWINT) | (1<<TWEN) |ack_mode;\r TWI_Wait_Busy();\r return TWDR;\r
+\r
+}\r
+void I2c_StartCondition(void) {\r
+ TWCR = (1<<TWINT) | (1<<TWSTA) | (1<<TWEN);\r
+ TWI_Wait_Busy();\r
+ uint8_t twst = TW_STATUS & 0xF8;\r if ( (twst != TW_START) && (twst != TW_REP_START)) return ;// return 1;\r}\r
+/*\r\r
+// send device address\r\r
+TWDR = address;\r\r
+TWCR = (1<<TWINT) | (1<<TWEN);\r\r
+\r\r
+// wail until transmission completed and ACK/NACK has been received\r\r
+while(!(TWCR & (1<<TWINT)));\r\r
+\r\r
+// check value of TWI Status Register. Mask prescaler bits.\r\r
+twst = TW_STATUS & 0xF8;\r\r
+if ( (twst != TW_MT_SLA_ACK) && (twst != TW_MR_SLA_ACK) ) return 1;\r\r
+\r\r
+return 0;\r\r
+\r
+}\r
+*/\r
+void I2c_StopCondition(void) {\r
+\r
+ TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWSTO);\r\r
+ while(TWCR & (1<<TWSTO));\r
+\r
+}\r
+\r
+#endif
\ No newline at end of file
--- /dev/null
+#ifndef TWI_MASTER_H\r
+#define TWI_MASTER_H\r
+#include<avr/io.h> \r
+//********** Defines **********//\r
+\r
+// Defines controlling timing limits\r
+#define TWI_FAST_MODE\r
+#ifdef __4MHZ__\r
+#define SYS_CLK 4000.0 // [kHz]\r
+#else\r
+#define SYS_CLK 8000.0 // [kHz]\r
+#endif\r
+\r
+\r
+\r
+#ifdef TWI_FAST_MODE // TWI FAST mode timing limits. SCL = 100-400kHz\r
+ #define T2_TWI ((SYS_CLK *1300) /1000000) +1 // >1,3us\r
+ #define T4_TWI ((SYS_CLK * 600) /1000000) +1 // >0,6us\r
+ \r
+#else // TWI STANDARD mode timing limits. SCL <= 100kHz\r
+ #define T2_TWI ((SYS_CLK *4700) /1000000) +1 // >4,7us\r
+ #define T4_TWI ((SYS_CLK *4000) /1000000) +1 // >4,0us\r
+#endif\r
+\r
+// Defines controling code generating\r
+//#define PARAM_VERIFICATION\r
+//#define NOISE_TESTING\r
+//#define SIGNAL_VERIFY\r
+\r
+//USI_TWI messages and flags and bit masks\r
+//#define SUCCESS 7\r
+//#define MSG 0\r
+/****************************************************************************\r
+ Bit and byte definitions\r
+****************************************************************************/\r
+#define TWI_READ_BIT 0 // Bit position for R/W bit in "address byte".\r
+#define TWI_ADR_BITS 1 // Bit position for LSB of the slave address bits in the init byte.\r
+#define TWI_NACK_BIT 0 // Bit position for (N)ACK bit.\r
+\r
+#define USI_TWI_NO_DATA 0x00 // Transmission buffer is empty\r
+#define USI_TWI_DATA_OUT_OF_BOUND 0x01 // Transmission buffer is outside SRAM space\r
+#define USI_TWI_UE_START_CON 0x02 // Unexpected Start Condition\r
+#define USI_TWI_UE_STOP_CON 0x03 // Unexpected Stop Condition\r
+#define USI_TWI_UE_DATA_COL 0x04 // Unexpected Data Collision (arbitration)\r
+#define USI_TWI_NO_ACK_ON_DATA 0x05 // The slave did not acknowledge all data\r
+#define USI_TWI_NO_ACK_ON_ADDRESS 0x06 // The slave did not acknowledge the address\r
+#define USI_TWI_MISSING_START_CON 0x07 // Generated Start Condition not detected on bus\r
+#define USI_TWI_MISSING_STOP_CON 0x08 // Generated Stop Condition not detected on bus\r
+\r
+// Device dependant defines\r
+\r
+#if defined(__AVR_AT90Mega169__) | defined(__AVR_ATmega169PA__) | \\r
+ defined(__AVR_AT90Mega165__) | defined(__AVR_ATmega165__) | \\r
+ defined(__AVR_ATmega325__) | defined(__AVR_ATmega3250__) | \\r
+ defined(__AVR_ATmega645__) | defined(__AVR_ATmega6450__) | \\r
+ defined(__AVR_ATmega329__) | defined(__AVR_ATmega3290__) | \\r
+ defined(__AVR_ATmega649__) | defined(__AVR_ATmega6490__)\r
+ #define DDR_USI DDRE\r
+ #define PORT_USI PORTE\r
+ #define PIN_USI PINE\r
+ #define PORT_USI_SDA PORTE5\r
+ #define PORT_USI_SCL PORTE4\r
+ #define PIN_USI_SDA PINE5\r
+ #define PIN_USI_SCL PINE4\r
+#endif\r
+\r
+#if defined(__AVR_ATtiny25__) | defined(__AVR_ATtiny45__) | defined(__AVR_ATtiny85__) | \\r
+ defined(__AVR_AT90Tiny26__) | defined(__AVR_ATtiny26__)\r
+ #define DDR_USI DDRB\r
+ #define PORT_USI PORTB\r
+ #define PIN_USI PINB\r
+ #define PORT_USI_SDA PORTB0\r
+ #define PORT_USI_SCL PORTB2\r
+ #define PIN_USI_SDA PINB0\r
+ #define PIN_USI_SCL PINB2\r
+#endif\r
+\r
+#if defined(__AVR_AT90Tiny2313__) | defined(__AVR_ATtiny2313__)\r
+ #define DDR_USI DDRB\r
+ #define PORT_USI PORTB\r
+ #define PIN_USI PINB\r
+ #define PORT_USI_SDA PORTB5\r
+ #define PORT_USI_SCL PORTB7\r
+ #define PIN_USI_SDA PINB5\r
+ #define PIN_USI_SCL PINB7\r
+#endif\r
+\r
+#if defined(__AVR_ATtiny84__) | defined(__AVR_ATtiny84A__)\r
+#define DDR_USI DDRA\r
+#define PORT_USI PORTA\r
+#define PIN_USI PINA\r
+#define PORT_USI_SDA PORTA6\r
+#define PORT_USI_SCL PORTA4\r
+#define PIN_USI_SDA PINA6\r
+#define PIN_USI_SCL PINA4\r
+#endif\r
+\r
+\r
+//****************** ATMEGA TWI without USI\r
+#define TWI_BUFFER_SIZE 4 // Set this to the largest message size that will be sent including address byte.\r
+#define TWI_TWBR 0x4C; // 0x0C // TWI Bit rate Register setting.\r// Se Application note for detailed\r// information on setting this value.\r\r
+\r
+\r
+\r
+#define ACK (1<<TWI_NACK_BIT )\r
+#define NO_ACK 0\r
+\r
+\r
+\r
+#if defined(__AVR_ATmega328PB__)\r
+#undef ACK\r
+#define ACK (1<<TWEA)\r
+\r
+#define TWBR TWBR0\r
+#define TWSR TWSR0\r
+#define TWCR TWCR0\r
+#define TWDR TWDR0\r
+#define TW_STATUS_MASK (_BV(TWS7)|_BV(TWS6)|_BV(TWS5)|_BV(TWS4)|_BV(TWS3))\r
+#define TW_STATUS (TWSR_R & TW_STATUS_MASK)\r
+\r
+#endif\r
+\r
+#if defined(__AVR_ATmega328P__)\r
+#undef ACK\r
+#define ACK (1<<TWEA)\r
+\r
+#define TW_STATUS_MASK (_BV(TWS7)|_BV(TWS6)|_BV(TWS5)|_BV(TWS4)|_BV(TWS3))\r
+#define TW_STATUS (TWSR_R & TW_STATUS_MASK)\r
+\r
+\r
+#endif\r
+\r
+// General defines\r
+#define TRUE 1\r
+#define FALSE 0\r
+\r
+\r
+//********** Prototypes **********//\r
+\r
+void TWI_Master_Initialise( void );\r
+\r
+unsigned char I2c_WriteByte(unsigned char msg);\r
+unsigned char I2c_ReadByte(unsigned char ack_mode);\r
+void I2c_StartCondition(void);\r
+void I2c_StopCondition(void);\r
+\r
+#endif
\ No newline at end of file
* success of the transmission.\r
*\r
****************************************************************************/\r
+\r
+#ifdef __4MHZ__\r
+#define F_CPU 4000000UL\r
+#else\r
#define F_CPU 8000000UL\r
+#endif\r
#include <avr/io.h>\r
-#include "USI_TWI_Master.h"\r
+#include "TWI_Master.h"\r
#include <util/delay.h>\r
\r
unsigned char USI_TWI_Master_Transfer( unsigned char );\r
#define PIN_USI_SCL PINA4\r
#endif\r
\r
+\r
+#if defined(__AVR_ATmega328__) | defined(__AVR_ATmega328P__) | defined(__AVR_ATmega328PB__)\r
+#define DDR_USI DDRC\r
+#define PORT_USI PORTC\r
+#define PIN_USI PINC\r
+#define PORT_USI_SDA PORTC4\r
+#define PORT_USI_SCL PORTC5\r
+#define PIN_USI_SDA PINC4\r
+#define PIN_USI_SCL PINC5\r
+#endif\r
+\r
// General defines\r
#define TRUE 1\r
#define FALSE 0\r
\r
-#define ACK (1<<TWI_NACK_BIT )\r
-#define NO_ACK 0\r
+//#define ACK (1<<TWI_NACK_BIT )\r
+//#define NO_ACK 0\r
\r
\r
//********** Prototypes **********//\r
--- /dev/null
+// Copyright (c) 2017, Tobias Mueller tm(at)tm3d.de\r
+// All rights reserved. \r
+// \r
+// Redistribution and use in source and binary forms, with or without \r
+// modification, are permitted provided that the following conditions are \r
+// met: \r
+// \r
+// * Redistributions of source code must retain the above copyright \r
+// notice, this list of conditions and the following disclaimer. \r
+// * Redistributions in binary form must reproduce the above copyright \r
+// notice, this list of conditions and the following disclaimer in the \r
+// documentation and/or other materials provided with the \r
+// distribution. \r
+// * All advertising materials mentioning features or use of this \r
+// software must display the following acknowledgement: This product \r
+// includes software developed by tm3d.de and its contributors. \r
+// * Neither the name of tm3d.de nor the names of its contributors may \r
+// be used to endorse or promote products derived from this software \r
+// without specific prior written permission. \r
+// \r
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \r
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT \r
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR \r
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT \r
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, \r
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT \r
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, \r
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY \r
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT \r
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE \r
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \r
+\r
+\r
+.comm crc16,2\r
+.comm crc8,2\r
+#define _CRC8_16_\r
+\r
+CRC16_alg:\r
+ ;crc\r
+ \r
+ lds r_crc,crc16;lade low byte fuer vergleich mit bit\r
+ mov r_temp,r_crc\r
+ andi r_temp,0x01 ;nur bit 0\r
+ cp r_temp2,r_temp ;r_temp2 wird in interruptroutine gesetzt\r
+ brne crc2_16 ;nur schieben\r
+ ;schieben und XOR\r
+ lds r_temp2,crc16+1\r
+ lsr r_temp2\r
+ ror r_crc\r
+ ldi r_temp, 0x01 \r
+ eor r_crc, r_temp\r
+ ldi r_temp, 0xA0 ;\r
+ eor r_temp2, r_temp\r
+ rjmp crce_16\r
+crc2_16:\r
+ lds r_temp2,crc16+1\r
+ lsr r_temp2\r
+ ror r_crc\r
+crce_16:\r
+ sts crc16,r_crc\r
+ sts crc16+1,r_temp2\r
+ \r
+ ret\r
+\r
+.macro CRCS ; CRC beim Senden\r
+ push r_crc\r
+ push r_temp2\r
+ rcall CRC16_alg\r
+ pop r_temp2\r
+ ;crc\r
+ lds r_crc,crc8\r
+ mov r_temp,r_crc\r
+ andi r_temp,0x01\r
+ cp r_temp2,r_temp\r
+ brne crc2_8\r
+ lsr r_crc\r
+ ldi r_temp,0x8c\r
+ eor r_crc,r_temp\r
+ rjmp crce_8\r
+crc2_8:\r
+ lsr r_crc\r
+crce_8:\r
+ sts crc8,r_crc\r
+ pop r_crc\r
+.endm\r
+\r
+.macro CRCR; CRC beim Empfangen\r
+ ;clr r_temp2\r
+ ;sbrc r_rwbyte,7\r
+ ;ldi r_temp2,1\r
+ push r_crc\r
+ rcall CRC16_alg\r
+ pop r_crc\r
+.endm\r
+\r
+.macro CRCInit1; CRC initialisierung bei READ_COMMAND\r
+ ldi r_temp,0\r
+ sts crc16,r_temp\r
+ sts crc16+1,r_temp\r
+.endm\r
+\r
+.macro CRCInit2; CRC initialisierung bei READ_DATA\r
+ ldi r_temp,0\r
+ sts crc8,r_temp\r
+.endm\r
#if defined(__AVR_ATtiny24__)||defined(__AVR_ATtiny44__) || defined(__AVR_ATtiny84__)||defined(__AVR_ATtiny24A__)||defined(__AVR_ATtiny44A__) || defined(__AVR_ATtiny84A__)\r
#include "../common/OWSet_ATTINYX4.s"\r
#endif\r
- \r
+\r
+#if defined(__AVR_ATmega168__)||defined(__AVR_ATmega168A__) ||defined(__AVR_ATmega328__) ||defined(__AVR_ATmega328P__) ||defined(__AVR_ATmega328PB__) \r
+#include "../common/OWSet_ATMEGA168.s"\r
+#endif \r
+\r
#if defined(__AVR_ATtiny25__)||defined(__AVR_ATtiny45__) || defined(__AVR_ATtiny85__)\r
#include "../common/OWSet_ATTINYX5.s"\r
#endif\r
--- /dev/null
+\r
+// Copyright (c) 2017, Tobias Mueller tm(at)tm3d.de\r
+// All rights reserved. \r
+// \r
+// Redistribution and use in source and binary forms, with or without \r
+// modification, are permitted provided that the following conditions are \r
+// met: \r
+// \r
+// * Redistributions of source code must retain the above copyright \r
+// notice, this list of conditions and the following disclaimer. \r
+// * Redistributions in binary form must reproduce the above copyright \r
+// notice, this list of conditions and the following disclaimer in the \r
+// documentation and/or other materials provided with the \r
+// distribution. \r
+// * All advertising materials mentioning features or use of this \r
+// software must display the following acknowledgement: This product \r
+// includes software developed by tm3d.de and its contributors. \r
+// * Neither the name of tm3d.de nor the names of its contributors may \r
+// be used to endorse or promote products derived from this software \r
+// without specific prior written permission. \r
+// \r
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \r
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT \r
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR \r
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT \r
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, \r
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT \r
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, \r
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY \r
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT \r
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE \r
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \r
+\r
+#define _CHANGEABLE_ID_\r
+#define _ZERO_POLLING_\r
+#define _HANDLE_CC_COMMAND_\r
+//#define __4MHZ__\r
+//#define _DB_\r
+\r
+#include "../common/OWConfig.s"\r
+#include "../common/OWCRC8.s"\r
+\r
+.extern pack1,8\r
+\r
+.extern pack2,8\r
+\r
+\r
+\r
+.comm block,1 ; Block der augegeben, geschrieben wird (Parameter von READ/WRITE Scratchpad)\r
+.comm cpsp,1 ; Copy Scratchpad marker\r
+\r
+\r
+.macro CHIP_INIT ;r_temp is pushed other Registers should be saved\r
+ ldi r_temp,0\r
+ sts cpsp,r_temp\r
+Init_EEPROM_read:\r
+ push r_bytep\r
+ push r_rwbyte\r
+ sbic _SFR_IO_ADDR(EECR), EEPE\r
+ rjmp Init_EEPROM_read\r
+ ldi r_temp,0\r
+ out _SFR_IO_ADDR(EEARH), r_temp\r
+ ldi r_temp,2\r
+ out _SFR_IO_ADDR(EEARL), r_temp\r
+ sbi _SFR_IO_ADDR(EECR), EERE\r
+ in r_temp,_SFR_IO_ADDR(EEDR)\r
+ sbrs r_temp,7\r
+ rcall hrc_recall_eeprom_func1\r
+ pop r_rwbyte\r
+ pop r_bytep\r
+.endm\r
+\r
+.macro COMMAND_TABLE\r
+ rjmp h_readscratchpad1\r
+ rjmp h_writescratchpad1\r
+ rjmp h_convert_run1\r
+ rjmp h_readscratchpad2\r
+ rjmp h_writescratchpad2\r
+ rjmp h_convert_run2\r
+.endm\r
+\r
+#include "../common/OWRomFunctionsDual.s"\r
+#include "../common/OWTimerInterrupt.s"\r
+\r
+\r
+\r
+; Ab hier Geraeteabhaenging\r
+#define OW_READ_SCRATCHPAD1 OW_FIRST_COMMAND+0\r
+#define OW_WRITE_SCRATCHPAD1 OW_FIRST_COMMAND+1\r
+#define OW_CONVERT_RUN1 OW_FIRST_COMMAND+2\r
+#define OW_READ_SCRATCHPAD2 OW_FIRST_COMMAND+3\r
+#define OW_WRITE_SCRATCHPAD2 OW_FIRST_COMMAND+4\r
+#define OW_CONVERT_RUN2 OW_FIRST_COMMAND+5\r
+\r
+\r
+;---------------------------------------------------\r
+; READ COMMAND and start operation\r
+;---------------------------------------------------\r
+\r
+#ifdef _HANDLE_CC_COMMAND_\r
+h_readcommand12:\r
+ clr r_bytep\r
+ cjmp 0x44,hrc_set_convertT12\r
+ ldi r_mode,OW_SLEEP\r
+ rjmp handle_end\r
+#endif\r
+\r
+\r
+h_readcommand1:\r
+ clr r_bytep\r
+#ifndef _DIS_FLASH_\r
+ FLASH_COMMANDS ; muss zu erst sein....\r
+#endif\r
+ cjmp 0xBE,hrc_set_readscratchpad1\r
+ cjmp 0x4E,hrc_set_writescratchpad1\r
+ cjmp 0x44,hrc_set_convertT1\r
+ cjmp 0x48,hrc_copy_scratchpad1\r
+ cjmp 0xB8,hrc_recall_eeprom1\r
+ FW_CONFIG_INFO1\r
+#ifdef _CHANGEABLE_ID_\r
+ CHANGE_ID_COMMANDS\r
+#endif\r
+ ldi r_mode,OW_SLEEP\r
+ rjmp handle_end\r
+\r
+hrc_set_readscratchpad1:\r
+ ldi r_mode,OW_READ_SCRATCHPAD1\r
+ ldi r_sendflag,1\r
+ CRCInit2\r
+ rjmp h_readscratchpad1\r
+\r
+hrc_set_writescratchpad1:\r
+ ldi r_mode,OW_WRITE_SCRATCHPAD1\r
+ ldi r_bytep,2 ;start to write in 2\r
+ rjmp handle_end\r
+\r
+hrc_recall_eeprom1:\r
+ rcall hrc_recall_eeprom_func1\r
+ rjmp handle_end\r
+\r
+#ifdef _HANDLE_CC_COMMAND_\r
+hrc_set_convertT12:\r
+ ldi r_temp,3\r
+ sts gcontrol,r_temp\r
+ rjmp hrc_set_convertT12b //egal ob hrc_set_convertT12b oder hrc_set_convertT22b\r
+#endif\r
+\r
+hrc_set_convertT1:\r
+ ldi r_temp,1\r
+ sts gcontrol,r_temp\r
+hrc_set_convertT12b:\r
+ ldi r_mode,OW_CONVERT_RUN1\r
+ ldi r_sendflag,3 ;set bit 0 and 1 for no zero polling\r
+h_convert_run1:\r
+ ldi r_bcount,0\r
+ ldi r_rwbyte,0\r
+ rjmp handle_end_no_bcount \r
+\r
+\r
+\r
+hrc_copy_scratchpad1:\r
+ ldi r_bytep,2\r
+ configZ pack1,r_bytep\r
+ clr r_bytep\r
+hrc_copy_scratchpad_EEPROM_write1:\r
+ sbic _SFR_IO_ADDR(EECR), EEPE \r
+ rjmp hrc_copy_scratchpad_EEPROM_write1\r
+ ldi r_temp, (0<<EEPM1)|(0<<EEPM0)\r
+ out _SFR_IO_ADDR(EECR), r_temp\r
+ ldi r_temp,0\r
+ out _SFR_IO_ADDR(EEARH),r_temp\r
+ out _SFR_IO_ADDR(EEARL), r_bytep\r
+ ld r_rwbyte,Z+\r
+ out _SFR_IO_ADDR(EEDR), r_rwbyte\r
+ sbi _SFR_IO_ADDR(EECR), EEMPE\r
+ sbi _SFR_IO_ADDR(EECR), EEPE\r
+ inc r_bytep\r
+ cpi r_bytep,3\r
+ brne hrc_copy_scratchpad_EEPROM_write1\r
+ rjmp handle_end\r
+\r
+\r
+hrc_recall_eeprom_func1:\r
+ ldi r_bytep,2\r
+ configZ pack1,r_bytep\r
+ clr r_bytep\r
+ clr r_temp\r
+hrc_recall_eeprom_EEPROM_read1:\r
+ sbic _SFR_IO_ADDR(EECR), EEPE\r
+ rjmp hrc_recall_eeprom_EEPROM_read1\r
+ out _SFR_IO_ADDR(EEARH), r_temp\r
+ out _SFR_IO_ADDR(EEARL), r_bytep\r
+ sbi _SFR_IO_ADDR(EECR), EERE\r
+ in r_rwbyte,_SFR_IO_ADDR(EEDR)\r
+ st Z+,r_rwbyte\r
+ inc r_bytep\r
+ cpi r_bytep,3\r
+ brne hrc_recall_eeprom_EEPROM_read1\r
+ ret\r
+\r
+\r
+\r
+\r
+\r
+\r
+;---------------------------------------------------\r
+; READ SCRATCHPAD\r
+;---------------------------------------------------\r
+\r
+h_readscratchpad1:\r
+ cpi r_bytep,8\r
+ breq h_readscratchpad_crc1\r
+ cpi r_bytep,9\r
+ breq h_readscratchpad_all1\r
+ configZ pack1,r_bytep\r
+ ld r_rwbyte,Z\r
+ rjmp h_readscratchpad_endc1\r
+h_readscratchpad_crc1:\r
+ lds r_rwbyte,crc\r
+h_readscratchpad_endc1:\r
+ inc r_bytep\r
+ ldi r_bcount,1 \r
+ rjmp handle_end\r
+h_readscratchpad_all1:\r
+ rjmp handle_end_sleep\r
+\r
+\r
+\r
+\r
+\r
+;---------------------------------------------------\r
+; WRITE SCRATCHPAD\r
+;---------------------------------------------------\r
+\r
+h_writescratchpad1:\r
+ configZ pack1,r_bytep\r
+ inc r_bytep\r
+ cpi r_bytep,5\r
+ breq h_writescratchpad_all1\r
+ st Z,r_rwbyte\r
+ rjmp handle_end\r
+h_writescratchpad_all1:\r
+ ;ori r_rwbyte,0x1F ; Alle unteren Bits sind immer 1 -->VOC use different\r
+ st Z,r_rwbyte\r
+ rjmp handle_end_sleep\r
+\r
+;*****************************************************************************************************************************************************************************************\r
+;*****************************************************************************************************************************************************************************************\r
+;*****************************************************************************************************************************************************************************************\r
+;*****************************************************************************************************************************************************************************************\r
+;*****************************************************************************************************************************************************************************************\r
+\r
+\r
+\r
+h_readcommand2:\r
+ clr r_bytep\r
+#ifndef _DIS_FLASH_\r
+ FLASH_COMMANDS ; muss zu erst sein....\r
+#endif\r
+ cjmp 0xBE,hrc_set_readscratchpad2\r
+ cjmp 0x4E,hrc_set_writescratchpad2\r
+ cjmp 0x44,hrc_set_convertT2\r
+ cjmp 0x48,hrc_copy_scratchpad2\r
+ cjmp 0xB8,hrc_recall_eeprom2\r
+ FW_CONFIG_INFO2\r
+#ifdef _CHANGEABLE_ID_\r
+ CHANGE_ID_COMMANDS\r
+#endif\r
+ ldi r_mode,OW_SLEEP\r
+ rjmp handle_end\r
+\r
+hrc_set_readscratchpad2:\r
+ ldi r_mode,OW_READ_SCRATCHPAD2\r
+ ldi r_sendflag,1\r
+ CRCInit2\r
+ rjmp h_readscratchpad2\r
+\r
+hrc_set_writescratchpad2:\r
+ ldi r_mode,OW_WRITE_SCRATCHPAD2\r
+ ldi r_bytep,2 ;start to write in 2\r
+ rjmp handle_end\r
+\r
+hrc_recall_eeprom2:\r
+ rcall hrc_recall_eeprom_func2\r
+ rjmp handle_end\r
+\r
+hrc_set_convertT2:\r
+ ldi r_temp,1\r
+ sts gcontrol,r_temp\r
+hrc_set_convertT22b:\r
+ ldi r_mode,OW_CONVERT_RUN2\r
+ ldi r_sendflag,3 ;set bit 0 and 1 for no zero polling\r
+h_convert_run2:\r
+ ldi r_bcount,0\r
+ ldi r_rwbyte,0\r
+ rjmp handle_end_no_bcount \r
+\r
+\r
+\r
+hrc_copy_scratchpad2:\r
+ ldi r_bytep,2\r
+ configZ pack2,r_bytep\r
+ clr r_bytep\r
+hrc_copy_scratchpad_EEPROM_write2:\r
+ sbic _SFR_IO_ADDR(EECR), EEPE \r
+ rjmp hrc_copy_scratchpad_EEPROM_write2\r
+ ldi r_temp, (0<<EEPM1)|(0<<EEPM0)\r
+ out _SFR_IO_ADDR(EECR), r_temp\r
+ ldi r_temp,0\r
+ out _SFR_IO_ADDR(EEARH),r_temp\r
+ out _SFR_IO_ADDR(EEARL), r_bytep\r
+ ld r_rwbyte,Z+\r
+ out _SFR_IO_ADDR(EEDR), r_rwbyte\r
+ sbi _SFR_IO_ADDR(EECR), EEMPE\r
+ sbi _SFR_IO_ADDR(EECR), EEPE\r
+ inc r_bytep\r
+ cpi r_bytep,3\r
+ brne hrc_copy_scratchpad_EEPROM_write2\r
+ rjmp handle_end\r
+\r
+\r
+hrc_recall_eeprom_func2:\r
+ ldi r_bytep,2\r
+ configZ pack2,r_bytep\r
+ //clr r_bytep\r
+ ldi r_bytep,8\r
+ clr r_temp\r
+hrc_recall_eeprom_EEPROM_read2:\r
+ sbic _SFR_IO_ADDR(EECR), EEPE\r
+ rjmp hrc_recall_eeprom_EEPROM_read2\r
+ out _SFR_IO_ADDR(EEARH), r_temp\r
+ out _SFR_IO_ADDR(EEARL), r_bytep\r
+ sbi _SFR_IO_ADDR(EECR), EERE\r
+ in r_rwbyte,_SFR_IO_ADDR(EEDR)\r
+ st Z+,r_rwbyte\r
+ inc r_bytep\r
+ cpi r_bytep,3\r
+ brne hrc_recall_eeprom_EEPROM_read2\r
+ ret\r
+\r
+\r
+\r
+\r
+\r
+\r
+;---------------------------------------------------\r
+; READ SCRATCHPAD\r
+;---------------------------------------------------\r
+\r
+h_readscratchpad2:\r
+ cpi r_bytep,8\r
+ breq h_readscratchpad_crc2\r
+ cpi r_bytep,9\r
+ breq h_readscratchpad_all2\r
+ configZ pack2,r_bytep\r
+ ld r_rwbyte,Z\r
+ rjmp h_readscratchpad_endc2\r
+h_readscratchpad_crc2:\r
+ lds r_rwbyte,crc\r
+h_readscratchpad_endc2:\r
+ inc r_bytep\r
+ ldi r_bcount,1 \r
+ rjmp handle_end\r
+h_readscratchpad_all2:\r
+ rjmp handle_end_sleep\r
+\r
+\r
+\r
+\r
+\r
+;---------------------------------------------------\r
+; WRITE SCRATCHPAD\r
+;---------------------------------------------------\r
+\r
+h_writescratchpad2:\r
+ configZ pack2,r_bytep\r
+ inc r_bytep\r
+ cpi r_bytep,5\r
+ breq h_writescratchpad_all2\r
+ st Z,r_rwbyte\r
+ rjmp handle_end\r
+h_writescratchpad_all2:\r
+ ;ori r_rwbyte,0x1F ; Alle unteren Bits sind immer 1 -->VOC use different\r
+ st Z,r_rwbyte\r
+ rjmp handle_end_sleep\r
+\r
+\r
+\r
+\r
+\r
+#include "../common/OWPinInterrupt.s"\r
+.end\r
--- /dev/null
+\r
+// Copyright (c) 2018, Tobias Mueller tm(at)tm3d.de\r
+// All rights reserved. \r
+// \r
+// Redistribution and use in source and binary forms, with or without \r
+// modification, are permitted provided that the following conditions are \r
+// met: \r
+// \r
+// * Redistributions of source code must retain the above copyright \r
+// notice, this list of conditions and the following disclaimer. \r
+// * Redistributions in binary form must reproduce the above copyright \r
+// notice, this list of conditions and the following disclaimer in the \r
+// documentation and/or other materials provided with the \r
+// distribution. \r
+// * All advertising materials mentioning features or use of this \r
+// software must display the following acknowledgement: This product \r
+// includes software developed by tm3d.de and its contributors. \r
+// * Neither the name of tm3d.de nor the names of its contributors may \r
+// be used to endorse or promote products derived from this software \r
+// without specific prior written permission. \r
+// \r
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \r
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT \r
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR \r
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT \r
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, \r
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT \r
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, \r
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY \r
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT \r
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE \r
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \r
+\r
+#define _CHANGEABLE_ID_\r
+#define _ZERO_POLLING_\r
+#define _HANDLE_CC_COMMAND_\r
+#include "../common/OWConfig.s"\r
+#include "../common/OWCRC8_16.s"\r
+\r
+.extern pack1,8\r
+\r
+.extern pack2,8\r
+.comm addr,1 ;zweites Adressbyte ist unnoetig (Warum auch immer fuer 32 Byte 16 Bit Adressen verwendet werden....)\r
+.comm crcsave,1 ; zwischenspeicherspeicher fuer crc nur zweites byte....\r
+//.extern am2302_temp,2\r
+.comm stat_to_sample,1\r
+\r
+.comm block,1 ; Block der augegeben, geschrieben wird (Parameter von READ/WRITE Scratchpad)\r
+.comm cpsp,1 ; Copy Scratchpad marker\r
+\r
+.macro CHIP_INIT ;r_temp is pushed other Registers should be saved\r
+ ldi r_temp,0\r
+ sts cpsp,r_temp\r
+Init_EEPROM_read:\r
+ push r_bytep\r
+ push r_rwbyte\r
+ sbic _SFR_IO_ADDR(EECR), EEPE\r
+ rjmp Init_EEPROM_read\r
+ ldi r_temp,0\r
+ out _SFR_IO_ADDR(EEARH), r_temp\r
+ ldi r_temp,2\r
+ out _SFR_IO_ADDR(EEARL), r_temp\r
+ sbi _SFR_IO_ADDR(EECR), EERE\r
+ in r_temp,_SFR_IO_ADDR(EEDR)\r
+ sbrs r_temp,7\r
+ rcall hrc_recall_eeprom_func1\r
+ pop r_rwbyte\r
+ pop r_bytep\r
+.endm\r
+\r
+\r
+.macro COMMAND_TABLE\r
+ rjmp h_readscratchpad1\r
+ rjmp h_writescratchpad1\r
+ rjmp h_convert_run1\r
+ rjmp h_readpioregaddr2\r
+ rjmp h_readpioreg2\r
+ rjmp h_readpioregcrc12\r
+ rjmp h_readpioregcrc22\r
+ rjmp h_readchanel2\r
+ rjmp h_readchanel_crc2\r
+ rjmp h_writechanel2\r
+ rjmp h_writecomchanel2\r
+ rjmp h_writesendaa2\r
+ rjmp h_writesendchanel2\r
+ rjmp h_resetactivity2\r
+ rjmp h_writeregaddr2\r
+ rjmp h_writereg2\r
+.endm\r
+\r
+#include "../common/OWRomFunctionsDual.s"\r
+#include "../common/OWTimerInterrupt.s"\r
+\r
+\r
+\r
+; Ab hier Geraeteabhaenging\r
+\r
+#define OW_READ_SCRATCHPAD1 OW_FIRST_COMMAND+0\r
+#define OW_WRITE_SCRATCHPAD1 OW_FIRST_COMMAND+1\r
+#define OW_CONVERT_RUN1 OW_FIRST_COMMAND+2\r
+\r
+#define OW_READ_PIO_REG_ADDR2 OW_FIRST_COMMAND+3\r
+#define OW_READ_PIO_REG2 OW_FIRST_COMMAND+4\r
+#define OW_READ_PIO_REG_CRC12 OW_FIRST_COMMAND+5\r
+#define OW_READ_PIO_REG_CRC22 OW_FIRST_COMMAND+6\r
+#define OW_READ_CHANEL2 OW_FIRST_COMMAND+7\r
+#define OW_READ_CHANEL_CRC2 OW_FIRST_COMMAND+8\r
+#define OW_WRITE_CHANEL2 OW_FIRST_COMMAND+9\r
+#define OW_WRITE_COMCHANEL2 OW_FIRST_COMMAND+10\r
+#define OW_WRITE_SENDAA2 OW_FIRST_COMMAND+11\r
+#define OW_WRITE_SEND_CHANEL2 OW_FIRST_COMMAND+12\r
+#define OW_RESET_ACTIVITY2 OW_FIRST_COMMAND+13\r
+#define OW_WRITE_REG_ADDR2 OW_FIRST_COMMAND+14\r
+#define OW_WRITE_REG2 OW_FIRST_COMMAND+15\r
+\r
+;---------------------------------------------------\r
+; READ COMMAND and start operation\r
+;---------------------------------------------------\r
+\r
+#ifdef _HANDLE_CC_COMMAND_\r
+h_readcommand12:\r
+ clr r_bytep\r
+ cjmp 0x44,hrc_set_convertT12\r
+ ldi r_mode,OW_SLEEP\r
+ rjmp handle_end\r
+#endif\r
+\r
+\r
+h_readcommand1:\r
+ clr r_bytep\r
+#ifndef _DIS_FLASH_\r
+ FLASH_COMMANDS ; muss zu erst sein....\r
+#endif\r
+ cjmp 0xBE,hrc_set_readscratchpad1\r
+ cjmp 0x4E,hrc_set_writescratchpad1\r
+ cjmp 0x44,hrc_set_convertT1\r
+ cjmp 0x48,hrc_copy_scratchpad1\r
+ cjmp 0xB8,hrc_recall_eeprom1\r
+ FW_CONFIG_INFO1\r
+#ifdef _CHANGEABLE_ID_\r
+ CHANGE_ID_COMMANDS\r
+#endif\r
+ ldi r_mode,OW_SLEEP\r
+ rjmp handle_end\r
+\r
+hrc_set_readscratchpad1:\r
+ ldi r_mode,OW_READ_SCRATCHPAD1\r
+ ldi r_sendflag,1\r
+ CRCInit2\r
+ rjmp h_readscratchpad1\r
+\r
+hrc_set_writescratchpad1:\r
+ ldi r_mode,OW_WRITE_SCRATCHPAD1\r
+ ldi r_bytep,2 ;start to write in 2\r
+ rjmp handle_end\r
+\r
+hrc_recall_eeprom1:\r
+ rcall hrc_recall_eeprom_func1\r
+ rjmp handle_end\r
+\r
+#ifdef _HANDLE_CC_COMMAND_\r
+hrc_set_convertT12:\r
+ rjmp hrc_set_convertT1\r
+#endif\r
+\r
+hrc_set_convertT1:\r
+ ldi r_temp,16\r
+ sts gcontrol,r_temp\r
+hrc_set_convertT12b:\r
+ ldi r_mode,OW_CONVERT_RUN1\r
+ ldi r_sendflag,3 ;set bit 0 and 1 for no zero polling\r
+h_convert_run1:\r
+ ldi r_bcount,0\r
+ ldi r_rwbyte,0\r
+ rjmp handle_end_no_bcount \r
+\r
+\r
+\r
+hrc_copy_scratchpad1:\r
+ ldi r_bytep,2\r
+ configZ pack1,r_bytep\r
+ clr r_bytep\r
+hrc_copy_scratchpad_EEPROM_write1:\r
+ sbic _SFR_IO_ADDR(EECR), EEPE \r
+ rjmp hrc_copy_scratchpad_EEPROM_write1\r
+ ldi r_temp, (0<<EEPM1)|(0<<EEPM0)\r
+ out _SFR_IO_ADDR(EECR), r_temp\r
+ ldi r_temp,0\r
+ out _SFR_IO_ADDR(EEARH),r_temp\r
+ out _SFR_IO_ADDR(EEARL), r_bytep\r
+ ld r_rwbyte,Z+\r
+ out _SFR_IO_ADDR(EEDR), r_rwbyte\r
+ sbi _SFR_IO_ADDR(EECR), EEMPE\r
+ sbi _SFR_IO_ADDR(EECR), EEPE\r
+ inc r_bytep\r
+ cpi r_bytep,3\r
+ brne hrc_copy_scratchpad_EEPROM_write1\r
+ rjmp handle_end\r
+\r
+\r
+hrc_recall_eeprom_func1:\r
+ ldi r_bytep,2\r
+ configZ pack1,r_bytep\r
+ clr r_bytep\r
+ clr r_temp\r
+hrc_recall_eeprom_EEPROM_read1:\r
+ sbic _SFR_IO_ADDR(EECR), EEPE\r
+ rjmp hrc_recall_eeprom_EEPROM_read1\r
+ out _SFR_IO_ADDR(EEARH), r_temp\r
+ out _SFR_IO_ADDR(EEARL), r_bytep\r
+ sbi _SFR_IO_ADDR(EECR), EERE\r
+ in r_rwbyte,_SFR_IO_ADDR(EEDR)\r
+ st Z+,r_rwbyte\r
+ inc r_bytep\r
+ cpi r_bytep,3\r
+ brne hrc_recall_eeprom_EEPROM_read1\r
+ ret\r
+\r
+\r
+\r
+\r
+\r
+\r
+;---------------------------------------------------\r
+; READ SCRATCHPAD\r
+;---------------------------------------------------\r
+\r
+h_readscratchpad1:\r
+ cpi r_bytep,8\r
+ breq h_readscratchpad_crc1\r
+ cpi r_bytep,9\r
+ breq h_readscratchpad_all1\r
+ configZ pack1,r_bytep\r
+ ld r_rwbyte,Z\r
+ rjmp h_readscratchpad_endc1\r
+h_readscratchpad_crc1:\r
+ lds r_rwbyte,crc8\r
+h_readscratchpad_endc1:\r
+ inc r_bytep\r
+ ldi r_bcount,1 \r
+ rjmp handle_end\r
+h_readscratchpad_all1:\r
+ rjmp handle_end_sleep\r
+\r
+\r
+\r
+\r
+\r
+;---------------------------------------------------\r
+; WRITE SCRATCHPAD\r
+;---------------------------------------------------\r
+\r
+h_writescratchpad1:\r
+ configZ pack1,r_bytep\r
+ inc r_bytep\r
+ cpi r_bytep,5\r
+ breq h_writescratchpad_all1\r
+ st Z,r_rwbyte\r
+ rjmp handle_end\r
+h_writescratchpad_all1:\r
+ ;ori r_rwbyte,0x1F ; Alle unteren Bits sind immer 1 -->VOC use different\r
+ st Z,r_rwbyte\r
+ rjmp handle_end_sleep\r
+\r
+;*****************************************************************************************************************************************************************************************\r
+;*****************************************************************************************************************************************************************************************\r
+;*****************************************************************************************************************************************************************************************\r
+;*****************************************************************************************************************************************************************************************\r
+;*****************************************************************************************************************************************************************************************\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+h_readcommand2:\r
+ clr r_bytep\r
+#ifndef _DIS_FLASH_\r
+ FLASH_COMMANDS ; muss zu erst sein....\r
+#endif\r
+ cset 0xF0,OW_READ_PIO_REG_ADDR2\r
+ cljmp 0xF5,hrc_readchanel2\r
+ cset 0x5A,OW_WRITE_CHANEL2\r
+ cljmp 0xC3,hrc_reset_activity2\r
+ cset 0xCC,OW_WRITE_REG_ADDR2\r
+ FW_CONFIG_INFO2\r
+#ifdef _CHANGEABLE_ID_\r
+ CHANGE_ID_COMMANDS\r
+#endif\r
+ ldi r_mode,OW_SLEEP\r
+ rjmp handle_end\r
+\r
+\r
+h_readpioregaddr2:\r
+ cpi r_bytep,0 ;erstes Adressbyte ?\r
+ brne h_readpioreg_addr_byte12 ;nein dann weiter\r
+ //andi r_rwbyte,0x1F ; nur Adressen zwischen 0 und 0x1F zulassen\r
+ subi r_rwbyte,0x89 ;beim lesen von 0x88 --> 0xFF inc addr -> 0x00\r
+ sts addr,r_rwbyte ;speichern des ersten bytes\r
+ rjmp handle_end_inc\r
+h_readpioreg_addr_byte12: ;zweiters Addressbyte wird nicht gespeichert!\r
+ ldi r_mode,OW_READ_PIO_REG2 ;weiter zu read Memory\r
+ ;;ldi r_bcount,1 ;ist unten\r
+ ldi r_sendflag,1 ;jetzt sendet der Slave zum Master\r
+ clr r_bytep\r
+h_readpioreg2:\r
+ lds r_bytep,addr\r
+ inc r_bytep\r
+ sts addr,r_bytep\r
+ cpi r_bytep,0x08\r
+ breq h_readpioreg_init_crc2\r
+ brge h_readpioreg_end2 ; groeser dann nix senden\r
+ configZ pack2,r_bytep\r
+ ld r_rwbyte,Z\r
+ ;ldi r_bcount,1\r
+ rjmp handle_end ;sendet das Byte und geht zu h_readmemory\r
+h_readpioreg_init_crc2:; init erstes CRC byte\r
+ lds r_rwbyte,crc16\r
+ com r_rwbyte\r
+ lds r_temp,crc16+1\r
+ com r_temp\r
+ sts crcsave,r_temp\r
+ ldi r_mode,OW_READ_PIO_REG_CRC12\r
+ ;ldi r_bcount,1\r
+ rjmp handle_end\r
+h_readpioreg_end2:\r
+ ldi r_mode,OW_SLEEP\r
+ clr r_sendflag\r
+ rjmp handle_end\r
+h_readpioregcrc12:;init zweites CRC Byte\r
+ lds r_rwbyte,crcsave\r
+ ;ldi r_bcount,1\r
+ ldi r_mode,OW_READ_PIO_REG_CRC22\r
+ rjmp handle_end\r
+h_readpioregcrc22: ; 2. CRC Byte gesendet\r
+ rjmp h_readpioreg_end2\r
+\r
+\r
+hrc_readchanel2:\r
+ ldi r_sendflag,1 ;jetzt sendet der Slave zum Master\r
+ ldi r_mode,OW_READ_CHANEL2\r
+ ldi r_temp,8\r
+ sts gcontrol,r_temp\r
+ rjmp h_readchanel12\r
+h_readchanel2:\r
+ ldi r_temp,4\r
+ sts gcontrol,r_temp\r
+h_readchanel12:\r
+ cpi r_bytep,31\r
+ brge h_readchanelcrc12\r
+ lds r_rwbyte,stat_to_sample\r
+ sts pack2,r_rwbyte //sample \r
+ rjmp handle_end_inc\r
+h_readchanelcrc12:\r
+ lds r_rwbyte,crc16\r
+ com r_rwbyte\r
+ lds r_temp,crc16+1\r
+ com r_temp\r
+ sts crcsave,r_temp\r
+ ldi r_mode,OW_READ_CHANEL_CRC2\r
+ ;ldi r_bcount,1\r
+ rjmp handle_end\r
+h_readchanel_crc2:\r
+ clr r_bytep\r
+ ldi r_mode,OW_READ_CHANEL2\r
+ lds r_rwbyte,crcsave\r
+ rjmp handle_end\r
+ \r
+h_writechanel2:\r
+ sts crcsave,r_rwbyte\r
+ ldi r_mode,OW_WRITE_COMCHANEL2\r
+ rjmp handle_end\r
+h_writecomchanel2:\r
+ com r_rwbyte\r
+ lds r_temp,crcsave\r
+ cp r_rwbyte,r_temp\r
+ breq h_writeok2\r
+ rjmp handle_end_sleep\r
+h_writeok2:\r
+ sts pack2+1,r_rwbyte\r
+ ldi r_temp2,1\r
+ sts gcontrol,r_temp2\r
+ clr r_sendflag\r
+ ldi r_rwbyte,0xAA\r
+ ldi r_mode,OW_WRITE_SENDAA2\r
+ ldi r_sendflag,1 ;jetzt sendet der Slave zum Master\r
+ rjmp handle_end\r
+h_writesendaa2:\r
+ lds r_rwbyte,pack2\r
+ ldi r_mode,OW_WRITE_SEND_CHANEL2\r
+ rjmp handle_end\r
+h_writesendchanel2:\r
+ rjmp handle_end_sleep\r
+\r
+\r
+\r
+hrc_reset_activity2:\r
+ ldi r_temp,2\r
+ sts gcontrol,r_temp\r
+ ldi r_rwbyte,0xAA\r
+ ldi r_mode,OW_RESET_ACTIVITY2\r
+ ldi r_sendflag,1 ;jetzt sendet der Slave zum Master\r
+ rjmp handle_end\r
+h_resetactivity2:\r
+ rjmp handle_end_sleep\r
+\r
+\r
+h_writeregaddr2:\r
+ cpi r_bytep,0 ;erstes Adressbyte ?\r
+ brne h_writeregddr_byte12 ;nein dann weiter\r
+ //andi r_rwbyte,0x1F ; nur Adressen zwischen 0 und 0x1F zulassen\r
+ subi r_rwbyte,0x8B \r
+ brmi h_writereg_end2\r
+ sts addr,r_rwbyte ;speichern des ersten bytes\r
+ rjmp handle_end_inc\r
+h_writeregddr_byte12: ;zweiters Addressbyte wird nicht gespeichert!\r
+ ldi r_mode,OW_WRITE_REG2 ;weiter zu write Memory\r
+ ;;ldi r_bcount,1 ;ist unten\r
+ clr r_bytep\r
+ rjmp handle_end\r
+h_writereg2:\r
+ lds r_temp,addr\r
+ configZ pack2+3,r_temp\r
+ st Z,r_rwbyte\r
+ cpi r_temp,5\r
+ brge h_writereg_end2\r
+ inc r_temp\r
+ sts addr,r_temp\r
+ rjmp handle_end_sleep\r
+ \r
+h_writereg_end2:\r
+ rjmp handle_end_sleep\r
+\r
+\r
+\r
+\r
+\r
+#include "../common/OWPinInterrupt.s"\r
+.end
\ No newline at end of file
#define _CHANGEABLE_ID_\r
#define _ZERO_POLLING_\r
#define _HANDLE_CC_COMMAND_\r
- \r
+#define _NO_BOOTLOADER_PIN_ \r
+//#define __4MHZ__\r
//#define _DB_\r
\r
#include "../common/OWConfig.s"\r
\r
.extern pack1,8\r
\r
-//.extern am2302_temp,2\r
-\r
#if defined(__AVR_ATtiny25__)\r
.extern pack2,16\r
#else\r
.extern pack2,64\r
#endif\r
-//.extern am2302_temp,2\r
-//.extern am2302_hum,2\r
+\r
+\r
+\r
.comm block,1 ; Block der augegeben, geschrieben wird (Parameter von READ/WRITE Scratchpad)\r
.comm cpsp,1 ; Copy Scratchpad marker\r
\r
h_readcommand12:\r
clr r_bytep\r
cjmp 0x44,hrc_set_convertT12\r
- ldi r_mode,OW_SLEEP\r
- rjmp handle_end\r
+ rjmp h_readcccommand ;fuehre DS2438 commands aus...\r
+ //ldi r_mode,OW_SLEEP\r
+ //rjmp handle_end\r
#endif\r
\r
\r
#ifndef _DIS_FLASH_\r
FLASH_COMMANDS ; muss zu erst sein....\r
#endif\r
+ cjmp 0x44,hrc_set_convertT1\r
+h_readcccommand:\r
cjmp 0xBE,hrc_set_readscratchpad1\r
cjmp 0x4E,hrc_set_writescratchpad1\r
- cjmp 0x44,hrc_set_convertT1\r
cjmp 0x48,hrc_copy_scratchpad1\r
cjmp 0xB8,hrc_recall_eeprom1\r
FW_CONFIG_INFO1\r
hrc_set_convertT12:\r
ldi r_temp,3\r
sts gcontrol,r_temp\r
- lds r_temp,am2302_temp\r
+ lds r_temp,DS2438_2_TEMP\r
sts pack2+1,r_temp\r
- lds r_temp,am2302_temp+1\r
+ lds r_temp,DS2438_2_TEMP+1\r
sts pack2+2,r_temp\r
rjmp hrc_set_convertT12b\r
#endif\r
hrc_set_convertT2:\r
ldi r_temp,2\r
sts gcontrol,r_temp\r
- lds r_temp,am2302_temp\r
+ lds r_temp,DS2438_2_TEMP\r
sts pack2+1,r_temp\r
- lds r_temp,am2302_temp+1\r
+ lds r_temp,DS2438_2_TEMP+1\r
sts pack2+2,r_temp\r
rjmp handle_end_sleep\r
hrc_set_convertV2:\r
+ ldi r_temp,4\r
+ sts gcontrol,r_temp\r
lds r_temp,pack2\r
sbrs r_temp,3\r
rjmp hrc_set_convertVV2\r
- ldi r_temp,0xF4\r
+ lds r_temp,DS2438_2_VDD\r
sts pack2+3,r_temp\r
- ldi r_temp,0x01\r
+ lds r_temp,DS2438_2_VDD+1\r
sts pack2+4,r_temp\r
rjmp hrc_set_convertend2\r
hrc_set_convertVV2:\r
- ldi r_temp,3\r
+ ldi r_temp,8\r
sts gcontrol,r_temp\r
- lds r_temp,am2302_hum\r
+ lds r_temp,DS2438_2_VAD\r
sts pack2+3,r_temp\r
- lds r_temp,am2302_hum+1\r
+ lds r_temp,DS2438_2_VAD+1\r
sts pack2+4,r_temp\r
hrc_set_convertend2:\r
rjmp handle_end_sleep\r
--- /dev/null
+\r
+// Copyright (c) 2018, Tobias Mueller tm(at)tm3d.de\r
+// All rights reserved. \r
+// \r
+// Redistribution and use in source and binary forms, with or without \r
+// modification, are permitted provided that the following conditions are \r
+// met: \r
+// \r
+// * Redistributions of source code must retain the above copyright \r
+// notice, this list of conditions and the following disclaimer. \r
+// * Redistributions in binary form must reproduce the above copyright \r
+// notice, this list of conditions and the following disclaimer in the \r
+// documentation and/or other materials provided with the \r
+// distribution. \r
+// * All advertising materials mentioning features or use of this \r
+// software must display the following acknowledgement: This product \r
+// includes software developed by tm3d.de and its contributors. \r
+// * Neither the name of tm3d.de nor the names of its contributors may \r
+// be used to endorse or promote products derived from this software \r
+// without specific prior written permission. \r
+// \r
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \r
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT \r
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR \r
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT \r
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, \r
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT \r
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, \r
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY \r
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT \r
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE \r
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \r
+\r
+#define _CHANGEABLE_ID_\r
+#define _ZERO_POLLING_\r
+\r
+#include "../common/OWConfig.s"\r
+#include "../common/OWCRC16.s"\r
+\r
+.extern pack,8\r
+.comm addr,1 ;zweites Adressbyte ist unnoetig (Warum auch immer fuer 32 Byte 16 Bit Adressen verwendet werden....)\r
+.comm crcsave,1 ; zwischenspeicherspeicher fuer crc nur zweites byte....\r
+//.extern am2302_temp,2\r
+.comm stat_to_sample,1\r
+\r
+\r
+\r
+.macro CHIP_INIT \r
+.endm\r
+\r
+.macro COMMAND_TABLE\r
+ rjmp h_readpioregaddr\r
+ rjmp h_readpioreg\r
+ rjmp h_readpioregcrc1\r
+ rjmp h_readpioregcrc2\r
+ rjmp h_readchanel\r
+ rjmp h_readchanel_crc\r
+ rjmp h_writechanel\r
+ rjmp h_writecomchanel\r
+ rjmp h_writesendaa\r
+ rjmp h_writesendchanel\r
+ rjmp h_resetactivity\r
+ rjmp h_writeregaddr\r
+ rjmp h_writereg\r
+.endm\r
+\r
+#include "../common/OWRomFunctions.s"\r
+#include "../common/OWTimerInterrupt.s"\r
+\r
+\r
+\r
+; Ab hier Geraeteabhaenging\r
+#define OW_READ_PIO_REG_ADDR OW_FIRST_COMMAND+0\r
+#define OW_READ_PIO_REG OW_FIRST_COMMAND+1\r
+#define OW_READ_PIO_REG_CRC1 OW_FIRST_COMMAND+2\r
+#define OW_READ_PIO_REG_CRC2 OW_FIRST_COMMAND+3\r
+#define OW_READ_CHANEL OW_FIRST_COMMAND+4\r
+#define OW_READ_CHANEL_CRC OW_FIRST_COMMAND+5\r
+#define OW_WRITE_CHANEL OW_FIRST_COMMAND+6\r
+#define OW_WRITE_COMCHANEL OW_FIRST_COMMAND+7\r
+#define OW_WRITE_SENDAA OW_FIRST_COMMAND+8\r
+#define OW_WRITE_SEND_CHANEL OW_FIRST_COMMAND+9\r
+#define OW_RESET_ACTIVITY OW_FIRST_COMMAND+10\r
+#define OW_WRITE_REG_ADDR OW_FIRST_COMMAND+11\r
+#define OW_WRITE_REG OW_FIRST_COMMAND+12\r
+\r
+;---------------------------------------------------\r
+; READ COMMAND and start operation\r
+;---------------------------------------------------\r
+\r
+\r
+h_readcommand:\r
+ clr r_bytep\r
+#ifndef _DIS_FLASH_\r
+ FLASH_COMMANDS ; muss zu erst sein....\r
+#endif\r
+ cset 0xF0,OW_READ_PIO_REG_ADDR\r
+ cljmp 0xF5,hrc_readchanel\r
+ cset 0x5A,OW_WRITE_CHANEL\r
+ cljmp 0xC3,hrc_reset_activity\r
+ cset 0xCC,OW_WRITE_REG_ADDR\r
+ FW_CONFIG_INFO\r
+#ifdef _CHANGEABLE_ID_\r
+ CHANGE_ID_COMMANDS\r
+#endif\r
+ ldi r_mode,OW_SLEEP\r
+ rjmp handle_end\r
+\r
+\r
+h_readpioregaddr:\r
+ cpi r_bytep,0 ;erstes Adressbyte ?\r
+ brne h_readpioreg_addr_byte1 ;nein dann weiter\r
+ //andi r_rwbyte,0x1F ; nur Adressen zwischen 0 und 0x1F zulassen\r
+ subi r_rwbyte,0x89 ;beim lesen von 0x88 --> 0xFF inc addr -> 0x00\r
+ sts addr,r_rwbyte ;speichern des ersten bytes\r
+ rjmp handle_end_inc\r
+h_readpioreg_addr_byte1: ;zweiters Addressbyte wird nicht gespeichert!\r
+ ldi r_mode,OW_READ_PIO_REG ;weiter zu read Memory\r
+ ;;ldi r_bcount,1 ;ist unten\r
+ ldi r_sendflag,1 ;jetzt sendet der Slave zum Master\r
+ clr r_bytep\r
+h_readpioreg:\r
+ lds r_bytep,addr\r
+ inc r_bytep\r
+ sts addr,r_bytep\r
+ cpi r_bytep,0x08\r
+ breq h_readpioreg_init_crc\r
+ brge h_readpioreg_end ; groeser dann nix senden\r
+ configZ pack,r_bytep\r
+ ld r_rwbyte,Z\r
+ ;ldi r_bcount,1\r
+ rjmp handle_end ;sendet das Byte und geht zu h_readmemory\r
+h_readpioreg_init_crc:; init erstes CRC byte\r
+ lds r_rwbyte,crc\r
+ com r_rwbyte\r
+ lds r_temp,crc+1\r
+ com r_temp\r
+ sts crcsave,r_temp\r
+ ldi r_mode,OW_READ_PIO_REG_CRC1\r
+ ;ldi r_bcount,1\r
+ rjmp handle_end\r
+h_readpioreg_end:\r
+ ldi r_mode,OW_SLEEP\r
+ clr r_sendflag\r
+ rjmp handle_end\r
+h_readpioregcrc1:;init zweites CRC Byte\r
+ lds r_rwbyte,crcsave\r
+ ;ldi r_bcount,1\r
+ ldi r_mode,OW_READ_PIO_REG_CRC2\r
+ rjmp handle_end\r
+h_readpioregcrc2: ; 2. CRC Byte gesendet\r
+ rjmp h_readpioreg_end\r
+\r
+\r
+hrc_readchanel:\r
+ ldi r_sendflag,1 ;jetzt sendet der Slave zum Master\r
+ ldi r_mode,OW_READ_CHANEL\r
+ ldi r_temp,8\r
+ sts gcontrol,r_temp\r
+ rjmp h_readchanel1\r
+h_readchanel:\r
+ ldi r_temp,4\r
+ sts gcontrol,r_temp\r
+h_readchanel1:\r
+ cpi r_bytep,31\r
+ brge h_readchanelcrc1\r
+ lds r_rwbyte,stat_to_sample\r
+ sts pack,r_rwbyte //sample \r
+ rjmp handle_end_inc\r
+h_readchanelcrc1:\r
+ lds r_rwbyte,crc\r
+ com r_rwbyte\r
+ lds r_temp,crc+1\r
+ com r_temp\r
+ sts crcsave,r_temp\r
+ ldi r_mode,OW_READ_CHANEL_CRC\r
+ ;ldi r_bcount,1\r
+ rjmp handle_end\r
+h_readchanel_crc:\r
+ clr r_bytep\r
+ ldi r_mode,OW_READ_CHANEL\r
+ lds r_rwbyte,crcsave\r
+ rjmp handle_end\r
+ \r
+h_writechanel:\r
+ sts crcsave,r_rwbyte\r
+ ldi r_mode,OW_WRITE_COMCHANEL\r
+ rjmp handle_end\r
+h_writecomchanel:\r
+ com r_rwbyte\r
+ lds r_temp,crcsave\r
+ cp r_rwbyte,r_temp\r
+ breq h_writeok\r
+ rjmp handle_end_sleep\r
+h_writeok:\r
+ sts pack+1,r_rwbyte\r
+ ldi r_temp2,1\r
+ sts gcontrol,r_temp2\r
+ clr r_sendflag\r
+ ldi r_rwbyte,0xAA\r
+ ldi r_mode,OW_WRITE_SENDAA\r
+ ldi r_sendflag,1 ;jetzt sendet der Slave zum Master\r
+ rjmp handle_end\r
+h_writesendaa:\r
+ lds r_rwbyte,pack\r
+ ldi r_mode,OW_WRITE_SEND_CHANEL\r
+ rjmp handle_end\r
+h_writesendchanel:\r
+ rjmp handle_end_sleep\r
+\r
+\r
+\r
+hrc_reset_activity:\r
+ ldi r_temp,2\r
+ sts gcontrol,r_temp\r
+ ldi r_rwbyte,0xAA\r
+ ldi r_mode,OW_RESET_ACTIVITY\r
+ ldi r_sendflag,1 ;jetzt sendet der Slave zum Master\r
+ rjmp handle_end\r
+h_resetactivity:\r
+ rjmp handle_end_sleep\r
+\r
+\r
+h_writeregaddr:\r
+ cpi r_bytep,0 ;erstes Adressbyte ?\r
+ brne h_writeregddr_byte1 ;nein dann weiter\r
+ //andi r_rwbyte,0x1F ; nur Adressen zwischen 0 und 0x1F zulassen\r
+ subi r_rwbyte,0x8B \r
+ brmi h_writereg_end\r
+ sts addr,r_rwbyte ;speichern des ersten bytes\r
+ rjmp handle_end_inc\r
+h_writeregddr_byte1: ;zweiters Addressbyte wird nicht gespeichert!\r
+ ldi r_mode,OW_WRITE_REG ;weiter zu write Memory\r
+ ;;ldi r_bcount,1 ;ist unten\r
+ clr r_bytep\r
+ rjmp handle_end\r
+h_writereg:\r
+ lds r_temp,addr\r
+ configZ pack+3,r_temp\r
+ st Z,r_rwbyte\r
+ cpi r_temp,5\r
+ brge h_writereg_end \r
+ inc r_temp\r
+ sts addr,r_temp\r
+ rjmp handle_end_sleep\r
+ \r
+h_writereg_end:\r
+ rjmp handle_end_sleep\r
+\r
+\r
+\r
+\r
+\r
+#include "../common/OWPinInterrupt.s"\r
+.end
\ No newline at end of file
--- /dev/null
+\r
+// Copyright (c) 2017, Tobias Mueller tm(at)tm3d.de\r
+// All rights reserved. \r
+// \r
+// Redistribution and use in source and binary forms, with or without \r
+// modification, are permitted provided that the following conditions are \r
+// met: \r
+// \r
+// * Redistributions of source code must retain the above copyright \r
+// notice, this list of conditions and the following disclaimer. \r
+// * Redistributions in binary form must reproduce the above copyright \r
+// notice, this list of conditions and the following disclaimer in the \r
+// documentation and/or other materials provided with the \r
+// distribution. \r
+// * All advertising materials mentioning features or use of this \r
+// software must display the following acknowledgement: This product \r
+// includes software developed by tm3d.de and its contributors. \r
+// * Neither the name of tm3d.de nor the names of its contributors may \r
+// be used to endorse or promote products derived from this software \r
+// without specific prior written permission. \r
+// \r
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \r
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT \r
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR \r
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT \r
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, \r
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT \r
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, \r
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY \r
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT \r
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE \r
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \r
+\r
+#define _CHANGEABLE_ID_\r
+#define _ZERO_POLLING_\r
+//#define _HANDLE_CC_COMMAND_\r
+//#define _DB_\r
+//#define __4MHZ__\r
+ \r
+\r
+#include "../common/OWConfig.s"\r
+#include "../common/OWCRC16.s"\r
+\r
+.extern pin_state1,1\r
+.extern pin_state1,1\r
+.extern pin_state2,1\r
+.extern pin_set2,1\r
+.comm resv1,1\r
+.comm resv2,1\r
+.macro CHIP_INIT ;r_temp is pushed other Registers should be saved\r
+.endm\r
+\r
+.macro COMMAND_TABLE\r
+\r
+ rjmp h_accessread1\r
+ rjmp h_accesswrite1\r
+ rjmp h_accesswrite_read1\r
+\r
+ rjmp h_accessread2\r
+ rjmp h_accesswrite2\r
+ rjmp h_accesswrite_read2\r
+.endm\r
+\r
+#include "../common/OWRomFunctionsDual.s"\r
+#include "../common/OWTimerInterrupt.s"\r
+\r
+\r
+\r
+; Ab hier Geraeteabhaenging\r
+#define OW_ACCESSREAD1 OW_FIRST_COMMAND+0\r
+#define OW_ACCESSWRITE1 OW_FIRST_COMMAND+1\r
+#define OW_ACCESSWRITE_READ1 OW_FIRST_COMMAND+2\r
+\r
+\r
+#define OW_ACCESSREAD2 OW_FIRST_COMMAND+3\r
+#define OW_ACCESSWRITE2 OW_FIRST_COMMAND+4\r
+#define OW_ACCESSWRITE_READ2 OW_FIRST_COMMAND+5\r
+\r
+\r
+;---------------------------------------------------\r
+; READ COMMAND and start operation\r
+;---------------------------------------------------\r
+\r
+h_readcommand1:\r
+ clr r_bytep\r
+#ifndef _DIS_FLASH_\r
+ FLASH_COMMANDS ; muss zu erst sein....\r
+#endif\r
+ cjmp 0xF5,hrc_accessread1\r
+ cset 0x5A,OW_ACCESSWRITE1\r
+/* cset 0xBE,OW_READ_SCRATCHPAD_ADR2\r
+ cset 0x4E,OW_WRITE_SCRATCHPAD_ADR2\r
+ cjmp 0x44,hrc_set_convertT2\r
+ cjmp 0xB4,hrc_set_convertV2*/\r
+ FW_CONFIG_INFO1\r
+ //cljmp 0x85,hrc_fw_configinfo2\r
+#ifdef _CHANGEABLE_ID_\r
+ CHANGE_ID_COMMANDS\r
+#endif\r
+ rjmp handle_end_sleep\r
+\r
+\r
+hrc_accessread1:\r
+ ldi r_sendflag,1\r
+ ldi r_mode,OW_ACCESSREAD1\r
+h_accessread1:\r
+ lds r_temp,pin_state1\r
+ andi r_temp,0x0F\r
+ mov r_rwbyte,r_temp\r
+ com r_rwbyte\r
+ swap r_rwbyte\r
+ andi r_rwbyte,0xF0\r
+ or r_rwbyte,r_temp\r
+ rjmp handle_end\r
+\r
+\r
+\r
+\r
+h_accesswrite_read1:\r
+ //lds r_rwbyte,pin_state1\r
+ rjmp handle_end_sleep\r
+ \r
+\r
+\r
+h_accesswrite1:\r
+ cpi r_bytep,1\r
+ breq h_accesswrite_compl1\r
+ sts resv1,r_rwbyte\r
+ rjmp handle_end_inc\r
+h_accesswrite_compl1:\r
+ com r_rwbyte\r
+ lds r_temp,resv1\r
+ cp r_temp,r_rwbyte\r
+ brne h_accesswrite_error1\r
+ sts pin_set1,r_rwbyte\r
+ ldi r_mode,OW_ACCESSWRITE_READ1\r
+ ldi r_rwbyte,0xAA\r
+ ldi r_sendflag,1\r
+ rjmp handle_end_inc\r
+h_accesswrite_error1:\r
+ rjmp handle_end_sleep\r
+\r
+\r
+\r
+\r
+\r
+\r
+;*****************************************************************************************************************************************************************************************\r
+;*****************************************************************************************************************************************************************************************\r
+;*****************************************************************************************************************************************************************************************\r
+;*****************************************************************************************************************************************************************************************\r
+;*****************************************************************************************************************************************************************************************\r
+\r
+\r
+h_readcommand2:\r
+ clr r_bytep\r
+#ifndef _DIS_FLASH_\r
+ FLASH_COMMANDS ; muss zu erst sein....\r
+#endif\r
+ cjmp 0xF5,hrc_accessread2\r
+ cset 0x5A,OW_ACCESSWRITE2\r
+/* cset 0xBE,OW_READ_SCRATCHPAD_ADR2\r
+ cset 0x4E,OW_WRITE_SCRATCHPAD_ADR2\r
+ cjmp 0x44,hrc_set_convertT2\r
+ cjmp 0xB4,hrc_set_convertV2*/\r
+ FW_CONFIG_INFO2\r
+ //cljmp 0x85,hrc_fw_configinfo2\r
+#ifdef _CHANGEABLE_ID_\r
+ CHANGE_ID_COMMANDS\r
+#endif\r
+ rjmp handle_end_sleep\r
+\r
+\r
+hrc_accessread2:\r
+ ldi r_sendflag,1\r
+ ldi r_mode,OW_ACCESSREAD2\r
+h_accessread2:\r
+ lds r_temp,pin_state2\r
+ andi r_temp,0x0F\r
+ mov r_rwbyte,r_temp\r
+ com r_rwbyte\r
+ swap r_rwbyte\r
+ andi r_rwbyte,0xF0\r
+ or r_rwbyte,r_temp\r
+ rjmp handle_end\r
+\r
+\r
+\r
+\r
+h_accesswrite_read2:\r
+ //lds r_rwbyte,pin_state2\r
+ rjmp handle_end_sleep\r
+ \r
+\r
+\r
+h_accesswrite2:\r
+ cpi r_bytep,1\r
+ breq h_accesswrite_compl2\r
+ sts resv2,r_rwbyte\r
+ rjmp handle_end_inc\r
+h_accesswrite_compl2:\r
+ com r_rwbyte\r
+ lds r_temp,resv2\r
+ cp r_temp,r_rwbyte\r
+ brne h_accesswrite_error2\r
+ sts pin_set2,r_rwbyte\r
+ ldi r_mode,OW_ACCESSWRITE_READ2\r
+ ldi r_rwbyte,0xAA\r
+ ldi r_sendflag,1\r
+ rjmp handle_end_inc\r
+h_accesswrite_error2:\r
+ rjmp handle_end_sleep\r
+/*\r
+;---------------------------------------------------\r
+; WRITE SCRATCHPAD\r
+;---------------------------------------------------\r
+h_writescratchpad_adr2:\r
+ lsl r_rwbyte\r
+ lsl r_rwbyte\r
+ lsl r_rwbyte\r
+#if defined(__AVR_ATtiny25__)\r
+ andi r_rwbyte,0x01 ;nur Page 0 und 1 und das immer wiederholen\r
+#endif\r
+ sts block,r_rwbyte\r
+ ldi r_mode,OW_WRITE_SCRATCHPAD2\r
+ ldi r_bcount,1 \r
+ rjmp handle_end \r
+h_writescratchpad2:\r
+ cpi r_bytep,8\r
+ breq h_writescratchpad_all2\r
+ lds r_temp,block\r
+ add r_temp,r_bytep\r
+ configZ pack2,r_temp\r
+ st Z,r_rwbyte\r
+ rjmp handle_end_inc\r
+h_writescratchpad_all2:\r
+ rjmp handle_end_sleep\r
+\r
+\r
+\r
+\r
+\r
+\r
+ */\r
+\r
+\r
+#include "../common/OWPinInterrupt.s"\r
+.end\r
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE \r
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \r
\r
+#ifndef _NOCHANGEABLE_ID_\r
#define _CHANGEABLE_ID_\r
+#endif\r
#define _ZERO_POLLING_\r
#define _HANDLE_CC_COMMAND_\r
+#define _NO_BOOTLOADER_PIN_ \r
+//#define __4MHZ__\r
+\r
//#define _DB_\r
\r
#include "../common/OWConfig.s"\r
lds r_temp,pack1\r
sbrs r_temp,3\r
rjmp hrc_set_convertVV1\r
- ldi r_temp,0xF4 //5V\r
+ lds r_temp,DS2438_1_VDD \r
sts pack1+3,r_temp\r
- ldi r_temp,0x01\r
+ lds r_temp,DS2438_1_VDD+1\r
sts pack1+4,r_temp\r
rjmp hrc_set_convertend1\r
hrc_set_convertVV1:\r
lds r_temp,pack2\r
sbrs r_temp,3\r
rjmp hrc_set_convertVV2\r
- ldi r_temp,0xF4\r
+ lds r_temp,DS2438_2_VDD \r
sts pack2+3,r_temp\r
- ldi r_temp,0x01\r
+ lds r_temp,DS2438_2_VDD+1\r
sts pack2+4,r_temp\r
rjmp hrc_set_convertend2\r
hrc_set_convertVV2:\r
--- /dev/null
+\r
+// Copyright (c) 2018, Tobias Mueller tm(at)tm3d.de\r
+// All rights reserved. \r
+// \r
+// Redistribution and use in source and binary forms, with or without \r
+// modification, are permitted provided that the following conditions are \r
+// met: \r
+// \r
+// * Redistributions of source code must retain the above copyright \r
+// notice, this list of conditions and the following disclaimer. \r
+// * Redistributions in binary form must reproduce the above copyright \r
+// notice, this list of conditions and the following disclaimer in the \r
+// documentation and/or other materials provided with the \r
+// distribution. \r
+// * All advertising materials mentioning features or use of this \r
+// software must display the following acknowledgement: This product \r
+// includes software developed by tm3d.de and its contributors. \r
+// * Neither the name of tm3d.de nor the names of its contributors may \r
+// be used to endorse or promote products derived from this software \r
+// without specific prior written permission. \r
+// \r
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \r
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT \r
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR \r
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT \r
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, \r
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT \r
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, \r
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY \r
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT \r
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE \r
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \r
+\r
+#define _CHANGEABLE_ID_\r
+#define _ZERO_POLLING_\r
+\r
+#include "../common/OWConfig.s"\r
+#include "../common/OWCRC16.s"\r
+\r
+.extern pack1,20\r
+.extern pack2,45\r
+.extern counters2,16\r
+//Bleiben gleich denn es werden nicht beide gleichzeitig abgefragt\r
+.comm addr,1 ;zweites Adressbyte ist unnoetig (Warum auch immer fuer 32 Byte 16 Bit Adressen verwendet werden....)\r
+.comm crcsave,1 ; zwischenspeicherspeicher fuer crc nur zweites byte....\r
+//.extern am2302_temp,2\r
+\r
+.comm gcontrol1,1\r
+.comm gcontrol2,1\r
+\r
+.macro CHIP_INIT \r
+.endm\r
+\r
+.macro COMMAND_TABLE\r
+ rjmp h_readmemoryaddr1\r
+ rjmp h_readmemory1\r
+ rjmp h_readmemorycrc11\r
+ rjmp h_readmemorycrc21\r
+ rjmp h_writememoryaddr1\r
+ rjmp h_writememory1\r
+ rjmp h_writememorycrc11\r
+ rjmp h_writememorycrc21\r
+ rjmp h_writememoryreadback1\r
+ rjmp h_convert1\r
+ rjmp h_convertcrc11\r
+ rjmp h_convertcrc21\r
+ rjmp h_convert_conv1\r
+\r
+ rjmp h_writescratchpad2\r
+ rjmp h_writescratchpad_crc2\r
+ rjmp h_readscratchpad2\r
+ rjmp h_copyscratchpad2\r
+ rjmp h_readmemory_addr2\r
+ rjmp h_readmemory2\r
+ rjmp h_readmemorycounter_addr2\r
+ rjmp h_readmemorycounter2\r
+ rjmp h_readmemorycounter_ex2\r
+.endm\r
+\r
+#include "../common/OWRomFunctionsDual.s"\r
+#include "../common/OWTimerInterrupt.s"\r
+\r
+\r
+\r
+; Ab hier Geraeteabhaenging\r
+#define OW_READ_MEMORY_ADDR1 OW_FIRST_COMMAND+0\r
+#define OW_READ_MEMORY1 OW_FIRST_COMMAND+1\r
+#define OW_READ_MEMORY_CRC11 OW_FIRST_COMMAND+2\r
+#define OW_READ_MEMORY_CRC21 OW_FIRST_COMMAND+3\r
+#define OW_WRITE_MEMORY_ADDR1 OW_FIRST_COMMAND+4\r
+#define OW_WRITE_MEMORY1 OW_FIRST_COMMAND+5\r
+#define OW_WRITE_MEMORY_CRC11 OW_FIRST_COMMAND+6\r
+#define OW_WRITE_MEMORY_CRC21 OW_FIRST_COMMAND+7\r
+#define OW_WRITE_MEMORY_READBACK1 OW_FIRST_COMMAND+8\r
+#define OW_CONVERT1 OW_FIRST_COMMAND+9\r
+#define OW_CONVERT_CRC11 OW_FIRST_COMMAND+10\r
+#define OW_CONVERT_CRC21 OW_FIRST_COMMAND+11\r
+#define OW_CONVERT_CONV1 OW_FIRST_COMMAND+12\r
+\r
+#define OW_WRITE_SCRATCHPAD2 OW_FIRST_COMMAND+13\r
+#define OW_WRITE_SCRATCHPAD_CRC2 OW_FIRST_COMMAND+14\r
+#define OW_READ_SCRATCHPAD2 OW_FIRST_COMMAND+15\r
+#define OW_COPY_SCRATCHPAD2 OW_FIRST_COMMAND+16\r
+#define OW_READ_MEMORY_ADDR2 OW_FIRST_COMMAND+17\r
+#define OW_READ_MEMORY2 OW_FIRST_COMMAND+18\r
+#define OW_READ_MEMORYCOUNTER_ADDR2 OW_FIRST_COMMAND+19\r
+#define OW_READ_MEMORYCOUNTER2 OW_FIRST_COMMAND+20\r
+#define OW_READ_MEMORYCOUNTER_EX2 OW_FIRST_COMMAND+21\r
+\r
+\r
+\r
+;---------------------------------------------------\r
+; READ COMMAND and start operation\r
+;---------------------------------------------------\r
+\r
+\r
+h_readcommand1:\r
+ clr r_bytep\r
+#ifndef _DIS_FLASH_\r
+ FLASH_COMMANDS ; muss zu erst sein....\r
+#endif\r
+ cset 0xAA,OW_READ_MEMORY_ADDR1\r
+ cset 0x55,OW_WRITE_MEMORY_ADDR1\r
+ cset 0x3C,OW_CONVERT1\r
+ FW_CONFIG_INFO1\r
+#ifdef _CHANGEABLE_ID_\r
+ CHANGE_ID_COMMANDS\r
+#endif\r
+ ldi r_mode,OW_SLEEP\r
+ rjmp handle_end\r
+\r
+\r
+h_readmemoryaddr1:\r
+ cpi r_bytep,0 ;erstes Adressbyte ?\r
+ brne h_readmemory_addr_byte11 ;nein dann weiter\r
+ andi r_rwbyte,0x1F ; nur Adressen zwischen 0 und 0x1F zulassen\r
+ sts addr,r_rwbyte ;speichern des ersten bytes\r
+ rjmp handle_end_inc\r
+h_readmemory_addr_byte11: ;zweiters Addressbyte wird nicht gespeichert!\r
+ ldi r_mode,OW_READ_MEMORY1 ;weiter zu read Memory\r
+ ;;ldi r_bcount,1 ;ist unten\r
+ ldi r_sendflag,1 ;jetzt sendet der Slave zum Master\r
+ clr r_bytep\r
+ rjmp h_readmemory21\r
+h_readmemory1:\r
+ lds r_bytep,addr\r
+ inc r_bytep\r
+ sts addr,r_bytep\r
+ andi r_bytep,0x07\r
+ breq h_readmemory_init_crc1\r
+h_readmemory21:\r
+ lds r_bytep,addr\r
+ ;andi r_bytep,0x1F ist oben\r
+ configZ pack1,r_bytep\r
+ ld r_rwbyte,Z\r
+ ;ldi r_bcount,1\r
+ rjmp handle_end ;sendet das Byte und geht zu h_readmemory\r
+h_readmemory_init_crc1:; init erstes CRC byte\r
+ lds r_rwbyte,crc\r
+ com r_rwbyte\r
+ lds r_temp,crc+1\r
+ com r_temp\r
+ sts crcsave,r_temp\r
+ ldi r_mode,OW_READ_MEMORY_CRC11\r
+ ;ldi r_bcount,1\r
+ rjmp handle_end\r
+h_readmemory_end1:\r
+ ldi r_mode,OW_SLEEP\r
+ clr r_sendflag\r
+ rjmp handle_end\r
+h_readmemorycrc11:;init zweites CRC Byte\r
+ lds r_rwbyte,crcsave\r
+ ;ldi r_bcount,1\r
+ ldi r_mode,OW_READ_MEMORY_CRC21\r
+ rjmp handle_end\r
+h_readmemorycrc21:;weiteres senden..... nach zweitem Byte\r
+ lds r_temp,addr\r
+ andi r_temp,0xE0\r
+ brne h_readmemory_end1; ende des speichers\r
+ ldi r_mode,OW_READ_MEMORY1\r
+ CRCInit1 ;Start with new CRC\r
+ rjmp h_readmemory21\r
+\r
+h_writememoryaddr1:\r
+ cpi r_bytep,0 ;erstes Adressbyte ?\r
+ brne h_writememory_addr_byte11 ;nein dann weiter\r
+ andi r_rwbyte,0x1F ; nur Adressen zwischen 0 und 0x1F zulassen\r
+ sts addr,r_rwbyte ;speichern des ersten bytes\r
+ inc r_bytep\r
+ ;ldi r_bcount,1\r
+ rjmp handle_end\r
+h_writememory_addr_byte11: ;zweiters Addressbyte wird nicht gespeichert!\r
+ ldi r_mode,OW_WRITE_MEMORY1 ;weiter zu read Memory\r
+ ;ldi r_bcount,1 ;; _________________________________________________in handle_end integrieren.....\r
+ lds r_bytep,addr\r
+ rjmp handle_end ;read Memory Byte\r
+h_writememory1:\r
+ lds r_bytep,addr\r
+ configZ pack1,r_bytep\r
+ st Z,r_rwbyte\r
+ ;ldi r_bcount,1\r
+ ldi r_mode,OW_WRITE_MEMORY_CRC11\r
+ ldi r_sendflag,1 ;jetzt sendet der Slave zum Master\r
+ lds r_rwbyte,crc\r
+ com r_rwbyte\r
+ lds r_temp,crc+1\r
+ com r_temp\r
+ sts crcsave,r_temp\r
+ rjmp handle_end\r
+h_writememorycrc11:\r
+ lds r_rwbyte,crcsave\r
+ ;ldi r_bcount,1\r
+ ldi r_mode,OW_WRITE_MEMORY_CRC21\r
+ rjmp handle_end\r
+h_writememorycrc21:\r
+ lds r_temp,addr\r
+ configZ pack1,r_temp\r
+ ld r_rwbyte,Z\r
+ ;ldi r_bcount,1\r
+ ldi r_mode,OW_WRITE_MEMORY_READBACK1\r
+ rjmp handle_end\r
+h_writememoryreadback1:\r
+ ldi r_temp,0x00\r
+ sts crc+1,r_temp\r
+ lds r_temp,addr\r
+ inc r_temp\r
+ sts addr,r_temp\r
+ sts crc,r_temp\r
+ ldi r_sendflag,0\r
+ ;ldi r_bcount,1\r
+ ldi r_mode,OW_WRITE_MEMORY1\r
+ rjmp handle_end\r
+\r
+h_convert1:\r
+ cpi r_bytep,0 ;erstes Adressbyte ?\r
+ brne h_convert_byte11 ;nein dann weiter\r
+ inc r_bytep\r
+ sts pack1+0x20,r_rwbyte\r
+ ;ldi r_bcount,1\r
+ rjmp handle_end\r
+h_convert_byte11: ;zweies byte glesen go crc#\r
+ sts pack1+0x21,r_rwbyte\r
+ lds r_rwbyte,crc\r
+ com r_rwbyte\r
+ lds r_temp,crc+1\r
+ com r_temp\r
+ sts crcsave,r_temp\r
+ ldi r_mode,OW_CONVERT_CRC11\r
+ ;ldi r_bcount,1\r
+ ldi r_sendflag,1\r
+ rjmp handle_end \r
+h_convertcrc11:\r
+ lds r_rwbyte,crcsave\r
+ ;ldi r_bcount,1\r
+ ldi r_mode,OW_CONVERT_CRC21\r
+ rjmp handle_end\r
+h_convertcrc21:\r
+ ldi r_temp,1\r
+ sts gcontrol1,r_temp\r
+ ;ldi r_bcount,1\r
+ ldi r_mode,OW_CONVERT_CONV1\r
+ ;clr r_sendflag\r
+ ldi r_sendflag,3 ;set bit 0 and 1 for no zero polling\r
+h_convert_conv1:\r
+ ldi r_bcount,0\r
+ ldi r_rwbyte,0\r
+ rjmp handle_end_no_bcount\r
+\r
+/////////////////////////////////////////////////////////////////////\r
+\r
+\r
+\r
+;*****************************************************************************************************************************************************************************************\r
+;*****************************************************************************************************************************************************************************************\r
+;*****************************************************************************************************************************************************************************************\r
+;*****************************************************************************************************************************************************************************************\r
+;*****************************************************************************************************************************************************************************************\r
+\r
+\r
+\r
+\r
+h_readcommand2:\r
+ clr r_bytep\r
+#ifndef _DIS_FLASH_\r
+ FLASH_COMMANDS ; muss zu erst sein....\r
+#endif\r
+ cset 0x0F,OW_WRITE_SCRATCHPAD2\r
+ cjmp 0xAA,hrc_set_readscratchpad2\r
+ cset 0x5A,OW_COPY_SCRATCHPAD2\r
+ cset 0xF0,OW_READ_MEMORY_ADDR2\r
+ cset 0xA5,OW_READ_MEMORYCOUNTER_ADDR2\r
+ FW_CONFIG_INFO2\r
+#ifdef _CHANGEABLE_ID_\r
+ CHANGE_ID_COMMANDS\r
+#endif\r
+ ldi r_mode,OW_SLEEP\r
+ rjmp handle_end\r
+\r
+hrc_set_readscratchpad2:\r
+ ldi r_mode,OW_READ_SCRATCHPAD2\r
+ ldi r_sendflag,1\r
+ rjmp h_readscratchpad2\r
+\r
+h_writescratchpad2:\r
+ configZ pack2,r_bytep\r
+ inc r_bytep\r
+ st Z,r_rwbyte\r
+ cpi r_bytep,2\r
+ breq h_writescratchpad_block2\r
+ brsh h_writescratchpad_set_eoffset2 ;;33\r
+ rjmp handle_end ;handle_end zu weit entfernt fuer br...\r
+h_writescratchpad_set_eoffset2:\r
+ cpi r_bytep,35\r
+ breq h_writescratchpad_setcrc2\r
+ mov r_temp,r_bytep\r
+ subi r_temp,4\r
+ sts pack2+2,r_temp ;AA und PF cleared\r
+ rjmp handle_end\r
+;Start writeing to 32 Byte Block ; skip status byte \r
+h_writescratchpad_block2:\r
+ lds r_temp,pack2 ; Adresse low byte\r
+ andi r_temp,0x1F ;32 byte\r
+ add r_bytep,r_temp ;Zur angegebenen Startadresse springen\r
+ ;ori r_temp,0x20 ; Set PF flag\r
+ sts pack2+2,r_temp ;E4:E0 vorher setzen\r
+ ; Byte 3 ueberspringen\r
+ rjmp handle_end_inc\r
+\r
+h_writescratchpad_setcrc2:\r
+ ;copy crc to pack2\r
+ lds r_temp,crc\r
+ com r_temp\r
+ sts pack2+43,r_temp\r
+ lds r_temp,crc+1\r
+ com r_temp ; invertieren , komischer name.....\r
+ sts pack2+44,r_temp\r
+ ldi r_mode,OW_WRITE_SCRATCHPAD_CRC2\r
+ ldi r_sendflag,1\r
+ ldi r_bytep,43\r
+h_writescratchpad_crc2:\r
+ cpi r_bytep,45\r
+ breq h_writescratchpad_crc_end2\r
+ configZ pack2,r_bytep\r
+ ld r_rwbyte,Z\r
+ rjmp handle_end_inc\r
+h_writescratchpad_crc_end2:\r
+ rjmp handle_end_sleep\r
+ \r
+ \r
+h_readscratchpad2:\r
+ cpi r_bytep,35\r
+ breq h_readscratchpad_end2\r
+ cpi r_bytep,3\r
+ brne h_readscratchpad_read_byte2\r
+h_readscratchpad_set_offset2:\r
+ lds r_temp,pack2\r
+ andi r_temp,0x1F\r
+ ldi r_temp2,3\r
+ add r_temp,r_temp2\r
+ mov r_bytep,r_temp\r
+h_readscratchpad_read_byte2:\r
+ configZ pack2,r_bytep\r
+ ld r_rwbyte,Z\r
+ rjmp handle_end_inc\r
+h_readscratchpad_end2:\r
+ rjmp handle_end_sleep\r
+\r
+\r
+\r
+h_copyscratchpad2:\r
+ cpi r_bytep,3\r
+ brsh h_copyscratchpad_ok2\r
+ configZ pack2,r_bytep\r
+ inc r_bytep\r
+ ld r_temp,Z\r
+ cp r_temp,r_rwbyte\r
+ brne h_copyscratchpad_nok2\r
+ cpi r_bytep,3\r
+ breq h_copyscratchpad_ok2\r
+ ldi r_bcount,1 \r
+ rjmp handle_end\r
+h_copyscratchpad_ok2:\r
+ ldi r_rwbyte,0xAA\r
+ ldi r_sendflag,1\r
+ ldi r_temp,1\r
+ sts gcontrol2,r_temp\r
+ rjmp handle_end\r
+h_copyscratchpad_nok2:\r
+ lds r_temp,pack2+3\r
+ andi r_temp,~0x80\r
+ sts pack2+3,r_temp\r
+ rjmp handle_end_sleep\r
+\r
+\r
+h_readmemory_addr2:\r
+ cpi r_bytep,0\r
+ brne h_readmrmory_addr_byte12\r
+ sts pack2,r_rwbyte\r
+ rjmp handle_end_inc\r
+h_readmrmory_addr_byte12:\r
+ sts pack2+1,r_rwbyte\r
+ ldi r_mode,OW_READ_MEMORY2\r
+ ldi r_sendflag,1\r
+ clr r_bytep\r
+ rjmp h_readmemory22\r
+h_readmemory2:\r
+ lds r_bytep,pack2\r
+ lds r_temp2,pack2+1\r
+ inc r_bytep\r
+ clr r_temp\r
+ adc r_temp2,r_temp\r
+ sbrc r_temp2,1\r
+ rjmp h_readmemory_end2\r
+ sts pack2+1,r_temp2\r
+ sts pack2,r_bytep\r
+h_readmemory22:\r
+ ldi zl,lo8(pack2+45) \r
+ ldi zh,hi8(pack2+45)\r
+ lds r_bytep,pack2\r
+ add zl,r_bytep\r
+ lds r_bytep,pack2+1\r
+ adc zh,r_bytep\r
+ //configZ pack2+3,r_bytep\r
+ ld r_rwbyte,Z\r
+ rjmp handle_end\r
+h_readmemory_end2:\r
+ rjmp handle_end_sleep\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+h_readmemorycounter_addr2:\r
+ cpi r_bytep,0\r
+ brne h_readmrmorycounter_addr_byte12\r
+ sts pack2,r_rwbyte\r
+ inc r_bytep\r
+ ;ldi r_bcount,1\r
+ rjmp handle_end\r
+h_readmrmorycounter_addr_byte12:\r
+ sts pack2+1,r_rwbyte\r
+ ldi r_mode,OW_READ_MEMORYCOUNTER2\r
+ ;ldi r_bcount,1 \r
+ ldi r_sendflag,1\r
+ clr r_bytep\r
+ rjmp h_readmemorycounter22\r
+h_readmemorycounter2:\r
+ lds r_bytep,pack2\r
+ lds r_temp2,pack2+1\r
+ ldi r_temp,1 ;inc leider kein c flag\r
+ add r_bytep,r_temp\r
+ clr r_temp\r
+ adc r_temp2,r_temp\r
+ mov r_temp,r_bytep\r
+ andi r_temp,0x1F\r
+ breq h_readmemorycounter_next2\r
+ sts pack2+1,r_temp2\r
+ sts pack2,r_bytep\r
+h_readmemorycounter22: ;Lesen von dem worauf die erstenzwei bytes zeigen\r
+ lds r_bytep,pack2\r
+ andi r_bytep,0x1F\r
+ configZ pack2+3,r_bytep\r
+ ld r_rwbyte,Z\r
+ ;ldi r_bcount,1\r
+ rjmp handle_end\r
+//h_readmemorycounter_end:\r
+// ldi r_mode,OW_SLEEP\r
+// clr r_sendflag\r
+// rjmp handle_end\r
+h_readmemorycounter_next2: ; rest lesen\r
+ ldi r_mode,OW_READ_MEMORYCOUNTER_EX2\r
+ ldi r_bytep,34\r
+ lds r_temp2,pack2\r
+ lds r_temp,pack2+1\r
+ //lsr r_temp\r
+ //ror r_temp2\r
+\r
+ lsl r_temp2\r
+ rol r_temp\r
+ cpi r_temp,3\r
+ brne h_readmemorycounter_cFF2\r
+ andi r_temp2,0xC0\r
+ swap r_temp2\r
+\r
+ ;cpi r_temp,0xE0\r
+\r
+ configZ counters2,r_temp2\r
+ ld r_temp,Z+\r
+ sts pack2+35,r_temp \r
+ ld r_temp,Z+\r
+ sts pack2+36,r_temp \r
+ ld r_temp,Z+\r
+ sts pack2+37,r_temp \r
+ ld r_temp,Z+\r
+ sts pack2+38,r_temp \r
+ rjmp h_readmemorycounter_ex2\r
+h_readmemorycounter_cFF2:\r
+ ldi r_temp,0xFF\r
+ sts pack2+35,r_temp \r
+ sts pack2+36,r_temp \r
+ sts pack2+37,r_temp \r
+ sts pack2+38,r_temp \r
+\r
+h_readmemorycounter_ex2:\r
+ inc r_bytep\r
+ cpi r_bytep,45\r
+ breq h_readmemorycounter_ex_end2\r
+ cpi r_bytep,43\r
+ brne h_readmemorycounter_ex22\r
+ lds r_temp,crc\r
+ com r_temp\r
+ sts pack2+43,r_temp\r
+ lds r_temp,crc+1\r
+ com r_temp\r
+ sts pack2+44,r_temp\r
+h_readmemorycounter_ex22:\r
+ ;ldi r_bcount,1\r
+ configZ pack2,r_bytep\r
+ ld r_rwbyte,Z\r
+ rjmp handle_end\r
+h_readmemorycounter_ex_end2:\r
+ lds r_bytep,pack2\r
+ lds r_temp2,pack2+1\r
+ ldi r_temp,1 ;inc leider kein c flag\r
+ add r_bytep,r_temp\r
+ clr r_temp\r
+ adc r_temp2,r_temp\r
+ sbrc r_temp2,1 ;am ene von allem \r
+ rjmp h_readmemorycounter_ex_sleep2\r
+ CRCInit1\r
+ ldi r_mode,OW_READ_MEMORYCOUNTER2\r
+ sts pack2+1,r_temp2\r
+ sts pack2,r_bytep\r
+ rjmp h_readmemorycounter22\r
+h_readmemorycounter_ex_sleep2:\r
+ ldi r_mode,OW_SLEEP\r
+ clr r_sendflag\r
+ rjmp handle_end\r
+\r
+\r
+\r
+\r
+\r
+#include "../common/OWPinInterrupt.s"\r
+.end
\ No newline at end of file
--- /dev/null
+\r
+// Copyright (c) 2018, Tobias Mueller tm(at)tm3d.de\r
+// All rights reserved. \r
+// \r
+// Redistribution and use in source and binary forms, with or without \r
+// modification, are permitted provided that the following conditions are \r
+// met: \r
+// \r
+// * Redistributions of source code must retain the above copyright \r
+// notice, this list of conditions and the following disclaimer. \r
+// * Redistributions in binary form must reproduce the above copyright \r
+// notice, this list of conditions and the following disclaimer in the \r
+// documentation and/or other materials provided with the \r
+// distribution. \r
+// * All advertising materials mentioning features or use of this \r
+// software must display the following acknowledgement: This product \r
+// includes software developed by tm3d.de and its contributors. \r
+// * Neither the name of tm3d.de nor the names of its contributors may \r
+// be used to endorse or promote products derived from this software \r
+// without specific prior written permission. \r
+// \r
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \r
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT \r
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR \r
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT \r
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, \r
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT \r
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, \r
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY \r
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT \r
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE \r
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \r
+\r
+#define _CHANGEABLE_ID_\r
+#define _ZERO_POLLING_\r
+\r
+#include "../common/OWConfig.s"\r
+#include "../common/OWCRC16.s"\r
+\r
+.extern pack1,20\r
+.extern pack2,20\r
+\r
+//Bleiben gleich denn es werden nicht beide gleichzeitig abgefragt\r
+.comm addr,1 ;zweites Adressbyte ist unnoetig (Warum auch immer fuer 32 Byte 16 Bit Adressen verwendet werden....)\r
+.comm crcsave,1 ; zwischenspeicherspeicher fuer crc nur zweites byte....\r
+//.extern am2302_temp,2\r
+\r
+.comm gcontrol1,1\r
+.comm gcontrol2,1\r
+\r
+.macro CHIP_INIT \r
+.endm\r
+\r
+.macro COMMAND_TABLE\r
+ rjmp h_readmemoryaddr1\r
+ rjmp h_readmemory1\r
+ rjmp h_readmemorycrc11\r
+ rjmp h_readmemorycrc21\r
+ rjmp h_writememoryaddr1\r
+ rjmp h_writememory1\r
+ rjmp h_writememorycrc11\r
+ rjmp h_writememorycrc21\r
+ rjmp h_writememoryreadback1\r
+ rjmp h_convert1\r
+ rjmp h_convertcrc11\r
+ rjmp h_convertcrc21\r
+ rjmp h_convert_conv1\r
+\r
+ rjmp h_readmemoryaddr2\r
+ rjmp h_readmemory2\r
+ rjmp h_readmemorycrc12\r
+ rjmp h_readmemorycrc22\r
+ rjmp h_writememoryaddr2\r
+ rjmp h_writememory2\r
+ rjmp h_writememorycrc12\r
+ rjmp h_writememorycrc22\r
+ rjmp h_writememoryreadback2\r
+ rjmp h_convert2\r
+ rjmp h_convertcrc12\r
+ rjmp h_convertcrc22\r
+ rjmp h_convert_conv2\r
+.endm\r
+\r
+#include "../common/OWRomFunctionsDual.s"\r
+#include "../common/OWTimerInterrupt.s"\r
+\r
+\r
+\r
+; Ab hier Geraeteabhaenging\r
+#define OW_READ_MEMORY_ADDR1 OW_FIRST_COMMAND+0\r
+#define OW_READ_MEMORY1 OW_FIRST_COMMAND+1\r
+#define OW_READ_MEMORY_CRC11 OW_FIRST_COMMAND+2\r
+#define OW_READ_MEMORY_CRC21 OW_FIRST_COMMAND+3\r
+#define OW_WRITE_MEMORY_ADDR1 OW_FIRST_COMMAND+4\r
+#define OW_WRITE_MEMORY1 OW_FIRST_COMMAND+5\r
+#define OW_WRITE_MEMORY_CRC11 OW_FIRST_COMMAND+6\r
+#define OW_WRITE_MEMORY_CRC21 OW_FIRST_COMMAND+7\r
+#define OW_WRITE_MEMORY_READBACK1 OW_FIRST_COMMAND+8\r
+#define OW_CONVERT1 OW_FIRST_COMMAND+9\r
+#define OW_CONVERT_CRC11 OW_FIRST_COMMAND+10\r
+#define OW_CONVERT_CRC21 OW_FIRST_COMMAND+11\r
+#define OW_CONVERT_CONV1 OW_FIRST_COMMAND+12\r
+\r
+#define OW_READ_MEMORY_ADDR2 OW_FIRST_COMMAND+13\r
+#define OW_READ_MEMORY2 OW_FIRST_COMMAND+14\r
+#define OW_READ_MEMORY_CRC12 OW_FIRST_COMMAND+15\r
+#define OW_READ_MEMORY_CRC22 OW_FIRST_COMMAND+16\r
+#define OW_WRITE_MEMORY_ADDR2 OW_FIRST_COMMAND+17\r
+#define OW_WRITE_MEMORY2 OW_FIRST_COMMAND+18\r
+#define OW_WRITE_MEMORY_CRC12 OW_FIRST_COMMAND+19\r
+#define OW_WRITE_MEMORY_CRC22 OW_FIRST_COMMAND+20\r
+#define OW_WRITE_MEMORY_READBACK2 OW_FIRST_COMMAND+21\r
+#define OW_CONVERT2 OW_FIRST_COMMAND+22\r
+#define OW_CONVERT_CRC12 OW_FIRST_COMMAND+23\r
+#define OW_CONVERT_CRC22 OW_FIRST_COMMAND+24\r
+#define OW_CONVERT_CONV2 OW_FIRST_COMMAND+25\r
+\r
+\r
+\r
+;---------------------------------------------------\r
+; READ COMMAND and start operation\r
+;---------------------------------------------------\r
+\r
+\r
+h_readcommand1:\r
+ clr r_bytep\r
+#ifndef _DIS_FLASH_\r
+ FLASH_COMMANDS ; muss zu erst sein....\r
+#endif\r
+ cset 0xAA,OW_READ_MEMORY_ADDR1\r
+ cset 0x55,OW_WRITE_MEMORY_ADDR1\r
+ cset 0x3C,OW_CONVERT1\r
+ FW_CONFIG_INFO1\r
+#ifdef _CHANGEABLE_ID_\r
+ CHANGE_ID_COMMANDS\r
+#endif\r
+ ldi r_mode,OW_SLEEP\r
+ rjmp handle_end\r
+\r
+\r
+h_readmemoryaddr1:\r
+ cpi r_bytep,0 ;erstes Adressbyte ?\r
+ brne h_readmemory_addr_byte11 ;nein dann weiter\r
+ andi r_rwbyte,0x1F ; nur Adressen zwischen 0 und 0x1F zulassen\r
+ sts addr,r_rwbyte ;speichern des ersten bytes\r
+ rjmp handle_end_inc\r
+h_readmemory_addr_byte11: ;zweiters Addressbyte wird nicht gespeichert!\r
+ ldi r_mode,OW_READ_MEMORY1 ;weiter zu read Memory\r
+ ;;ldi r_bcount,1 ;ist unten\r
+ ldi r_sendflag,1 ;jetzt sendet der Slave zum Master\r
+ clr r_bytep\r
+ rjmp h_readmemory21\r
+h_readmemory1:\r
+ lds r_bytep,addr\r
+ inc r_bytep\r
+ sts addr,r_bytep\r
+ andi r_bytep,0x07\r
+ breq h_readmemory_init_crc1\r
+h_readmemory21:\r
+ lds r_bytep,addr\r
+ ;andi r_bytep,0x1F ist oben\r
+ configZ pack1,r_bytep\r
+ ld r_rwbyte,Z\r
+ ;ldi r_bcount,1\r
+ rjmp handle_end ;sendet das Byte und geht zu h_readmemory\r
+h_readmemory_init_crc1:; init erstes CRC byte\r
+ lds r_rwbyte,crc\r
+ com r_rwbyte\r
+ lds r_temp,crc+1\r
+ com r_temp\r
+ sts crcsave,r_temp\r
+ ldi r_mode,OW_READ_MEMORY_CRC11\r
+ ;ldi r_bcount,1\r
+ rjmp handle_end\r
+h_readmemory_end1:\r
+ ldi r_mode,OW_SLEEP\r
+ clr r_sendflag\r
+ rjmp handle_end\r
+h_readmemorycrc11:;init zweites CRC Byte\r
+ lds r_rwbyte,crcsave\r
+ ;ldi r_bcount,1\r
+ ldi r_mode,OW_READ_MEMORY_CRC21\r
+ rjmp handle_end\r
+h_readmemorycrc21:;weiteres senden..... nach zweitem Byte\r
+ lds r_temp,addr\r
+ andi r_temp,0xE0\r
+ brne h_readmemory_end1; ende des speichers\r
+ ldi r_mode,OW_READ_MEMORY1\r
+ CRCInit1 ;Start with new CRC\r
+ rjmp h_readmemory21\r
+\r
+h_writememoryaddr1:\r
+ cpi r_bytep,0 ;erstes Adressbyte ?\r
+ brne h_writememory_addr_byte11 ;nein dann weiter\r
+ andi r_rwbyte,0x1F ; nur Adressen zwischen 0 und 0x1F zulassen\r
+ sts addr,r_rwbyte ;speichern des ersten bytes\r
+ inc r_bytep\r
+ ;ldi r_bcount,1\r
+ rjmp handle_end\r
+h_writememory_addr_byte11: ;zweiters Addressbyte wird nicht gespeichert!\r
+ ldi r_mode,OW_WRITE_MEMORY1 ;weiter zu read Memory\r
+ ;ldi r_bcount,1 ;; _________________________________________________in handle_end integrieren.....\r
+ lds r_bytep,addr\r
+ rjmp handle_end ;read Memory Byte\r
+h_writememory1:\r
+ lds r_bytep,addr\r
+ configZ pack1,r_bytep\r
+ st Z,r_rwbyte\r
+ ;ldi r_bcount,1\r
+ ldi r_mode,OW_WRITE_MEMORY_CRC11\r
+ ldi r_sendflag,1 ;jetzt sendet der Slave zum Master\r
+ lds r_rwbyte,crc\r
+ com r_rwbyte\r
+ lds r_temp,crc+1\r
+ com r_temp\r
+ sts crcsave,r_temp\r
+ rjmp handle_end\r
+h_writememorycrc11:\r
+ lds r_rwbyte,crcsave\r
+ ;ldi r_bcount,1\r
+ ldi r_mode,OW_WRITE_MEMORY_CRC21\r
+ rjmp handle_end\r
+h_writememorycrc21:\r
+ lds r_temp,addr\r
+ configZ pack1,r_temp\r
+ ld r_rwbyte,Z\r
+ ;ldi r_bcount,1\r
+ ldi r_mode,OW_WRITE_MEMORY_READBACK1\r
+ rjmp handle_end\r
+h_writememoryreadback1:\r
+ ldi r_temp,0x00\r
+ sts crc+1,r_temp\r
+ lds r_temp,addr\r
+ inc r_temp\r
+ sts addr,r_temp\r
+ sts crc,r_temp\r
+ ldi r_sendflag,0\r
+ ;ldi r_bcount,1\r
+ ldi r_mode,OW_WRITE_MEMORY1\r
+ rjmp handle_end\r
+\r
+h_convert1:\r
+ cpi r_bytep,0 ;erstes Adressbyte ?\r
+ brne h_convert_byte11 ;nein dann weiter\r
+ inc r_bytep\r
+ sts pack1+0x20,r_rwbyte\r
+ ;ldi r_bcount,1\r
+ rjmp handle_end\r
+h_convert_byte11: ;zweies byte glesen go crc#\r
+ sts pack1+0x21,r_rwbyte\r
+ lds r_rwbyte,crc\r
+ com r_rwbyte\r
+ lds r_temp,crc+1\r
+ com r_temp\r
+ sts crcsave,r_temp\r
+ ldi r_mode,OW_CONVERT_CRC11\r
+ ;ldi r_bcount,1\r
+ ldi r_sendflag,1\r
+ rjmp handle_end \r
+h_convertcrc11:\r
+ lds r_rwbyte,crcsave\r
+ ;ldi r_bcount,1\r
+ ldi r_mode,OW_CONVERT_CRC21\r
+ rjmp handle_end\r
+h_convertcrc21:\r
+ ldi r_temp,1\r
+ sts gcontrol1,r_temp\r
+ ;ldi r_bcount,1\r
+ ldi r_mode,OW_CONVERT_CONV1\r
+ ;clr r_sendflag\r
+ ldi r_sendflag,3 ;set bit 0 and 1 for no zero polling\r
+h_convert_conv1:\r
+ ldi r_bcount,0\r
+ ldi r_rwbyte,0\r
+ rjmp handle_end_no_bcount\r
+\r
+/////////////////////////////////////////////////////////////////////\r
+\r
+\r
+;---------------------------------------------------\r
+; READ COMMAND and start operation\r
+;---------------------------------------------------\r
+\r
+\r
+h_readcommand2:\r
+ clr r_bytep\r
+#ifndef _DIS_FLASH_\r
+ FLASH_COMMANDS ; muss zu erst sein....\r
+#endif\r
+ cset 0xAA,OW_READ_MEMORY_ADDR2\r
+ cset 0x55,OW_WRITE_MEMORY_ADDR2\r
+ cset 0x3C,OW_CONVERT2\r
+ FW_CONFIG_INFO2\r
+#ifdef _CHANGEABLE_ID_\r
+ CHANGE_ID_COMMANDS\r
+#endif\r
+ ldi r_mode,OW_SLEEP\r
+ rjmp handle_end\r
+\r
+\r
+h_readmemoryaddr2:\r
+ cpi r_bytep,0 ;erstes Adressbyte ?\r
+ brne h_readmemory_addr_byte12 ;nein dann weiter\r
+ andi r_rwbyte,0x1F ; nur Adressen zwischen 0 und 0x1F zulassen\r
+ sts addr,r_rwbyte ;speichern des ersten bytes\r
+ rjmp handle_end_inc\r
+h_readmemory_addr_byte12: ;zweiters Addressbyte wird nicht gespeichert!\r
+ ldi r_mode,OW_READ_MEMORY2 ;weiter zu read Memory\r
+ ;;ldi r_bcount,1 ;ist unten\r
+ ldi r_sendflag,1 ;jetzt sendet der Slave zum Master\r
+ clr r_bytep\r
+ rjmp h_readmemory22\r
+h_readmemory2:\r
+ lds r_bytep,addr\r
+ inc r_bytep\r
+ sts addr,r_bytep\r
+ andi r_bytep,0x07\r
+ breq h_readmemory_init_crc2\r
+h_readmemory22:\r
+ lds r_bytep,addr\r
+ ;andi r_bytep,0x1F ist oben\r
+ configZ pack2,r_bytep\r
+ ld r_rwbyte,Z\r
+ ;ldi r_bcount,1\r
+ rjmp handle_end ;sendet das Byte und geht zu h_readmemory\r
+h_readmemory_init_crc2:; init erstes CRC byte\r
+ lds r_rwbyte,crc\r
+ com r_rwbyte\r
+ lds r_temp,crc+1\r
+ com r_temp\r
+ sts crcsave,r_temp\r
+ ldi r_mode,OW_READ_MEMORY_CRC12\r
+ ;ldi r_bcount,1\r
+ rjmp handle_end\r
+h_readmemory_end2:\r
+ ldi r_mode,OW_SLEEP\r
+ clr r_sendflag\r
+ rjmp handle_end\r
+h_readmemorycrc12:;init zweites CRC Byte\r
+ lds r_rwbyte,crcsave\r
+ ;ldi r_bcount,1\r
+ ldi r_mode,OW_READ_MEMORY_CRC22\r
+ rjmp handle_end\r
+h_readmemorycrc22:;weiteres senden..... nach zweitem Byte\r
+ lds r_temp,addr\r
+ andi r_temp,0xE0\r
+ brne h_readmemory_end2; ende des speichers\r
+ ldi r_mode,OW_READ_MEMORY2\r
+ CRCInit1 ;Start with new CRC\r
+ rjmp h_readmemory22\r
+\r
+h_writememoryaddr2:\r
+ cpi r_bytep,0 ;erstes Adressbyte ?\r
+ brne h_writememory_addr_byte12 ;nein dann weiter\r
+ andi r_rwbyte,0x1F ; nur Adressen zwischen 0 und 0x1F zulassen\r
+ sts addr,r_rwbyte ;speichern des ersten bytes\r
+ inc r_bytep\r
+ ;ldi r_bcount,1\r
+ rjmp handle_end\r
+h_writememory_addr_byte12: ;zweiters Addressbyte wird nicht gespeichert!\r
+ ldi r_mode,OW_WRITE_MEMORY2 ;weiter zu read Memory\r
+ ;ldi r_bcount,1 ;; _________________________________________________in handle_end integrieren.....\r
+ lds r_bytep,addr\r
+ rjmp handle_end ;read Memory Byte\r
+h_writememory2:\r
+ lds r_bytep,addr\r
+ configZ pack2,r_bytep\r
+ st Z,r_rwbyte\r
+ ;ldi r_bcount,1\r
+ ldi r_mode,OW_WRITE_MEMORY_CRC12\r
+ ldi r_sendflag,1 ;jetzt sendet der Slave zum Master\r
+ lds r_rwbyte,crc\r
+ com r_rwbyte\r
+ lds r_temp,crc+1\r
+ com r_temp\r
+ sts crcsave,r_temp\r
+ rjmp handle_end\r
+h_writememorycrc12:\r
+ lds r_rwbyte,crcsave\r
+ ;ldi r_bcount,1\r
+ ldi r_mode,OW_WRITE_MEMORY_CRC22\r
+ rjmp handle_end\r
+h_writememorycrc22:\r
+ lds r_temp,addr\r
+ configZ pack2,r_temp\r
+ ld r_rwbyte,Z\r
+ ;ldi r_bcount,1\r
+ ldi r_mode,OW_WRITE_MEMORY_READBACK2\r
+ rjmp handle_end\r
+h_writememoryreadback2:\r
+ ldi r_temp,0x00\r
+ sts crc+1,r_temp\r
+ lds r_temp,addr\r
+ inc r_temp\r
+ sts addr,r_temp\r
+ sts crc,r_temp\r
+ ldi r_sendflag,0\r
+ ;ldi r_bcount,1\r
+ ldi r_mode,OW_WRITE_MEMORY2\r
+ rjmp handle_end\r
+\r
+h_convert2:\r
+ cpi r_bytep,0 ;erstes Adressbyte ?\r
+ brne h_convert_byte12 ;nein dann weiter\r
+ inc r_bytep\r
+ sts pack2+0x20,r_rwbyte\r
+ ;ldi r_bcount,1\r
+ rjmp handle_end\r
+h_convert_byte12: ;zweies byte glesen go crc#\r
+ sts pack2+0x21,r_rwbyte\r
+ lds r_rwbyte,crc\r
+ com r_rwbyte\r
+ lds r_temp,crc+1\r
+ com r_temp\r
+ sts crcsave,r_temp\r
+ ldi r_mode,OW_CONVERT_CRC12\r
+ ;ldi r_bcount,1\r
+ ldi r_sendflag,1\r
+ rjmp handle_end \r
+h_convertcrc12:\r
+ lds r_rwbyte,crcsave\r
+ ;ldi r_bcount,1\r
+ ldi r_mode,OW_CONVERT_CRC22\r
+ rjmp handle_end\r
+h_convertcrc22:\r
+ ldi r_temp,1\r
+ sts gcontrol2,r_temp\r
+ ;ldi r_bcount,1\r
+ ldi r_mode,OW_CONVERT_CONV2\r
+ ;clr r_sendflag\r
+ ldi r_sendflag,3 ;set bit 0 and 1 for no zero polling\r
+h_convert_conv2:\r
+ ldi r_bcount,0\r
+ ldi r_rwbyte,0\r
+ rjmp handle_end_no_bcount\r
+\r
+\r
+\r
+#include "../common/OWPinInterrupt.s"\r
+.end
\ No newline at end of file
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \r
\r
\r
-.global PIN_INTERRIPT \r
-PIN_INTERRIPT:\r
+.global PIN_INTERRUPT \r
+PIN_INTERRUPT:\r
;leitung auf Low ziehen\r
TESTZEROMARKER ; ueberspringe wenn zeromarker=0 ;sbic und cbi/sbi andern SREG nicht\r
sbi OW_DDR,OW_PINN \r
lds r_temp,flashmarker\r
cpi r_temp,2\r
brne hrc_jmp_flasher_inc\r
- ldi r_temp,0xC0\r
- push r_temp\r
- ldi r_temp,0x0E\r
- push r_temp\r
- ret ; Direkter Sprung zum Bootloader\r
+ JMP_FLASHER\r
hrc_jmp_flasher_inc:\r
inc r_temp\r
sts flashmarker,r_temp\r
\r
configZ owid,r_bcount\r
ld r_rwbyte,Z\r
- sts srbyte,r_rwbyte\r
+ sts srbyte,r_rwbyte ;#################### Doppelung ist schon in h_searchrom_next_bit\r
rjmp h_searchrom_next_bit\r
\r
h_searchroms_next_bit: ;next Bit lesen\r
h_fwconfiginfo:\r
cpi r_bytep,24\r
breq h_fwconfiginfo_crc\r
-#ifdef _CRC8_\r
+#if defined(_CRC8_) || defined( _CRC8_16_) \r
cpi r_bytep,25\r
breq h_fwconfiginfo_all\r
#elif defined _CRC16_\r
\r
.global OWINIT\r
OWINIT:\r
-#ifndef _DIS_FLASH_\r
-; check for bootloader jumper\r
- ;vor allen anderen Registerconfigs\r
push r_temp\r
- ldi r_temp,(1<<PUD) ;enable pullup \r
- out _SFR_IO_ADDR(MCUCR) ,r_temp\r
- sbi _SFR_IO_ADDR(PORTA),PINA5 ;internal pullup on PINA5\r
- sbi _SFR_IO_ADDR(PORTA),PINA4 ;internal pullup on PINA4\r
- rcall spause\r
- sbis _SFR_IO_ADDR(PINA),PINA5\r
- rjmp owinit_botest_end ;PinA5 nicht auf 1\r
- sbis _SFR_IO_ADDR(PINA),PINA4\r
- rjmp owinit_botest_end ;PinA4 nicht auf 1\r
- cbi _SFR_IO_ADDR(PORTA),PINA4 \r
- sbi _SFR_IO_ADDR(DDRA),PINA4 ;PINA4 AUSGANG und 0\r
- rcall spause\r
- sbic _SFR_IO_ADDR(PINA),PINA5 \r
- rjmp owinit_botest_end ;PINA5 nicht 0.... nicht verbunden\r
- cbi _SFR_IO_ADDR(DDRA),PINA4\r
- ldi r_temp,0xC0\r
- push r_temp\r
- ldi r_temp,0x0E\r
- push r_temp\r
- ret ; Direkter Sprung zum Bootloader*/\r
-owinit_botest_end:\r
+#ifndef _DIS_FLASH_\r
+ CHECK_BOOTLOADER_PIN \r
#endif\r
HW_INIT //Microcontroller specific\r
CHIP_INIT //1-Wire device specific\r
cljmp 0x85,hrc_fw_configinfo2\r
.endm\r
\r
-#ifdef _CHANGEABLE_ID_\r
+//#ifdef _CHANGEABLE_ID_ //--> ID vom EEPROM lesen auch wenn sie sich nicht ändern laesst\r
; lesen der ID aus dem EEPROM beim Start\r
read_EEPROM_ID1: \r
ldi r_temp2,lo8(E2END)\r
brne read_EEPROM_ID_loop\r
read_EEPROM_ID_end:\r
ret\r
-#endif\r
+//#endif\r
\r
\r
\r
lds r_temp,flashmarker\r
cpi r_temp,2\r
brne hrc_jmp_flasher_inc\r
- ldi r_temp,0xC0\r
- push r_temp\r
- ldi r_temp,0x0E\r
- push r_temp\r
- ret ; Direkter Sprung zum Bootloader\r
+ JMP_FLASHER\r
hrc_jmp_flasher_inc:\r
inc r_temp\r
sts flashmarker,r_temp\r
h_fwconfiginfo_go:\r
cpi r_bytep,24\r
breq h_fwconfiginfo_crc\r
-#ifdef _CRC8_\r
+#if defined(_CRC8_) || defined( _CRC8_16_) \r
cpi r_bytep,25\r
breq h_fwconfiginfo_all\r
#elif defined _CRC16_\r
;vor allen anderen Registerconfigs\r
push r_temp\r
#ifndef _DIS_FLASH_\r
- ldi r_temp,(1<<PUD) ;enable pullup \r
- out _SFR_IO_ADDR(MCUCR) ,r_temp\r
- sbi _SFR_IO_ADDR(PORTA),PINA5 ;internal pullup on PINA5\r
- sbi _SFR_IO_ADDR(PORTA),PINA4 ;internal pullup on PINA4\r
- rcall spause\r
- sbis _SFR_IO_ADDR(PINA),PINA5\r
- rjmp owinit_botest_end ;PinA5 nicht auf 1\r
- sbis _SFR_IO_ADDR(PINA),PINA4\r
- rjmp owinit_botest_end ;PinA4 nicht auf 1\r
- cbi _SFR_IO_ADDR(PORTA),PINA4 \r
- sbi _SFR_IO_ADDR(DDRA),PINA4 ;PINA4 AUSGANG und 0\r
- rcall spause\r
- sbic _SFR_IO_ADDR(PINA),PINA5 \r
- rjmp owinit_botest_end ;PINA5 nicht 0.... nicht verbunden\r
- cbi _SFR_IO_ADDR(DDRA),PINA4\r
- ldi r_temp,0xC0\r
- push r_temp\r
- ldi r_temp,0x0E\r
- push r_temp\r
- ret ; Direkter Sprung zum Bootloader*/\r
-owinit_botest_end:\r
+ CHECK_BOOTLOADER_PIN \r
#endif\r
HW_INIT //Microcontroller specific\r
CHIP_INIT //1-Wire device specific\r
push r_rwbyte\r
push r_idn1\r
push r_idn2\r
-#ifdef _CHANGEABLE_ID_\r
+//#ifdef _CHANGEABLE_ID_\r
rcall read_EEPROM_ID1\r
rcall read_EEPROM_ID2\r
-#endif\r
+//#endif\r
ldi r_bytep,8\r
ldi r_temp,0\r
ldi zl,lo8(idtable)\r
--- /dev/null
+// Copyright (c) 2017, Tobias Mueller tm(at)tm3d.de\r
+// All rights reserved. \r
+// \r
+// Redistribution and use in source and binary forms, with or without \r
+// modification, are permitted provided that the following conditions are \r
+// met: \r
+// \r
+// * Redistributions of source code must retain the above copyright \r
+// notice, this list of conditions and the following disclaimer. \r
+// * Redistributions in binary form must reproduce the above copyright \r
+// notice, this list of conditions and the following disclaimer in the \r
+// documentation and/or other materials provided with the \r
+// distribution. \r
+// * All advertising materials mentioning features or use of this \r
+// software must display the following acknowledgement: This product \r
+// includes software developed by tm3d.de and its contributors. \r
+// * Neither the name of tm3d.de nor the names of its contributors may \r
+// be used to endorse or promote products derived from this software \r
+// without specific prior written permission. \r
+// \r
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \r
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT \r
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR \r
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT \r
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, \r
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT \r
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, \r
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY \r
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT \r
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE \r
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \r
+\r
+\r
+#define OW_PORT _SFR_IO_ADDR(PORTD) //1 Wire Port\r
+#define OW_PIN _SFR_IO_ADDR(PIND) //1 Wire Pin as number\r
+#define OW_PINN PORTD2\r
+#define OW_DDR _SFR_IO_ADDR(DDRD) //pin direction register\r
+\r
+#define TCNT_REG _SFR_IO_ADDR(TCNT0)\r
+\r
+\r
+#define DB_PORT _SFR_IO_ADDR(PORTB) //DEBUG\r
+#define DB_PIN _SFR_IO_ADDR(PINB) //DEBUG\r
+#define DB_DDR _SFR_IO_ADDR(DDRB) //DEBUG\r
+#define DB_PINN PORTB1\r
+\r
+#define SETZEROMARKER sbi _SFR_IO_ADDR(DDRC),6\r
+#define RESETZEROMARKER cbi _SFR_IO_ADDR(DDRC),6\r
+#define TESTZEROMARKER sbic _SFR_IO_ADDR(DDRC),6\r
+\r
+#ifdef _DB_\r
+#define sdb sbi _SFR_IO_ADDR(PORTB),DB_PINN\r
+#define cdb cbi _SFR_IO_ADDR(PORTB),DB_PINN\r
+#else\r
+#define sdb\r
+#define cdb\r
+#endif\r
+\r
+#define TIMER_INTERRUPT TIMER0_OVF_vect\r
+#define PIN_INTERRUPT INT0_vect\r
+\r
+\r
+//#define OWT_MIN_RESET 160 \r
+//#define OWT_RESET2 40\r
+//#define OWT_RESET_PRESENT 15\r
+//#define OWT_PRESENT 50\r
+//#define OWT_WRITE 18\r
+//#define OWT_READ 4\r
+#ifdef __4MHZ__\r
+#define OWT_MIN_RESET 80\r
+#define OWT_RESET2 30\r
+#define OWT_RESET_PRESENT 15\r
+#define OWT_PRESENT 60\r
+#define OWT_WRITE 16\r
+#define OWT_READ 5\r
+#define OWT_ZP_WAIT_LOW_TO 36 ; Zeit fuer die Maximale Lowzeit bei der Zerro Polling pruefung. Ist die Leitung laenger low, ist es vieleicht ein Reset \r
+#define OWT_ZP_WAIT_HIGH_TO 54 ; Zeit fuer die Maximale Hight zeit bis zu einem Low Impuls vom Master. Nach laengeren Pausen wird nicht mehr gepollt sondern der Interrup vererndet.\r
+#else\r
+#define OWT_MIN_RESET 180\r
+#define OWT_RESET2 80\r
+#define OWT_RESET_PRESENT 30\r
+#define OWT_PRESENT 130\r
+#define OWT_WRITE 35\r
+#define OWT_READ 12\r
+#define OWT_ZP_WAIT_LOW_TO 60 ; Zeit fuer die Maximale Lowzeit bei der Zerro Polling pruefung. Ist die Leitung laenger low, ist es vieleicht ein Reset \r
+#define OWT_ZP_WAIT_HIGH_TO 90 ; Zeit fuer die Maximale Hight zeit bis zu einem Low Impuls vom Master. Nach laengeren Pausen wird nicht mehr gepollt sondern der Interrup vererndet.\r
+#endif\r
+\r
+.macro CLEAR_TOV_FLAG\r
+ ldi r_temp,1\r
+ out _SFR_IO_ADDR(TIFR0),r_temp\r
+.endm\r
+\r
+.macro JMP_NO_TOV\r
+ in r_temp, _SFR_IO_ADDR(TIFR0)\r
+ sbrc r_temp,TOV0 ; wenn ueberlauf gleich weiter\r
+.endm\r
+\r
+.macro CLEAR_INTERRUPT_FLAG \r
+ ldi r_temp,(1<<INTF0);inerrupt flags durch 1 loeschen..... 0 macht nix\r
+ out _SFR_IO_ADDR(EIFR),r_temp\r
+.endm\r
+\r
+.macro EN_TIM_INT\r
+ ldi r_temp,(1<<TOIE0)\r
+ sts TIMSK0,r_temp\r
+ ldi r_temp,(1<<TOV0) ;inerrupt flags durch 1 loeschen..... 0 macht nix\r
+ out _SFR_IO_ADDR(TIFR0),r_temp\r
+.endm\r
+\r
+.macro DIS_TIM_INT\r
+ ldi r_temp,0\r
+ sts TIMSK0,r_temp\r
+.endm\r
+\r
+//Wiederherstellen von Idle mode und umschalten von Low-Level interrupt zu Falling edge\r
+.macro SET_FALLING_RESET_SLEEP\r
+ lds r_temp,EICRA\r
+ ori r_temp,(1<<ISC01)\r
+ sts EICRA,r_temp\r
+ lds r_temp,SMCR\r
+ andi r_temp,~(1<<SM1)\r
+ sts SMCR,r_temp\r
+.endm\r
+\r
+.macro HW_INIT ;r_temp is pushed other Registers should be saved\r
+ ;set clock to 8 MHz\r
+ ldi r_temp,0x80;\r
+ sts CLKPR,r_temp\r
+ //ldi r_temp,(1<<CLKPS0)\r
+#ifdef __4MHZ__\r
+ ldi r_temp,0x01;\r
+#else\r
+ ldi r_temp,0\r
+#endif\r
+ sts CLKPR,r_temp\r
+ ;Disable Timer int\r
+ ldi r_temp,0\r
+ sts TIMSK0,r_temp ;; is default\r
+ ;Enable Pin int\r
+ ldi r_temp,(1<<INT0)\r
+ out _SFR_IO_ADDR(EIMSK),r_temp\r
+ ;Set Timerclock to Clock / 8 (2us bei 4MHz) bzw 1us bei 8 MHz\r
+ ldi r_temp,(1<<CS01)\r
+ out _SFR_IO_ADDR(TCCR0B),r_temp\r
+ ;OWPin as input\r
+ cbi OW_DDR,OW_PINN ;; is default.... \r
+ cbi OW_PORT,OW_PINN ;; vereinfachung im Hauptprogram (PORTB=0xFF) wegen pullup\r
+ ;set falling edge\r
+ ldi r_temp,(1<<ISC01)\r
+ sts EICRA,r_temp\r
+#ifdef _DB_\r
+ sbi DB_DDR,DB_PINN\r
+#endif\r
+.endm\r
+\r
+.macro JMP_FLASHER\r
+ ldi r_temp,0x00\r
+ push r_temp\r
+ ldi r_temp,0x3E\r
+ push r_temp\r
+ ret ; Direkter Sprung zum Bootloader\r
+.endm\r
+\r
+.macro CHECK_BOOTLOADER_PIN\r
+.endm\r
+\r
#endif\r
\r
#define TIMER_INTERRUPT TIM0_OVF_vect\r
-#define PIN_INTERRIPT EXT_INT0_vect\r
+#define PIN_INTERRUPT EXT_INT0_vect\r
\r
\r
//#define OWT_MIN_RESET 160 \r
#define OWT_RESET2 30\r
#define OWT_RESET_PRESENT 15\r
#define OWT_PRESENT 60\r
-#define OWT_WRITE 16\r
+#define OWT_WRITE 15\r
#define OWT_READ 5\r
#define OWT_ZP_WAIT_LOW_TO 36 ; Zeit fuer die Maximale Lowzeit bei der Zerro Polling pruefung. Ist die Leitung laenger low, ist es vieleicht ein Reset \r
#define OWT_ZP_WAIT_HIGH_TO 54 ; Zeit fuer die Maximale Hight zeit bis zu einem Low Impuls vom Master. Nach laengeren Pausen wird nicht mehr gepollt sondern der Interrup vererndet.\r
#define OWT_RESET2 80\r
#define OWT_RESET_PRESENT 30\r
#define OWT_PRESENT 130\r
-#define OWT_WRITE 35\r
+#define OWT_WRITE 33\r
#define OWT_READ 12\r
#define OWT_ZP_WAIT_LOW_TO 60 ; Zeit fuer die Maximale Lowzeit bei der Zerro Polling pruefung. Ist die Leitung laenger low, ist es vieleicht ein Reset \r
#define OWT_ZP_WAIT_HIGH_TO 90 ; Zeit fuer die Maximale Hight zeit bis zu einem Low Impuls vom Master. Nach laengeren Pausen wird nicht mehr gepollt sondern der Interrup vererndet.\r
sbi DB_DDR,DB_PINN\r
#endif\r
.endm\r
+.macro JMP_FLASHER\r
+ ldi r_temp,0xC0\r
+ push r_temp\r
+ ldi r_temp,0x0E\r
+ push r_temp\r
+ ret ; Direkter Sprung zum Bootloader\r
+.endm\r
\r
\r
+.macro CHECK_BOOTLOADER_PIN ;r_temp is pushed other Registers should be saved\r
+; check for bootloader jumper\r
+ ;vor allen anderen Registerconfigs\r
+#ifndef _NO_BOOTLOADER_PIN_ \r
+ ldi r_temp,(1<<PUD) ;enable pullup \r
+ out _SFR_IO_ADDR(MCUCR) ,r_temp\r
+ sbi _SFR_IO_ADDR(PORTA),PINA5 ;internal pullup on PINA5\r
+ sbi _SFR_IO_ADDR(PORTA),PINA4 ;internal pullup on PINA4\r
+ rcall spause\r
+ sbis _SFR_IO_ADDR(PINA),PINA5\r
+ rjmp owinit_botest_end ;PinA5 nicht auf 1\r
+ sbis _SFR_IO_ADDR(PINA),PINA4\r
+ rjmp owinit_botest_end ;PinA4 nicht auf 1\r
+ cbi _SFR_IO_ADDR(PORTA),PINA4 \r
+ sbi _SFR_IO_ADDR(DDRA),PINA4 ;PINA4 AUSGANG und 0\r
+ rcall spause\r
+ sbic _SFR_IO_ADDR(PINA),PINA5 \r
+ rjmp owinit_botest_end ;PINA5 nicht 0.... nicht verbunden\r
+ cbi _SFR_IO_ADDR(DDRA),PINA4\r
+ JMP_FLASHER\r
+owinit_botest_end:\r
+#endif\r
+.endm\r
\r
double r=hum*(SDDD(temp,tempdiv)*(tempdiv/(temp+273.15)+1));\r
if (r>100) return 100.0;\r
return r;\r
+}\r
+\r
+inline double calibr_hum05(double t,double hum) {\r
+ double y=-0.0006*t*t-0.2455*t-28.5902;\r
+ return -(hum/y)+hum;\r
}
\ No newline at end of file
\r
double calibr_hum(double temp,double tempdiv,double hum);\r
\r
-\r
#endif
\ No newline at end of file
--- /dev/null
+#ifndef OWSLAVE_TOOLS_H\r
+#define OWSLAVE_TOOLS_H\r
+\r
+#if defined(__AVR_ATtiny44__) || defined(__AVR_ATtiny84__) || defined(__AVR_ATtiny24A__)||defined(__AVR_ATtiny44A__) || defined(__AVR_ATtiny84A__)\r
+#define OWST_INIT_ALL_OFF \\r
+ PRR|=(1<<PRUSI)|(1<<PRADC); /*Switch off usi and adc for save Power*/\\r
+ ACSR|=(1<<ACD); /*Disable Comparator*/\\r
+ ADCSRB|=(1<<ACME); /*Disable Analog multiplexer*/\\r
+ PORTB|=~(1<<PINB2)|(1<<PORTB0); /*Make PullUp an all Pins but not OW_PIN*/\\r
+ /*Schalter kann gegen Masse sein und zieht dann immer Strom*/ \\r
+ DDRB|=(1<<PORTB0); /*Als Ausgang und 0*/\\r
+ PORTA|=0xFF;\r
+\r
+#define OWST_INIT_ADC_ON \\r
+PRR|=(1<<PRUSI); /*Switch off usi and adc for save Power*/\\r
+ACSR|=(1<<ACD); /*Disable Comparator*/\\r
+PORTB=~((1<<PINB2)|(1<<PORTB0)); /*Make PullUp an all Pins but not OW_PIN*/\\r
+/*Schalter kann gegen Masse sein und zieht dann immer Strom*/ \\r
+DDRB|=(1<<PORTB0); /*Als Ausgang und 0*/\\r
+PORTA|=0xFF; \r
+\r
+#define OWST_INIT_USI_ON \\r
+PRR|=(1<<PRADC); /*Switch off usi and adc for save Power*/\\r
+ACSR|=(1<<ACD); /*Disable Comparator*/\\r
+ADCSRB|=(1<<ACME); /*Disable Analog multiplexer*/\\r
+PORTB|=~(1<<PINB2)|(1<<PORTB0); /*Make PullUp an all Pins but not OW_PIN*/\\r
+/*Schalter kann gegen Masse sein und zieht dann immer Strom*/ \\r
+DDRB|=(1<<PORTB0); /*Als Ausgang und 0*/\\r
+PORTA|=0xFF;\r
+\r
+#define OWST_INIT_ALL_ON \\r
+PORTB|=~(1<<PINB2)|(1<<PORTB0); /*Make PullUp an all Pins but not OW_PIN*/\\r
+/*Schalter kann gegen Masse sein und zieht dann immer Strom*/ \\r
+DDRB|=(1<<PORTB0); /*Als Ausgang und 0*/\\r
+PORTA|=0xFF;\r
+\r
+ \r
+#define OWST_EN_PULLUP MCUCR &=~(1<<PUD); /*All Pins Pullup...*/\r
+\r
+#define OWST_WDT_ISR \\r
+uint8_t wdcounter=0;\\r
+ISR(WATCHDOG_vect) {/* #else ISR(WDT_vect) { #endif*/\\r
+ wdcounter++;\\r
+ if (reset_indicator==1) reset_indicator++;\\r
+ else if (reset_indicator==2) mode=0;\\r
+}\r
+\r
+#define OWST_WDR_CONFIG8\\r
+ WDTCSR |= ((1<<WDCE) ); /* Enable the WD Change Bit//| (1<<WDE)*/\\r
+ WDTCSR |= (1<<WDIE) | /* Enable WDT Interrupt*/\\r
+ (1<<WDP3) | (1<<WDP0); /*Set Timeout to ~8 seconds*/\r
+\r
+#define OWST_WDR_CONFIG4\\r
+ WDTCSR |= ((1<<WDCE) ); /* Enable the WD Change Bit//| (1<<WDE)*/\\r
+ WDTCSR |= (1<<WDIE) | /* Enable WDT Interrupt*/\\r
+ (1<<WDP3) ; /*Set Timeout to ~2 seconds*/\r
+\r
+#define OWST_WDR_CONFIG2\\r
+ WDTCSR |= ((1<<WDCE) ); /* Enable the WD Change Bit//| (1<<WDE)*/\\r
+ WDTCSR |= (1<<WDIE) | /* Enable WDT Interrupt*/\\r
+ (1<<WDP2) | (1<<WDP1)| (1<<WDP0); /*Set Timeout to ~1 seconds*/\r
+\r
+#define OWST_WDR_CONFIG1\\r
+ WDTCSR |= ((1<<WDCE) ); /* Enable the WD Change Bit//| (1<<WDE)*/\\r
+ WDTCSR |= (1<<WDIE) | /* Enable WDT Interrupt*/\\r
+ (1<<WDP2) | (1<<WDP1); /*Set Timeout to ~1 seconds*/\r
+\r
+\r
+#define OWST_TESTSW \\r
+ int testSW(void) {\\r
+ uint8_t r;\\r
+ DDRB&=~(1<<PORTB0); /*Eingang*/\\r
+ __asm__ __volatile__ ("nop");\\r
+ PORTB|=(1<<PORTB0); /*Pullup*/\\r
+ __asm__ __volatile__ ("nop");\\r
+ __asm__ __volatile__ ("nop");\\r
+ __asm__ __volatile__ ("nop");\\r
+ __asm__ __volatile__ ("nop");\\r
+ __asm__ __volatile__ ("nop");\\r
+ r=PINB&(1<<PORTB0);\\r
+ __asm__ __volatile__ ("nop");\\r
+ PORTB&=~(1<<PORTB0);\\r
+ __asm__ __volatile__ ("nop");\\r
+ DDRB|=(1<<PORTB0); /*Eingang*/\\r
+ return (r==0);\\r
+ }\\r
+\r
+#define OWST_EXTERN_VARS\r
+extern uint8_t mode;\\r
+extern uint8_t gcontrol;\\r
+extern uint8_t reset_indicator;\\r
+extern uint8_t alarmflag; \\r
+extern void OWINIT(void);\\r
+extern void EXTERN_SLEEP(void);\\r
+\r
+\r
+\r
+#define OWST_MAIN_END \\r
+ if (((TIMSK0 & (1<<TOIE0))==0)&& (mode==0)) {\\r
+ MCUCR|=(1<<SE)|(1<<SM1);\\r
+ MCUCR&=~(1<<ISC01);\\r
+ } else {\\r
+ MCUCR|=(1<<SE);\\r
+ MCUCR&=~(1<<SM1);\\r
+ }\\r
+ asm("SLEEP");\r
+\r
+#endif\r
+\r
+//********************** AD_WANDLER ********************************\r
+//******************************************************************\r
+//clock fuer ADC 50kHz - 200kHz 8M / 128 = 62500 = 4M/64 erste Messng 25 = 0,4ms / zweite Messung 13 rund 0,21ms\r
+#ifdef __4MHZ__\r
+#define OWST_INIT_ADC \\r
+ADCSRA = (1<<ADEN)|(1<<ADPS2)|(1<<ADPS1);\r
+#else\r
+#define OWST_INIT_ADC \\r
+ADCSRA = (1<<ADEN)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0);\r
+#endif\r
+\r
+#define OWST_ADC_CONF ADCSRA|=(1<<ADSC); while ((ADCSRA&(1<<ADSC)));\r
+\r
+#define OWST_ADCREF_VCC 0\r
+#define OWST_ADCREF_AREF (1<<REFS0)\r
+#define OWST_ADCREF_INT ((1<<REFS0)|(1<<REFS1))\r
+\r
+#define OWST_ADCIN_PA0 0\r
+#define OWST_ADCIN_PA1 1\r
+#define OWST_ADCIN_PA2 2\r
+#define OWST_ADCIN_PA3 3\r
+#define OWST_ADCIN_PA4 4\r
+#define OWST_ADCIN_PA5 5\r
+#define OWST_ADCIN_PA6 6\r
+#define OWST_ADCIN_PA7 7\r
+\r
+\r
+#if defined(__AVR_ATtiny44__) || defined(__AVR_ATtiny84__) || defined(__AVR_ATtiny24A__)||defined(__AVR_ATtiny44A__) || defined(__AVR_ATtiny84A__)\r
+#define OWST_ADCIN_REFINT 0b0100001\r
+#endif\r
+#if defined(__AVR_ATmega168__)||defined(__AVR_ATmega168A__) ||defined(__AVR_ATmega328__) ||defined(__AVR_ATmega328P__) ||defined(__AVR_ATmega328PB__)\r
+#define OWST_ADCIN_REFINT 0b00001110\r
+#endif\r
+#if defined(__AVR_ATtiny24__)||defined(__AVR_ATtiny44__) || defined(__AVR_ATtiny84__)||defined(__AVR_ATtiny24A__)||defined(__AVR_ATtiny44A__) || defined(__AVR_ATtiny84A__)\r
+#define AD_PORT PORTA\r
+#define AD_DDR DDRA\r
+#endif\r
+\r
+#if defined(__AVR_ATmega168__)||defined(__AVR_ATmega168A__) ||defined(__AVR_ATmega328__) ||defined(__AVR_ATmega328P__) ||defined(__AVR_ATmega328PB__)\r
+#define AD_PORT PORTC\r
+#define AD_DDR DDRC\r
+#endif\r
+\r
+#define OWST_ADC_CONF16_FUNC \\r
+uint16_t owst_ADC_run() {/*14,5ms*/\\r
+ uint16_t r=0;\\r
+ for(uint8_t i=0;i<64;i++) { OWST_ADC_CONF r+=ADC; }\\r
+ return r;\\r
+} \\r
+double owst_ADC_runf() {/*16,5ms*/\\r
+ double r=0;\\r
+ for(uint8_t i=0;i<64;i++) { OWST_ADC_CONF r+=ADC; }\\r
+ r*=0.9993;\\r
+ return r;\\r
+}\r
+\r
+#define OWST_ADC_CONF16_OSS_FUNC \\r
+uint16_t owst_ADC_OSS_run() {/*896ms*/\\r
+ uint32_t r=0;\\r
+ for(uint16_t i=0;i<4096;i++) {\\r
+ OWST_ADC_CONF \\r
+ r+=ADC;\\r
+ }\\r
+ return r>>6;\\r
+} \\r
+double owst_ADC_OSS_runf() {/*964ms*/\\r
+ double r=0;\\r
+ for(uint16_t i=0;i<4096;i++) {\\r
+ OWST_ADC_CONF \\r
+ r+=ADC;\\r
+ }\\r
+ r+=5150;\\r
+ r*=0.9993;\\r
+ return r/64.0;\\r
+} \r
+\r
+\r
+#endif
\ No newline at end of file
<preserveEEPROM>true</preserveEEPROM>\r
<OverrideVtorValue>exception_table</OverrideVtorValue>\r
<BootSegment>2</BootSegment>\r
- <eraseonlaunchrule>0</eraseonlaunchrule>\r
+ <eraseonlaunchrule>1</eraseonlaunchrule>\r
<AsfFrameworkConfig>\r
<framework-data>\r
<options />\r
</dependencies>\r
</framework-data>\r
</AsfFrameworkConfig>\r
- <avrtool>com.atmel.avrdbg.tool.avrdragon</avrtool>\r
+ <avrtool>com.atmel.avrdbg.tool.atmelice</avrtool>\r
<com_atmel_avrdbg_tool_atmelice>\r
<ToolOptions>\r
<InterfaceProperties>\r
- <IspClock>100000</IspClock>\r
+ <IspClock>125000</IspClock>\r
<DebugWireClockDiv>0</DebugWireClockDiv>\r
</InterfaceProperties>\r
<InterfaceName>debugWIRE</InterfaceName>\r
<ToolNumber>J41800000789</ToolNumber>\r
<ToolName>Atmel-ICE</ToolName>\r
</com_atmel_avrdbg_tool_atmelice>\r
- <avrtoolinterface>ISP</avrtoolinterface>\r
+ <avrtoolinterface>debugWIRE</avrtoolinterface>\r
<ExternalProgrammingToolCommand />\r
- <avrtoolserialnumber>00A200054127</avrtoolserialnumber>\r
+ <avrtoolserialnumber>J41800000789</avrtoolserialnumber>\r
<avrdeviceexpectedsignature>0x1E930C</avrdeviceexpectedsignature>\r
<com_atmel_avrdbg_tool_avrdragon>\r
<ToolOptions>\r
<InterfaceProperties>\r
- <IspClock>125000</IspClock>\r
+ <IspClock>0</IspClock>\r
</InterfaceProperties>\r
<InterfaceName>ISP</InterfaceName>\r
</ToolOptions>\r
--- /dev/null
+.def srbyte = r12 ;byty for search rom algorithm\r
+.def writelow = r13; marker for send low\r
+.def zero =r14; always zero \r
+.def smode=r15; if 1 then send \r
+.def temp = r16 ; \r
+.def temp2 = r17; \r
+.def mode = r18 ; \r
+.def bitp = r19 ; bit counter ... shift...\r
+.def rwbyte = r21;\r
+.def param = r22;\r
+.def bytep = r23 ;byte counter\r
+#define spmcrval param\r
+\r
+\r
+.equ OWM_READ_ROM_COMMAND=0 ; 0 wegen schnellen test ist dieser wert 0! Daturch wird die Sprungdabelle nicht verwendet\r
+.equ OWM_SLEEP=1 ; Warten auf Reset\r
+.equ OWM_MATCH_ROM=2\r
+.equ OWM_SEARCH_ROM_S=3 ;send bit\r
+.equ OWM_SEARCH_ROM_R=4 ;resive master\r
+.equ OWM_READ_COMMAND=5\r
+.equ OWM_WRITE_SCRATCHPAD=6\r
+.equ OWM_READ_SCRATCHPAD=7\r
+.equ OWM_PROGRAMM_PAGE=8\r
+.equ OWM_RECALL_FLASH=9\r
+\r
+\r
+.equ OW_DDR = DDRB \r
+.equ OW_PIN = PORTB2\r
+.equ OW_PORT = PORTB \r
+.equ OW_PINN = PINB \r
+\r
+;.equ SRAM_START = 0x60\r
+\r
+.macro set_clock\r
+ ldi temp,0x80;\r
+ out CLKPR,temp\r
+ ldi temp,@0\r
+ out CLKPR,temp\r
+.endmacro \r
+\r
+.macro owwl\r
+ sbic OW_PINN,OW_PIN\r
+ rjmp pc-1\r
+.endmacro \r
+\r
+.macro owwh\r
+ sbis OW_PINN,OW_PIN\r
+ rjmp pc-1\r
+.endmacro \r
+\r
+\r
+\r
+\r
+ ;---------------------------------------------------\r
+; START of PROG \r
+;---------------------------------------------------\r
+\r
+\r
+.CSEG \r
+.ORG 0x000\r
+jreset:\r
+ rjmp start ; Reset-Vector \r
+ reti ; \r
+ reti ; \r
+ reti ; \r
+ reti ; \r
+ reti ; \r
+ reti ; \r
+ reti ; \r
+ reti ; \r
+ reti ; \r
+ reti ; \r
+ reti ; \r
+ reti ; \r
+ reti ; \r
+ reti ; \r
+ reti ; \r
+ reti ; \r
+ reti ; \r
+ reti ; \r
+ reti ; \r
+ reti ; \r
+\r
+\r
+.ORG 0x0EC0\r
+//7552 Byte \r
+start: \r
+ cli\r
+ ldi temp,0\r
+ mov zero,temp\r
+ set_clock 0x00 ;8mhz\r
+ ldi mode,OWM_SLEEP\r
+ ldi temp,(1<<CS01) //1us\r
+ out TCCR0B,temp\r
+ ldi temp, HIGH(RAMEND) ; HIGH-Byte der obersten RAM-Adresse \r
+ out SPH, temp \r
+ ldi temp, LOW(RAMEND) ; LOW-Byte der obersten RAM-Adresse \r
+ out SPL, temp \r
+ ;ldi temp,1\r
+ ;out DDRB,temp\r
+ clr writelow\r
+ clr bitp\r
+ \r
+ ;sbi PORTB,0\r
+ ldi ZL,low(pro_owid*2) \r
+ ldi ZH,high(pro_owid*2) \r
+ ldi XL,low(sowid)\r
+ ldi XH,high(sowid)\r
+ ;ldi temp2,8\r
+pro_copy_loop: ;copy ID on SRAM for better handling\r
+ lpm temp,Z+\r
+ st X+,temp\r
+ cpi XL,SRAM_START+8\r
+ brlo pro_copy_loop\r
+pro_loop:\r
+ ;sbi PORTB,0\r
+ owwl ;wait for line goes low (polling)\r
+ sbrs writelow,0 ;test of zero send\r
+ rjmp pro_loop1 ;no ? goes next\r
+ sbi OW_DDR,OW_PIN ;yes pull line to low\r
+ ldi param,45 ;wait for 50 us\r
+ rcall wait_time\r
+ clr writelow ;reset write low indecator\r
+ cbi OW_DDR,OW_PIN ;release line\r
+ owwh ;wait for line is high (it can takes some time cause of the capacity of line)\r
+pro_loop1:\r
+ tst smode ;smode=1 for slave sends to master\r
+ breq pro_loop_resv\r
+pro_loop_send:\r
+ tst bitp\r
+ brne pro_loop_send1\r
+ rcall pro_hb\r
+ tst smode\r
+ breq pro_loop_end ; now reading ... do nothing \r
+pro_loop_send1: ;prebare next bit\r
+ sbrs rwbyte ,0; if bit 0 set in rwbyte then skip next command\r
+ inc writelow\r
+ lsl bitp\r
+ ror rwbyte\r
+ rjmp pro_loop_end\r
+\r
+pro_loop_resv:\r
+ ldi param,15 ;wait 15us\r
+ rcall wait_time\r
+ lsr rwbyte\r
+ ;cbi PORTB,0\r
+ sbic OW_PINN,OW_PIN ;test line\r
+ ori rwbyte,0x80\r
+ lsl bitp\r
+ brne pro_loop_end ;no handle need\r
+ rcall pro_hb\r
+ tst smode\r
+ brne pro_loop_send ; Nach dem Gelesen byte koennte gesendet werden muessen....\r
+pro_loop_end:\r
+ //owwh\r
+ out TCNT0,zero\r
+pro_loop_end_test_reset:\r
+ sbic OW_PINN,OW_PIN //leitung wieder high\r
+ rjmp pro_loop\r
+ in temp,TCNT0\r
+ cpi temp,130\r
+ brlo pro_loop_end_test_reset\r
+ rcall pro_sleep_s2\r
+ rjmp pro_loop\r
+\r
+\r
+\r
+\r
+pro_sleep:\r
+ out TCNT0,zero\r
+pro_sleep_s1:\r
+ sbic OW_PINN,OW_PIN //leitung wieder high\r
+ ret\r
+ in temp,TCNT0\r
+ cpi temp,200\r
+ brlo pro_sleep_s1\r
+ //leitung wieder high\r
+pro_sleep_s2:\r
+ owwh \r
+ ldi param,40\r
+ rcall wait_time\r
+ //Presents Impuls\r
+ sbi OW_DDR,OW_PIN\r
+ ldi param,130\r
+ rcall wait_time\r
+ cbi OW_DDR,OW_PIN\r
+ //init read byte\r
+ ldi bitp,0x01\r
+ ldi rwbyte,0\r
+ clr smode\r
+ ldi mode,OWM_READ_ROM_COMMAND\r
+ //Wait for all other devices presents impuls finished\r
+ ldi param,40\r
+ rcall wait_time\r
+ ret\r
+\r
+\r
+\r
+pro_hb:\r
+ ldi ZL,low(pro_stable) \r
+ ldi ZH,high(pro_stable) \r
+ add ZL,mode \r
+ adc ZH,zero\r
+ icall\r
+ ret\r
+\r
+pro_stable: \r
+ rjmp pro_read_rom_command\r
+ rjmp pro_sleep \r
+ rjmp pro_match_rom\r
+ rjmp pro_search_rom_s\r
+ rjmp pro_search_rom_r\r
+ rjmp pro_read_command\r
+ rjmp pro_write_scratchpad\r
+ rjmp pro_read_scratchpad\r
+ rjmp pro_programm_page\r
+ rjmp pro_recall_flash\r
+\r
+pro_read_rom_command:\r
+ ldi mode,OWM_SLEEP\r
+ cpi rwbyte,0xCC\r
+ brne pro_rcc_1\r
+ ldi mode,OWM_READ_COMMAND\r
+ rjmp pro_out_bitp1\r
+pro_rcc_1:\r
+ cpi rwbyte,0xF0 ;Searchrom\r
+ brne pro_rcc_2\r
+ ldi XL,low(sowid) ;init sram pointer\r
+ ldi XH,high(sowid)\r
+ ld srbyte,X+\r
+ ldi bytep,0\r
+ rjmp pro_serchrom_next_bit\r
+pro_rcc_2:\r
+ cpi rwbyte,0x55 ;Matchrom\r
+ brne pro_rcc_3\r
+// rcall pro_owidinit\r
+ ldi XL,low(sowid) ;init sram pointer\r
+ ldi XH,high(sowid)\r
+ ldi mode,OWM_MATCH_ROM\r
+ rjmp pro_out_bytep0\r
+\r
+pro_rcc_3:\r
+ ret\r
+\r
+pro_match_rom: \r
+ ld temp,X+\r
+ cp temp,rwbyte\r
+ breq pro_match_rom_next\r
+ ldi mode,OWM_SLEEP\r
+ ret\r
+pro_match_rom_next: \r
+ cpi XL,SRAM_START+8\r
+ breq pro_match_rom_found\r
+ rjmp pro_out_bitp1\r
+pro_match_rom_found:\r
+ ldi mode,OWM_READ_COMMAND\r
+ rjmp pro_out_bitp1\r
+\r
+pro_read_command:\r
+ ldi mode,OWM_SLEEP\r
+ cpi rwbyte,0x0F ;; Write to Scratchpad\r
+ brne pro_rc_1\r
+ ldi mode,OWM_WRITE_SCRATCHPAD\r
+ ldi XL,low(scratchpad) ;init sram pointer\r
+ ldi XH,high(scratchpad)\r
+ rjmp pro_out_bytep0\r
+pro_rc_1:\r
+ cpi rwbyte,0xAA\r
+ brne pro_rc_2\r
+ ldi mode,OWM_READ_SCRATCHPAD ;;Read from Scratchpad\r
+ ldi XL,low(scratchpad) ;init sram pointer\r
+ ldi XH,high(scratchpad)\r
+ inc smode\r
+ ld rwbyte,X+\r
+ rjmp pro_out_bytep0\r
+\r
+pro_rc_2:\r
+ cpi rwbyte,0xB8\r
+ brne pro_rc_3\r
+ ldi mode,OWM_RECALL_FLASH ;; copy Flash page in Scratchpad\r
+ ldi XL,low(scratchpad) ;init sram pointer\r
+ ldi XH,high(scratchpad)\r
+ rjmp pro_out_bytep0\r
+pro_rc_3:\r
+ cpi rwbyte,0x55 ; copy Scratchpad to Flash\r
+ brne pro_rc_4\r
+ ldi mode,OWM_SLEEP\r
+ rjmp pro_programm_page\r
+ \r
+pro_rc_4:\r
+ cpi rwbyte,0x89 ; Reset Device /Boot (new) Firmware\r
+ brne pro_rc_5\r
+ rjmp jreset \r
+pro_rc_5:\r
+ cpi rwbyte,0x8B ; Clear the OWID saved in EEPROM / one ID1\r
+ brne pro_rc_6 \r
+ ldi temp,7\r
+pro_rc_5a:\r
+ ldi XL,low(E2END)\r
+ ldi XH,high(E2END)\r
+ sub XL,temp\r
+ out EEARH,XH\r
+ out EEARL,XL\r
+ ldi temp, (0<<EEPM1)|(0<<EEPM0)\r
+ out EECR, temp\r
+ ldi temp,0xFF\r
+ out EEDR, temp\r
+ sbi EECR, EEMPE\r
+ sbi EECR, EEPE\r
+ ret\r
+\r
+\r
+pro_rc_6:\r
+ cpi rwbyte,0x8C ; Clear the OWID saved in EEPROM / one ID2\r
+ brne pro_rc_7\r
+ ldi temp,7+8\r
+ rjmp pro_rc_5a\r
+\r
+pro_rc_7:\r
+ ret\r
+\r
+pro_write_scratchpad:\r
+ st X+,rwbyte\r
+ cpi XL,SRAM_START+8+66\r
+ brlo pro_write_scratchpad_next\r
+ ldi mode,OWM_SLEEP\r
+ ret \r
+pro_write_scratchpad_next:\r
+ ldi bitp,1\r
+ ret\r
+\r
+pro_read_scratchpad:\r
+ cpi XL,SRAM_START+8+66\r
+ brlo pro_read_scratchpad_next\r
+ ldi mode,OWM_SLEEP\r
+ clr smode\r
+ ret\r
+pro_read_scratchpad_next:\r
+ ld rwbyte,X+\r
+ rjmp pro_out_bitp1\r
+\r
+\r
+pro_programm_page:\r
+.equ PAGESIZEB = PAGESIZE*2;PAGESIZEB is page size in BYTES, not words\r
+// .org SMALLBOOTSTART\r
+write_page:\r
+ ;transfer data from RAM to Flash page buffer\r
+ ldi bytep, PAGESIZEB ;init loop variable\r
+ ldi YL,low(scratchpad) ;init sram pointer\r
+ ldi YH,high(scratchpad)\r
+ ld ZL,Y+\r
+ ld ZH,Y+\r
+ ;page erase\r
+ ldi spmcrval, (1<<PGERS) + (1<<SPMEN)\r
+ rcall do_spm\r
+wrloop:\r
+ ld r0, Y+\r
+ ld r1, Y+\r
+ ldi spmcrval, (1<<SPMEN)\r
+ rcall do_spm\r
+ adiw ZH:ZL, 2\r
+ subi bytep, 2;use subi for PAGESIZEB<=256\r
+ brne wrloop\r
+ ;execute page write\r
+ subi ZL, low(PAGESIZEB) ;restore pointer\r
+ sbci ZH, high(PAGESIZEB) ;not required for PAGESIZEB<=256\r
+ ldi spmcrval, (1<<PGWRT) + (1<<SPMEN)\r
+ rcall do_spm\r
+ ;read back and check, optional\r
+ ldi bytep, PAGESIZEB\r
+ subi YL, low(PAGESIZEB) ;restore pointer\r
+ sbci YH, high(PAGESIZEB)\r
+rdloop:\r
+ lpm r0, Z+\r
+ ld r1, Y+\r
+ cpse r0, r1\r
+ rjmp error\r
+ subi bytep, 2;use subi for PAGESIZEB<=256\r
+ brne rdloop\r
+ ;return\r
+ ret\r
+do_spm:\r
+ ;input: spmcrval determines SPM action\r
+ ;disable interrupts if enabled, store status\r
+ in temp2, SREG\r
+ cli\r
+ ;check for previous SPM complete\r
+wait:\r
+ in temp, SPMCSR\r
+ sbrc temp, SPMEN\r
+ rjmp wait\r
+ ;SPM timed sequence\r
+ out SPMCSR, spmcrval\r
+ spm\r
+ ;restore SREG (to enable interrupts if originally enabled)\r
+ out SREG, temp2\r
+ ret\r
+\r
+error:\r
+\r
+\r
+ ret\r
+\r
+pro_recall_flash:\r
+ st X+,rwbyte\r
+ ;inc bytep\r
+ cpi XL,SRAM_START+8+2\r
+ brlo pro_out_bitp1;pro_recall_flash_next\r
+ lds ZL,scratchpad\r
+ lds ZH,scratchpad+1\r
+pro_recall_flash_cl:\r
+ lpm temp,Z+\r
+ st X+,temp\r
+ cpi XL,SRAM_START+8+66\r
+ brne pro_recall_flash_cl\r
+ ldi mode,OWM_SLEEP\r
+ ret\r
+\r
+pro_out_read_command:\r
+ ldi mode,OWM_READ_COMMAND\r
+pro_out_bytep0:\r
+ ldi bytep,0\r
+pro_out_bitp1:\r
+ ldi bitp,1\r
+ ret \r
+\r
+\r
+\r
+pro_serchrom_next_bit:\r
+ mov rwbyte,srbyte\r
+ mov temp2,rwbyte\r
+ com rwbyte\r
+ ror temp2 ;first bit in C\r
+ rol rwbyte ;C in first bit \r
+ inc smode\r
+ ldi bitp,0x40\r
+ ldi mode,OWM_SEARCH_ROM_R ;next mod Resive\r
+ ret\r
+\r
+\r
+pro_search_rom_s:\r
+ clr temp2\r
+ lsr srbyte ;shift in C lowest bit\r
+ ror temp2 ; shift in temp2 as highest bit\r
+ andi rwbyte,0x80 ; clear other bits\r
+ eor temp2,rwbyte\r
+ breq pro_search_rom_s_goon\r
+ ldi mode,OWM_SLEEP\r
+ ret\r
+pro_search_rom_s_goon:\r
+ inc bytep\r
+ mov temp2,bytep\r
+ andi temp2,0x07\r
+ brne pro_serchrom_next_bit ;prepare next bit\r
+ mov temp2,bytep\r
+ andi temp2,0x40 ;;end\r
+ brne pro_search_rom_found\r
+ ;read next byte\r
+ ld srbyte,X+\r
+ rjmp pro_serchrom_next_bit\r
+\r
+pro_search_rom_found:\r
+ ldi mode,OWM_READ_COMMAND\r
+ rjmp pro_out_bytep0\r
+\r
+pro_search_rom_r:\r
+ clr smode\r
+ ldi mode,OWM_SEARCH_ROM_S\r
+ ldi bitp,0 ;go to searchrom_s after bit get\r
+ ret\r
+\r
+pro_owid: .DB 0xA3, 0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x55, 0xFA\r
+\r
+\r
+\r
+\r
+\r
+wait_time:\r
+ out TCNT0,zero\r
+wait_time1:\r
+ in temp,TCNT0\r
+ cp temp,param\r
+ brlo wait_time1\r
+ ret\r
+\r
+\r
+.DSEG\r
+sowid: .BYTE 8\r
+scratchpad: .BYTE 66
\ No newline at end of file
--- /dev/null
+\r
+.def srbyte = r12 ;byty for search rom algorithm\r
+.def writelow = r13; marker for send low\r
+.def zero =r14; always zero \r
+.def smode=r15; if 1 then send \r
+.def temp = r16 ; \r
+.def temp2 = r17; \r
+.def mode = r18 ; \r
+.def bitp = r19 ; bit counter ... shift...\r
+.def rwbyte = r21;\r
+.def param = r22;\r
+.def bytep = r23 ;byte counter\r
+#define spmcrval param\r
+\r
+\r
+.equ OWM_READ_ROM_COMMAND=0 ; 0 wegen schnellen test ist dieser wert 0! Daturch wird die Sprungdabelle nicht verwendet\r
+.equ OWM_SLEEP=1 ; Warten auf Reset\r
+.equ OWM_MATCH_ROM=2\r
+.equ OWM_SEARCH_ROM_S=3 ;send bit\r
+.equ OWM_SEARCH_ROM_R=4 ;resive master\r
+.equ OWM_READ_COMMAND=5\r
+.equ OWM_WRITE_SCRATCHPAD=6\r
+.equ OWM_READ_SCRATCHPAD=7\r
+.equ OWM_PROGRAMM_PAGE=8\r
+.equ OWM_RECALL_FLASH=9\r
+\r
+\r
+\r
+.equ OW_DDR = DDRD \r
+.equ OW_PIN = PORTD2\r
+.equ OW_PORT = PORTD \r
+.equ OW_PINN = PIND\r
+\r
+//.equ SPMEN = 0\r
+\r
+;.equ SRAM_START = 0x60\r
+\r
+.macro set_clock\r
+ ldi temp,0x80;\r
+ sts CLKPR,temp\r
+ ldi temp,@0\r
+ sts CLKPR,temp\r
+.endmacro \r
+\r
+.macro owwl\r
+ sbic OW_PINN,OW_PIN\r
+ rjmp pc-1\r
+.endmacro \r
+\r
+.macro owwh\r
+ sbis OW_PINN,OW_PIN\r
+ rjmp pc-1\r
+.endmacro \r
+\r
+\r
+\r
+\r
+ ;---------------------------------------------------\r
+; START of PROG \r
+;---------------------------------------------------\r
+\r
+\r
+.CSEG \r
+.ORG 0x000\r
+jreset:\r
+ jmp start ; Reset-Vector \r
+ reti ; \r
+ reti ; \r
+ reti ; \r
+ reti ; \r
+ reti ; \r
+ reti ; \r
+ reti ; \r
+ reti ; \r
+ reti ; \r
+ reti ; \r
+ reti ; \r
+ reti ; \r
+ reti ; \r
+ reti ; \r
+ reti ; \r
+ reti ; \r
+ reti ; \r
+ reti ; \r
+ reti ; \r
+ reti ; \r
+\r
+\r
+.ORG 0x3E00\r
+start: \r
+ cli\r
+ ldi temp,0\r
+ mov zero,temp\r
+ set_clock 0x01 ;4mhz\r
+ ldi mode,OWM_SLEEP\r
+ ldi temp,(1<<CS01) //2us\r
+ out TCCR0B,temp\r
+ ldi temp, HIGH(RAMEND) ; HIGH-Byte der obersten RAM-Adresse \r
+ out SPH, temp \r
+ ldi temp, LOW(RAMEND) ; LOW-Byte der obersten RAM-Adresse \r
+ out SPL, temp \r
+ ;ldi temp,1\r
+ ;out DDRB,temp\r
+ clr writelow\r
+ clr bitp\r
+ \r
+ ;sbi PORTB,0\r
+ ldi ZL,low(pro_owid*2) \r
+ ldi ZH,high(pro_owid*2) \r
+ ldi XL,low(sowid)\r
+ ldi XH,high(sowid)\r
+ ;ldi temp2,8\r
+pro_copy_loop: ;copy ID on SRAM for better handling\r
+ lpm temp,Z+\r
+ st X+,temp\r
+ cpi XL,low(SRAM_START+8) ;#################################\r
+ brlo pro_copy_loop\r
+pro_loop:\r
+ ;sbi PORTB,0\r
+ owwl ;wait for line goes low (polling)\r
+ sbrc writelow,0 ;test of zero send\r
+ sbi OW_DDR,OW_PIN ;yes pull line to low 2us faster\r
+ sbrs writelow,0 ;test egain 2us faster.....\r
+ rjmp pro_loop1 ;no ? goes next\r
+ ldi param,20 ;wait for 50 us\r
+ rcall wait_time\r
+ clr writelow ;reset write low indecator\r
+ cbi OW_DDR,OW_PIN ;release line\r
+ owwh ;wait for line is high (it can takes some time cause of the capacity of line)\r
+pro_loop1:\r
+ tst smode ;smode=1 for slave sends to master\r
+ breq pro_loop_resv\r
+pro_loop_send:\r
+ tst bitp\r
+ brne pro_loop_send1\r
+ rcall pro_hb\r
+ tst smode\r
+ breq pro_loop_end ; now reading ... do nothing \r
+pro_loop_send1: ;prebare next bit\r
+ sbrs rwbyte ,0; if bit 0 set in rwbyte then skip next command\r
+ inc writelow\r
+ lsl bitp\r
+ ror rwbyte\r
+ rjmp pro_loop_end\r
+\r
+pro_loop_resv:\r
+ ldi param,7 ;wait 15us\r
+ rcall wait_time\r
+ lsr rwbyte\r
+ ;cbi PORTB,0\r
+ sbic OW_PINN,OW_PIN ;test line\r
+ ori rwbyte,0x80\r
+ lsl bitp\r
+ brne pro_loop_end ;no handle need\r
+ rcall pro_hb\r
+ tst smode\r
+ brne pro_loop_send ; Nach dem Gelesen byte koennte gesendet werden muessen....\r
+pro_loop_end:\r
+ //owwh\r
+ out TCNT0,zero\r
+pro_loop_end_test_reset:\r
+ sbic OW_PINN,OW_PIN //leitung wieder high\r
+ rjmp pro_loop\r
+ in temp,TCNT0\r
+ cpi temp,63\r
+ brlo pro_loop_end_test_reset\r
+ rcall pro_sleep_s2\r
+ rjmp pro_loop\r
+\r
+\r
+\r
+\r
+pro_sleep:\r
+ out TCNT0,zero\r
+pro_sleep_s1:\r
+ sbic OW_PINN,OW_PIN //leitung wieder high\r
+ ret\r
+ in temp,TCNT0\r
+ cpi temp,100\r
+ brlo pro_sleep_s1\r
+ //leitung wieder high\r
+pro_sleep_s2:\r
+ owwh \r
+ ldi param,20\r
+ rcall wait_time\r
+ //Presents Impuls\r
+ sbi OW_DDR,OW_PIN\r
+ ldi param,75\r
+ rcall wait_time\r
+ cbi OW_DDR,OW_PIN\r
+ //init read byte\r
+ ldi bitp,0x01\r
+ ldi rwbyte,0\r
+ clr smode\r
+ ldi mode,OWM_READ_ROM_COMMAND\r
+ //Wait for all other devices presents impuls finished\r
+ ldi param,20\r
+ rcall wait_time\r
+ ret\r
+\r
+\r
+\r
+pro_hb:\r
+ ldi ZL,low(pro_stable) \r
+ ldi ZH,high(pro_stable) \r
+ add ZL,mode \r
+ adc ZH,zero\r
+ icall\r
+ ret\r
+\r
+pro_stable: \r
+ rjmp pro_read_rom_command\r
+ rjmp pro_sleep \r
+ rjmp pro_match_rom\r
+ rjmp pro_search_rom_s\r
+ rjmp pro_search_rom_r\r
+ rjmp pro_read_command\r
+ rjmp pro_write_scratchpad\r
+ rjmp pro_read_scratchpad\r
+ rjmp pro_programm_page\r
+ rjmp pro_recall_flash\r
+\r
+pro_read_rom_command:\r
+ ldi mode,OWM_SLEEP\r
+ cpi rwbyte,0xCC\r
+ brne pro_rcc_1\r
+ ldi mode,OWM_READ_COMMAND\r
+ rjmp pro_out_bitp1\r
+pro_rcc_1:\r
+ cpi rwbyte,0xF0 ;Searchrom\r
+ brne pro_rcc_2\r
+ ldi XL,low(sowid) ;init sram pointer\r
+ ldi XH,high(sowid)\r
+ ld srbyte,X+\r
+ ldi bytep,0\r
+ rjmp pro_serchrom_next_bit\r
+pro_rcc_2:\r
+ cpi rwbyte,0x55 ;Matchrom\r
+ brne pro_rcc_3\r
+// rcall pro_owidinit\r
+ ldi XL,low(sowid) ;init sram pointer\r
+ ldi XH,high(sowid)\r
+ ldi mode,OWM_MATCH_ROM\r
+ rjmp pro_out_bytep0\r
+\r
+pro_rcc_3:\r
+ ret\r
+\r
+pro_match_rom: \r
+ ld temp,X+\r
+ cp temp,rwbyte\r
+ breq pro_match_rom_next\r
+ ldi mode,OWM_SLEEP\r
+ ret\r
+pro_match_rom_next: \r
+ cpi XL,LOW(SRAM_START+8);####################\r
+ breq pro_match_rom_found\r
+ rjmp pro_out_bitp1\r
+pro_match_rom_found:\r
+ ldi mode,OWM_READ_COMMAND\r
+ rjmp pro_out_bitp1\r
+\r
+pro_read_command:\r
+ ldi mode,OWM_SLEEP\r
+ cpi rwbyte,0x0F ;; Write to Scratchpad\r
+ brne pro_rc_1\r
+ ldi mode,OWM_WRITE_SCRATCHPAD\r
+ ldi XL,low(scratchpad) ;init sram pointer\r
+ ldi XH,high(scratchpad)\r
+ rjmp pro_out_bytep0\r
+pro_rc_1:\r
+ cpi rwbyte,0xAA\r
+ brne pro_rc_2\r
+ ldi mode,OWM_READ_SCRATCHPAD ;;Read from Scratchpad\r
+ ldi XL,low(scratchpad) ;init sram pointer\r
+ ldi XH,high(scratchpad)\r
+ inc smode\r
+ ld rwbyte,X+\r
+ rjmp pro_out_bytep0\r
+\r
+pro_rc_2:\r
+ cpi rwbyte,0xB8\r
+ brne pro_rc_3\r
+ ldi mode,OWM_RECALL_FLASH ;; copy Flash page in Scratchpad\r
+ ldi XL,low(scratchpad) ;init sram pointer\r
+ ldi XH,high(scratchpad)\r
+ rjmp pro_out_bytep0\r
+pro_rc_3:\r
+ cpi rwbyte,0x55 ; copy Scratchpad to Flash\r
+ brne pro_rc_4\r
+ ldi mode,OWM_SLEEP\r
+ rjmp pro_programm_page\r
+ \r
+pro_rc_4:\r
+ cpi rwbyte,0x89 ; Reset Device /Boot (new) Firmware\r
+ brne pro_rc_5\r
+ jmp jreset \r
+pro_rc_5:\r
+ cpi rwbyte,0x8B ; Clear the OWID saved in EEPROM / one ID1\r
+ brne pro_rc_6 \r
+ ldi temp,7\r
+pro_rc_5a:\r
+ ldi XL,low(E2END)\r
+ ldi XH,high(E2END)\r
+ sub XL,temp\r
+ out EEARH,XH\r
+ out EEARL,XL\r
+ ldi temp, (0<<EEPM1)|(0<<EEPM0)\r
+ out EECR, temp\r
+ ldi temp,0xFF\r
+ out EEDR, temp\r
+ sbi EECR, EEMPE\r
+ sbi EECR, EEPE\r
+ ret\r
+\r
+\r
+pro_rc_6:\r
+ cpi rwbyte,0x8C ; Clear the OWID saved in EEPROM / one ID2\r
+ brne pro_rc_7\r
+ ldi temp,7+8\r
+ rjmp pro_rc_5a\r
+\r
+pro_rc_7:\r
+ ret\r
+\r
+pro_write_scratchpad:\r
+ st X+,rwbyte\r
+ cpi XL,138 ;#####################################\r
+ brlo pro_write_scratchpad_next\r
+ ldi mode,OWM_SLEEP\r
+ ret \r
+pro_write_scratchpad_next:\r
+ ldi bitp,1\r
+ ret\r
+\r
+pro_read_scratchpad:\r
+ cpi XL,8+130 ;###################################\r
+ brlo pro_read_scratchpad_next\r
+ ldi mode,OWM_SLEEP\r
+ clr smode\r
+ ret\r
+pro_read_scratchpad_next:\r
+ ld rwbyte,X+\r
+ rjmp pro_out_bitp1\r
+\r
+\r
+pro_programm_page:\r
+.equ PAGESIZEB = 128 ; Not correct deglaration in inc file of ATMEGA328PB PAGESIZE*2;PAGESIZEB is page size in BYTES, not words\r
+// .org SMALLBOOTSTART\r
+write_page:\r
+ ;transfer data from RAM to Flash page buffer\r
+ ldi bytep, PAGESIZEB ;init loop variable\r
+ ldi YL,low(scratchpad) ;init sram pointer\r
+ ldi YH,high(scratchpad)\r
+ ld ZL,Y+\r
+ ld ZH,Y+\r
+ ;page erase\r
+ ldi spmcrval,(1<<PGERS) | (1<<SPMEN)\r
+ rcall do_spm\r
+ ldi spmcrval, (1<<RWWSRE) | (1<<SPMEN)\r
+ rcall do_spm\r
+wrloop:\r
+ ld r0, Y+\r
+ ld r1, Y+\r
+ ldi spmcrval, (1<<SPMEN)\r
+ rcall do_spm\r
+ adiw ZH:ZL, 2\r
+ subi bytep, 2;use subi for PAGESIZEB<=256\r
+ brne wrloop\r
+ ;execute page write\r
+ subi ZL, low(PAGESIZEB) ;restore pointer\r
+ sbci ZH, high(PAGESIZEB) ;not required for PAGESIZEB<=256\r
+ ldi spmcrval, (1<<PGWRT) + (1<<SPMEN)\r
+ rcall do_spm\r
+ ldi spmcrval, (1<<RWWSRE) | (1<<SPMEN)\r
+ rcall do_spm\r
+ ;read back and check, optional\r
+ ldi bytep, PAGESIZEB\r
+ subi YL, low(PAGESIZEB) ;restore pointer\r
+ sbci YH, high(PAGESIZEB)\r
+rdloop:\r
+ lpm r0, Z+\r
+ ld r1, Y+\r
+ cpse r0, r1\r
+ rjmp error\r
+ subi bytep, 2;use subi for PAGESIZEB<=256\r
+ brne rdloop\r
+ ;return\r
+ ret\r
+do_spm:\r
+ ;input: spmcrval determines SPM action\r
+ ;disable interrupts if enabled, store status\r
+ in temp2, SREG\r
+ cli\r
+ ;check for previous SPM complete\r
+wait:\r
+ in temp, SPMCSR\r
+ sbrc temp, SPMEN\r
+ rjmp wait\r
+ ;SPM timed sequence\r
+ out SPMCSR, spmcrval\r
+ spm\r
+ ;restore SREG (to enable interrupts if originally enabled)\r
+ out SREG, temp2\r
+ ret\r
+\r
+error:\r
+\r
+\r
+ ret\r
+\r
+pro_recall_flash:\r
+ st X+,rwbyte\r
+ ;inc bytep\r
+ cpi XL,low(SRAM_START+8+2) ;##############################################\r
+ brlo pro_out_bitp1;pro_recall_flash_next\r
+ lds ZL,scratchpad\r
+ lds ZH,scratchpad+1\r
+pro_recall_flash_cl:\r
+ lpm temp,Z+\r
+ st X+,temp\r
+ cpi XL,low(SRAM_START+8+66) ;############################################\r
+ brne pro_recall_flash_cl\r
+ ldi mode,OWM_SLEEP\r
+ ret\r
+\r
+pro_out_read_command:\r
+ ldi mode,OWM_READ_COMMAND\r
+pro_out_bytep0:\r
+ ldi bytep,0\r
+pro_out_bitp1:\r
+ ldi bitp,1\r
+ ret \r
+\r
+\r
+\r
+pro_serchrom_next_bit:\r
+ mov rwbyte,srbyte\r
+ mov temp2,rwbyte\r
+ com rwbyte\r
+ ror temp2 ;first bit in C\r
+ rol rwbyte ;C in first bit \r
+ inc smode\r
+ ldi bitp,0x40\r
+ ldi mode,OWM_SEARCH_ROM_R ;next mod Resive\r
+ ret\r
+\r
+\r
+pro_search_rom_s:\r
+ clr temp2\r
+ lsr srbyte ;shift in C lowest bit\r
+ ror temp2 ; shift in temp2 as highest bit\r
+ andi rwbyte,0x80 ; clear other bits\r
+ eor temp2,rwbyte\r
+ breq pro_search_rom_s_goon\r
+ ldi mode,OWM_SLEEP\r
+ ret\r
+pro_search_rom_s_goon:\r
+ inc bytep\r
+ mov temp2,bytep\r
+ andi temp2,0x07\r
+ brne pro_serchrom_next_bit ;prepare next bit\r
+ mov temp2,bytep\r
+ andi temp2,0x40 ;;end\r
+ brne pro_search_rom_found\r
+ ;read next byte\r
+ ld srbyte,X+\r
+ rjmp pro_serchrom_next_bit\r
+\r
+pro_search_rom_found:\r
+ ldi mode,OWM_READ_COMMAND\r
+ rjmp pro_out_bytep0\r
+\r
+pro_search_rom_r:\r
+ clr smode\r
+ ldi mode,OWM_SEARCH_ROM_S\r
+ ldi bitp,0 ;go to searchrom_s after bit get\r
+ ret\r
+\r
+pro_owid: .DB 0xA3, 0xAA, 0x57, 0xAA, 0x57, 0xAA, 0x57, 0x8A\r
+\r
+\r
+\r
+\r
+\r
+wait_time:\r
+ out TCNT0,zero\r
+wait_time1:\r
+ in temp,TCNT0\r
+ cp temp,param\r
+ brlo wait_time1\r
+ ret\r
+\r
+\r
+.DSEG\r
+sowid: .BYTE 8\r
+scratchpad: .BYTE 130
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>\r
+<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="14.0">\r
+ <PropertyGroup>\r
+ <SchemaVersion>2.0</SchemaVersion>\r
+ <ProjectVersion>7.0</ProjectVersion>\r
+ <ToolchainName>com.Atmel.AVRAssembler</ToolchainName>\r
+ <ProjectGuid>59B1D629-9DCC-43ed-A0FD-8AB0E4D622AB</ProjectGuid>\r
+ <avrdeviceseries>none</avrdeviceseries>\r
+ <avrdevice>ATmega328PB</avrdevice>\r
+ <OutputFileName>$(MSBuildProjectName)</OutputFileName>\r
+ <OutputFileExtension>.obj</OutputFileExtension>\r
+ <OutputDirectory>$(MSBuildProjectDirectory)\$(Configuration)</OutputDirectory>\r
+ <Language>ASSEMBLY</Language>\r
+ <AssemblyName>programmer_atmega328</AssemblyName>\r
+ <Name>programmer_atmega328</Name>\r
+ <RootNamespace>programmer_atmega328</RootNamespace>\r
+ <ToolchainFlavour>Native</ToolchainFlavour>\r
+ <EntryFile>$(MSBuildProjectDirectory)\programmer_atmega328.asm</EntryFile>\r
+ <KeepTimersRunning>true</KeepTimersRunning>\r
+ <OverrideVtor>false</OverrideVtor>\r
+ <CacheFlash>true</CacheFlash>\r
+ <ProgFlashFromRam>true</ProgFlashFromRam>\r
+ <RamSnippetAddress>0x20000000</RamSnippetAddress>\r
+ <UncachedRange />\r
+ <preserveEEPROM>true</preserveEEPROM>\r
+ <OverrideVtorValue>exception_table</OverrideVtorValue>\r
+ <BootSegment>2</BootSegment>\r
+ <eraseonlaunchrule>0</eraseonlaunchrule>\r
+ <AsfFrameworkConfig>\r
+ <framework-data xmlns="">\r
+ <options />\r
+ <configurations />\r
+ <files />\r
+ <documentation help="" />\r
+ <offline-documentation help="" />\r
+ <dependencies>\r
+ <content-extension eid="atmel.asf" uuidref="Atmel.ASF" version="3.31.0" />\r
+ </dependencies>\r
+ </framework-data>\r
+ </AsfFrameworkConfig>\r
+ <avrtool>com.atmel.avrdbg.tool.atmelice</avrtool>\r
+ <avrtoolserialnumber>J41800000789</avrtoolserialnumber>\r
+ <avrdeviceexpectedsignature>0x1E9516</avrdeviceexpectedsignature>\r
+ <com_atmel_avrdbg_tool_atmelice>\r
+ <ToolOptions>\r
+ <InterfaceProperties>\r
+ <IspClock>125000</IspClock>\r
+ </InterfaceProperties>\r
+ <InterfaceName>ISP</InterfaceName>\r
+ </ToolOptions>\r
+ <ToolType>com.atmel.avrdbg.tool.atmelice</ToolType>\r
+ <ToolNumber>J41800000789</ToolNumber>\r
+ <ToolName>Atmel-ICE</ToolName>\r
+ </com_atmel_avrdbg_tool_atmelice>\r
+ <avrtoolinterface>ISP</avrtoolinterface>\r
+ <avrtoolinterfaceclock>125000</avrtoolinterfaceclock>\r
+ </PropertyGroup>\r
+ <PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">\r
+ <ToolchainSettings>\r
+ <AvrAssembler>\r
+ <avrasm.assembler.general.AdditionalIncludeDirectories>\r
+ <ListValues>\r
+ <Value>%24(PackRepoDir)\atmel\ATmega_DFP\1.1.130\avrasm\inc</Value>\r
+ </ListValues>\r
+ </avrasm.assembler.general.AdditionalIncludeDirectories>\r
+ <avrasm.assembler.general.IncludeFile>m328PBdef.inc</avrasm.assembler.general.IncludeFile>\r
+</AvrAssembler>\r
+ </ToolchainSettings>\r
+ <OutputType>Executable</OutputType>\r
+ </PropertyGroup>\r
+ <PropertyGroup Condition=" '$(Configuration)' == 'Release' ">\r
+ <ToolchainSettings>\r
+ <AvrAssembler>\r
+ <avrasm.assembler.general.AdditionalIncludeDirectories>\r
+ <ListValues>\r
+ <Value>%24(PackRepoDir)\atmel\ATmega_DFP\1.1.130\avrasm\inc</Value>\r
+ </ListValues>\r
+ </avrasm.assembler.general.AdditionalIncludeDirectories>\r
+ <avrasm.assembler.general.IncludeFile>m328PBdef.inc</avrasm.assembler.general.IncludeFile>\r
+</AvrAssembler>\r
+ </ToolchainSettings>\r
+ </PropertyGroup>\r
+ <ItemGroup>\r
+ <Compile Include="programmer_atmega328.asm">\r
+ <SubType>Code</SubType>\r
+ </Compile>\r
+ </ItemGroup>\r
+ <Import Project="$(AVRSTUDIO_EXE_PATH)\\Vs\\Assembler.targets" />\r
+</Project>
\ No newline at end of file
--- /dev/null
+\r
+Microsoft Visual Studio Solution File, Format Version 12.00\r
+# Atmel Studio Solution File, Format Version 11.00\r
+VisualStudioVersion = 14.0.23107.0\r
+MinimumVisualStudioVersion = 10.0.40219.1\r
+Project("{18226A42-8477-4023-8AD2-40C49DA407C9}") = "programmer_atmega328", "programmer_atmega328.asmproj", "{59B1D629-9DCC-43ED-A0FD-8AB0E4D622AB}"\r
+EndProject\r
+Global\r
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution\r
+ Debug|AVR = Debug|AVR\r
+ Release|AVR = Release|AVR\r
+ EndGlobalSection\r
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution\r
+ {59B1D629-9DCC-43ED-A0FD-8AB0E4D622AB}.Debug|AVR.ActiveCfg = Debug|AVR\r
+ {59B1D629-9DCC-43ED-A0FD-8AB0E4D622AB}.Debug|AVR.Build.0 = Debug|AVR\r
+ {59B1D629-9DCC-43ED-A0FD-8AB0E4D622AB}.Release|AVR.ActiveCfg = Release|AVR\r
+ {59B1D629-9DCC-43ED-A0FD-8AB0E4D622AB}.Release|AVR.Build.0 = Release|AVR\r
+ EndGlobalSection\r
+ GlobalSection(SolutionProperties) = preSolution\r
+ HideSolutionNode = FALSE\r
+ EndGlobalSection\r
+EndGlobal\r