Jump to content


  • Content Count

  • Joined

  • Last visited

  • Days Won


Reputation Activity

  1. Like
    RobG reacted to GrumpyOldPizza in Autonomous Rover   
    Haven't posted in a while ...
    So there was AVC 2015. Less successfull for us (with 2 rovers this year). I was relegated to be the SW guy, while my kids actually build and run the rovers. 
    Anyway, I thought it might be interesting to post a link to the source code that was used (which of course is utterly outdated, probably ;-)).
    There are a couple of interesting pieces that might be of use outside the autonomous rover domain.
    First off the concept (besides being as cheap as possible) was to take an R/C car, a TI Launchpad, RobG's TFT/SD boosterpack, hook up a GPS, a MPU-9150, a RPM sensor, a 3 channel R/C reveiver, and 2 buttons. The TFT is displaying all status information, which is pretty handy before starting the rover, so one can see whether the GPS is actually working ;-)
    Here some of the pieces that might be of interest:
    - the MPU-9150 is samples at 1kHz triggered by the INT output and properly timestamped relative to a wallclock; the builtin AK8975 is sampled at 100Hz; i2c is interrupt driven
    - the GPS code supports NMEA as well as UBLOX binary; support for GPS+GLNONASS is there; MTK3333, MTK3339, UBLOX6/7/8 are supported; full initializitation at runtime so that this can be used without backup battery or external flash that would store the configuration; ah, and there is proper timestamping via the PPS input
    - of course there is full speed logging to a microSDHC card ... this time DMA driven to free up more processor cycles
    - stack checking via the MPU; handy to detect stack overflows (yes, saved my backon ;-))
    - there is a profiling system in place that buckets cycles spend on various logical tasks (like display, record, navigation ....); very handy to find out how much processor power is still left
    - lots of interesting code; stared to play with atomics and bitband accesses
    - the whole system is bare metal, CMSIS based; so if one looks for a CMSIS setup for TM4C123, that might be a good starting point
    - no RTOS in use; things are either interrupt driven, or timer driver (systick callbacks), or via the PendSV exception as kind of a deferred interrupt; did this, so I could half way explain the system to my son who was running one of the rovers ;-))
    Here a few pictures, and a link to my son's entry


    - Thomas
  2. Like
    RobG reacted to cubeberg in Geeky Tattoo   
    So I've been planning this for a while - but we were in Vegas this weekend and my wife encouraged me to finally go through with it  
    The design is actually based off of the footprint of an MSP430 QFN 16.  I had the tattoo artist do an initial sketch, but the final was actually designed in Eagle.  The symbol in the middle is the "Power" symbol you're probably familiar with - but was originally designed to indicate a "sleep mode" or "low power state" - a perfect reference for the MSP430 as well.  
    I'll have to post some updated pictures once it's healed - but here are a couple.


    So  - does anyone else have any electronics-related tattoos?
  3. Like
    RobG reacted to Remixed123 in LightServer - RGB Intelligent Lighting Project - App Control - Works with WS8212B LEDs   
    Hi Everyone,
    I have made available binaries and source code for an RGB lighting project called LightServer that I thought some of you would be interested in.
    The best way to see what you can do with LightServer is to view the videos on Vimeo here - https://vimeo.com/album/3015956
    No coding experience required to set this up and use. 
    Technical Details
    LightServer uses the Tiva C LaunchPad and the CC3100 Wi-Fi BoosterPack and a custom BoosterPack (Eagle files included
  4. Like
    RobG reacted to Antscran in Code composer Studion Graphing Tool Tutorial   
    Hi all,
    Just made a tutorial both written and video on how to use the graphing tool built into Code Composer Studio.  I meant to do this awhile back just not had the time until now, hope it proves of some use.
  5. Like
    RobG reacted to Antscran in MSP430G Launchpad Frequency Counter   
    Hi all,
    After bit of help.  I was inspired by this MSP430F550x frequency meter Jazz made and thought I would code one from scratch, different from the one I posted in the that original thread http://forum.43oh.com/topic/3317-msp430f550x-based-frequency-meter/
    The one I made works fine but I am having an issue displaying above ~32kHz on the LCD, I know the variable Freq that holds the frequency is correct as viewed this in debug mode.  So it must be my implementation of the itoa function or possibly a casting issue?....this is where my C skills are a bit sketchy!
    The video shows the frequency counter in operation and it uses an early iteration of RobG's EduKit BoosterPack.  It doesn't show what happens above 30kHz, however a negative value is displayed or one which is completely incorrect.
    The itoa function is attached as well but I doubt this is at fault, not one I have coded but I have used it before successfully.
    #include "msp430.h" #include "edukit.h" #include "itoa.h" /*** Constants ***/ const int NumberSamples = 4; /*** Global variables ***/ volatile unsigned int CounterValue = 0; volatile unsigned int StoredCount = 0; volatile unsigned int Result = 0; unsigned int Freq = 0; unsigned int SampleTuneTime = 58950; /*** Function prototype ***/ void calc_freq(); void main(void) { /*** System Set-Up ***/ WDTCTL = WDTPW + WDTHOLD; // disable WDT initMSP430(); // init MSP430's clock BCSCTL3 |= LFXT1S_2; // VLO mode _delay_cycles(16000000); // wait for LCD to reset setUpSPIforLCD(SPI2, CA, DA); // set up LCD's SPI initLCD(); // init LCD clearScreen(COLOR_BLACK); /*** GPIO Set-Up ***/ P2DIR &= ~BIT0; // P2.0 set as input P2SEL |= BIT0; // P2.0 set to primary peripheral Timer1_A P1DIR |= BIT4; // Set P1.4 as output P1SEL |= BIT4; // Output SMCLK to P1.4 /*** Timer Set-Up ***/ TA0CCR0 = SampleTuneTime; // 2MHz = 500nS therefore 60000 = 30mS sample time TA0CCTL0 |= CCIE; // Interrupt enable TA0CTL |= TASSEL_2 + ID_3; // SMCLK, /8 TA1CCTL0 |= CCIE + CCIS_0 + CM_1 + CAP; // Interrupt enable, capture select CCIxA, Positive edge, capture mode TA1CTL |= TASSEL_2; // SMCLK /*** Set-up LCD text ***/ setColor(COLOR_GREEN); drawString(10, 5, FONT_LG_BKG, "Frequency"); drawString(25, 25, FONT_LG_BKG, "Counter"); setColor(COLOR_BLUE); drawString(110, 85, FONT_MD, "Hz"); _bis_SR_register(GIE); // Enter LPM0 w/ interrupt while (1) { TA1CTL |= MC1; // Start timer TA0CTL |= MC0; // Start timer while (CounterValue != NumberSamples); // Wait while CounterValue is not equal to 4 TA0CTL &= ~MC0; // Stop timer TA1CTL &= ~MC1; // Stop timer Result >>= 2; // Divide Result by 4 calc_freq(); unsigned char buffer[8]; int toLCD = Freq; //int counter = 0; int Base = 10; itoa(toLCD, buffer, Base); char array[8] = { 0, }; setColor(COLOR_BLACK); drawString(17, 80, FONT_LG_BKG, "888888"); setColor(COLOR_ORANGE_RED); //int2ASCII(Result, array, 0); drawString(5, 80, FONT_LG_BKG, buffer); _delay_cycles(1600000); // delay 100mS until next screen refresh Result = 0; // Zero Result CounterValue = 0; // Zero CounterValue StoredCount = 0; // Zero StoredCount TA0R = 0; // Zero Timer_A0 register TA1R = 0; // Zero Timer_A1 register } } //Timer_A0 TACCR0 Interrupt Vector Handler Routine #pragma vector=TIMER0_A0_VECTOR __interrupt void Timer0_A0(void) { TA0CTL &= ~MC0; // Stop timer TA1CTL &= ~MC1; // Stop timer CounterValue++; // Increment CounterValue if (CounterValue >= (NumberSamples +1)) // Reset values if NumberSamples +1 is reached { CounterValue = 0; // Zero CountValue StoredCount = 0; // Zero StoredCount } Result += StoredCount; // Store accumulated count in Result StoredCount = 0; // Zero StoredCount TA1CTL |= MC1; // Start timer TA0CTL |= MC0; // Start timer } //Timer_A1 TACCR0 Interrupt Vector Handler Routine #pragma vector=TIMER1_A0_VECTOR __interrupt void Timer1_A0(void) { StoredCount++; // Increment StoredCount } void calc_freq() { float SampTime = 0.03; // 30mS sample time Freq = Result / SampTime; // Divide the averaged sampled result by the sample time to gain the frequency } Cheers,
  6. Like
    RobG got a reaction from Fmilburn in Controlling RGB LED strip with MSP430?   
    Check out this thread
  7. Like
    RobG reacted to Lgbeno in Alpha testing of analog.io MQTT web terminal   
    I've been having some fun recently with a pretty simple board.  I mentioned it last week on this thread.  It is really inspired by @@cubeberg who has done a lot more work with bridging nRF24 communications back to the cloud then I have.  He's using CC3200 but I wanted to try continue some work that I have been doing with ESP8266 and MQTT.  Both technologies are freakishly cool!
    The basic premise is that sensor nodes are powered by a single AAA battery, then I use a TPS61097A-33DBVT to boost the voltage to 3.3V.  From there I power up a MSP430G2553 running some code that I wrote in Energia.  The code basically reads a Si7020 temp/humidity sensor via I2C and dumps the readings to nRF24 using the @@spirilis library.  On the other side, there is another one of these nodes in RX mode waiting for the nRF24 packets to come in and forwards them on to ESP8266 via UART.
    What is new, is that I'm working on some ESP8266 code that takes incoming UART data and forwards it on to a MQTT broker running at analog.io.  Then I have new web features to connect to this virtual terminal right inside of a browser.  Embeds work too:

    So what you see is live data coming across this system.  If you type things into the terminal, it is transmitted live to the ESP8266 UART and subsequently the MSP430.  I have not coded up any actions to take from the received messages yet but it would be fun to hear suggestions if anyone has them!
    I haven't exposed this functionality to users yet but am curious if anyone wants to give it a try and help me work out the kinks (which I'm sure that there are many).  Ultimately I think that I would like to make a product that is a super simple to use WiFi UART that could be added to any project, then users can decide how they want to use it.
    Some pictures:




  8. Like
    RobG reacted to greeeg in RGB 4x4 button thing   
    It's been awhile since I've done a proper project, mainly been doing alot of tinkering.
    But I have a new project that I'd like to share. I wanted to make something like sparkfuns 2x2 Simon game. but using adafruits 4x4 silicone buttons.
    Ofcourse adafruit sell a breakout board with an i2c keypad scanner/single colour led driver.
    I thought how hard is it to replicate that design, but add SMD RGB LEDs under each button!! Now this is still a work in progress.
    Here is the schematic, there isn't too much to the design. Just a MSP430F55xx 64QFN and a TLC5955 48 channel 16bit LED driver.
    Because I'm using such a large MSP, I trashed a keypad multiplexing idea and went straight for direct. the same with the LEDs.

    The board isn't very fancy either. This was my first board with kicad, moved from altium. (I needed to make the change sometime, will not be able to afford a non-student license)

    I haven't doe any software for this project. and this is the first USB project I've ever made. So progress might be slow. but I'm interested if you guys have ideas for this platform.
    I'm not sure if the stock USB bootloader can be called from software? I know that the ezFET does this, but they use custom BSL code, which I might need to look into.
    I have a fair bit of leftovers and might consider placing some boards on tindie, the only downside is that the two ICs are expensive and practically double the BOM.
    TLC5955, not TLC5595
  9. Like
    RobG got a reaction from maelli01 in MSP432 toggle a bit using bit banding?   
    Don't use BIT0, you have to use bit #, so BIT0 is 0.
  10. Like
    RobG got a reaction from spirilis in MSP432 toggle a bit using bit banding?   
    Don't use BIT0, you have to use bit #, so BIT0 is 0.
  11. Like
    RobG got a reaction from bluehash in MSP432 toggle a bit using bit banding?   
    Don't use BIT0, you have to use bit #, so BIT0 is 0.
  12. Like
    RobG got a reaction from phenyl in Graphics Library for MSP432   
    @@phenyl, this is not a valid project, you need to create one first.
    1. New -> CCS Project
    2. Select your Target (choose MSP432P401R)
    3. Extract ugl432.zip into new folder
    4. Copy/paste all files from the folder to your project (replace existing main.c when asked)
    You are done!
  13. Like
    RobG got a reaction from vinicius.jlantunes in How to solder HTSSOP heatsink without reflowing the board?   
    I have been using this technique for chips like W5200, W5500, TLC5947, TLC5951, etc., and...
    Make sure you have exposed area under the IC and on the opposite side (tStop and bStop layers)
    Use few 0.023 or 0.027 vias. Those sizes work well with 0.020 solder, I just stick it in the via and touch with iron
    If you use footprints w/o heat pad, make sure you don't have any tracks under the IC.

  14. Like
    RobG reacted to right13 in (Universal) Color LCD graphics library (2)   
    i attached modified code by me, works fine

  15. Like
    RobG reacted to jazz in SBW MSP430F550x based programmer   
    There are 3 speed modes, selectable by -s switch (-s 0, -s 1, -s 2). Smart Write for 5xx/6xx devices is only supported in Fast Mode. Writing rates for 5xx/6xx in Medium / Fast Mode are calculated for each target device. Writing rate for 5xx/6xx in Slow Mode is fixed.
    Slow Mode
    Programmer MCLK 6 MHz, target device MCLK 1.5 MHz
    Max SBW+ bus clock: PIO 0.5 MHz, TEST 1 MHz, RESET 1.5 MHz
    MSP430x2xx flash clock: 1.5 MHz / 5 = 300 kHz
    Write MSP430G2955: 28.4 KByte/s, MSP430F5659: 51.0 KByte/s, MSP430FR5959: 50.6 KByte/s
    Verify: 55.0 KByte/s, Marginal Read: 72.8 KByte/s, CRC: 510.8 KByte/s
    Quick Write: 11.2 KByte/s, Quick Read: 9.5 KByte/s

    Medium Speed Mode
    Programmer MCLK 12 MHz, target device MCLK 3 MHz
    Max SBW+ bus clock: PIO 1 MHz, TEST 2 MHz, RESET 3 MHz
    MSP430x2xx flash clock: 3 MHz / 8 = 375 kHz
    Write MSP430G2955: 39.0 KByte/s, MSP430F5659: 91.9 KByte/s, MSP430FR5959: 101.1 KByte/s
    Verify: 109.9 KByte/s, Marginal Read: 73.2 KByte/s, CRC: 1017.7 KByte/s
    Quick Write: 22.4 KByte/s, Quick Read: 19.1 KByte/s

    Fast Mode
    Programmer MCLK 24 MHz, target device MCLK 6 MHz
    Max SBW+ bus clock: PIO 2 MHz, TEST 4 MHz, RESET 6 MHz
    MSP430x2xx flash clock: 6 MHz / 13 = 461.5 kHz
    Write MSP430G2955: 48.3 KByte/s, MSP430F5659: 95.3 KByte/s, MSP430FR5959: 202.0 KByte/s
    MSP430F5659 Smart Write: 196.9 KByte/s
    Verify: 219.6 KByte/s, Marginal Read: 73.4 KByte/s, CRC: 2024.2 KByte/s
    Quick Write: 44.8 KByte/s, Quick Read: 38.2 KByte/s
    In CDC-Uart Bridge setup, RESET pin for devices #4 - #7 (that are not used) is used for Uart RX/TX.

    Updated files:
    Programmer firmware can be updated by CDC BSL.
    D:\msp430>bsl -p com7 -f sbwp_1108.txt File: "sbwp_1108.txt" Total Time: 968 ms D:\msp430>
  16. Like
    RobG reacted to jazz in SBW MSP430F550x based programmer   
    Complete CDC transfer between PC and programmer can be logged by enabling {$DEFINE CDCLOG} in flash.pas
    Short manual manual.pdf
  17. Like
    RobG reacted to jazz in SBW MSP430F550x based programmer   
    After power-up / reset programmer is in slow mode (-slow) and on board regulator is on minimum voltage 1.8V (-vcc 0). Before switching to fast mode (-fast) voltage need to be increased over 2.0V. Maximum regulator voltage is close to 3.0V (-vcc 15), and step is (not linear) close to 0.8V.
    Will see about this later, but for now programmer can not work with target devices that have capacitor on RESET pin.
    PC side for Linux and Windows is written in Free Pascal (http://www.freepascal.org/).
    Programmer firmware (v1.096), for basic device (SBW+), and device with Uart / Mailbox bridges (SBW+ Uart / Mailbox).
    CDC PID (VID is TI 2047 for all).
    099F BSL
    09B8 SBW+
    09B9 SBW+ Uart / Mailbox
    Windows CDC drivers.
  18. Like
    RobG reacted to bluehash in Sears $9.99 Crafsman Multimeter Deal   
    Sears has an 8 function and 20 range digital multimeter for $9.99, from the usual $19.99. Shipping is free if you pick up in store or $5.99 shipped.
  19. Like
    RobG got a reaction from RROMANO001 in MSP430G2955 Launchpad Development   
    The only problem with G2955 I see is it's price. It costs as much as some F5xxx series chips (and more than twice as much as some ARM chips like Kinetis.)
  20. Like
    RobG reacted to jazz in MSP430F550x based logic analyzer   
    Firmware is done for MSP430F5510, but it should work with any MSP430 USB device. First byte in firmware txt file is XT2 frequency (default 24 MHz, 18h), and it can be changed manually before flashing to requested XT2 value. Supported XT2 values are 4, 6, 8, 12, 16, 18, 24, 25, 26.
    At start, it will be checked is it everything OK with setup, and after enumeration, LED on P4.7 (5529 LP LED2) will turn on. Blinking LED is related to setup error. Device will be enumerated as CDC with name 'LA', VID 2047h and PID 099Fh.
    PC side is done in Lazarus 1.4.0 (http://www.lazarus-ide.org), under Win32, but it should work also on Linux. By scroll bar on left down side can be selected port.

    After port is open, right down side will be enabled, together with "Measure" button. Blinking LED is indication for data exchange (2 bytes ping pong, every second) between micro and PC.

    P1 is used as logic analyzer input. Measurement is triggered by PC side, pressing "Measure" button. It also can be triggered by P2 on micro side, P2.0 with high level, and P2.1 (S1 button on 5529 LP) with low level.

    Chart used for result presentation have zoom possibly. "Reset" button will zoom out to start up screen. Here is example of measured 1 MHz signal on P1.2.

    Firmware: la_frm.zip
    CDC Win driver: la_cdc.zip
    PC source: la_source.zip
    PC Win Exe:la_win_exe.zip
  21. Like
    RobG got a reaction from bluehash in Tiva Eagle Library   
    This reminds me, I forgot to upload the latest version, which has all TM4C123 parts (PM package)
    BTW, TM4C123GH6PM is TM4C123[7,G]xxPM
  22. Like
    RobG got a reaction from akirakudo in Tiva Eagle Library   
    The one in the first post is the latest.
  23. Like
    RobG got a reaction from Fred in The Marquee Clock   
    Instead of making your own PCB, how about using standard strips?
    You need to make a small tool, little bit wider than the strip, with shallow V on one end (or you can try to find jeweler's bending pliers.)
    Bending strip on one side between LEDs will arc the strip.
    I did a test once to see if I can make arcs and circles for xmas displays, and that worked pretty well.
  24. Like
    RobG got a reaction from greeeg in The Marquee Clock   
    Instead of making your own PCB, how about using standard strips?
    You need to make a small tool, little bit wider than the strip, with shallow V on one end (or you can try to find jeweler's bending pliers.)
    Bending strip on one side between LEDs will arc the strip.
    I did a test once to see if I can make arcs and circles for xmas displays, and that worked pretty well.
  25. Like
    RobG reacted to Fred in Apple Watch Teardown : ST Micro + NXP NFC + TI OpAMP   
    They had to cram it in so they stayed under the free size limit in Eagle.
  • Create New...