From 3cdafd8598e936625e24fcd56ce0ff4fe71da587 Mon Sep 17 00:00:00 2001 From: PropGit Date: Mon, 4 Jan 2021 11:47:06 -0800 Subject: [PATCH 1/2] Start of dgately's ds1302_full P2 conversion. --- .../p2/All/DS1302_full/DS1302_full.spin2 | 238 ++++++++++++++++++ .../p2/All/DS1302_full/DS1302_full_demo.spin2 | 146 +++++++++++ .../community/p2/All/DS1302_full/README.md | 16 ++ libraries/community/p2/Protocol/README.md | 2 + libraries/community/p2/Sensor/README.md | 2 + 5 files changed, 404 insertions(+) create mode 100644 libraries/community/p2/All/DS1302_full/DS1302_full.spin2 create mode 100644 libraries/community/p2/All/DS1302_full/DS1302_full_demo.spin2 create mode 100644 libraries/community/p2/All/DS1302_full/README.md diff --git a/libraries/community/p2/All/DS1302_full/DS1302_full.spin2 b/libraries/community/p2/All/DS1302_full/DS1302_full.spin2 new file mode 100644 index 00000000..058d51af --- /dev/null +++ b/libraries/community/p2/All/DS1302_full/DS1302_full.spin2 @@ -0,0 +1,238 @@ +{{ DS1302_full.spin2 +┌─────────────────────────────────────┬────────────────┬─────────────────────┬───────────────┐ +│ DS1302 driver v1.3 (Spin2 version) │ dgately │ (C)2021 │ 1Jan2021 │ +├─────────────────────────────────────┴────────────────┴─────────────────────┴───────────────┤ +│ DS1302 driver v1.3 │ BR │ (C)2010 │ 8Jul2010 │ +├─────────────────────────────────────┴────────────────┴─────────────────────┴───────────────┤ +│ │ +│ A full-featured DS1302 timekeeping chip driver. Based on the original object by │ +│ Daniel Robert. │ +│ │ +│ Notes: │ +│ •Original object here: http://obex.parallax.com/objects/89/ │ +│ •12 hour mode is not supported in this object. The reason is that it would add │ +│ significant complexity to this object for minimal benefit. A better solution is │ +│ to handle the 12/24 hour conversion in software outside of this object if needed. │ +│ Okay. So it is nearly full-featured. │ +│ •The DS1302 data sheet specs the maximum frequency on the clk pin as: │ +│ 0.5MHz@2V, 2MHz@5V --> 1.5MHz@3.3V (1.5 uS per clock, 120 ticks@clkfreq=80MHz) │ +│ Original object had a 2 uS pause between clock pin transitions. However, it seems to │ +│ work fine with no wait @ clkfreq=80MHz...apparently spin can't outrun the DS1302. │ +│ Not tested at clkfreq=100MHz. │ +│ •Experimented with trickle charger using 1 diode+2K resistor setting. 10µF │ +│ electrolytic cap kept DS1302 powered up for >10 minutes. Implies a 1000µF should be good │ +│ for ~16 hrs of backup power...enough to last through a typical brown-out or black-out │ +│ (if leakage current and wide tolerance band of electrolytics doesn't kill it first) │ +│ •Note that this device needs to have a 32.768KHz crystal with 6pF capacitance in order to │ +│ keep accurate time: http://forums.parallax.com/forums/default.aspx?f=25&m=467246 │ +│ │ +│ See end of file for terms of use. │ +└────────────────────────────────────────────────────────────────────────────────────────────┘ +DEVICE PINOUT & REFERENCE CIRCUIT + ┌────┐ 1000µF + 3.3V │ │ backup_Vin ── to gnd + xtal xi │DS1302│ clk ─── to prop pin + 32.768 KHz xo │ │ io ─ 1KΩ resistor to prop pin + ┌│ │ ce ─── to prop pin + GND  └──────┘ + + +TRICKLE CHARGER NOTES +'Trickle charger setup tc_enable diodeSel resistSel +' | | | +' write(command(clock,tc,w),(%1010 << 4) + (2 << 2)+ ( 3 )) + +Diode select register bits: 00 = trickle charger disabled + 01 = 1 diode enabled + 10 = 2 diodes connected in series (more voltage drop when in charging mode) + 11 = trickle charger disabled + +Resistor select bits: 00 = no resistor 0Ω + 01 = R1 2KΩ + 10 = R2 4KΩ + 11 = R3 8KΩ + +'Examples of other useful config and control commands +'write(command(clock,sec,w),read(command(clock,sec,r))&%1000_0000) 'set clock halt bit +'write(command(clock,ctrl,w),%1000_0000) 'set write-protect bit +'write(command(clock,hr,w),read(command(clock,hr,r))&%1000_0000) 'set 12h mode + +V1.1 - 27Oct09 fixed mis-labeled pins in docs (clk and io were swapped in 1.0) +V1.2 - 28Mar10 fixed bug in config method that caused seconds to be reset (thanks, Doug!) +v1.3 - 26Jun10 cleanup and additional documentation +v1.3 - 01Jan21 Spin2 version, no functional changes + +}} + +CON +'command byte options + #0, clock,ram + #0, sec, mi, hr, day, mo, dow, yr, ctrl, tc, #31, burst + #0, w,r + + +VAR + byte clk 'clock + byte io 'data io + byte ce 'chip enable + byte datar + + +PUB command(clock_or_ram, register, r_or_w): result +''Returns a DS1302 command byte +''clock_or_ram : select clock or ram (allowed values: clock, ram) +''register : register name (allowed values: 0-30, sec, mi, hr, day, mo, dow, yr, ctrl, tc, burst) +''r_or_w : read or write (allowed values: w, r) +''Usage : cmd:=command(rtc#ram, 21, rtc#w) --> write to RAM byte 21 +'' cmd:=command(rtc#clock, rtc#min, rtc#r) --> read minute register + + return (1<<7) + (clock_or_ram<<6) + (register<<1) + r_or_w + + +PUB init( inClk, inIo, inCe ) +''Initialize propeller serial com channel with DS1302. Call once after prop power-up. +''Usage: rtc.init(clk_pin, io_pin, chipEnable_pin) + + clk := inClk 'save pin numbers + io := inIo + ce := inCe + + pinl(ce) 'configure chip enable pin + pinl(clk) 'configure clock pin + +PUB config() +''Config DS1302. Call once after DS1302 power-up. +''Usage: rtc.config + + write(command(clock,ctrl,w),0) 'clear write-protect bit + write(command(clock,sec,w),read(command(clock,sec,r)) & %0111_1111) 'clear halt bit + write(command(clock,hr,w),read(command(clock,hr,r)) & %0111_1111) 'set 24hr mode + write(command(clock,tc,w),0) 'disable trickle charger + + +PUB setDatetime( _mth, _day, _year, _dow, _hr, _min, _sec ) +''Set date and time + + write($8c, bin2bcd( _year ) ) + write($8a, _dow ) + write($88, bin2bcd( _mth ) ) + write($86, bin2bcd( _day ) ) + write($84, bin2bcd( _hr ) ) + write($82, bin2bcd( _min ) ) + write($80, bin2bcd( _sec ) ) + + +PUB readDate( _day, _mth, _year, _dow ) +''Read current date (day, month, year, day-of-week) +''Usage: rtc.readDate( @day, @month, @year, @dow ) + + byte[_year] := bcd2bin( read($8d) ) + byte[_mth] := bcd2bin( read($89) ) + byte[_day] := bcd2bin( read($87) ) + byte[_dow] := bcd2bin( read($8b) ) + + +PUB readTime( _hr, _min, _sec ) | tmp1, tmp2 +''Read current hour, minute, second +''Usage: rtc.readTime( @hour, @minute, @second ) + + byte[_hr] := bcd2bin( read($85) ) + byte[_min] := bcd2bin( read($83) ) + byte[_sec] := bcd2bin( read($81) ) + + +Pub read( cmd ): result | i +''Read a byte of data per command byte + + pinh(ce) ' enable the RTC + writeByte( cmd ) ' send the command (RTC register) + pinf(io) ' make IO an input + readByte() ' read back the result + pinl(ce) ' disable the RTC + return(datar) + + +Pub write( cmd, data ) +''Write a byte of data per cmd byte + + pinh(ce) ' enable the RTC + writeByte( cmd ) ' send the command (RTC register) + writeByte( data ) ' send the data byte to the RTC + pinl(ce) ' disable the RTC + + +PUB writeN(cmd, dataPtr, n)|i +''Write a stream of n bytes from byte array pointed to by dataPtr + + pinh(ce) ' enable the RTC + writeByte( cmd ) ' send the command (RTC register) + repeat i from 0 to n ' send the data as single bytes + writeByte(byte[dataPtr][i]) + pinl(ce) ' disable the RTC + + +Pub readN(cmd, dataPtr, n)|i +''Read a stream of n bytes of data and put in byte array pointed +''to by dataPtr + + pinh(ce) ' enable the RTC + writeByte( cmd ) ' send the command (RTC register) + dira[io]~ ' set to input + repeat i from 0 to n ' get the data as single bytes + readByte() + byte[dataPtr][i]:=datar + pinl(ce) ' disable the RTC + + +PRI readByte()|i + + repeat i from 0 to 7 + datar.[i] := pinr(io) ' set the bits 0..7 + pinh(clk) ' strobe the clock + pinl(clk) + + +PRI writeByte( cmd ) | i + + repeat 8 + pinw(io, cmd) ' set the IO pin high if LSB is 1 + pinh(clk) ' strobe the clock + cmd >>= 1 ' move next bit into LSB + pinl(clk) + + +PRI bin2bcd(dataIn): result | tmp +'Convert a byte of binary data to binary coded decimal + + tmp:= dataIn/10 + result := dataIn - ( tmp * 10 ) + ( tmp << 4 ) + + +PRI bcd2bin(dataIn): result +'Convert a byte of binary coded decimal data to binary + + result := (dataIn & %00001111) + ((dataIn >> 4) & %00001111)*10 + + +DAT + +{{ +┌─────────────────────────────────────────────────────────────────────────────────────────────────────┐ +│ TERMS OF USE: MIT License │ +├─────────────────────────────────────────────────────────────────────────────────────────────────────┤ +│Permission is hereby granted, free of charge, to any person obtaining a copy of this software and │ +│associated documentation files (the "Software"), to deal in the Software without restriction, │ +│including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense,│ +│and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so,│ +│subject to the following conditions: │ +│ │ │ +│The above copyright notice and this permission notice shall be included in all copies or substantial │ +│portions of the Software. │ +│ │ │ +│THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT│ +│LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. │ +│IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER │ +│LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION│ +│WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. │ +└─────────────────────────────────────────────────────────────────────────────────────────────────────┘ +}} diff --git a/libraries/community/p2/All/DS1302_full/DS1302_full_demo.spin2 b/libraries/community/p2/All/DS1302_full/DS1302_full_demo.spin2 new file mode 100644 index 00000000..088f1a94 --- /dev/null +++ b/libraries/community/p2/All/DS1302_full/DS1302_full_demo.spin2 @@ -0,0 +1,146 @@ +'' ================================================================================================= +'' +'' File....... DS1302_full_Demo.spin2 +'' Purpose.... Demonstrates interface of DS1302 Run Time Clock module driver (DS1302_full.spin2) +'' Author..... Dennis Gately +'' Copyright (C) 2020-2021 +'' -- see below for terms of use +'' Dependencies... +'' DS132_full.spin2 +'' jm_fullduplexserial.spin2 +'' jm_ansi.spin2 +'' +'' Started.... 30 DEC 2020 +'' Updated.... 03 JAN 2021 +'' +'' ================================================================================================= + + +con { timing } + + CLK_FREQ = 200_000_000 ' system freq as a constant + MS_001 = CLK_FREQ / 1_000 ' ticks in 1ms + US_001 = CLK_FREQ / 1_000_000 ' ticks in 1us + + _clkfreq = CLK_FREQ ' set system clock + +con { terminal } + + BR_TERM = 230_400 ' terminal baud rate + + #0, T_PST, T_ANSI ' terminal types + + T_TYPE = T_PST + + +con { fixed io pins } + + RX1 = 63 { I } ' programming / debug + TX1 = 62 { O } + + SF_CS = 61 { O } ' serial flash + SF_SCK = 60 { O } + SF_SDO = 59 { O } + SF_SDI = 58 { I } + + SD_SCK = 61 { O } ' sd card + SD_CS = 60 { O } + SD_SDI = 59 { O } + SD_SDO = 58 { I } + + SDA1 = 55 { IO } ' i2c connections + SCL1 = 54 { IO } + + DS_clk = 28 + DS_data = 29 + DS_CE = 30 + +con { app io pins } + +con + + #true, ON, OFF + #false, NO, YES + +obj + + term : "jm_fullduplexserial" ' * serial IO for terminal + rtc : "DS1302_full" ' ds1302 Run Time Clock + ansi : "jm_ansi" ' ANSI terminal control sequences + +var + + byte hour, minute, second, day, month, year, dow + +pub main()| i + + setup() + + wait_for_terminal(true) + + '' setDatetime test, un-comment to initialize to a specific date + '' parameters are: _mth, _day, _year, _dow, _hr, _min, _sec + ''rtc.setDatetime( 1, 3, 21, 1, 16, 42, 10 ) + + term.str(string("DS1302_full_Demo")) + term.tx(13) + + rtc.readTime( @hour, @minute, @second ) ' read time from DS1302 RTC + rtc.readDate( @day, @month, @year, @dow ) ' read date from DS1302 RTC + + term.fstr3(string("Time: %d:%d:%d\n\r"), hour, minute, second) + + term.fstr3(string("Date: %d/%d/%d\n\r"), month, day, year) + + repeat + +pub setup()| i + + term.tstart(BR_TERM) ' start terminal io * + + rtc.init( DS_clk, DS_data, DS_CE ) ' clock, data, chip-enable + +pub wait_for_terminal(clear) + +'' Wait for terminal to be open and key pressed +' -- download to RAM with F10 +' -- F12 to open PST +' -- Click [Enable] (if needed) +' -- Press Enter + + term.rxflush() + term.rx() + if (clear) + if (T_TYPE == T_PST) + term.tx(term.CLS) + else + term.str(ansi.hide_cursor()) + term.str(ansi.home()) + term.str(ansi.cls()) + +dat + +con { license } + +{{ + + Terms of Use: MIT License + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE. +}} diff --git a/libraries/community/p2/All/DS1302_full/README.md b/libraries/community/p2/All/DS1302_full/README.md new file mode 100644 index 00000000..ea321fae --- /dev/null +++ b/libraries/community/p2/All/DS1302_full/README.md @@ -0,0 +1,16 @@ +# DS1302_full + +By: "dgately" based on BR's original in P1 Object repo + +Language: Spin2 + +Created: 03-JAN-2021 + +Category: protocol, sensor + +Description: +A full-featured DS1302 timekeeping chip driver. Based on the original Propeller 1 object by BR. + +I've converted DS1302_full.spin from the old OBEX to DS1302_full.spin2. This code compiles on PropTool 2.4.1 for P2 as well as in flexprop (version 5.0.5 beta). A demo/example is included. + +License: MIT (see end of source code) \ No newline at end of file diff --git a/libraries/community/p2/Protocol/README.md b/libraries/community/p2/Protocol/README.md index b39ca3e3..81af158b 100644 --- a/libraries/community/p2/Protocol/README.md +++ b/libraries/community/p2/Protocol/README.md @@ -1,3 +1,5 @@ +[DS1302 Full](../All/DS1302_full) + [ESP 32](../All/esp32) [JM 1-Wire](../All/jm_1-wire) diff --git a/libraries/community/p2/Sensor/README.md b/libraries/community/p2/Sensor/README.md index 19856899..c2333cda 100644 --- a/libraries/community/p2/Sensor/README.md +++ b/libraries/community/p2/Sensor/README.md @@ -1,3 +1,5 @@ +[DS1302 Full](../All/DS1302_full) + [JM Click 4-20mA_R/_T](../All/jm_click_4-20ma) [JM Click RTC](../All/jm_click_rtc) From 84451468d34fdb48b133ba7e812fc5548ee5872d Mon Sep 17 00:00:00 2001 From: PropGit Date: Wed, 6 Jan 2021 10:34:29 -0800 Subject: [PATCH 2/2] Finalized 'dgately' object submission. --- docs/p2.md | 1 + .../p2/All/DS1302_full/DS1302_full.spin2 | Bin 13059 -> 22870 bytes .../p2/All/DS1302_full/DS1302_full_demo.spin2 | 9 +++------ .../community/p2/All/DS1302_full/README.md | 4 ++-- 4 files changed, 6 insertions(+), 8 deletions(-) diff --git a/docs/p2.md b/docs/p2.md index 136d9fbb..d6f81921 100644 --- a/docs/p2.md +++ b/docs/p2.md @@ -211,6 +211,7 @@ by Dave Hein ## Recent Activity ##### _Full details [here](https://github.com/parallaxinc/propeller/pulls?q=is%3Aclosed)._ +* Added Dennis Gately's (and BR's) [DS1302 Full](https://github.com/parallaxinc/propeller/tree/master/libraries/community/p2/All/DS1302_full) object. * Added Jon "JonnyMac" McPhalen's [Quiic Twist](https://github.com/parallaxinc/propeller/tree/master/libraries/community/p2/All/jm_quiic_twist) object * Added Objects from Jon "JonnyMac" McPhalen * [AT24C32](https://github.com/parallaxinc/propeller/tree/master/libraries/community/p2/All/jm_at24c32) diff --git a/libraries/community/p2/All/DS1302_full/DS1302_full.spin2 b/libraries/community/p2/All/DS1302_full/DS1302_full.spin2 index 058d51af2ff9fd9ba8462fd3962d60a4c498f804..fa82090d3ce5dfcbfae2e483ad82942e33690b1d 100644 GIT binary patch literal 22870 zcmeI4Npn=!6~|wZUCOEQA`36F=#XG!8w3IyV^?qh3ERX>B?L~&2qHX>TZw?PPtxn_j~V7XZW9U&z<_e|M{xaO+xvw8+qE3$RhhP_kET|IYX{dkKz z`fMoAgYssz`Loj2l&90I4)Fq(YSO<@Ec~9zP<~N$uIheE<=y&=sfDEf#iVZ>RZ0I9 zNgR*8-MlOL|5&c1|6u3p7!-n4tO5S+iq{?C{N3i5E@SNrA#GDA+$tD;pl{x+DfMAD zPat|*&!?Mr^!==Is_CDTe}%F~^0oB34|TULdONbKZGCU(8Ee{B`lc?d4vk^mSf1_C zdEqFiwf!u0Z50V%$F^YS#*XQ)sfX`frQ+|Yc}3s+4!@Fq=)wnV==-)lYbv=>YO@44 zRo^X1lop5ycGSiwit%J{hYa8hUuD07PuS3h7Q!>&`FM{;9k0OM195YBjD?yayp^~>(hF_q`#xsXtsH)x!io%{G~Z7 ztlVslsO}TJH*e`pr#Y(YJ^d0?2?+3lD6 zDJ2RI?GCFql?c~NqrUnJ@U+gO%08}#GzvM;8W>qs__bh%Hi z>5o41Th(z&`Rm6X z)grZB)pNAuv`x^5ua=rAEjL+w65}KAZ+=*C}Ex_{15&FS?+Y_ID-1xe;(}Ee$i0IQ{1`th0@P; zZ|b67PmhKj;P;GzlS2D!^S1POTBxT-K@MAzIaFBUX;r7B3DAx%@KmT=8FU586SW}Eo-(W(@3B>+9msa? z`+Rx<)Bnq{b7nas_F~<=QsSS5=7M6ci<*L>IK(@A za`pzx;@uvi(=>)&+6>iuBpGQR5!T@>vp+LH|e1rD6f|>T%BL-3JBponj43 zy1!m>A6EXoqc}%ojx>Un9rY;7#k;MPhyY&~S4Mew!9-Ub>p2B#5BJJN`DuQ?9$9*L z%GX_HtwPLBl9db+*5mk9^hB%9e-f_9T91=tpj=5)~MIs~c z__^+gMWMCHD&*i-p^ohP-FI_pB`?LKX`~viAD!&3$Pp5WiULx2`|$iRR4{ z5ExE<-j#@A!Fni;~4ERa&@lsPupD|HmL{0LehtU z0%m^p_Igoft9Y(gyM7NuE$ic}Jr8wQ{>HO;={*^>GP+^(Xq;M3lTz-{`-7hUwfEhN ziqy^IcS(8DbyN`x-U43}t6uaL)6vhEJ^GHx^g1?U z<`15k-DRGRxwqPHL(%bWuW0)4`lj!+W;&Tivc1>zt;%k&6jNb43F~2&3On;`N{-qY zM|)JoNX*D)=6GHA5gB_f#valro+)*~6Z5f0lygBf)B3NwROdblQ+=wet8a9v#tN{s z4VCdI+#^A+z6f3NjC*y9FgPL6!Z z9~^-2(bwUM%fa%th|#67;anLZ_h22PMiyBsG{ky8D2ljju&!vU&HXive$R`?ww~)~ zcv+NfsRytYkuDZfN34Dq`G}gCW3pX&b_i+?>snOFouV674?Is+k2Cw}NW4W2iK}SO zbahIbU@D`e%ENkv4=eQ6)`X!M12+nKyV2_l? zYR0#GT>g;VYP7rmHjcANt8+BN1{T}`#;0v2WWmz6&)p8A5y{(9Qaqj-|bG>wY zfIY!(X**~L4?^!u4>u#4xSucn6JB|`sIqZCUo0UJaj{$SUa`S@nkmOpVy*^@#->?^ zz#bU)MNh^E9-l$PxuJ`^^@?HbTRgiuU&@k;e%StXMbS`FYsENVPpf5i|tN zHAU!Ye`p#-QOqgTR6t2sP0h!QXd#UrX1?ODy;eCHj%(ykkL8-GTAS%b_Z~@RbmloU zV*aPo^ypHKzVMfLhNNt-Q5>~p&b@hvzSkUtXP&H#$8uhIIHbOu8KF6O0RP&jLQ9*6 zVdLg$D1Nq)=Xh#OF>+yS&x#%`wnv`R(2L)Uk@EL}5YyY96&*K=8fdR=)EqAeY4j3| zd5Goc=azNHm=hnrT%vi8Tb4C`F)|}1#xKi7W`3K|z;fx?)>KP+fa_g3J8s9n#aKHi z2wMAP{#&g$dql+i3w!QY^~~%KR0d_V73~eHVWr0vwC|PkbjdlaElX!yOQ%Mbhj(_m z?M>;MBg-3~dzU^jvb6Oxu60N1!??Exsmq7P!uy9;32a$I<~lHv_zKO{n4)%SjnS2( z$Nv2miJ_SarHroGk74}QwVQ&YO24hqhV>n`3lK zwVzYVVw&1kE80fkY^mkDV!j10hV+c98nvva?I?9qJr}9I_lc>!5f?jbDOHbUcy|+?3;2#N3ilw(I3HR&ERHVMfA?f5Eby+@> z*X4M^I7-bw7Mg2oAUNbz35y=QGg z@{YUj?%PO!HRO863v_zN=Au@&=L;`rDdWBK@;CJ0c!`t+d8WB&7Y%u4H`*j(&ea;m z;ih76?4I^+iQHCRMp@4uAwwDK+3ay-XW~_T6Ek?+xG7zGEdy@DOQuYot$o^#Izf#0 zrld|t3$(Qnv43MjXc&z4hG7C~V$Q@pA}hu*OVw{fiJ(Ldz9;R#I>nEDtXh}_aJ)8| z?bs^A%A$3&^pnkaUM6iOb&<$zYhoH(W&}3Onp3l(6_CvCqphXK3;4B-Q6iO zueILMRkV|MJKyVB0}G$@yrXseY4eF{{8YG$8lJb!wBw^`EoQN3BqF3q?8R1;o+U=} z?w8$1r=<6?B_v2+^OHplMxK+zUBn1@DG>QcnEbYf=s@;#zhP0#idiSv&S1Q?-&V{D zzT0$+Q)6pV8@88U*BWrd#%ZBQVVpfP3XgWZvP`MxZQJaH&3LrtEqcB1LX&ydw|ia- z?vmfxu2+i@r1{>OBBF0&$9iNggHxtHkH{I4pf+Xean!S}U$}MeIrDCqh;MSuaIkGh z>~5RX_*~PN2e}XH7uqAP9BoGJZ9SYG!tribszfv%y*pJR6hCiW#0d61okcxUD1)M>yO0WVb3VPqIx43Guzrx}zR8}=(ioJ% zI85}+!#B$zE1PH?!C_q49A}FNR2(__1qOw2>a@v zTdLa{l;zXPZ?uHc0}hid?eRf=!z7dAZFHZjPTpTyuaF@ZW>We~fcV&h&)FVU*!oMq z-qTRfv!MMRKIOw3{u?S%e3HkfHGb^h`EO89=LrT&acX2yJ7um*(pSqF#T&Z6Q05RX z%ik~Q{Uuos>-+5LV&-E%FP~4_&;N&d-a3wdjJhUSaSo84h4B_M;?d6#31B_MUz`^v zUX8IdJ)r+109kun;XN=ug-yD>HDxI8dD{5L5dK+&`7WYVK6jJ@e~QI#mi(@hSirsB z;6Gu+=*60jGmwlO$%{AjYN`DzZ-(u2^*&^F_t3X`_bogf6vCh(|9j)0dWqx`sGS1fdF%4gjou0yrEg=;RKFnj7ICrcw^`CmLzXp z>-i(r#o&*}re~-?LfH-Z{M!^sL6de7~?S6ml9cZ0h zour+R!IIDd_Shd6k!e^<+LZUYqeZY@qcVI~BD40g?2yk=Sd@1J6Z29}ZTH3>Z>WE` zwb+)hJD={ySI0iZ;3)p@DG(RFJCNFMWwUDU#k_)}7n8cDq3T(1`k|sBd?eA)l2(8? zcgvfLddFGxMWt{yoipkSdUH@YNFn`T@z@`iIO;>?^NDrW!4Bmss_{?C>&S~|o<353 z&IRL#FEoEFZE&`iTCb`->b|VEm-I`UN$H1<>%DG#X<#KK*jrdUQ$|6`+k?+b4t6W{H&{Rj`@a4 z@x#Z)+S2{Fl*`iQ8;K#edDY8Y2T#V6Px^3n+^J{?ZKH)iQc?p-(E+*8 z4NsOke1dXw6)1Kafk#?(duTst368=BQWJv~<+=ii9)}Fl$$r@jq7WH@3M6YuM9Kb| aXO(0BE_2jAt^d5o9M9Ii|7(CVV*dl8qI7rw literal 13059 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 QZT#HR-j7QESA2^5Z{?~^ApigX diff --git a/libraries/community/p2/All/DS1302_full/DS1302_full_demo.spin2 b/libraries/community/p2/All/DS1302_full/DS1302_full_demo.spin2 index 088f1a94..ad34771d 100644 --- a/libraries/community/p2/All/DS1302_full/DS1302_full_demo.spin2 +++ b/libraries/community/p2/All/DS1302_full/DS1302_full_demo.spin2 @@ -5,11 +5,8 @@ '' Author..... Dennis Gately '' Copyright (C) 2020-2021 '' -- see below for terms of use -'' Dependencies... +'' Dependencies... jm_fullduplexserial.spin2 '' DS132_full.spin2 -'' jm_fullduplexserial.spin2 -'' jm_ansi.spin2 -'' '' Started.... 30 DEC 2020 '' Updated.... 03 JAN 2021 '' @@ -117,7 +114,7 @@ pub wait_for_terminal(clear) term.str(ansi.hide_cursor()) term.str(ansi.home()) term.str(ansi.cls()) - + dat con { license } @@ -143,4 +140,4 @@ con { license } LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -}} +}} \ No newline at end of file diff --git a/libraries/community/p2/All/DS1302_full/README.md b/libraries/community/p2/All/DS1302_full/README.md index ea321fae..8b871427 100644 --- a/libraries/community/p2/All/DS1302_full/README.md +++ b/libraries/community/p2/All/DS1302_full/README.md @@ -1,6 +1,6 @@ # DS1302_full -By: "dgately" based on BR's original in P1 Object repo +By: Dennis Gately based on BR's original in the Propeller 1 Object repo Language: Spin2 @@ -11,6 +11,6 @@ Category: protocol, sensor Description: A full-featured DS1302 timekeeping chip driver. Based on the original Propeller 1 object by BR. -I've converted DS1302_full.spin from the old OBEX to DS1302_full.spin2. This code compiles on PropTool 2.4.1 for P2 as well as in flexprop (version 5.0.5 beta). A demo/example is included. +Converted DS1302_full.spin from the old OBEX to DS1302_full.spin2. This code compiles on PropTool 2.4.1 for P2 as well as in flexprop (version 5.0.5 beta). A demo/example is included. License: MIT (see end of source code) \ No newline at end of file