DS1994 Memory/Time iButton


Closed Thread
Results 1 to 40 of 48

Hybrid View

  1. #1
    Join Date
    Feb 2004
    Location
    Germany
    Posts
    762


    Did you find this post helpful? Yes | No

    Default

    And here is the Release Candidate:

    It's actually the two examples from Melanie merged into one program
    with some minor changes: (LOOKUP-Table in EEPROM)
    and additions: (Calculation of WeekDay)
    and it reads the DWORD seconds counter from a real iButton.

    This Version is about 250 Words smaller than my initial Version.

    Many thanks to Melanie

    Code:
    
    
    
            DEFINE LOADER_USED 1
            DEFINE OSC 20
            
            ADCON1=7
    
    	DEFINE LCD_LINES 2							
    	DEFINE LCD_BITS 4							
    	DEFINE LCD_DREG PORTD					
    	DEFINE LCD_DBIT 4						
    	DEFINE LCD_RSREG PORTD					
    	DEFINE LCD_RSBIT 1							
    	DEFINE LCD_EREG	PORTD						
    	DEFINE LCD_EBIT	0						
    
    
    
    	'	Software Defines
    	'	----------------
            iButton     var PortD.2
    	ByteA       var BYTE
    	ByteB       var BYTE
    	ByteC       var BYTE
    	ByteD       var BYTE
    	DAYS        var WORD
    	HOURS       var BYTE
    	MINUTES     var BYTE
    	SECONDS     var BYTE
    	TempA       var WORD
    	TempB       var WORD
    	TempHOURS   var WORD
    	TempMINUTES var WORD
    	TempSECONDS var WORD
            CounterA    var BYTE
    	DAY         var BYTE
    	MONTH       var BYTE
    	YEAR        var BYTE
            DoW         var byte[3]
        
    	DATA @0,"S","a","t","S","u","n","M","o","n","T","u","e","W","e","d","T","h","u","F","r","i"
            DATA @21,31,28,31,30,31,30,31,31,30,31,30,31	
    
    
    	'	Calculate and Display
    	'	---------------------
    Loop:
    
    	'	Read iButton
    	'	------------
     
            owout iButton,1,[$cc,$f0,$03,$02]
    	owin iButton,0,[ByteD,ByteC,ByteB,ByteA]
    
    	Gosub CalculateLinearDAYS
    	GOSUB CalculateDateFromLinear
    	LCDOut $FE,$01, STR DOW\3,". ", dec2 Day,".",dec2 month,".","20",dec2 year
    	LCDOut $FE,$C0,"    ",DEC2 HOURS,":",DEC2 MINUTES,":",DEC2 SECONDS
    	Pause 1000
    	Goto Loop
    	
    	'
    	'	Calculate Linear DAYS and Day of Week
    	'	-------------------------------------
    CalculateLinearDAYS:
    	TempA.Highbyte=ByteA
    	TempA.Lowbyte=ByteB
    	TempB=TempA*18
    	DAYS=DIV32 24
    	HOURS=R2
    	TempB=TempA*12
    	TempHOURS=DIV32 60
    	MINUTES=R2
    	TempB=TempA*16
    	TempMINUTES=DIV32 60
    	SECONDS=R2
    	'
    	TempA.Highbyte=ByteC
    	TempA.Lowbyte=ByteD
    	TempHOURS=TempHOURS+(TempA/3600)+HOURS
    	TempA=TempA//3600
    	TempMINUTES=TempMINUTES+(TempA/60)+MINUTES
    	TempA=TempA//60
    	TempSECONDS=TempA+SECONDS
    	'
    	TempMINUTES=TempMINUTES+(TempSECONDS/60)
    	SECONDS=TempSECONDS//60
    	TempHOURS=TempHOURS+(TempMINUTES/60)
    	MINUTES=TempMINUTES//60
    	DAYS=DAYS+(TempHOURS/24)
    	HOURS=TempHOURS//24
    	'
            Read (DAYS//7*3),DoW[0]
            Read (DAYS//7*3+1),DoW[1]
            Read (DAYS//7*3+2),DoW[2]
            '
    	Return
    
    
    	'	Subroutine Calculates Date from Linear Days
    	'	-------------------------------------------
    CalculateDateFromLinear:
    	YEAR=0
    	DAYS=DAYS+1 
    	For CounterA=4 to 183
    		TempA=CounterA//4
    		TempB=365
    		If TempA=0 then 
    			TempB=TempB+1
    			endif
    		If DAYS>TempB then 
    			YEAR=YEAR+1
    			DAYS=DAYS-TempB
    			else
    			Goto CalculateMonth
    			endif
    		Next CounterA
    	' add 2000 to the YEAR value, ie YEAR=4 implies 2004.
    CalculateMonth:
    	MONTH=0
    CalculateMonthLoop:
        READ (MONTH+21),DAY
    	IF TempA=0 then
    			If MONTH=1 then DAY=DAY+1
    			Endif
    	If DAYS>DAY then
    		DAYS=DAYS-DAY
    		MONTH=MONTH+1
    		Goto CalculateMonthLoop
    		Endif
    	MONTH=MONTH+1
    	DAY=DAYS
    	Return
    
    
    	End
    Best regards

    Ralph
    Last edited by NavMicroSystems; - 27th September 2004 at 18:28.

Similar Threads

  1. Writing & Reading to iButton EEPROM
    By crhomberg in forum Code Examples
    Replies: 2
    Last Post: - 6th October 2008, 19:40
  2. DS1920 IButton
    By scottl in forum mel PIC BASIC Pro
    Replies: 1
    Last Post: - 2nd November 2007, 00:39
  3. iButton
    By menze in forum mel PIC BASIC Pro
    Replies: 5
    Last Post: - 26th June 2006, 23:48
  4. RS485 - ibutton network
    By ccsparky in forum mel PIC BASIC Pro
    Replies: 7
    Last Post: - 6th June 2005, 21:48
  5. Dallas DS1994 iButton CLOCK
    By NavMicroSystems in forum Code Examples
    Replies: 0
    Last Post: - 29th September 2004, 22:19

Members who have read this thread : 1

You do not have permission to view the list of names.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts