ChanServ changed the topic of #rust-embedded to: Welcome to the Rust Embedded IRC channel! Bridged to #rust-embedded:matrix.org and logged at https://libera.irclog.whitequark.org/rust-embedded, code of conduct at https://www.rust-lang.org/conduct.html
RockBoynton[m] has quit [Quit: Idle timeout reached: 172800s]
nadja has quit [Ping timeout: 244 seconds]
nadja has joined #rust-embedded
ian_rees[m] has joined #rust-embedded
<ian_rees[m]> I'm working on updating a crate that uses timer::Periodic from embedded-hal 0.2 - that seems to not be present in embedded-hal 1.0, is there a recommended replacement?
<ian_rees[m]> * I'm working on updating a crate that uses timer::Periodic from embedded-hal 0.2, to use embedded-hal 1.0 . The timer module seems to not be present in embedded-hal 1.0, is there a recommended replacement?
<M9names[m]> there is no replacement
<ian_rees[m]> aha, [DelayNs](https://docs.rs/embedded-hal/latest/embedded_hal/delay/trait.DelayNs.html) looks like it'll work for this purpose
djdisodo[m] has quit [Quit: Idle timeout reached: 172800s]
K900 has quit [Quit: Idle timeout reached: 172800s]
glaeqen[m] has quit [Quit: Idle timeout reached: 172800s]
PedroFerreira[m] has quit [Quit: Idle timeout reached: 172800s]
jannic[m] has quit [Quit: Idle timeout reached: 172800s]
calisti[m] has quit [Quit: Idle timeout reached: 172800s]
adamhott[m] has quit [Quit: Idle timeout reached: 172800s]
<thejpster[m]> > Future processor designers can view the unedited commit history for Hazard3 and learn from Luke’s development process, including his mistakes and how he corrected them. Students studying processor design can develop and test software workloads on RP2350, then look at the Hazard3 source, modify the processor to include their own custom instructions, then test their new version on an FPGA.
<thejpster[m]> That’s a very good point. You can now buy silicon, run some code on it, and then look at the actual Verilog that just executed your instructions. You can’t change the Verilog, sure, but that’s a hell of a lot cheaper and quicker to get going than an FPGA set-up if you’re just getting started.
ryan-summers[m] has quit [Quit: Idle timeout reached: 172800s]
dagsbirta[m] has quit [Quit: Idle timeout reached: 172800s]
whitequark[cis] has joined #rust-embedded
<whitequark[cis]> i think one of the first chips that enabled this was Propeller
<whitequark[cis]> there's been a few early OR32 implementations, but i don't think you could (easily or at all) buy silicon with any of them and run stuff on it
<whitequark[cis]> RP2350 is certainly one of the most accessible ones, probably more so than SiFive's?
sourcebox[m] has quit [Quit: Idle timeout reached: 172800s]
<thejpster[m]> Is there an FPGA framework with Hazard3 as a CPU option? I don't know what the cool kids are playing with - I've only heard of LiteX.
<thejpster[m]> I wonder how it compares to VexRiscv or Picovr32
<whitequark[cis]> not that i know personally
<whitequark[cis]> i'm (obviously) using Amaranth, though i haven't personally integrated Hazard3 into it
<thejpster[m]> ah, of course. Heard of it but haven't used it.
<thejpster[m]> /me looks at pile of FPGA dev boards
towynlin[m] has quit [Quit: Idle timeout reached: 172800s]
<whitequark[cis]> we have a nice manual now! not quite on the level of the Rust book but i put a lot of effort into it
<whitequark[cis]> https://amaranth-lang.org/docs/amaranth/latest/guide.html this is the language guide
<whitequark[cis]> it works well when combined with the playground https://amaranth-lang.org/play/
<whitequark[cis]> and then when you want to use it together with a physical board, the I/O primitives are documented here https://amaranth-lang.org/docs/amaranth/latest/stdlib/io.html
<whitequark[cis]> for everything else just ask on #amaranth-lang:matrix.org
<whitequark[cis]> in general (this is not restricted to Amaranth, applies to learning any HDL) i would recommend starting with the simulator, which the Amaranth playground makes single-click easy
<whitequark[cis]> you can even do printf debugging if you want! m.d.sync += Print(x, y, Format("{:08b}", z)) is a valid statement
<whitequark[cis]> the parts of the system that are the least documented right now are the boundary between your code and the external world, so if you're confused about anything at all there just ask. almost everything else should be covered by at least one type of docs, though we strive for having guide-level and reference-level docs for every concept
andar1an[m] has joined #rust-embedded
<andar1an[m]> Anyone mess with Nordic NRF chips? Do you enjoy?
<JamesMunns[m]> They're probably some of the most widely used chips in embedded rust
<JamesMunns[m]> Also some of the nicest to work in (relatively few complex gotchas), IMO.
<andar1an[m]> I like the indoor positioning and more recent Bluetooth
<andar1an[m]> Is there anything similar to meshtastic written in Rust?
<JamesMunns[m]> embassy-nrf has relatively complete support for the whole nrf52 family, I know some folks are actively using the nrf91 family, I think the 53 and 54 series have some support, but I'm less familiar
<JamesMunns[m]> Not sure what meshtastic is, but im pretty sure the nrf-softdevice crate supports ble mesh
<andar1an[m]> Firmware for loRa device p2p networks
<andar1an[m]> I guess software too
<andar1an[m]> If you have seen the H1 or R1 LoRa devices they run meshtastic
<andar1an[m]> https://muzi.works/
<JamesMunns[m]> There's the lora-rs stuff for Lora, unsure how much coverage there is for p2p Lora vs lorawan
<andar1an[m]> I only learned about meshtastic today, so I am not sure what their guts are
<andar1an[m]> But there are esp32 and nordic Rok boards
mameluc[m] has joined #rust-embedded
<mameluc[m]> lora p2p works but no mesh stuff afaik
<JamesMunns[m]> Mameluc knows much more than I do about Lora stuff :)
<andar1an[m]> ❤️ LoRa, especially in a more uncertain world.
<andar1an[m]> Wish this existed camping when I was younger haha
<mameluc[m]> Rust LoRa/LoRaWAN 🔌
<JamesMunns[m]> You're *probably* less likely to find "whole board support" in a single project, but very likely to find support for the MCU and radio for a given board, which is a huge part of the job done.
<andar1an[m]> I don't have time or money to tinker yet. Just got excited learning
<andar1an[m]> General first thought is "can I use a Rust crate" lol
Henk[m] has quit [Quit: Idle timeout reached: 172800s]
bws428 has joined #rust-embedded
takkaryx[m] has joined #rust-embedded
<takkaryx[m]> question. I'm noticing I keep trying to fall back to patterns I'm used to in C when attempting to do Rust things, for example, Initialize a peripheral in it's module, but then have a global struct that is then accessed to get information from that peripheral. something like an RTC.
<takkaryx[m]> ATM I noticed I'm trying to generate a static variable to hold the RTC peripheral that I can then pull time out of, but that seems,,, un-rust like? but at the same time, It seems silly that I would instead need to pass the reference to the peripheral or wrapper trait to every module/function that needs the RTC, since it's a global thing.
<takkaryx[m]> Is there somewhere I could look for examples, or does anyone have some thoughts on better ways to do this?
ryan-summers[m] has joined #rust-embedded
<ryan-summers[m]> takkaryx[m]: > <@takkaryx:matrix.org> question. I'm noticing I keep trying to fall back to patterns I'm used to in C when attempting to do Rust things, for example, Initialize a peripheral in it's module, but then have a global struct that is then accessed to get information from that peripheral. something like an RTC.... (full message at
bws428 has quit [Ping timeout: 265 seconds]
<takkaryx[m]> so, I'm using embassy with async tasks, but the RTC is just a clock that's already running it's own counter, having an async task own a counter ticking seems silly..
<ryan-summers[m]> For an example of what I mean, this is the general pattern: https://docs.rs/embedded-nal/latest/embedded_nal/struct.SharableStack.html
<takkaryx[m]> awesome, I'll take a look, thanks for your input!
EthanGardner[m] has joined #rust-embedded
<EthanGardner[m]> Are there any simple bldc 6 step trapezoidal commutation libraries
<ryan-summers[m]> Yeah the general idea I like is to keep it as a true singleton in some global *Cell and create things that reference said singleton via synchronization primitives (i.e. mutexes)
<takkaryx[m]> yea, I was thinking to do something like a static_cell, or a singleton, so I could control access, but static_cell seems incorrect?
GeorgesP[m] has quit [Quit: Idle timeout reached: 172800s]
<JamesMunns[m]> <EthanGardner[m]> "Are there any simple bldc 6 step..." <- https://docs.rs/ramp-maker/latest/ramp_maker/ does the ramp profile calculation, but doesn't do commutation
<JamesMunns[m]> Ah that may not help for non-step based drivers? I guess you need more "speed at regular intervals" than "delta t between discrete steps"
<JamesMunns[m]> (I've used it for stepper motors, but not for BLDC motors)
<EthanGardner[m]> Thanks i'll take a look, was hoping there would be an off the shelf BLDC lib. The main thing i need is to control the commutation speed (ESC) using PWM or even just manipulating the GPIO's for now
therealprof[m] has quit [Quit: Idle timeout reached: 172800s]
NeMo[m] has joined #rust-embedded
<NeMo[m]> Hi,
<NeMo[m]> is there a way to get a crate which uses `rp2040-hal` & `rp2040-pac` working in an embassy-rp environment?
<NeMo[m]> I’m wanting to use the `hub75_pio` crate, and use embassy for tasks / WiFi / BLE. Since that crate uses DMA & PIO to drive the display it’s coupled with its hal & pac more so than regular embedded_graphics drivers
<M9names[m]> you'll need to port the driver
PhilMarkgraf[m] has quit [Quit: Idle timeout reached: 172800s]
diondokter[m] has quit [Quit: Idle timeout reached: 172800s]