' ========================================================================= ' ' File...... DS1996-Test.BSP ' Purpose... Test program for DS1996 iButton ' Author.... Parallax, Inc. (based on code from Chris Anderson) ' E-mail.... support@parallax.com ' Started... ' Updated... 18 OCT 2005 ' ' {$STAMP BS2p} ' {$PBASIC 2.5} ' ' ========================================================================= ' -----[ Program Description ]--------------------------------------------- ' ' -----[ I/O Definitions ]------------------------------------------------- ' OW PIN 15 ' 1-wire device pin ' -----[ Constants ]------------------------------------------------------- ' OwFeRst CON %0001 ' front-End Reset OwBeRst CON %0010 ' back-End Reset OwBit CON %0100 ' bit mode OwHigh CON %1000 ' high speed ReadROM CON $33 ' read ID, serial num, CRC SearchROM CON $F0 ' search SkipROM CON $CC WrScratch CON $0F RdScratch CON $AA CopySP CON $55 ' copy scratchpad RdMem CON $F0 NoDevice CON %11 ' no device present TargetAddr CON 0 LoopSize CON 15 ' -----[ Variables ]------------------------------------------------------- ' devCheck VAR Nib ' device check return ocde target VAR Word ' target address ta1 VAR target.BYTE0 ta2 VAR target.BYTE1 endAddr VAR Byte cap VAR Byte idx VAR Byte transfer VAR Byte(16) ' -----[ EEPROM Data ]----------------------------------------------------- ' TestInfo DATA "1234567890abcdefghijklmnopqrstuvwxyz" ' -----[ Initialization ]-------------------------------------------------- ' Reset: DEBUG CLS, "DS1996 Test", CR, "-----------", CR, CR GOSUB DeviceCheck ' look for device IF (devCheck = NoDevice) THEN DEBUG "No 1-Wire device(s) present." PAUSE 100 GOTO Reset ENDIF ' -----[ Program Code ]---------------------------------------------------- ' Main: DEBUG "Loading transfer array.", CR, CR FOR idx = 0 TO 15 READ TestInfo + idx, transfer(idx) NEXT target = TargetAddr DEBUG "TA: ", DEC target, CR DEBUG "Writing to DS1996 scratchpad.", CR, CR OWOUT OW, OwFeRst, [SkipROM, WrScratch, ta1, ta2] FOR idx = 0 TO LoopSize PAUSE 20 OWOUT OW, 0, [transfer(idx)] NEXT DEBUG "Reading from DS1996 scratchpad.", CR, " -> " target = 6752 ' dummy value OWOUT OW, OwFeRst, [SkipROM, RdScratch] OWIN OW, 0, [ta1, ta2, endAddr] FOR idx = 0 TO LoopSize OWIN OW, 0, [transfer(idx)] DEBUG transfer(idx) NEXT DEBUG CR, "TA: ", DEC target, CR, "EA: ", DEC endAddr, CR, CR DEBUG "Copying DS1996 scratchpad to memory.", CR, CR OWOUT OW, OwFeRst, [SkipRom, CopySP, ta1, ta2, endAddr] DEBUG "Read DS1996 memory.", CR, " -> " OWOUT OW, OwFeRst, [SkipRom, RdMem, ta1, ta2] FOR idx = 0 TO LoopSize OWIN OW, 0, [transfer(idx)] DEBUG transfer(idx) NEXT PAUSE 4000 GOTO Reset ' -----[ Subroutines ]----------------------------------------------------- ' ' This subroutine checks to see if any 1-Wire devices are present on the ' bus. It does NOT search for ROM codes ' DeviceCheck: devCheck = 0 OWOUT OW, OwFeRst, [SearchROM] ' reset and start search OWIN OW, OwBit, [devCheck.BIT1, devCheck.BIT0] RETURN