From 4d58a3df74c7c25fdcb1a4fb722caca0874c4d64 Mon Sep 17 00:00:00 2001 From: Brooke Date: Mon, 28 Apr 2025 21:07:46 -0400 Subject: [PATCH] LEDs now operating on button push Fixed several bugs: - TCB wasn't running. The datasheet steps were not complete. - TCA was waking the MCU and causing the main program to run. Added checks to ensure program only runs on button or TCB wakeup. - Fixed some peculiarities with specific RGBLED programs --- .../.vs/HackSpaceCon_AS7/v14/.atsuo | Bin 74752 -> 74752 bytes fw/HackSpaceCon_AS7/HSC_Wand/isr.cpp | 8 ++++-- fw/HackSpaceCon_AS7/HSC_Wand/rgbled.cpp | 27 +++++++++++------- fw/HackSpaceCon_AS7/HSC_Wand/rgbled.h | 9 ++++-- fw/HackSpaceCon_AS7/HSC_Wand/wand_program.cpp | 6 ++++ 5 files changed, 36 insertions(+), 14 deletions(-) diff --git a/fw/HackSpaceCon_AS7/.vs/HackSpaceCon_AS7/v14/.atsuo b/fw/HackSpaceCon_AS7/.vs/HackSpaceCon_AS7/v14/.atsuo index 77eee68d74442bdcf6fa16b7ed6c90ab11377202..9059c35aa354aa2d52512e949d89949079163eb7 100644 GIT binary patch delta 2820 zcmeH|ZA_b06vyv*`m{WqfGu4KjMuiTLJO>52_r5O7!V+A(gkB;h_vg>Bu;2xgSeQi z3mTK@2iv#bjFwl#1|JAQ7{6IQ=U92(^Y$M&+#)?Xfq`B zjr@@Akff0MK$1w(>G{0IzFBxa*}mv_E5KSIN7iqs8}%! zni9_@$YdZIc__tVvVd6FT9YdwPc}Il?PBm4lXI7B#-PM(cnQVg!5ZqxNN~0UG(hyk zRm=9P6bcw3>5^q_rxt^BAT4R|LsIh%vP9L~(q@ylU?TqI>2mE1DziLhF5?lCMNh)Q zXGLGnM2YOLTADOKnf%M}X3+hldl ztjOWg3HevZ)XSxA3b&3cB1FP}Vi3RI`aTbucIZiXt$JCi{Q(uI%$p=VIZ!WO>G&9x z@6=dPnq+ptp-aDE*30&?em2Z1_>sXKJZN`R3E2SXWBXVSdV5j!vIES=_OnXnXZ5j9 zuD*Ldwna04%-3;k>;)F`>W0G{odF>&B&dYb$IB%n`v09GUU4*u}hzAc$*H3%^^DM>qbKvj zGmY^h&eTLGF#|VP4`}@?zyf@m_a%O@tS;OYO+Tw!x?8X;ncwQN^4YHHEFH^SWe%H6 z?P6g{3EfS(&JK#ERHuW^2z_aC|o zCip~p9c@adjmDXm2h0_Y6Q6!`?BqNA-t;MPEXjrIs*qN$0%2A@x4!sQq(kAMqq%CX zV;@Q9h=1+rtms5W@*~%ayzWCr5_x_<>J6+5EwN$W#O=|*~s34&lF z+8$^UUBtR5!VB98qHY@4g`z}g7f~QmAVE+NGis3QdG`T!)dN4?=XuWmJ?H;^oY0aO zS`zQLYnYIaGC|N&%Ilp>Cd0c$#Qvv4W~K{%?Hy@&_7Uo+lWfOH){i~LX0{=yKN$nI zR)pyyM;%SehLKb}vE|278s&VR!CukYZKbM`m@Ra36Ek+I_YyinA-EGB4$A8ZCvk{q ziVW$cBb2xaH7U-6F4;d6*nXa~D0Gm;N%nb{y*-X|{AJtC{mEi{mVyNwOn!HFr$fEM`s`J!{JiGu^U$eJ}9)Nz5D)-QurXrjVUkf^CjSxg-0 z0j|RdV>nU0NE#PCZ!Bnv?^E_c{jFaC>7U7%s%TUdWfO4uga^%CgXLF+^*6ZYn9*(B zmR)nBhFkArK0CN#AuD*)RG$pdfCnnnw!jL+9V}{E68Q?%Rg(uWGHX;u%V+)b7A5hy-h+vIQ;G^CCaK{Lxjv6Au?EIlJ9d z@ra+)L@lo+eipk=Ivks`g8!}r60Wv-qW+YogA`j`nD(dTPD(fVk4X_fD@DCY`3e2A z{Qd%6Tm0^|;Wuv!2= 10) { // as long as >10 loops remain, if (!t) { // then on a loop boundary, light the next LED - rgb.setPixelColor(circlefade_idx, CF_BRIGHTNESS, CF_BRIGHTNESS, CF_BRIGHTNESS); + rgb.setPixelColor(circlefade_idx, 56, 16, 44); if (++circlefade_idx >= RGB_COUNT) { // then work on the next LED in sequence circlefade_idx = 0; @@ -141,6 +146,8 @@ uint8_t rgbp_circlefade(uint8_t init) } } + prog_timeout--; + return 1; } diff --git a/fw/HackSpaceCon_AS7/HSC_Wand/rgbled.h b/fw/HackSpaceCon_AS7/HSC_Wand/rgbled.h index 40cd6ab..e480c78 100644 --- a/fw/HackSpaceCon_AS7/HSC_Wand/rgbled.h +++ b/fw/HackSpaceCon_AS7/HSC_Wand/rgbled.h @@ -19,8 +19,9 @@ -#define enable_rgb_timer() {TCB0.CNT = 0; TCB0.CTRLA |= 1;}; -#define disable_rgb_timer() {TCB0.CTRLA &= ~1;}; +#define enable_rgb_timer() {TCB0.CNT = 0; TCB0.INTFLAGS = 0xff; \ + TCB0.INTCTRL = TCB_CAPT_bm; TCB0.CTRLA |= TCB_ENABLE_bm;}; +#define disable_rgb_timer() {TCB0.INTCTRL = 0; TCB0.CTRLA &= ~TCB_ENABLE_bm;}; @@ -31,6 +32,10 @@ extern uint8_t (*rgb_program[PROG_COUNT])(uint8_t); +extern volatile uint8_t rgb_run_next; + + + void conf_rgb_timer(); diff --git a/fw/HackSpaceCon_AS7/HSC_Wand/wand_program.cpp b/fw/HackSpaceCon_AS7/HSC_Wand/wand_program.cpp index 6d7c1d0..3cffe0a 100644 --- a/fw/HackSpaceCon_AS7/HSC_Wand/wand_program.cpp +++ b/fw/HackSpaceCon_AS7/HSC_Wand/wand_program.cpp @@ -120,6 +120,12 @@ void setup() { // mcu program loop void loop() { + while (!rgb_run_next) { + // __asm("sleep"); + } + + rgb_run_next = 0; + switch (run_rgbprog) { case RGB_INIT: { // just started running a program digitalWrite(PIN_LED_PWRENA, HIGH); // enable LED power supply,