@tymkrs TTL-8

TYMKRS TTL-8

I’ve been watching for the release of the tymkrs ttl-8 ( no -me ?) for some time now. @whixr had been showing it off in a MIDI project on one of their YouTube videos a while back and I thought it was a great little breadboard-hackers tool. Is it magic? No it’s a shift register.. but a worthy bench-top tool for sure. For $6 this board showed up in the mail box a couple of days after purchase… Atdiy is pretty prompt about shipping.

I also have plans on putting this to use while troubleshooting a MIDI project I’m working on for my brother but I’m sure this little board will come in handy for all sorts of purposes.

So like all items I buy off Tindie* I had to check it out right away! My workshop is about half packed for the move but I suspect my bench top items will wait for last so I still had the tools to check this item out; In full tradition of moving, my bench top items will also be first to move into the new house 😉

* with exception for the Minishift and CPLD dev board; someday..
I wrote up some basic code to shift out a counter in my main loop to test this board out; nothing special but it got the job done. There isn’t much to go wrong.. and in fact the task was pretty vanilla; nothing went wrong.

The tymkrs TTL-8 up close...
The tymkrs TTL-8 up close…

 

The test code.. [Edit: my code works with no delays built in.. at 4MHz (I tested this), whixr runs these faster and has ganged many of these together but adds capacitors for filtering on power mentioned adding a ceramic cap between the clock and ground after about 5 chained boards]


/*
 * File:   main.c
 * Author: Charles M Douvier
 * Contact at: http://iradan.com
 *
 * Created on September 26, 2014, 2:47 PM
 *
 * Target Device:
 * 16F1509 on Tautic 20 pin dev board
 *
 * Project: ttl-8 test
 *
 *
 * Version:
 * 1.0
 *
 */
#ifndef _XTAL_FREQ
#define _XTAL_FREQ 4000000 //4Mhz FRC internal osc
#define __delay_us(x) _delay((unsigned long)((x)*(_XTAL_FREQ/4000000.0)))
#define __delay_ms(x) _delay((unsigned long)((x)*(_XTAL_FREQ/4000.0)))
#endif

#include 
#include 
#include 
#include 


//config bits
#pragma config FOSC=INTOSC, WDTE=OFF, PWRTE=OFF, MCLRE=ON, CP=OFF, BOREN=ON, CLKOUTEN=OFF, IESO=OFF, FCMEN=OFF
#pragma config WRT=OFF, STVREN=OFF, LVP=OFF

#define _XTAL_FREQ 4000000 //defined for delay
 

/*
 *
 */
int r;
unsigned char n;

void init_io(void) {

    ANSELA = 0x00; // all port A pins are digital I/O
    ANSELB = 0x00; // all port B pins are digital I/O
    ANSELC = 0x00; // all port B pins are digital I/O

    TRISAbits.TRISA0 = 0; // output
    TRISAbits.TRISA1 = 0; // output
    TRISAbits.TRISA2 = 0; // output
    TRISAbits.TRISA3 = 0; // output
    TRISAbits.TRISA4 = 0; // output
    TRISAbits.TRISA5 = 0; // output

    TRISBbits.TRISB4 = 0; // output
    TRISBbits.TRISB5 = 1; // input
    TRISBbits.TRISB6 = 0; // output
    TRISBbits.TRISB7 = 0; // output

    TRISCbits.TRISC0 = 0; // output
    TRISCbits.TRISC1 = 0; // output
    TRISCbits.TRISC2 = 0; // output
    TRISCbits.TRISC3 = 0; // DATA OUT
    TRISCbits.TRISC4 = 0; // CLOCK
    TRISCbits.TRISC5 = 0; // LATCH
    TRISCbits.TRISC6 = 0; // output
    TRISCbits.TRISC7 = 0; // output

}

void latch(void) {
    PORTCbits.RC5 = 1;  //latch bump
    __delay_us(10);      //this is slow.. that's okay for me
    PORTCbits.RC5 = 0;
}

void clk(void){
    PORTCbits.RC4 = 1;  //set clock
    __delay_us(5);      //this is slow.. that's okay for me
    PORTCbits.RC4 = 0;
}

void shift_out (unsigned int x){
    r = 8;

    while(r){
        if (x & 0b10000000){
            LATCbits.LATC3 = 1;

        }
        else{
            LATCbits.LATC3 = 0;
        }

        clk();
        x = x << 1;
        --r;
        LATCbits.LATC3 = 0;
    }

    latch();
}

int main(void) {

    // set up oscillator control register, using internal OSC at 4MHz.
    OSCCONbits.IRCF = 0x0d; //set OSCCON IRCF bits to select OSC frequency 4MHz
    OSCCONbits.SCS = 0x02; //set the SCS bits to select internal oscillator block
    //OPTION_REGbits.nWPUEN = 0; // enable weak pullups (each pin must be enabled individually)

    init_io();

    latch();

    while (1) {

        n = n+1;;

        shift_out(n);

        __delay_ms(50);

    }
    return (EXIT_SUCCESS);
}


TTL-8 what comes in the bag..
TTL-8 what comes in the bag..

This I would have done different:

We all have different needs for our tools; I believe this board layout worked for their projects and made sense, it just wouldn’t have been how mine would have been laid out. As you can tell from the first photo I chose to use my own.

I would have opted for side mounted port in/out connections with right angle connectors. I would have also added a pair of mounting holes. My layout would have increased the cost of the board by about 30%. That’s fine and dandy for *me*….the tymkrs are obviously targeting breadboard-hackers with this board which makes more sense; the outputs on the board could have a right angle connector (not included, pennies on eBay) soldered on and plugged into a breadboard while you had jumpers come in from your micro to plug into a right angle female connector of choice. The LEDs would then be the correct orientation for normal viewing (reading 0 on the left).  The current board size is a compact 1.15 in (29mm) by 0.65 in (11.5mm) or about .75 in²; my alterations would have pushed it up to just over 1 in².

 

Leave a Reply