Author: [EMAIL PROTECTED]
Date: Wed Sep  3 11:43:53 2008
New Revision: 263

Added:
    trunk/unvalidated/include/external/rtc/
    trunk/unvalidated/include/external/rtc/rtc_ds1302.jal

Log:


Added: trunk/unvalidated/include/external/rtc/rtc_ds1302.jal
==============================================================================
--- (empty file)
+++ trunk/unvalidated/include/external/rtc/rtc_ds1302.jal       Wed Sep  3  
11:43:53 2008
@@ -0,0 +1,562 @@
+-- Title: Real Time Clock with DS1302
+-- Author: Richard Zengerink,  Copyright (c) 2008, all rights reserved
+--
+-- Compiler: =2.4g
+-- This file is part of jallib (http://jallib.googlecode.com)
+-- Released under the BSD license  
(http://www.opensource.org/licenses/bsd-license.php)
+
+-- Description:
+--  
-----------------------------------------------------------------------------
+-- Library to handle DS1302 RTC
+--
+--
+-- ALL ASSIGNMENDS MUST BE DONE BEFORE THIS INCLUDE FILE !!!!!!!!!!!!
+--
+-- Assign in your MAIN programm CE, SCLK ans IO to the hardware pins
+-- Assign in your MAIN programm CEDIR, SCLKDIR ans IODIR to the pin  
directions
+-- example:
+-- var bit RTC_CE     is pin_a1 -- out
+-- var bit RTC_SCLK   is pin_a2 -- out
+-- var bit RTC_IO     is pin_a3 -- in/out
+-- var volatile bit RTC_CEDir   is pin_a1_direction    ; always output
+-- var volatile bit RTC_SCLKDir is pin_a2_direction    ; always output
+-- var volatile bit RTC_IODir   is pin_a3_direction    ; bidirectional
+--
+-- Assign in your MAIN program the Trickel charge configuration
+-- example:
+-- var byte RTC_DIODE  = 1     ; RTC_DIODE = 1 or RTC_DIODE = 2
+-- var byte RTC_RESISTOR = 8  ; RTC_RESISTOR = 0 (0ohm) RTC_RESISTOR = 2  
(2K),
+--                           ; RTC_RESISTOR = 4 (4K) or RTC_RESISTOR = 8  
(8K)
+-- var bit RTC_TRICKEL = ON   ; RTC_TRICKEL = ON or RTC_TRICKEL = OFF (no  
charging)
+--
+--
+
+
+
+
+----------Place this block in your MAIN program without the "--"   
-------------
+-- var bit RTC_CE     is pin_a1 -- out
+-- var bit RTC_SCLK   is pin_a2 -- out
+-- var bit RTC_IO     is pin_a3 -- in/out
+
+-- var volatile bit RTC_IODir   is pin_a3_direction    ; bidirectional
+
+-- var byte RTC_DIODE  = 1     ; RTC_DIODE = 1 or RTC_DIODE = 2
+-- var byte RTC_RESISTOR  = 8  ; RTC_RESISTOR = 0 (0ohm) RTC_RESISTOR = 2  
(2K),
+                               ; RTC_RESISTOR = 4 (4K) or RTC_RESISTOR = 8  
(8K)
+-- var bit RTC_TRICKEL = ON    ; RTC_TRICKEL = ON or RTC_TRICKEL = OFF (no  
charging)
+
+-- include ds1302_rz
+
+---------------------------------------------------------------------------
+
+
+
+
+
+--
+-- Procedures:
+--
+-- SECOND_READ reads the seconds from DS1302 (81h)and places in SECOND  
(TIME_DATE[0])
+-- SECOND_WRITE writes the value in SECOND (TIME_DATE[0]) to DS1302 (80h)
+-- MINUT_READ reads the minutes from DS1302 (83h) and places in MINUT  
(TIME_DATE[1])
+-- MINUT_WRITE writes the value in MINUT (TIME_DATE[1]) to DS1302 reg (82h)
+-- HRS_READ reads the hours from DS1302 (85h)and places in HRS  
(TIME_DATE[2])
+-- HRS_WRITE writes the value in HRS (TIME_DATE[2]) to DS1302 (84h)
+-- DATE_READ reads the date from DS1302 (87h) and places in DATE  
(TIME_DATE[3])
+-- DATE_WRITE writes the value in DATE (TIME_DATE[3]) to DS1302 reg (86h)
+-- MOUNTH_READ reads the mounth from DS1302 (89h)and places in MOUNTH  
(TIME_DATE[4])
+-- MOUNTH_WRITE writes the value in MOUNTH (TIME_DATE[4]) to DS1302 (88h)
+-- DAY_READ reads the day from DS1302 (8Bh) and places in DAY  
(TIME_DATE[5])
+-- DAY_WRITE writes the value in DAY (TIME_DATE[5]) to DS1302 reg (8Ah)
+-- YEAR_READ reads the year from DS1302 (89h)and places in YEAR  
(TIME_DATE[6])
+-- YEAR_WRITE writes the value in YEAR (TIME_DATE[6]) to DS1302 (88h)
+-- PROTREG_READ reads the protreg from DS1302 (8Bh) and places in PROTREG  
(TIME_DATE[7])
+-- PROTREG_WRITE writes the value in PROTREG (TIME_DATE[7]) to DS1302 reg  
(8Ah)
+--
+-- RTC_WRITE(data , reg_adress) writes value of data (DEC)in register with  
reg_adress
+-- RTC_READ(reg_adress , var) reads value of register with reg_adress and  
place in var (DEC)
+--
+-- RTC_BURST_WRITE_CLOCK writes value of SECOND to PROTREG in one time to
+--                       the DS1302 where SECOND is placed in seconds reg  
(80h)
+--                       and MINUT is placed in minutes reg(82h) etc. etc.
+-- RTC_BURST_READ_CLOCK  reads the value's of seconds (81h) to prot_reg  
(8Fh) of the DS1302
+--                       and places it in SECOND to PROTREG
+--                       where seconds (80h is placed in SECOND and
+--                       and minutes (81h) is placed in MINUT etc. etc.
+--
+--
+-- RTC_STOP stops the RTC
+-- RTC_START starts the RTC
+
+
+-- all values of data (SECOND,MINUT etc) in decimal value
+-- register adresses are in hexadecimal
+--
+--
+
+
+
+
+
+
+
+
+var byte TRICK_CHAR_REG ;trickel charge  register (90h)
+
+var byte SECOND    ;seconds (0 TO 59)
+var byte MINUT     ;minutes (0 TO 59)
+var byte HRS       ;houres  (0 TO 23)
+var byte DATE      ;day of mounth (1 to 31)
+var byte MOUNTH    ;mounth (1 to 12)
+var byte DAY       ;day of week (1 = monday 7 = sunday)
+var word YEAR      ;year (00 to 99)
+var byte PROTREG   ;protect register
+
+var volatile bit ROUT0 at TRICK_CHAR_REG :0
+var volatile bit ROUT1 at TRICK_CHAR_REG :1
+var volatile bit DS0 at TRICK_CHAR_REG :2
+var volatile bit DS1 at TRICK_CHAR_REG :3
+
+
+
+if RTC_TRICKEL then
+   TRICK_CHAR_REG = 0b1010_0000
+   If RTC_DIODE ==1 then             ;1 diode then DS1 = 0 and DS0 = 1
+      DS0 = 1
+      DS1 = 0
+   else
+      If RTC_DIODE ==2 then          ;2 diodes then DS1 = 1 and DS0 = 0
+         DS0 = 0
+         DS1 = 1
+      else
+         DS0 = 0                 ;no diode selection
+         DS1 = 0
+      end if
+   end if
+   If RTC_RESISTOR ==0 then          ;RTC_RESISTOR = 0Ohm then ROUT0 = 0  
and ROUT1 = 0
+      ROUT0 = 0
+      ROUT1 = 0
+   else
+      If RTC_RESISTOR ==2 then       ;RTC_RESISTOR = 2kOhm then ROUT0 = 1  
and ROUT1 = 0
+         ROUT0 = 1
+         ROUT1 = 0
+      else
+         If RTC_RESISTOR ==4 then    ;RTC_RESISTOR = 4kOhm then ROUT0 = 0  
and ROUT1 = 1
+            ROUT0 = 0
+            ROUT1 = 1
+         else
+            ROUT0 = 1            ;RTC_RESISTOR = 8kOhm then ROUT0 = 1 and  
ROUT1 = 1
+            ROUT1 = 1
+         end if
+      end if
+   end if
+else
+   TRICK_CHAR_REG = 0b0000_0001
+end if
+
+
+
+
+procedure DEC_TO_RTC ( byte in out DATA ) is
+  var byte RTC
+  RTC = DATA
+  If RTC <= 9 Then
+    RTC = RTC
+    Else
+    If RTC <= 19 Then
+        RTC = RTC + 6
+        Else
+        If RTC <= 29 Then
+            RTC = RTC + 12
+            Else
+            If RTC <= 39 Then
+                RTC = RTC + 18
+                Else
+                If RTC <= 49 Then
+                    RTC = RTC + 24
+                    Else
+                    If RTC <= 59 Then
+                        RTC = RTC + 30
+                    End If
+                End If
+            End If
+        End If
+    End If
+End If
+ DATA = RTC
+end procedure
+
+
+procedure RTC_TO_DEC ( byte in out DATA ) is
+  var byte DEC
+  DEC = DATA
+  DEC = DEC & 0B0111_1111
+
+  If DEC <= 9 Then
+    DEC = DEC
+    Else
+    If DEC <= 25 Then
+        DEC = DEC - 6
+        Else
+        If DEC <= 41 Then
+            DEC = DEC - 12
+            Else
+            If DEC <= 57 Then
+                DEC = DEC - 18
+                Else
+                If DEC <= 73 Then
+                    DEC = DEC - 24
+                    Else
+                    If DEC <= 89 Then
+                        DEC = DEC - 30
+                    End If
+                End If
+            End If
+        End If
+    End If
+  End If
+  DATA = DEC
+end procedure
+
+
+
+
+procedure RTC_CLOCK  is
+ RTC_SCLK = high
+ delay_1us
+ RTC_SCLK = low
+ delay_1us
+end procedure
+
+
+
+
+procedure RTC_REGISTER_SEND (byte in REGISTER) is
+  for 8 loop
+      if (REGISTER & 0b0000_0001)== 1 then RTC_IO = high else RTC_IO = low  
end if
+      RTC_CLOCK
+      REGISTER = REGISTER >> 1  ;shift right REGISTER
+  end loop
+end procedure
+
+
+
+
+
+procedure RTC_DATA_SEND ( byte in DATA ) is
+  for 8 loop
+      if (DATA & 0b0000_0001)== 1 then RTC_IO = high else RTC_IO = low end  
if
+      RTC_CLOCK
+      DATA = DATA >> 1   ;shift right DATA
+  end loop
+end procedure
+
+
+
+
+
+procedure RTC_WRITE ( byte in DATA, byte in REGISTER ) is ; send data to  
RTC
+
+  RTC_IODir = output
+  RTC_SCLK = low
+  RTC_CE =  high
+
+  RTC_REGISTER_SEND (REGISTER)
+
+  RTC_DATA_SEND (DATA)
+
+  RTC_CE =  LOW
+end procedure
+
+
+
+
+
+procedure RTC_READ ( byte in REGISTER , byte out DATA ) is ; recieve data  
from RTC
+  var bit DB at DATA : 7
+
+  RTC_IODir = output
+  RTC_SCLK = low
+  RTC_CE =  high
+
+
+  RTC_REGISTER_SEND (REGISTER)
+
+  RTC_IODir = input
+
+  DATA = 0
+
+  for 7 loop
+      DB = RTC_IO
+      DATA = DATA >> 1   ;shift right DATA
+      RTC_CLOCK
+  end loop
+      DB = RTC_IO
+
+  RTC_CE =  LOW
+
+end procedure
+
+
+
+
+procedure RTC_BURST_WRITE_CLOCK  is ; send 8 datas to RTC
+
+  var byte DATA
+
+  RTC_IODir = output
+  RTC_SCLK = low
+  RTC_CE =  high
+
+  RTC_REGISTER_SEND (0xBE)
+
+  RTC_SCLK = low
+
+  DATA = SECOND
+  DEC_TO_RTC ( DATA )
+  RTC_DATA_SEND (DATA)
+
+  DATA = MINUT
+  DEC_TO_RTC ( DATA )
+  RTC_DATA_SEND (DATA)
+
+  DATA = HRS
+  DEC_TO_RTC ( DATA )
+  RTC_DATA_SEND (DATA)
+
+  DATA = DATE
+  DEC_TO_RTC ( DATA )
+  RTC_DATA_SEND (DATA)
+
+  DATA = MOUNTH
+  DEC_TO_RTC ( DATA )
+  RTC_DATA_SEND (DATA)
+
+  DATA = DAY
+  DEC_TO_RTC ( DATA )
+  RTC_DATA_SEND (DATA)
+
+  DATA = YEAR
+  DEC_TO_RTC ( DATA )
+  RTC_DATA_SEND (DATA)
+
+  DATA = PROTREG
+  DEC_TO_RTC ( DATA )
+  RTC_DATA_SEND (DATA)
+
+  RTC_CE =  LOW
+
+end procedure
+
+
+
+procedure   RTC_READ_DATA (byte out DATA) is
+
+  var bit DB at DATA : 7
+    for 7 loop
+      DB = RTC_IO
+      DATA = DATA >> 1   ;shift right DATA
+      RTC_CLOCK
+    end loop
+      DB = RTC_IO
+      RTC_CLOCK
+end procedure
+
+
+
+procedure RTC_BURST_READ_CLOCK  is ; READ 8 datas from RTC
+
+  var byte DATA
+
+  RTC_SCLK = low
+  RTC_IODir = output
+  RTC_CE =  high
+
+  RTC_REGISTER_SEND (0xBF)
+
+  RTC_IODir = input
+
+  RTC_SCLK = low
+
+  RTC_READ_DATA (DATA)
+  SECOND = DATA
+
+  RTC_READ_DATA (DATA)
+  MINUT = DATA
+
+  RTC_READ_DATA (DATA)
+  HRS = DATA
+
+  RTC_READ_DATA (DATA)
+  DATE = DATA
+
+  RTC_READ_DATA (DATA)
+  MOUNTH = DATA
+
+  RTC_READ_DATA (DATA)
+  DAY = DATA
+
+  RTC_READ_DATA (DATA)
+  YEAR = DATA
+
+  RTC_READ_DATA (DATA)
+  PROTREG = DATA
+
+  RTC_CE =  LOW
+
+
+  RTC_TO_DEC ( SECOND )
+  RTC_TO_DEC ( MINUT )
+  RTC_TO_DEC ( HRS )
+  RTC_TO_DEC ( DATE )
+  RTC_TO_DEC ( MOUNTH )
+  RTC_TO_DEC ( YEAR )
+
+
+
+end procedure
+
+
+
+
+procedure SECOND_READ is
+   var byte DATA
+   RTC_READ ( 0x81 , DATA )
+   RTC_TO_DEC ( DATA )
+   SECOND = DATA
+end procedure
+
+procedure MINUT_READ is
+   var byte DATA
+   RTC_READ ( 0x83 , DATA )
+   RTC_TO_DEC ( DATA )
+   MINUT = DATA
+end procedure
+
+procedure HRS_READ is
+   var byte DATA
+   RTC_READ ( 0x85 , DATA )
+   RTC_TO_DEC ( DATA )
+   HRS = DATA
+end procedure
+
+procedure DATE_READ is
+   var byte DATA
+   RTC_READ ( 0x87 , DATA )
+   RTC_TO_DEC ( DATA )
+   DATE = DATA
+end procedure
+
+procedure MOUNTH_READ is
+   var byte DATA
+   RTC_READ ( 0x89 , DATA )
+   RTC_TO_DEC ( DATA )
+   MOUNTH = DATA
+end procedure
+
+procedure DAY_READ is
+   var byte DATA
+   RTC_READ ( 0x8B , DATA )
+   RTC_TO_DEC ( DATA )
+   DAY = DATA
+end procedure
+
+procedure YEAR_READ is
+   var byte DATA
+   RTC_READ ( 0x8D , DATA )
+   RTC_TO_DEC ( DATA )
+   YEAR = DATA
+end procedure
+
+procedure PROTREG_READ is
+   var byte DATA
+   RTC_READ ( 0x8F , DATA )
+   RTC_TO_DEC ( DATA )
+   PROTREG = DATA
+end procedure
+
+
+
+procedure SECOND_WRITE is
+   var byte DATA
+   DATA = SECOND
+   DEC_TO_RTC ( DATA )
+   RTC_WRITE ( DATA , 0x80 )
+end procedure
+
+procedure MINUT_WRITE is
+   var byte DATA
+   DATA = MINUT
+   DEC_TO_RTC ( DATA )
+   RTC_WRITE ( DATA , 0x82 )
+end procedure
+
+procedure HRS_WRITE is
+   var byte DATA
+   DATA = HRS
+   DEC_TO_RTC ( DATA )
+   RTC_WRITE ( DATA , 0x84 )
+end procedure
+
+procedure DATE_WRITE is
+   var byte DATA
+   DATA = DATE
+   DEC_TO_RTC ( DATA )
+   RTC_WRITE ( DATA , 0x86 )
+end procedure
+
+procedure MOUNTH_WRITE is
+   var byte DATA
+   DATA = MOUNTH
+   DEC_TO_RTC ( DATA )
+   RTC_WRITE ( DATA , 0x88 )
+end procedure
+
+procedure DAY_WRITE is
+   var byte DATA
+   DATA = DAY
+   DEC_TO_RTC ( DATA )
+   RTC_WRITE ( DATA , 0x8A )
+end procedure
+
+procedure YEAR_WRITE is
+   var byte DATA
+   DATA = YEAR
+   DEC_TO_RTC ( DATA )
+   RTC_WRITE ( DATA , 0x8C )
+end procedure
+
+procedure PROTREG_WRITE is
+   var byte DATA
+   DATA = PROTREG
+   DEC_TO_RTC ( DATA )
+   RTC_WRITE ( DATA , 0x8E )
+end procedure
+
+
+procedure RTC_STOP is
+   SECOND_READ
+   SECOND = SECOND | 0b1000_0000
+   SECOND_WRITE
+end procedure
+
+procedure RTC_START is
+   SECOND_READ
+   SECOND = SECOND & 0b0111_1111
+   SECOND_WRITE
+end procedure
+
+
+
+
+
+procedure INIT_RTC is
+RTC_IODir   = output
+RTC_CE = LOW
+RTC_WRITE ( TRICK_CHAR_REG , 0x90 ) ;Program Trickel Charge register
+end procedure
+
+
+INIT_RTC
+

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"jallib" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/jallib?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to