• Category Archives Uncategorized
  • New Server and domain registrar.

    sorry for the look and the missing pictures. but they will be coming soon.
    slowly getting things up and running….. i now should be saving about $100+ a year since leaving godaddy.

    I have left them since they keep upping there price for renewals and hosting.
    I am sorry in this day in age, $20 a year is sorta of unreasonable, when i can get it for $12 and dont have to pay extra for private registration.

    Good by godaddy, you won’t be missed.

  • Pile of crap, or how I plan to start updating again.

    Ok I am really sorry for the lack of updates. I lots of progress and projects to post about but in OCT,  I had some crap piled on top of me.

    I have f5510 usb stuff, a ultrasonic distance sensor like ping thats nearly done. some cool project boxes that I sprused up, new LFS builds and fixes that I have done.
    custom battery for my heli,  I’m sure I have forgotten a few……also I am super excited I have new happy hardcore vinyl!!
    but lets not forget my plant hacks and a very quick ultrasonic cleaner that i needed for my ecig stuff.

    so lots to come in the next month!
    Continue reading  Post ID 3

  • I will return shortly

    I’m just on a short break from blogging at this moment, I have been working on getting my car fixed (i am doing the work myself) Adjusting to my new job.

    Its tough getting my schedule back to normal. I have been working nights for 2 years with only four 10 hour shifts. Now i am back on a normal 9-5 5 days a week.
    So stay tuned I will be back very shortly

    Thanks for reading 🙂

  • MSP430: Custom calibration for DCO

    While using the launchpad and Value line chips, I was a little Disappointed in lack of calibration data and no way to reliably change the default settings. So I started flashing the DCO calibrations data –> original post http://www.43oh.com/forum/viewtopic.php?f=10&t=239&hilit=calibration
    Now the default 1 8 12 and 16 MHZ settings are fine but what if you wanted a bunch of chips to run on 3MHz or 500KHz. Are you will to try and figure out the RSEL and MOD and DCO bits and start randomly flipping testing settings? To me this sounds like a long and boring process and I don’t have the time to test and try and get 2MHz, or what if I need 10MHz , my scope doesn’t even come close to that 🙁 .

    So I decided to modify the TI DCO flash calibration code from TIs examples, these changes allow me to set the default and the other calibration data to the settings I want.
    The few changes I made are,

    • Added Xcap setting to BCSCTL3 to make internal cap 12.5pF
    • Added custom constant to replace 1MHz default(244), – new one is for 2MHz

    no other changes made to the code.



    Now there is a few things to remember, This code will re-write over TI calibrated constants if you have An F series (IE everything but value line G series) chips. Or it will Write the calibration to the G line chips – which are not calibrated when you get them except the 1MHz default.



    // Custom DCO settings- based on TI code example
    // MSP430F20xx Demo - DCO Calibration Constants Programmer
    // MSP430F20xx
    // ---------------
    // /|| XIN|-
    // | | | 32kHz
    // --|RST XOUT|-
    // | |
    // | P1.0|--> LED
    // | P1.4|--> SMLCK = target DCO
    // Orignal Code By
    // A. Dannenberg
    // Texas Instruments Inc.
    // May 2007
    // Built with CCE Version: 3.2.0 and IAR Embedded Workbench Version: 3.42A
    /*Flash Custom DCO settings, This will replace The default 1MHz */
    /* to use
    //Custom calibration
    BCSCTL1 = CALBC1_1MHZ; // Set range
    DCOCTL = CALDCO_1MHZ; // Set DCO step + modulation
    //ACLK = LFXT1/8 = 32768/8, MCLK = SMCLK = target DCO
    //* External watch crystal installed on XIN XOUT is required for ACLK *//
    #include "msp430f2013.h"
    #define DELTA_CUSTOM 489 // 489 x 4096Hz = 2002944Hz or 2.02MHz
    #define DELTA_8MHZ 1953 // 1953 x 4096Hz = 7.99MHz
    #define DELTA_12MHZ 2930 // 2930 x 4096Hz = 12.00MHz
    #define DELTA_16MHZ 3906 // 3906 x 4096Hz = 15.99MHz
    unsigned char CAL_DATA[8]; // Temp. storage for constants
    volatile unsigned int i;
    int j;
    char *Flash_ptrA; // Segment A pointer
    void Set_DCO(unsigned int Delta);
    void main(void)
    for (i = 0; i < 0xfffe; i++); // Delay for XTAL stabilization P1OUT = 0x00; // Clear P1 output latches P1SEL = 0x10; // P1.4 SMCLK output P1DIR = 0x11; // P1.0,4 output BCSCTL3 = XCAP_3; // Set internal cap to 12.5 j = 0; // Reset pointer Set_DCO(DELTA_16MHZ); // Set DCO and obtain constants CAL_DATA[j++] = DCOCTL; CAL_DATA[j++] = BCSCTL1; Set_DCO(DELTA_12MHZ); // Set DCO and obtain constants CAL_DATA[j++] = DCOCTL; CAL_DATA[j++] = BCSCTL1; Set_DCO(DELTA_8MHZ); // Set DCO and obtain constants CAL_DATA[j++] = DCOCTL; CAL_DATA[j++] = BCSCTL1; Set_DCO(DELTA_CUSTOM); // Set DCO and obtain constants CAL_DATA[j++] = DCOCTL; CAL_DATA[j++] = BCSCTL1; Flash_ptrA = (char *)0x10C0; // Point to beginning of seg A FCTL2 = FWKEY + FSSEL0 + FN1; // MCLK/3 for Flash Timing Generator FCTL1 = FWKEY + ERASE; // Set Erase bit FCTL3 = FWKEY + LOCKA; // Clear LOCK & LOCKA bits *Flash_ptrA = 0x00; // Dummy write to erase Flash seg A FCTL1 = FWKEY + WRT; // Set WRT bit for write operation Flash_ptrA = (char *)0x10F8; // Point to beginning of cal consts for (j = 0; j < 8; j++) *Flash_ptrA++ = CAL_DATA[j]; // re-flash DCO calibration data FCTL1 = FWKEY; // Clear WRT bit FCTL3 = FWKEY + LOCKA + LOCK; // Set LOCK & LOCKA bit while (1) { P1OUT ^= 0x01; // Toggle LED for (i = 0; i < 0x4000; i++); // SW Delay } } void Set_DCO(unsigned int Delta) // Set DCO to selected frequency { unsigned int Compare, Oldcapture = 0; BCSCTL1 |= DIVA_3; // ACLK = LFXT1CLK/8 TACCTL0 = CM_1 + CCIS_1 + CAP; // CAP, ACLK TACTL = TASSEL_2 + MC_2 + TACLR; // SMCLK, cont-mode, clear while (1) { while (!(CCIFG & TACCTL0)); // Wait until capture occured TACCTL0 &= ~CCIFG; // Capture occured, clear flag Compare = TACCR0; // Get current captured SMCLK Compare = Compare - Oldcapture; // SMCLK difference Oldcapture = TACCR0; // Save current captured SMCLK if (Delta == Compare) break; // If equal, leave "while(1)" else if (Delta < Compare) { DCOCTL--; // DCO is too fast, slow it down if (DCOCTL == 0xFF) // Did DCO roll under? if (BCSCTL1 & 0x0f) BCSCTL1--; // Select lower RSEL } else { DCOCTL++; // DCO is too slow, speed it up if (DCOCTL == 0x00) // Did DCO roll over? if ((BCSCTL1 & 0x0f) != 0x0f) BCSCTL1++; // Sel higher RSEL } } TACCTL0 = 0; // Stop TACCR0 TACTL = 0; // Stop Timer_A BCSCTL1 &= ~DIVA_3; // ACLK = LFXT1CLK }

    So you want a your own custom frequency, now the easiest way to do this is take your target clk speed and divide it by 4096. which 4096 is 32KHz clock divided by 8. For my 2MHz calculation I did 489 x 4096Hz = 2002944Hz or 2.02MHz
    you division will get you close to the number you will need, round up or down according to your frequency. I choose to go a little over/ round up.

    Remember the Faster your clock, the farther you will be away from your target
    example - 488 x 4096 = 1,998,848
    489 x 4096 = 2,002,944
    difference 4,096

    Its not too bad but if you are going for a specific CLK speed you may need to try a different method like an oscilloscope, and manually changing the DCO, RSEL, MOD bits .

    FYI there is a test program included in the zip file to test your new calibration data.

  • Support OSHW!!!

    Support Open Source Hardware!!


    Open Source Hardware (OSHW) Statement of Principles 1.0

    Open source hardware is hardware whose design is made publicly available so that anyone can study, modify, distribute, make, and sell the design or hardware based on that design. The hardware’s source, the design from which it is made, is available in the preferred format for making modifications to it. Ideally, open source hardware uses readily-available components and materials, standard processes, open infrastructure, unrestricted content, and open-source design tools to maximize the ability of individuals to make and use hardware. Open source hardware gives people the freedom to control their technology while sharing knowledge and encouraging commerce through the open exchange of designs.

  • PCLinux: a great alternitive to Ubuntu

    Recently i have been having issues with my Ubuntu install, well no really recently but ever since i upgraded to 9.10 and then to 10.04 and then to 10.10,  I have had nothing but trouble with the system. So off i went to look for a new Distro, Gentoo, openSuse, PClinux Mint linux, Debian, and a few other smaller ones. But i had to narrow it down a little further. I wanted a Gnome interface (personal preference), a Debian based distro was preferable and we cant forget good old bash lol. First one i tried was PCLinux  with the Gnome desktop. My first thoughts…….:) gnome loads and my keyboard and mouse works and so does the sound….what more could i ask for lol.

    Some key things that i like

    • Easy configuration manager
    • Supports my hardware right from the start
    • live CD works great
    • easy network setup
    • great list of repositories

    Cons or things i didnt like

    • Duel monitor support ? it works but no settings changes and the screen blanks every 5 mins or so
    • Boot up is a little long
    • themes, are just OK lol
    • no other real complaints —Yet……

    as of right now im sticking to this distro, i will be testing some of the others in a few weeks.


  • MSP430 interrupt driven PWM

    this is the code for a PWM, using the WDT as an interval timer.

    //options for interval timer
    /* WDT is clocked by fSMCLK (assumed 1MHz)
    WDT_MDLY_32 (WDTPW+WDTTMSEL+WDTCNTCL)  32ms interval (default)
    WDT is clocked by fACLK (assumed 32KHz)
    WDT_ADLY_16   16ms ”
    WDT_ADLY_1_9   1.9ms ”
    interval x PERIOD = period interval    .064ms x 200 = 12.8ms or 78.125hz */
    #include <msp430x20x2.h>
    #include <signal.h> //add for interrupt
    #define PERIOD 200  //defines frequency
    volatile  int timer = 0; //counts how many interrupts have been called
    //resets when it counts to PERIOD
    volatile  int duty_cycle = 0;// max = PERIOD - 1 and min = 1
    void main(void)
    WDTCTL = WDT_MDLY_0_064; //interval setting
    P1DIR |= BIT0;
    P1OUT |= BIT0;
    IE1 |= WDTIE;
    eint(); //enable interrupt
    }//end main
    interrupt(WDT_VECTOR) watchdog_timer(void)
    if (timer == PERIOD) { timer = 0; P1OUT |= BIT0;  }
    if (timer == duty_cycle ) { P1OUT ^= BIT0; }
    }//end interrupt

    a quick demo using my rgb light

    sorry for the sound, i forgot to turn off my TV lol

  • Invintory time!!!

    While i work and try to finish a few small projects that i have started but haven’t posted about, I will be doing a small inventory of all my parts…….I have boxes and bags, and parts almost everywhere and i dont really know what i have any more. When i am finished, I may be giving away parts as long as shipping is reasonable. This wont cut to much into my programming and writing posts, i do that during work (ssshhhh!).

    I also want to thank everyone who visits my site. It means alot 🙂