Next-gen and mini Axoloti hardware discussion


#143

Quick rundown of pin availability for I2S on the 427 axo core:

pc2 - i2s2ext_sd - avail
pc3 - i2s2_sd - avail
pb10 - i2s2_ck - avail (multiprocessor stream port)
pb9 - i2s2_ws - avail

pa4 - i2s3_ws - avail
pa15 - i2s3_ws - avail (multiprocessor stream port)
pd6 - i2s3_sd - avail (multiprocessor stream port)
pb3 - i2s3_ck - avail (multiprocessor stream port)
pb4 - i2s3ext_sd - avail (multiprocessor stream port)

pb12 - i2s2_ws - no test point
pb13 - i2s2_ck - no test point
pb14 - i2s2ext_sd - in use (usb)
pb15 - i2s2_sd - in use (usb)
pc6 - i2s2_mck - in use (led)
pi0 - i2s2_ws - no test point
pi1 - i2s2_ck - no test point
pi2 - i2s2ext_sd - no test point
pi3 - i2s2_sd - no test point
pd3 - i2s2_ck - no test point
pc7 - i2s3_mck - no test point
pc10 - i2s3_ck - in use (sdcard)
pc11 - i2s3ext_sd - in use (sdcard)
pc12 - i2s3_sd - in use (sdcard)
pb5 - i2s3_sd - in use (boot0)

Seems like we should be fine. Some of the necessary pins are in the core's weird "multiprocessor stream" port which is sort of a theoretical expansion header near the middle of the board.

In the new design, I made a point of trying not to block any peripherals. Everything potentially useful is routed out to a test point.


#144

Hey, I just saw this post about this new initiative and I think it's awesome. It fills me with hope for Axoloti. I can't wait to get myself one of these new boards. I think an additional aux in is very useful and the option to switch to balanced mode can be very useful for using them live on stage. I don't know if it would also have optional balanced out, but that could also be useful: I always have to use too many DIboxes with Axoloti, though it is more an inconvenience than a real problem.

I wanted to make kind of a request: what excites me the most about an optional hardware balanced input is the possibility of adding a microphone. The thing is, it doesn't sound good enough with the onboard gain. I have to add a preamp and that's too much trouble. I've ended up just using a laptop with an audio interface. I made the famous $5 preamp and it sounds awesome with batteries, but it needs a noiseless bipolar power source, which is too complicated for me to make from the dc source of the Axoloti. I bet you know how to do that kind of thing. I'd gladly pay some extra if the board had a microphone preamp in one input, or I'd buy a hat for it, surely.

Having a mic preamp option in the Axoloti would make it a lot more interesting to do sample-based stuff, it would give it a lot more use for a different kind of people. Also, and I know that is not that hard to DIY, but it still would be very useful for the same reason to have an impedance switch in an input, so that people could connect their guitars better. I thought I would float you those ideas, for whatever use they might have.

I'm also very happy that you are aware of the SD Card issues. That is the only hardware problem that I can think of. I think you're right on the money about using some already made code and adapting it. First, I believe an M7 core is a lot better with floats and doubles, so adapting code might be of less urgency on it. Second, gee, I keep seeing a lot of stuff that is not done or committed because it could be better, but then it's never done. In the case of objects, if an object is added to the base repository, and it doesn't have the best performance, I still would rather have it, it still might be enough to solve an issue, and maybe I or someone else can look at it's code and fix it, then make a pull request.

So I wanted to say, if this new board comes with an initiative to rejuvenate the software, maybe it would benefit from having a development protocol that took more advantage of the community. I mean, I haven't been very integrated here, but I'm pretty sure that this is one of the most geeky communities I've ever seen. There's lots of very smart people. Yet the development environment seems designed so that every one works on his/her own solutions while leaving the base program alone. I've solved myself some very simple but bothersome issues that I would rather have done as a pull request; I've uploaded some of my workarounds to the community library, but it's not the same because they are not extra features, they are weird solutions. So, in case there's new software, I'd like to advise, from a very humble place, this things:

  1. It'd be nice if there was a public road map with some detail. That way people could actually know what work needs to be done and offer themselves to do some of it, all the while knowing that their work won't conflict with something else. Making a public road map also let's programmers listen to the priorities of people, which doesn't mean everything is suddenly a direct democracy, but it can help realize that, for example, no one really cares about something that is very hard to do.

  2. It'd be nice if there was some kind of board with tasks to be done that no one is doing. Like Trello or something like that, I've seen that helps a lot with small boring tasks, because someone probably needs to do them; that little bug that everyone keeps leaving for later is bothering some one too much and when he/she sees that no one is working on it right now, he/she will take care of it.

  3. It'd be nice if we had a shorter release cycle. I understand that right now the software might need a very large revamp, because it's been still for a very long time. My point is that right now though, there are some issues that have been solved but then were made incompatible (like your zoom for the editor), there are some issues that have been solved but are waiting for a release to see the light (like support for usb-hubs), and there are are lots of small issues that are easy to solve, but it's pointless to do a PR, because a new release will change everything and there won't be minor releases in-between. I think a shorter release cycle both means that solutions that will be obsolete in a year can still be useful, and that we try to separate big tasks into smaller ones. That way, there's less stepping on toes, and if something doesn't work, it is revealed before wasting too much time, and everyone feels more inclined to contribute.

  4. I realize that luck, chance and life have a lot to do with this, but still, it'd be nice if when the maintainer of the software feels like she/he needs a rest, the software development of the project is structured enough and immersed enough in the community, that the path without her/him is clear, and maybe another maintainer has been left in his place.

Cause, gee, for every little problem i could have had with the hardware, I've had many more with the software. I think this community keeps being alive because of the community library and I wonder where it'd be if some of the energy put into it could have been put onto the patcher and the runtime.


#145

Great post, Oscar! On the project management side, my current plan is to make use of the Github Wiki system. I put up a wiki here https://github.com/zrna-research/akso-design/wiki. I want to make it so anyone can contribute and edit ideas there easily. Get in touch with me with your Github username, and I'll add you as a collaborator.

I have a bunch of ideas for improving the software workflow. I'll start adding them to the wiki. I agree that it's probably what's holding us back more than hardware. I think that with a smoother workflow we can attract many more users and developers to contribute. My approach initially is going to be just to get the current system working on the new hardware as quickly as possible and then to start evaluating some of the needed fixes and improvements and architecture changes. The primary issue I see right now is tight coupling between the patcher and the firmware. We want people working on the user interface to not have to worry about low level details. We also want object authors to be confident that their objects are not going to break as a result of firmware or patcher changes. We want patches to just work without worrying about firmware and object library versions. A newbie user should never even be aware of Git or firmware or versioning or having to clone a repo for the object library. It should be plug in and go. I have some pretty clear ideas about resolving this, but they require a bit of restructuring to lay the foundation. VCV Rack has been pretty successful with this but has had problems with API changes breaking community modules. It is mostly plug and play though. VCV does the idea of a public module registry pretty well. We need to make sure that all known Axoloti objects are available, tagged, searchable and downloadable. I've got a couple ideas in the works for this.

On microphone support: the built in codec has limited capability here. I'm going to try to maximize what we can do with it but to get proper mic performance we may need to do a simple hat with a known to be solid preamp design like what you mention. We're definitely not going to be able to do proper phantom power etc on the base board out of the box. I think that we might be able to make electret microphones (which is what the codec function is designed for mainly) work smoothly. It would be really dope to have better basic mic support so you could sample directly. What kind of mics do you like to use? I'd like to see us be able to support simple dynamic mics easily like an SM57/58 or whatever. One idea here is to take advantage of SPDIF and digital IO etc to make it as easy as possible for people to plug in existing preamps/DACs. My guess is that almost every Axoloti user has a USB audio interface with preamps lying around. I don't necessarily want to get into reengineering all of that unless it's absolutely necessary. It's going to be tough to design something that meets everyone's needs.

You should jump in the Discord server so we can chat more! https://discord.gg/xeztjzh


#146

It does seem to problematic that the firmware is so tight with the patcher. I used to reverse engineer the patcher from the generated C code, and then, when I found the Java code of the patcher, I found that all the problems I was trying to solve with C were really problems of the Java portion. I don't know how it should be done, though, I only know of some bugs that are easy to fix. It would be nice to guarantee authors that their objects will not break, it makes sense, and it should be easy; there's not much of an official API for object authors and what is needed is very simple. I like the VCV stuff, it's almost as easy to developers and it is resistant to time. Some months ago I had to ask around and wait some days to get access, because there is only one people with the keys; the VCV community repository is maintained by the community, so it's stronger. I do believe that to hide Git, its only needed to hide the word git and the url fields, but the VCV idea is very cool.

Ahm, live I use dynamic mics. I don't think most people need phantom power; it's mainly a platform for live use, and the mics used there are almost always dynamic. Yeah, I guessed that a specific preamp chip would be needed. There are a lot of stomp pedals for voice, but they are not very fun, and having a laptop with an interface when you are singing is kind of anticlimactic. Like, imagine what Reggie Watts would do with an Axoloti.

So, if the preamp circuit has to be in a separate hat, I believe what would sell it is to not have to use another power source. That's the main problem with using existing preamps. The nice thing about this boards is that all you need fits in a box. I have a usb interface, but, if I'm going to use, I might as well connect a laptop instead of the axoloti. There are also stand alone bulb preamps that can go before input, but its kind of not practical. Ideally one puts a stomp voice pedal in the mic stand, and it is always within reach to play with it. It is one less thing limiting your performance, less cables. And even if you are using it as a part of a synth rig, what you win compared to a laptop is simplicity. Most consumers that use microphones are used to the fact that the stuff they used already has mic preamps, they don't even think about them; I bet people would pay for a hat that you just put on top of the axo and then it brings it on pair with other stuff for live use of mics.

It is kind of the same with the high impedance input. I made a guitar delay for a friend with the Axoloti, it was so much better than any other commercially available delay, and it was more customization than other programmable stompboxes, and, even with the interface hardware, a little cheaper. But it needed impedance conversion. He solved it easily by putting turned off a boost stomp box, so it worked like a voltage follower. But it felt like a lot more freedom when converted the input to high impedance, he even sold the boost stompbox, and some others, because with this kind stuff sometimes it feels better to have less. I realize it is not true for the Eurorack folks and the electronics scene, but I was attracted to the Axoloti when I saw a video of Johannes with his guitar. I like to do geeky stuff with sound, but that's more of my scene. The idea of getting rid of my computer, of substituting my gear with something that could do exactly what I wanted was awesome. And I think that the hardware is so close to attract more people more fully in that camp, but those people don't know about things like impedance; they need to be told: "connect your instrument/microphone to this special input" and they will pay for it happily.


#147

Couple more interesting points on mics. The datasheet shows this kind of approach:

And there is actually some awareness of this feature in the firmware and object library. See: https://github.com/axoloti/axoloti-factory/blob/541060dba0a77c570137a204be657a7759a6d079/objects/audio/inconfig%20mic.axo
and https://github.com/axoloti/axoloti/blob/7975cc876a9b7e5bf64d88533607948da97a7d4d/src/main/java/generatedobjects/Io.java#L538

But what's weird is that the MICBIAS pin isn't available at a test point. There are pads for the two 2k resistors in the layout but it's left unpopulated. I'm not sure what the state of this feature is. Anyway we should be able to get at least 55db gain as shown in the diagram. Exactly what mics would work is an open question; it might be a limited selection.

Has anyone had success using a mic connected directly like this? Does the "inconfig mic" object actually work? Has anyone actually used MICBIAS?

By the way, I brought MICBIAS out to a test point in the new design so we'll be able to experiment more easily.


#148

Maybe Micbias is just a micbias you can add for an electrect microphone? Like, if you know that it is a phone-type mic input, then you know you need... I believe is around 3V. So you add 3V? And that's why there's not a specific MICBIAS pin? I'm sorry, I'm very sleepy. I'll check the git and the discord tomorrow. Thank you for everything.


#149

I'm sorry again, I couldn't sleep having said such mindless stuff about MICBIAS. I remembered that Johannes added the code at request of someone, but then it turned out that one needed to solder some stuff to use it: https://sebiik.github.io/community.axoloti.com.backup/t/understanding-micbias-axo-fix/1332

Ahm, and here it is: https://sebiik.github.io/community.axoloti.com.backup/t/connecting-a-microphone/247 I was sure that he had said something about microphones too. He basically says to put some gain and some boost. Hm. Then he says that it is not studio quality input. I've done that, probably because I read it there. The signal to noise ratio was not the best, and I checked that it was not the cable or the microphone or the board. Basically, the dynamic range of the microphone was notably reduced because the noise floor was a bit higher than what it should be. That also meant I couldn't do much compression or get the output volume too high, so I couldn't whisper a lot in the mic. It wasn't awful, but it had noticeable, if bearable, issues.

I'm not sure if there is any significant difference with the connections in the diagram. The resistors shouldn't matter because it doesn't take bias. But I don't know what is CM nor what's with the capacitors. I would be surprised, though, if the codec can do proper mic preamp stuff, I bet most codecs just have enough to be able to use the mics that come with some earphones. Yet, it would be awesome if it could support dynamic mics. I don't think anyone expects much of this kind of stuff and preamp quality is so subjective; I bet most people would be happy with a good signal to noise ratio.

Thank you, really, Urklang.


#150

Interesting! Clearly this feature is kind of half-baked right now. What I'm most interested here in is getting basic dynamic mic support working in a simple way even if it's suboptimal, the SM57/58 case. Trying to use MICBIAS cleverly for other mic types might be possible as well. Need to do some more analysis and testing before I can say more.

Longer term is going to be having proper XLR io and preamps on an expansion if there's enough demand for it. My new manufacturer can do 10-14 day turnaround on prototypes; we can start working on expansions right away. @weasel79 and I have some ideas brewing about a CV IO shield as well as some eurorack stuff. Part of the philosophy of the new design was the realization that it's going to be impossible to design IO perfectly to meet every requirement. What I want to do is make the main board as extensible as possible with test points and also available without populated TRS connectors. I see us having sort of a "library" of expansion boards that people can mix and match as needed. There are many off the shelf IO boards that we should be as compatible as possible with as well.


#151

quick interjection, i think the way to go about a proper mic input is with a hat/shield.

we are discussing a variety of i/o shield options, where one of the ideas is a "studio shield" supplying 1/4" balanced +4dBu audio, midi DIN jacks and a microphone preamp. power supply should not be an issue as a seasoned circuit designer (like for example @urklang) can easily whip up level conversion to +/- 12v for any amping needed, off the onboard power supplies.

i wouldn't mind people looking into optimizing ways to connect lo-fi ish smal microphones directly to the on board line in, but for serious microphone use, there's no way around a somewhat proper pre-amp.

will get back on your other great points later, @Oscar. welcome back home btw.


#152

I couldn't tell from your diagram if you were using micro-B connectors or USB-C connectors for the USB ports. I sure hope you'll go with C. Would make much more sense for the host port to be type-C rather than any sort of B connector. Finding B to B cables would be a PIA. Though, not sure I've ever seen a USB-C to USB-B cable either. I guess, you're probably anticipating using some sort of OTG adapter-- USB-B/C to USB-A, then one must use a USB-A to B cable for their device/MIDI controller.

Either way, looks like you're putting users that play their Axoloti by USB-MIDI controller in dongle land. Is there definitely not space for a full USB-A connector? A horizontal one is about the same height as a 3.5mm audio jack.

Anyway, if we're going to be in dongle-land anyway, I sure would prefer type-c.

I use my Axoloti as a sound module for my Linnstrument, so that host port is very important to me.


#153

I agree the final board should probably have an A connector, or there needs to be a dirt cheap expansion shield acailable ie. with USB-A and 1/4” jacks


#154

The prototype uses micro-B connectors. So the host port the situation is similar to a Raspberry Pi Zero:

My feeling is that many people will be using hubs anyway when that feature is shipped, so the connector on the board itself doesn't matter as much. Right now we don't even have hub support released. But even without it using a simple OTG adapter feels like a minor inconvenience weighed against what we gain: more audio IO and a form factor that can easily fit Eurorack (<= 100mm).

I'm open to moving to C if there's enough demand for it, but the hardware itself only supports USB 2.0 and OTG 2.0. It might be possible to use the C connector, but we're not going to be able to take full advantage of it. I need to double check if this is even possible or makes sense at all.

A full horizontal A connector is definitely not going fit without some other compromises. I'd like to avoid using a vertical A connector so we can maintain the ability to stack expansion boards with standard headers.

Additionally, it's possible to use USB via test points so attaching a permanent connector of your choice will be possible. We're planning to do a expansion that has more extensive IO and would include a full A port as well as DIN etc.

EDIT: of course this is all just my opinion. If you guys think we absolutely need a full A connector on the base board, I'll try to figure out a way to make it happen. One idea would be to make the SDcard port face away from top edge, like to the side as in the PI, but I think we'd like all the IO facing one way if possible.

The other thing to keep in mind is that it's possible to have slightly different versions of the board with different IO configurations. We could just do a full variant that has the exact same IO structure as the original core. It doesn't have to be exactly one size fits all. It doesn't bother me if we have a couple of versions of it going in parallel.

EDIT2: leaning toward USB-C if I can convince myself that everything checks out in the context of the rest of the design. BTW: https://www.amazon.com/Cable-Matters-Printer-USB-C-Black/dp/B00VKSF39O


#155

Yeah let's figure this out once you have the prototype running. i agree on both sides, small form factor is important, but also USB-C or micro adapters and hubs are pretty hard to come by. but at least for usb-c that will change for the better over time. my latest UAD interfaces are USB-C too fwiw... I do think USB-A plugs are much sturdier and make more sense in a studio/live surrounding. but could be realized over expansion shields if really needed.


#156

I would suggest to maintain the same USB plugs as current on the Axoloti except for the Host port to be broken out IO for a shield. That way anyone already with an Axoloti won't have to have different cables for different boards and vice versa. Leave the different connectors etc, for different shields.


#157

I think on a mini-Axoloti, it is a reasonable compromise to have a smaller USB port. I don't think it needs a full-size USB-A. Though, that host port is super important to my personal use-case. I'd definitely be using a dongle, buying a special cable, or adding a USB-A expansion to a mini-Axoloti build.

For my use, I wouldn't need a hub. I'd probably go for the smallest option to connect my instrument-- so an adapter or special cable.

Ah, well that makes it difficult to imagine what is the most standards compliant. To me, even though micro-B OTG adapters exist, and even though Raspberry Pi has it, it still feels wrong to have a B connector as a host port. B connectors are supposed to be devices. C can be either, by design, so that just sits nicer with me. Seems a little disingenuous to do a USB-C port that is only USB 2.0 though. Maybe, though, that is part of the USB-C standard? I see it has legacy 2.0 pins in the pinout.

My biggest consideration is that I already have a couple USB-C to USB-A OTG adapters lying around, just for my phone. Not to mention the fact that Macbooks are making those quite common. I have a big cable collection, but I've never had micro-B OTG cable or a micro-B to B cable, they seem quite rare.

Sweet! For both USB connectors?

That cable is perfect.


#158

The other thing that could be considered regarding the HOST vertical USB, would it be possible to have room on the PCB for a vertical USB A Port soldered in by choice, just having access to the IO ports to solder in something like the following..

This way it can be used by choice, and the IO's are still spaced by standard for a shield if wanted.


#159

Dual USB-C is almost a drop in replacement in the current prototype design. It's the least painful to implement. Getting a full A into the current design is possible but would require a bunch of rework, slowing us down. It would change the overall board footprint a bit.

From what I can tell, it's no problem to use 2.0 through a USB-C connector; it's designed to make this possible. We basically just ignore some of the pins. External USB-C devices and cables handle this case. So basically we're just getting the benefit of the more robust connectors, no real performance benefit over 2.0 on micro.

Here's what I'm thinking:
1. Make the ordered prototype work. Let people use the dual micro version if they want it right away.
2. Either manually test with USB-C on that board or order a second prototype in parallel with the C change. Make the dual C version available.
3. Push the optional A port to an expansion shield that can be used with either version.

I think that gives us a good balance of minimizing delays, avoiding rework, getting the better connector and not abandoning the kind of mini/micro design philosophy.

By the way, I'm doing this work for you guys! It's not about me. If there's any aspect of the design you're not happy with, I need to know right away! The sooner I know, the sooner I can resolve the issue. Hardware is especially tricky because of the slow turnaround. I'm going to give you my straight opinions about things more from a "here's what I think is technically possible and reasonable and efficient" perspective; the engineer's perspective. But sometimes that is inconsistent with this higher level "feel" stuff which especially for an instrument is critical. I need your input there to make sure we get it right.


#160

I'm in favor of a full USB-A connector. Please, keep in mind that the most typical use for usb host port is to connect midi controllers, and most of them, at least those that I have (nanokontrol, launchcontrol XL, monome grid, and even the OP-1), comes with a usb-a cable.
Everybody hates dongles and adapters. Ask Apple. :grinning:

*Sorry for my poor english.


#161

I would say "think future" and trust your engineer instinct.. MINI Axoloti should be MINI, future expansions could include Din midi, backlit buttons, oled screen, USB-A, big balanced jacks, etc.. Midi controllers now have either mini / micro or printer usb connectors but I expect that in the very near future (1 / 2 yrs?) they will all be usb-C (and midi over Bt) and even it might be very difficult to get a usb-A hub compared to getting an usb-c hub.. Just go to Saturn / media market / conrad or whatever electronics shop you have near by and check how the current situation is in order to get a better overview. Although, the sooner you have a board ready to start working on the firmware, the better.. Greetings.


#162

Love it! Seems like a fantastic plan. Thank you for all your hard work urklang!