From 4618dc95a90dcd0cd16296e89bf006e38c4fa658 Mon Sep 17 00:00:00 2001 From: 7marcus9 <7marcus9> Date: Wed, 7 Oct 2026 00:17:40 +0200 Subject: [PATCH] Fixed stuff --- peripherals/cc48x6/build.md | 5 +++ peripherals/cc48x6/calc_lookup.ods | Bin 0 -> 42643 bytes peripherals/cc48x6/firmware/Src/main.c | 55 +++++++++++++++---------- peripherals/cc48x6/firmware/Src/tim.c | 4 +- peripherals/cc48x6/test.py | 27 ++++++++++++ 5 files changed, 68 insertions(+), 23 deletions(-) create mode 100644 peripherals/cc48x6/build.md create mode 100644 peripherals/cc48x6/calc_lookup.ods create mode 100644 peripherals/cc48x6/test.py diff --git a/peripherals/cc48x6/build.md b/peripherals/cc48x6/build.md new file mode 100644 index 0000000..91d6d0a --- /dev/null +++ b/peripherals/cc48x6/build.md @@ -0,0 +1,5 @@ +``` +sudo docker run --rm -ti -v /.../fiatlux/:/src alpine:latest +apk add make gcc-arm-none-eabi newlib-arm-none-eabi +make +``` diff --git a/peripherals/cc48x6/calc_lookup.ods b/peripherals/cc48x6/calc_lookup.ods new file mode 100644 index 0000000000000000000000000000000000000000..5f0e6556041bdbe4a272acaa18e48c8a828f5bb4 GIT binary patch literal 42643 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 L181IF0)P5Hv*`qD literal 0 HcmV?d00001 diff --git a/peripherals/cc48x6/firmware/Src/main.c b/peripherals/cc48x6/firmware/Src/main.c index 782a9a4..3b17891 100644 --- a/peripherals/cc48x6/firmware/Src/main.c +++ b/peripherals/cc48x6/firmware/Src/main.c @@ -69,7 +69,12 @@ volatile bool dirty = true; //uint16_t mem[12] = {0xFFF, 0xFF, 0xFFF, 0xFF, 0xFFF, 0xFF, 0xFFF, 0xFF, 0xFFF, 0xFF, 0xFFF, 0xFF}; //uint16_t mem[12] = {0x300, 0x40, 0x300, 0x40, 0x300, 0x40, 0x300, 0x40, 0x300, 0x40, 0x300, 0x40}; //uint16_t mem[12] = {0xFFF, 0xFF, 0xFFF, 0xFF, 0xFFF, 0xFF, 0xFFF, 0xFF, 0xFFF, 0xFF, 0xFFF, 0xFF}; -uint16_t mem[12] = {0x400, 0xff, 0x400, 0xff, 0x400, 0xff, 0x400, 0xff, 0x400, 0xff, 0x400, 0xff}; +uint16_t mem[12] = {0x300, 0xff, 0x300, 0xff, 0x300, 0xff, 0x300, 0xff, 0x300, 0xff, 0x300, 0xff}; + + +uint16_t lookup_ana[256] = {0, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 755, 771, 787, 803, 819, 835, 851, 867, 883, 899, 915, 931, 947, 964, 980, 996, 1012, 1028, 1044, 1060, 1076, 1092, 1108, 1124, 1140, 1156, 1172, 1188, 1204, 1220, 1237, 1253, 1269, 1285, 1301, 1317, 1333, 1349, 1365, 1381, 1397, 1413, 1429, 1445, 1461, 1477, 1493, 1510, 1526, 1542, 1558, 1574, 1590, 1606, 1622, 1638, 1654, 1670, 1686, 1702, 1718, 1734, 1750, 1766, 1783, 1799, 1815, 1831, 1847, 1863, 1879, 1895, 1911, 1927, 1943, 1959, 1975, 1991, 2007, 2023, 2039, 2056, 2072, 2088, 2104, 2120, 2136, 2152, 2168, 2184, 2200, 2216, 2232, 2248, 2264, 2280, 2296, 2312, 2329, 2345, 2361, 2377, 2393, 2409, 2425, 2441, 2457, 2473, 2489, 2505, 2521, 2537, 2553, 2569, 2585, 2602, 2618, 2634, 2650, 2666, 2682, 2698, 2714, 2730, 2746, 2762, 2778, 2794, 2810, 2826, 2842, 2858, 2875, 2891, 2907, 2923, 2939, 2955, 2971, 2987, 3003, 3019, 3035, 3051, 3067, 3083, 3099, 3115, 3131, 3148, 3164, 3180, 3196, 3212, 3228, 3244, 3260, 3276, 3292, 3308, 3324, 3340, 3356, 3372, 3388, 3404, 3421, 3437, 3453, 3469, 3485, 3501, 3517, 3533, 3549, 3565, 3581, 3597, 3613, 3629, 3645, 3661, 3677, 3694, 3710, 3726, 3742, 3758, 3774, 3790, 3806, 3822, 3838, 3854, 3870, 3886, 3902, 3918, 3934, 3950, 3967, 3983, 3999, 4015, 4031, 4047, 4063, 4079, 4095}; + +uint16_t lookup_pwm[256] = {0, 6, 11, 17, 22, 28, 33, 39, 44, 50, 55, 61, 67, 72, 78, 83, 89, 94, 100, 105, 111, 116, 122, 128, 133, 139, 144, 150, 155, 161, 166, 172, 177, 183, 188, 194, 200, 205, 211, 216, 222, 227, 233, 238, 244, 249, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255}; uint16_t conf[8] = {version, 0, 0, 0, 0, 0, 0, 0}; @@ -251,22 +256,21 @@ int main(void) { } - //if(dirty) { - for (int i = 0; i < 6; ++i) { - setDAC(i, mem[i * 2]); + if(dirty) { + for (int i = 0; i < 6; ++i) { + setDAC(i, mem[i * 2]); + } + + TIM1->CCR1 = 0xFF & mem[1]; + TIM1->CCR2 = 0xFF & mem[3]; + TIM1->CCR3 = 0xFF & mem[5]; + TIM1->CCR4 = 0xFF & mem[7]; + TIM3->CCR1 = 0xFF & mem[9]; + TIM3->CCR2 = 0xFF & mem[11]; + + dirty = false; } - TIM1->CCR1 = 0xFF & mem[1]; - TIM1->CCR2 = 0xFF & mem[3]; - TIM1->CCR3 = 0xFF & mem[5]; - TIM1->CCR4 = 0xFF & mem[7]; - TIM3->CCR1 = 0xFF & mem[9]; - TIM3->CCR2 = 0xFF & mem[11]; - - dirty = false; - - //} - } /* USER CODE END 3 */ } @@ -283,12 +287,21 @@ void USART2_IRQHandler(void) if (v == 0) dirty = true; }else{ uint16_t idx = (uart_proto_state - 1) / 2; - if(uart_proto_state & 1) { - mem[idx] &= 0x00ff; - mem[idx] |= (v << 8) & 0xff00; - }else{ - mem[idx] &= 0xff00; - mem[idx] |= v & 0x00ff; + if (idx < sizeof(mem) / sizeof(mem[0])) + { + if(uart_proto_state & 1) { + mem[idx] &= 0x00ff; + mem[idx] |= (v << 8) & 0xff00; + }else{ + mem[idx] &= 0xff00; + mem[idx] |= v & 0x00ff; + } + } + if (uart_proto_state == 128) { + for(int i = 0; i < 6; i++) { + mem[i*2+0] = lookup_ana[v]; + mem[i*2+1] = lookup_pwm[v]; + } } uart_proto_state = 0; } diff --git a/peripherals/cc48x6/firmware/Src/tim.c b/peripherals/cc48x6/firmware/Src/tim.c index 4e674f1..9ef8dc0 100644 --- a/peripherals/cc48x6/firmware/Src/tim.c +++ b/peripherals/cc48x6/firmware/Src/tim.c @@ -43,7 +43,7 @@ void MX_TIM1_Init(void) /* USER CODE END TIM1_Init 1 */ htim1.Instance = TIM1; - htim1.Init.Prescaler = 0; + htim1.Init.Prescaler = 90; htim1.Init.CounterMode = TIM_COUNTERMODE_UP; htim1.Init.Period = 65535; htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; @@ -114,7 +114,7 @@ void MX_TIM3_Init(void) /* USER CODE END TIM3_Init 1 */ htim3.Instance = TIM3; - htim3.Init.Prescaler = 0; + htim3.Init.Prescaler = 90; htim3.Init.CounterMode = TIM_COUNTERMODE_UP; htim3.Init.Period = 65535; htim3.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; diff --git a/peripherals/cc48x6/test.py b/peripherals/cc48x6/test.py new file mode 100644 index 0000000..47b9b66 --- /dev/null +++ b/peripherals/cc48x6/test.py @@ -0,0 +1,27 @@ +#!/usr/bin/env python3 +import serial +import time +ser = serial.Serial("/dev/ttyUSB0", 115200) + +def setCh(ch, ana, pwm): + ser.write(bytearray([ch*4+1, ana >> 8, ch*4+2, ana & 0xff, ch*4+4, pwm, 0,0])) + +def setG(val): + ser.write(bytearray([128,val,0])) + +setCh(0,0,0) +setCh(1,0,0) +setCh(2,0,0) +setCh(3,0,0) +setCh(4,0,0) +setCh(5,0,0) + +if False: #for i in range(0, 4095, 5): + print(i) + setCh(0,i,255) + time.sleep(0.1) + +for i in range(255): + print(i) + setG(i) + time.sleep(0.5)