AO2V3U24WYO7TZJYWBVSW5TTFI3BMZHOJWF4DXLHN7CD2NNQAMNAC const std = @import("std");const microzig = @import("microzig");const rp2xxx = microzig.hal;const gpio = rp2xxx.gpio;const Pio = rp2xxx.pio.Pio;const StateMachine = rp2xxx.pio.StateMachine;const LEDSNUM = 8;const SLEEP_MS = 1000;const ws2812_program = blk: {@setEvalBranchQuota(10_000);break :blk rp2xxx.pio.assemble(\\;\\; Copyright (c) 2020 Raspberry Pi (Trading) Ltd.\\;\\; SPDX-License-Identifier: BSD-3-Clause\\;\\.program ws2812\\.side_set 1\\\\.define public T1 2\\.define public T2 5\\.define public T3 3\\\\.wrap_target\\bitloop:\\ out x, 1 side 0 [T3 - 1] ; Side-set still takes place when instruction stalls\\ jmp !x do_zero side 1 [T1 - 1] ; Branch on the bit we shifted out. Positive pulse\\do_one:\\ jmp bitloop side 1 [T2 - 1] ; Continue driving high, for a long pulse\\do_zero:\\ nop side 0 [T2 - 1] ; Or drive low, for a short pulse\\.wrap, .{}).get_program_by_name("ws2812");};const pio: Pio = rp2xxx.pio.num(0);const sm: StateMachine = .sm0;const led_pin = gpio.num(0);pub fn main() !void {pio.gpio_init(led_pin);pio.sm_set_pindir(sm, @intFromEnum(led_pin), 1, .out);const cycles_per_bit: comptime_int = ws2812_program.defines[0].value + //T1ws2812_program.defines[1].value + //T2ws2812_program.defines[2].value; //T3const div = @as(f32, @floatFromInt(rp2xxx.clock_config.sys.?.frequency())) /(800_000 * cycles_per_bit);pio.sm_load_and_start_program(sm, ws2812_program, .{.clkdiv = rp2xxx.pio.ClkDivOptions.from_float(div),.pin_mappings = .{.side_set = .{.base = @intFromEnum(led_pin),.count = 1,},},.shift = .{.out_shiftdir = .left,.autopull = true,.pull_threshold = 24,.join_tx = true,},}) catch unreachable;pio.sm_set_enabled(sm, true);var rand = std.Random.DefaultPrng.init(0);const rnd = rand.random();const brightness = 0.2;for (0..60) |_| {for (0..LEDSNUM) |_| {const green: u24 = rnd.uintAtMostBiased(u8, 255 * brightness);const red: u24 = rnd.uintAtMostBiased(u8, 255 * brightness);const blue: u24 = rnd.uintAtMostBiased(u8, 255 * brightness);const mix: u32 = green << 16 | red << 8 | blue;pio.sm_blocking_write(sm, mix << 8);}rp2xxx.time.sleep_ms(SLEEP_MS);}}
const std = @import("std");const microzig = @import("microzig");const rp2xxx = microzig.hal;const gpio = rp2xxx.gpio;const Pio = rp2xxx.pio.Pio;const StateMachine = rp2xxx.pio.StateMachine;const ws2812_program = blk: {@setEvalBranchQuota(10_000);break :blk rp2xxx.pio.assemble(\\;\\; Copyright (c) 2020 Raspberry Pi (Trading) Ltd.\\;\\; SPDX-License-Identifier: BSD-3-Clause\\;\\.program ws2812\\.side_set 1\\\\.define public T1 2\\.define public T2 5\\.define public T3 3\\\\.wrap_target\\bitloop:\\ out x, 1 side 0 [T3 - 1] ; Side-set still takes place when instruction stalls\\ jmp !x do_zero side 1 [T1 - 1] ; Branch on the bit we shifted out. Positive pulse\\do_one:\\ jmp bitloop side 1 [T2 - 1] ; Continue driving high, for a long pulse\\do_zero:\\ nop side 0 [T2 - 1] ; Or drive low, for a short pulse\\.wrap, .{}).get_program_by_name("ws2812");};const pio: Pio = rp2xxx.pio.num(0);const sm: StateMachine = .sm0;const led_pin = gpio.num(0);pub fn main() !void {pio.gpio_init(led_pin);pio.sm_set_pindir(sm, @intFromEnum(led_pin), 1, .out);const cycles_per_bit: comptime_int = ws2812_program.defines[0].value + //T1ws2812_program.defines[1].value + //T2ws2812_program.defines[2].value; //T3const div = @as(f32, @floatFromInt(rp2xxx.clock_config.sys.?.frequency())) /(800_000 * cycles_per_bit);pio.sm_load_and_start_program(sm, ws2812_program, .{.clkdiv = rp2xxx.pio.ClkDivOptions.from_float(div),.pin_mappings = .{.side_set = .{.base = @intFromEnum(led_pin),.count = 1,},},.shift = .{.out_shiftdir = .left,.autopull = true,.pull_threshold = 24,.join_tx = true,},}) catch unreachable;pio.sm_set_enabled(sm, true);// while (true) {// pio.sm_blocking_write(sm, 0x00ff0000); //red// rp2xxx.time.sleep_ms(1000);// pio.sm_blocking_write(sm, 0xff0000 << 8); //green// rp2xxx.time.sleep_ms(1000);// pio.sm_blocking_write(sm, 0x0000ff << 8); //blue// rp2xxx.time.sleep_ms(1000);// }for (0..256) |g| {for (0..256 / 8) |r| {for (0..8) |c| {const mix: u32 = 255 | (r + c) << 8 | (g << 16);pio.sm_blocking_write(sm, mix << 8);}rp2xxx.time.sleep_ms(1);}}for (0..256) |g| {for (0..256 / 8) |r| {for (0..8) |c| {const mix: u32 = (r + c) << 8 | (g << 16);pio.sm_blocking_write(sm, mix << 8);}rp2xxx.time.sleep_ms(1);}}pio.sm_blocking_write(sm, 0x000000 << 8);pio.sm_blocking_write(sm, 0x000000 << 8);pio.sm_blocking_write(sm, 0x000000 << 8);pio.sm_blocking_write(sm, 0x000000 << 8);pio.sm_blocking_write(sm, 0x000000 << 8);pio.sm_blocking_write(sm, 0x000000 << 8);pio.sm_blocking_write(sm, 0x000000 << 8);pio.sm_blocking_write(sm, 0x000000 << 8);}
const pr61 = mb.add_firmware(.{.name = "pr61",.target = mb.ports.rp2xxx.boards.raspberrypi.pico,.optimize = .ReleaseSmall,.root_source_file = b.path("src/pr61.zig"),});mb.install_firmware(pr61, .{});const pr62 = mb.add_firmware(.{.name = "pr62",.target = mb.ports.rp2xxx.boards.raspberrypi.pico,.optimize = .ReleaseSmall,.root_source_file = b.path("src/pr62.zig"),});mb.install_firmware(pr62, .{});