From 6d3a824e1cdae6e28146b7de380724b49488f3c2 Mon Sep 17 00:00:00 2001 From: root Date: Thu, 25 Feb 2021 19:12:38 +0000 Subject: tim --- app/max7219.c | 111 +++++++++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 98 insertions(+), 13 deletions(-) (limited to 'app/max7219.c') diff --git a/app/max7219.c b/app/max7219.c index bebfa50..8c1c859 100644 --- a/app/max7219.c +++ b/app/max7219.c @@ -30,6 +30,7 @@ set (int sck, int ncs, int mosi) else CLEAR (MOSI); + // delay_us(1); //delay_us(10); } @@ -80,40 +81,124 @@ write_reg (uint8_t reg, uint8_t data) spip_send_8 (reg); spip_send_8 (data); + spip_send_8 (reg); + spip_send_8 (data); + + spip_send_8 (reg); + spip_send_8 (data); + set (0, 0, 0); set (0, 1, 0); unlock(); } -static void write_pair (uint8_t reg, int d) + +static void +write_regs (uint8_t reg, uint8_t data1, uint8_t data2, uint8_t data3) { - write_reg (reg, d / 10); - write_reg (reg - 1, (d % 10) | 0x80); + while (lock()); + + set (0, 1, 0); + set (0, 0, 0); + + spip_send_8 (reg); + spip_send_8 (data3); + + spip_send_8 (reg); + spip_send_8 (data2); + + spip_send_8 (reg); + spip_send_8 (data1); + + set (0, 0, 0); + set (0, 1, 0); + unlock(); } -void max7219_write (int d, int h, int m, int s) +static void write_pair (uint8_t reg, int d1, int d2, int d3) +{ + write_regs (reg, d1 / 10, d2 / 10, d3 / 10); + write_regs (reg - 1, (d1 % 10) | 0x80, (d2 % 10) | 0x80, (d3 % 10) | 0x80); +} + + +#if 0 +static void st_test (void) { - write_pair (8, d); - write_pair (6, h); - write_pair (4, m); - write_pair (2, s); + UTC u = { 0 }; + double local_lon = 0.0; + ST st; + double ra; + + // LEDS: 12.13.28.00 01.01.29.05 13.27.42.05 + + u.year = 2021; + u.month = 1; + u.mday = 12; + u.hour = 13; + u.minute = 28; + + ra = time_utc_to_ra (u); + st = time_ra_to_st (ra + local_lon); + + printf ("%d:%02d:%02d\n", st.hour, st.minute, st.second); + + st = time_utc_to_lst (u, local_lon); + printf ("%d:%02d:%02d\n", st.hour, st.minute, st.second); + + for (;;); } +#endif + void max7219_dispatch (void) { uint32_t now = HW_CLOCK_REG; uint64_t abs = abs_extend (now); - EPOCH e = pll_decompose (abs); - UTC u = time_epoch_to_utc (e); + static unsigned m; + EPOCH e; + UTC u; + UTC gu; + ST l; + + + e = pll_decompose (abs); + u = time_epoch_to_utc (e); + l = time_utc_to_lst (u, gps_lon); + + e.s += gps_utc_diff; + gu = time_epoch_to_utc (e); + + write_pair (8, u.hour, l.hour, gps_wday); + write_pair (6, u.minute, l.minute, gu.hour); + write_pair (4, u.second, l.second, gu.minute); + write_pair (2, u.nanosecond / 10000000, l.nanosecond / 10000000, gu.second); + + if (u.minute == m) return; + + m = u.minute; + + printf ("LEDS: %02d.%02d.%02d.%02d %02d.%02d.%02d.%02d %02d.%02d.%02d.%02d lon %.6f\r\n", + u.hour, u.minute, u.second, + u.nanosecond / 10000000, + l.hour, + l.minute, + l.second, + l.nanosecond / 10000000, + gps_wday, + gu.hour, + gu.minute, + gu.second, + gps_lon); + - max7219_write (u.mday, u.hour, u.minute, u.second); } void -max7219_init (int on) +max7219_init (int on, int brightness) { MAP_OUTPUT_PP (SCK); MAP_OUTPUT_PP (NCS); @@ -129,7 +214,7 @@ max7219_init (int on) write_reg (0x9, 0xff); //BCD decode write_reg (0xb, 0x7); //8 digits - write_reg (0xa, 0x8); //intensity + write_regs (0xa, brightness, brightness, brightness); } else { write_reg (0xc, 0x0); //Power up } -- cgit v1.2.3