Jump to content

Beefy

High Rollers
  • Posts

    2,281
  • Joined

  • Days Won

    2

Posts posted by Beefy

  1. I did sous vide picanha for the first time today. A simple rub of spices, smoked salt and olive oil, then cooked in the bath at 133F for 6 hours. The 'grill' part comes from very briefly finishing on the pellet grill, just one minutes a side, with the flame box open and the temp at the absolute highest I could get it, about 700F! Served with fresh chimichurri, I was in meat heaven.

    image.thumb.jpeg.270256418b3f0603febfde52cb7a1c22.jpegimage.thumb.jpeg.df16912119e21b4357f918e1c2263006.jpeg

    • Like 13
    • Thanks 1
  2. 11 hours ago, mwl168 said:

    Amanero USB receiver, TPA Buffalo DAC, Mercury I/V stage. Plus a tube output buffer?  

    Yep! Nothing says bespoke high end product like a bunch of DIY modules thrown in a box with moar toobs. Was discussing this sort of silliness on another forum recently; also see implementations of Soekris DIY modules from €6900 up to $34000.

    I mean, I love my own Soekris and TPA builds, but I sure as shit wouldn't pay several thousand dollars for them......

    • Like 1
    • Haha 2
  3. 1 hour ago, Craig Sawyers said:

    Bloody hell. Stay safe, you hear?

    Thanks, will do! Just worried about if the power goes off. If we're stuck inside and the little one can't watch Paw Patrol, there will be blood.

    • Haha 5
  4. 4 hours ago, Craig Sawyers said:

    Yup - this is the opportunity to apply the rest of the world sanctions on Nestle products.

    Looking at the brand diagram, the only one we regularly buy is KitKat. No longer.

    Nestle has been on the shit list for decades, due to pushing formula instead of breastfeeding in developing countries. Countless babies sick or dead from sub-optimal nutrition and formula prepared in unsanitary conditions. In this context, I'm not sure anything will push the needle on their corporate practices :(

  5. 10 hours ago, NotoriousBIG_PJ said:

    I like the music to have some weight, smooth, soundstage depth and balanced sound.

    I demoed the mola mola dac a couple months back. It was nice, but my CD player was still less fatiguing to listen to.

    Looking back though, I've demoed a ton of dac's in the $5k-15k range over the past 8 years and they have all disappointed in a similar way.  But I've always been hooking them up to my desktop through USB, so I'm thinking I need to demo the mola mola again with using Roon or a decent transport.

    Biggie.

    Well, you called my bluff, that is *well* above my paygrade/pricerange!

  6. 15 hours ago, NotoriousBIG_PJ said:

    I logged onto head-case for the first time since 2018. Seems pretty dead around here. My CD player was deemed unrepairable so I'm on the source hunt again. I put in an order for a DNA Stellaris 9 months ago. Haven't changed anything in my system in over 5 years.

    Biggie.

    Be the change you want to see. What are you looking for in a source?

  7. 4 hours ago, audiostar said:

    That's nice. Which pot do you use and is it log or linear tapper, does that matter? Looks like a single channel pot will do.

    I assume you completely power off the amp in between usage, so no standby trafos involved? 

    Looking through the archives the attenuatorsmtv42flipground7 seems to be the latest version of the boards.

    I use a Bourns PDB181-E420K-103B - a bog standard, dirt cheap, linear taper 10K. Completely power off, no standby involved. You can use an audio taper pot easily, you would just have to be more creative with the volume/pos mapping.

    Can't help you out with the latest version, I'm just a trained monkey building boards that Kerry organised! Just don't get the different versions mixed up. I built and tweaked code for the original v1 with the PCF8574A/ULN2803A combo. The v2 is a completely different chip (MAX4820) and software approach.

    • Like 2
  8. 36 minutes ago, audiostar said:

    Hey Beefy, nice you got it working, congratulations!

    I was playing with the idea of using those boards myself. Just curious is the volume level remembered after power off and then subsequential power on? 

    Well I'm using a pot for control, and it reads the pot value on startup. Wherever the pot is, it jumps to that volume pretty much immediately, which is the expected behavior.

    Most implementations with an encoder do save and restore the volume. But I've really gone off encoders for this sort of application; don't like the physical feel, don't like not knowing the volume at a glance.

    • Like 1
  9. 2 minutes ago, purk said:

    Should Zelensky waives a white flag to save lives and his country?

    Would you? Would I? Very difficult question to answer.

    Either way, I would agree that Ukrainians should be thinking about the next stage. Learning to make IEDs. Guerilla warfare. Counterattacks on Russian infrastructure. Make it completely untenable to hold the country.

    • Like 1
    • Thanks 1
  10. Just wanted to offer a quick update on this...... I couldn't get the "all in one" code from @Kerry to work perfectly with my setup; it always opened up the relays to full volume on power-up, and I couldn't work out why.

    User fastfwd from SBAF took pity on me and wanted a distraction project, and produced some code for me that did the trick. He took an interesting approach to 'dejitter' that works beautifully, and we also added averaging of multiple pots readings and easy custom mapping of volume knob to attenuation to customise things to my setup. Here's the final code:

    Spoiler
    //
    // Volume Controller
    //
    // Arduino Uno Code for Kevin Gilmore's 8-bit Attenuator V1.0
    // https://www.head-case.org/forums/topic/9407-digital-attenuator/
    //
    // Board group buy organised by Kerry
    // https://www.head-case.org/forums/profile/655-kerry/
    //
    // Code produced by fastfwd
    // https://www.superbestaudiofriends.org/index.php?members/fastfwd.8009/
    //
    // Code tested and customised by Beefy
    // https://www.superbestaudiofriends.org/index.php?members/beefy.10794/
    // https://www.head-case.org/forums/profile/684-beefy/
    //
    // WARNING!
    // Don't fire this thing up for the first time with valuable equipment connected!
    // Test the outputs with a multimeter or scope first to make sure that the pot
    // direction is correct, that the expected attenuation is achieved, and that
    // the relays don't pass full volume on power-down, power-up, or during switching.
    
    #include <Wire.h>
    
    // Configuration.
    
    #define REVERSE_CW_CCW  0   // Leave at 0 if pot rotation direction is correct,
                                // or set to 1 to reverse clockwise/counterclockwise
                                // volume effect.
    
    #define DEJITTER    2       // Ignore pot position changes smaller than this.
                                // Make the value larger if the volume spontaneously
                                // changes without touching the pot, or if the pot
                                // seems overly sensitive and twitchy.
    
    //   Code is prepared for two attenuator boards in balanced operation. Per board:
    //   8 Omron G6SK (set/reset dual coil) latching relays
    //   2 TI ULN2803A relay drivers (one for 8x2 SET, one for 8x2 RESET)
    //   2 TI PCF8574A I2C I/O expanders feeding the relay drivers
    
    // Rotary-pot analog input.  Reading the pot wiper across 0-5 V produces a value 0-1023.
    #define POT_PIN     A1
    #define POS_MIN     0                   // Full counterclockwise (max attenuation)
    #define POS_MAX     1023                // Full clockwise (min attenuation)
    #define POS_RANGE   (POS_MAX - POS_MIN)
    #define NUM_READS   10                  // Number of reads for averaging, each read takes about 0.1 ms
                                            // Cannot be higher than 32, otherwise you may overflow 'total'
    
    // 8574A I2C device addresses:
    //                             A2 A1 A0
    #define LEFT_SET    0x38    //  0  0  0
    #define RIGHT_SET   0x39    //  0  0  1
    #define LEFT_RESET  0x3E    //  1  1  0
    #define RIGHT_RESET 0x3F    //  1  1  1
    
    // Relay values
    #define RELAY_MIN       0       // Min attenuation (all relays off)
    #define RELAY_MAX       255     // Max attenuation (all relays on)
    #define LATCH_TIME_MS   4       // Minimum coil pulse width to latch the relays
    #define OP_TIME_MS      10      // Minimum time between relay operations
    #define RELAY_RANGE     (RELAY_MAX - RELAY_MIN)
    
    int gCurrentPosition;   // Pot position that corresponds to the current state of
                            // the relays.  Whenever we read the pot position, we
                            // compare to this to see whether it's moved far enough
                            // to update the relays (i.e., whether it's moved at
                            // least DEJITTER counts).
    
    void setup()
    {
        Wire.begin();   // Initialize as an I2C master.
    
        gCurrentPosition = POS_MAX + DEJITTER;  // On startup, ensure that we'll
                                                // update the relays regardless of
                                                // the pot's position.
    }
    
    void loop()
    {
    
        int total = 0;  // Cumulatively add data for averaging
    
        int pos;        // Pot position, 0-1023 (0 = full CCW, 1023 = full CW)
        int distance;   // Distance between pot position and gCurrentPosition
    
        int volume;     // Desired volume, 0-255 (0 = no attenuation,
                        // 255 = full -127.5 dB attenuation)
    
        // Read the position of the pot.  The readings aren't completely accurate,
        // so repeated readings may vary by one count (or maybe even a small number
        // of counts) even if the pot isn't deliberately moved.  To prevent the
        // relays from constantly hunting between adjacent values as they follow
        // these jittery readings, we filter out the jitter by only updating the
        // relays if the pot has moved more than DEJITTER counts away from the
        // position that corresponds to the current state of the relays.
        //
        // But this filtering method presents a problem:  If gCurrentPosition is
        // within DEJITTER counts of the min or max edge of the position range, the
        // pot won't have enough room to move DEJITTER counts toward the edge, and
        // therefore the relays will never be able to reach values at or near the
        // edges.  So when gCurrentPosition is within DEJITTER counts of the min or
        // max edge, we update the relays whenever the newly read position is
        // anywhere between gCurrentPosition and the edge.
        //
        // To ensure the jitter value can be kept low, multiple pot readings are averaged.
    
        for (int i=0; i < NUM_READS; i++){
          total += analogRead(POT_PIN);
        }
    
        pos = total / NUM_READS;
        distance = pos - gCurrentPosition;
        if (distance < 0) distance = -distance;
       
        if ((distance >= DEJITTER) ||
            ((POS_MAX - gCurrentPosition < DEJITTER) && (pos > gCurrentPosition)) ||
            ((gCurrentPosition - POS_MIN < DEJITTER) && (pos < gCurrentPosition)))
        {
            // Update gCurrentPosition.
            gCurrentPosition = pos;
    
            // Pot positions 0 to 1023 should logically map to relay positions 255 to 0.
            // This corresponds to the pot being 'off' when fully CCW, presenting no voltage to
            // the analog read pin, and maximum attenuation being obtained at high relay values.
            // If anything is wired incorrectly or the relay logic is backwards, the simplest
            // fix is to reverse the pot readings.
    
            if (REVERSE_CW_CCW) pos = (POS_MAX - pos) + POS_MIN;
    
            // Convert from POS to RELAY manually using mapped segements.
            // Comment out if using defined POS/RELAY values.
    
            volume = (pos >= 384) ? map(pos, 384, 1023,  63,   0) :   // Get Exstata from Buffalo to ~30 VMRS at 12:00 on the volume pot
                     (pos >= 127) ? map(pos, 128,  383, 127,  64) :   // Get from -63.5 dB to -32 dB in 1/4 of pot turn
                                    map(pos,   0,  127, 255, 128) ;   // Get from -127.5 dB to -64.0 dB in 1/8 of pot turn
    
            // Convert from POS to RELAY using defined POS/RELAY values.
            // Comment out if using manually mapped segments.
    
            // volume = map(pos, POS_MIN, POS_MAX, RELAY_MAX, RELAY_MIN);
    
            // Update the relays.  We can't do them all at once, so we do them in
            // stages: First we close all the relays that should be closed, then we
            // open all the relays that should be open.  This way, the intermediate
            // state of the relays will never be louder (lower attenuation) than
            // the desired end state, which should help prevent loud pops while
            // updating.
    
            // Turn on the SET relay drivers.
    
            Wire.beginTransmission(LEFT_SET);   // Build the I2C transaction string
            Wire.write(volume);                 // for closing L+ and L- relays.
            Wire.endTransmission();             // Transmit it.
    
            Wire.beginTransmission(RIGHT_SET);  // Build the I2C transaction string
            Wire.write(volume);                 // for closing R+ and R- relays.
            Wire.endTransmission();             // Transmit it.
    
            delay(LATCH_TIME_MS);
    
            // Turn off the SET relay drivers, leaving the relays latched.
    
            Wire.beginTransmission(LEFT_SET);   // Build the string for turning off
            Wire.write(0x00);                   // L+ and L- SET drivers.
            Wire.endTransmission();             // Transmit it.
    
            Wire.beginTransmission(RIGHT_SET);  // Build the string for turning off
            Wire.write(0x00);                   // R+ and R- SET drivers.
            Wire.endTransmission();             // Transmit it.
    
            // Turn on the RESET relay drivers.
    
            Wire.beginTransmission(LEFT_RESET); // Build the I2C transaction string
            Wire.write(volume ^ 0xFF);          // for opening L+ and L- relays.
            Wire.endTransmission();             // Transmit it.
    
            Wire.beginTransmission(RIGHT_RESET);    // Build the I2C transaction string
            Wire.write(volume ^ 0xFF);              // for opening R+ and R- relays.
            Wire.endTransmission();                 // Transmit it.
    
            delay(LATCH_TIME_MS);
    
            // Turn off the SET relay drivers, leaving the relays latched.
    
            Wire.beginTransmission(LEFT_RESET); // Build the string for turning off
            Wire.write(0x00);                   // L+ and L- RESET drivers.
            Wire.endTransmission();             // Transmit it.
    
            Wire.beginTransmission(RIGHT_RESET);    // Build the string for turning off
            Wire.write(0x00);                       // off R+ and R- RESET drivers.
            Wire.endTransmission();                 // Transmit it.
    
            delay(LATCH_TIME_MS);
    
            // Datasheet gives a "Min set/reset pulse width" spec.  It's unclear
            // exactly what they mean, but a conservative interpretation would be
            // that it's the minimum time between consecutive operations on any
            // relay.  Wait here to ensure that the spec is satisfied.
    
            delay(OP_TIME_MS - LATCH_TIME_MS);
        }
    
        // If you want to alter the loop so the pot is read more or less frequently,
        // change "delay(x);" here, where 'x' is the number of milliseconds to wait
        // between pot readings.
    
        delay(10);
    
    }

     

     

    Everything is now all installed in my Exstata. I didn't originally plan to have these boards in there, so the layout is pretty wasteful, but it keeps clean signal lines away from AC. The digital power is four lines from two Twisted Pear LCDPS fed from two toroids - WAY over the top, but I had them all just sitting in the cupboard, so why not?

    All in all a great end to a project first posted almost 11 years ago! :)

    Volume Control Installed.jpg

     

    [EDIT] I should add, I have no idea why this code works great, and Kerry's code was causing my boards to open up full volume on start-up. Such are the mysteries of the universe.

    • Like 2
  11. 8 hours ago, blessingx said:

    What is the 1Password non-subscription alternative at this point? Assume it’s no longer LastPass? Man, it sucks every tiny, single product development team is jumping to SaaS. Have to leave Pathfinder after all these years for the same reason. 

    I like Bitwarden. Fully-featured free version, with very cheap premium option.

    • Thanks 2
  12. 5 minutes ago, Kerry said:

    I'll have some time in March to look at the issues you were having.  My setup doesn't open up at full volume.  

    I appreciate that, but please don't spend too much effort if it's just me. It's entirely likely I'm doing something wrong! I've used the Arduino IDE and VSCode to customize and build 3D printer firmware, but am really flying blind in terms of proper understanding.

  13. 2 hours ago, Ok_Session_9057 said:

    Hi. What is the problem with these old boards in your opinion and What kind of significant advancement have there been? I managed to buy one of these first version attenuators and been using it with LCDuino in my line stage and cannot think anything I don’t like about it.

    I am just starting to build two more for my electrostatic amp. These seem easier to solder and space is not an issue, since the amp is going to be pretty massive, so I was wondering if there is a good enough reason to get the newer version instead?

    I actually built and installed a pair of these in a balanced amp recently. There's absolutely nothing wrong with the board on a technical level.

    The problems I had that might have been solved with the newer revisions were size and software. This first revision are physically way bigger than the second. And I'm not a programmer, so I rely on grabbing code provided by others, and I couldn't find code that works perfectly with a pot. Kerry's all-in-one code from the other thread mostly gets there, but it opens up at full volume on power up - this is a bit dangerous, and I'm not nearly clever enough to work out why. I believe the code for the second revision was a lot more complete. I have the LCDuino codebase, but haven't been able to get it to work.

    But if you have the space, and you have code that works for you, then this first revision board should be AOK.

  14. 1 minute ago, jamesmking said:

    his grlv seems to have separate windings for + and - (and they are using two diode bridges in the lv) and I don't think the grhv  offers a centre tapped option at all - all the grhv I have seen have separate diode bridges for + and - 

    Check check!

    • Like 1
  15. Would the phase of the transformer secondary windings be an issue here? There doesn't seem to be anything indicating the start of a winding, both wires of each winding are the same color.

    I know that getting the phase wrong can cause issues when tying windings together to create your own centre tap.

    • Like 1
    • Thanks 1
×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.