From 2f83a0bea9da444e3d70569eba3d6847ca02be03 Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Fri, 21 Sep 2018 21:59:17 +0200 Subject: ... --- forth/forth/avr/i2c-ds1307.fs | 72 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 forth/forth/avr/i2c-ds1307.fs (limited to 'forth/forth/avr/i2c-ds1307.fs') 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 +; + -- cgit v1.2.3