starting bcd conversion

This commit is contained in:
Kyle Isom 2025-04-04 16:04:45 -07:00
parent 25ae52259d
commit 101f0b998f
2 changed files with 24 additions and 2 deletions

View File

@ -172,19 +172,21 @@ Returns a list with all items for which tst is true removed from lst."
Returns a list with all items for which tst is false removed from lst."
(mapcan #'(lambda (x) (when (funcall tst x) (list x))) lst))
(defvar *rtc-port* 1)
(defun rtc-set (hr min)
"(rtc-set hr min)
Set the time on a DS3231 RTC. Times are in BCD, so use
the appropriate reader macro, e.g. (rtc-set #x12 #x34)
for 12:34. Assumes seconds are zero."
(with-i2c (str #x68)
(with-i2c (str *rtc-port* #x68)
(write-byte 0 str)
(write-byte 0 str)
(write-byte min str)
(write-byte hr str)))
(defun rtc-get ()
(with-i2c (str #x68)
(with-i2c (str *rtc-port* #x68)
(write-byte 0 str)
(restart-i2c str 3)
(reverse

View File

@ -2,6 +2,26 @@
User Extensions
*/
// Utility functions
uint8_t
dec_to_bcd(uint8_t n)
{
uint8_t bcd = 0;
uint8_t tens = n / 10;
bcd = tens << 4;
tens *= 10;
bcd += (n - tens) & 0x0f;
return bcd;
}
uint8_t
bcd_to_dec(uint8_t n)
{
return ((n>>4) * 10) + (n&0x0f);
}
// Definitions
object *
fn_now(object *args, object *env)