aboutsummaryrefslogtreecommitdiff
path: root/forth/forth/avr/i2c-ds1307.fs
diff options
context:
space:
mode:
Diffstat (limited to 'forth/forth/avr/i2c-ds1307.fs')
-rw-r--r--forth/forth/avr/i2c-ds1307.fs72
1 files changed, 72 insertions, 0 deletions
diff --git a/forth/forth/avr/i2c-ds1307.fs b/forth/forth/avr/i2c-ds1307.fs
new file mode 100644
index 0000000..20aa069
--- /dev/null
+++ b/forth/forth/avr/i2c-ds1307.fs
@@ -0,0 +1,72 @@
+\ *********************************************************************
+\ *
+\ Filename: i2c-ds1307.txt *
+\ Date: 12.05.2016 *
+\ FF Version: 5.0 *
+\ MCU: Atmega *
+\ Copyright: Mikael Nordman *
+\ Author: Mikael Nordman *
+\ *********************************************************************
+\ FlashForth is licensed acording to the GNU General Public License*
+\ *********************************************************************
+
+\ ********************************
+\ DS1307 RTC i2c words
+\ ********************************
+-ds1307
+marker -ds1307
+
+\ i2c device address
+$68 constant addr-ds1307
+
+: i2c! i2c.c! drop ;
+
+: ds1307.addr! ( c -- ) \ Set ds1307 register address
+ i2c.init addr-ds1307 i2c.addr.write drop
+ i2c! i2c.stop ;
+
+: time! ( c c c c c c c -- )
+ i2c.init addr-ds1307 i2c.addr.write drop
+ 0 i2c! i2c! i2c! i2c! i2c! i2c! i2c! i2c!
+ i2c.stop
+;
+
+: time@ ( -- c c c c c c c )
+ 0 ds1307.addr!
+ addr-ds1307 i2c.addr.read drop
+ i2c.c@.ack i2c.c@.ack i2c.c@.ack
+ i2c.c@.ack i2c.c@.ack i2c.c@.ack i2c.c@.nack
+ i2c.stop
+;
+
+: bin>bcd ( c -- c )
+ #10 u/mod #4 lshift or
+;
+: set-time ( year month date day hour min sec -- )
+ >r >r >r >r >r >r
+ $00 swap \ 11 = 4.096 KHz output 00 = no output
+ bin>bcd \ Year 0-99
+ r> bin>bcd \ Month
+ r> bin>bcd \ Date
+ r> \ Day 1-7
+ r> bin>bcd \ Hours
+ r> bin>bcd \ Minutes
+ r> bin>bcd \ Seconds
+ time!
+;
+
+: i2c.ds1307.c@ ( addr -- c )
+ ds1307.addr! addr-ds1307 i2c.addr.read drop i2c.c@.nack i2c.stop
+;
+: i2c.ds1307.c! ( c addr -- )
+ i2c.init addr-ds1307 i2c.addr.write drop i2c! i2c! i2c.stop
+;
+
+
+: i2c.ds1307.n@ ( n addr -- )
+ ds1307.addr!
+ addr-ds1307 i2c.addr.read drop
+ for i2c.c@.ack next
+ i2c.c@.nack i2c.stop
+;
+