Jump to content
43oh

gwdeveloper

Members
  • Content Count

    618
  • Joined

  • Last visited

  • Days Won

    22

Reputation Activity

  1. Like
    gwdeveloper got a reaction from adroit_91 in The Terminal - 43oh OLED Booster Pack   
    Here's a little preview of the OLED running on the G2553 using USCI.
     
    [attachment=0]oled_2553.jpg[/attachment]
    This weekend, I'll post code/drivers. It works on F2274 and G2553 so it should work on any USCI devices. I am using a standard 6x8 font instead of the included fonts with the USI drivers.
     
    Functions Included
    void SSD1306SendCommand( char *data, int i );
    void SSD1306SendData( char *data, int i );
    void setAddress( char page, char column );
    void clearScreen(void);
    void charDraw(char row, char column, int data);
    void stringDraw( char row, char column, char *word);
    void pixelDraw(char x, char y);
    void horizontalLine(char xStart, char xStop, char y);
    void verticalLine(char x, char yStart, char yStop);
    void imageDraw(const char IMAGE[], char row, char column);
    void circleDraw(char x, char y, char radius); (not completed)
     
    Minor Hardware Changes (previously mentioned by Robg)
    SJ4 -> change to VDD (pulls BS0 high for 4 wire SPI)
    SJ3 -> change to P1.7 (moves SDIN to USCI SIMO)
    SJ6 -> change to P2.2 (moves D/C to GPIO)
  2. Like
    gwdeveloper reacted to DickB in Electromagnetic pendulum clock   
    This pendulum clock is not only regulated by the pendulum, but it is driven by it.  A hidden magnet in the pendulum swings past a hidden coil and induces a current.  This is detected and then a current pulse is fed into the coil, creating an electromagnet that repels the pendulum to keep it moving.
     
    Others have designed and built clocks like this, but as far as I know mine is the only one using a microcontroller to fine-tune the pendulum's speed to keep accurate time. 
     
    The coil's output is filtered and fed into an MSP430 comparator, set on an interrupt to wake the microcontroller up.  The microcontroller delays a bit to let the magnet swing away from the coil some for optimal push, then feeds a variable-length pulse (typically 25 mS) into the coil via an output port connected to a PNP transistor.  If the pulse duration is increased, the pendulum swings farther and slows down.  If decreased, the pendulum speeds up.  The ratchet mechanism used to convert pendulum motion into rotary motion had to be designed to accommodate this variation in pendulum swing angle.  By varying the pulse width, the clock can be sped up or slowed down about 1%.  The pendulum needs to be manually adjusted, by setting the height of the bob, to within this tolerance.  To facilitate that, I use a dual-color LED driven by two output ports.  The LED flashes red if the pendulum is too slow, and green if it is too fast.  It usually takes only a few minutes to adjust the bob.  
     
    Once the bob is set, the microcontroller can maintain accuracy.  I've implemented a modified PID (proportional - integral - derivative) control system to derive the pulse width and regulate the clock. Accuracy is basically the same as the watch crystal used to drive the timer/counter. 




  3. Like
    gwdeveloper reacted to Fred in What are you working on today/this week?   
    Whilst I'm here, I had an unusual day today. UK comedian Ross Noble dropped round to my house with a TV crew to ask me about my NFC implant! He did a series a while ago called Freewheeling where he was led to random things by Twitter. Well worth checking out. Anyway, series 2 will be on in December / January. I'll have to wait until then to see if I made the cut. He left my place to go find a taxidermist who stuffs mice into positions doing things like reading newspapers.
  4. Like
    gwdeveloper reacted to Fred in What are you working on today/this week?   
    I'm working on a reflow oven project. I wanted to keep all the mains voltage safely contained, so the triac/PSU part of it sits inside the oven casing. Whilst testing just this bit I set the oven on and just let it go, partly to see if the temperature inside the oven case (which can reach about 50C) would cause any trouble.

    Anyway, this is what 280C does to a PCB that the thermocouple was attached to. It's only a little bit over reflow temperature, so I want expecting all the smoke and black gunk dripping out!



    The PCB was one of the daughter boards that came with RobG's nanopad. Sorry, Rob!
  5. Like
    gwdeveloper got a reaction from tripwire in What are you working on today/this week?   
    Yesterday, I cleaned out my project drawers. I donated a trash bag full of samples, circuits, pcbs and dev boards to a high school kid on Craigslist. 

     
    Mostly de-cluttering the house in preparation for a move. Any of you guys in the Indianapolis area? www.gwdeveloper.net Sent from Tapatalk...
  6. Like
    gwdeveloper got a reaction from dubnet in Making commercial electronics, self-financed - steps?   
    Electronics and certification aside, make sure you protect yourself legally too.  Lawyer, indemnification... start an LLC or something.
  7. Like
    gwdeveloper got a reaction from KatiePier in Making commercial electronics, self-financed - steps?   
    Electronics and certification aside, make sure you protect yourself legally too.  Lawyer, indemnification... start an LLC or something.
  8. Like
    gwdeveloper got a reaction from ofer in Mailbag   
    Today, I received an order from RobG's Tindie Store; the Ethernet Booster Pack. Thanks @@RobG
     

  9. Like
    gwdeveloper got a reaction from sagy in Anaren TI CC110L RF AIR Booster Pack   
    Here's an updated CCS project for the Anaren Air Booster Pack. It's quite obvious they're not familiar with CCS. Included directories are very vague and leave header includes looking like "../../../HAL/HAL.h" instead of simply, "HAL.h". The code is a mess as well as the project's documentation lacks notes on how to configure the CCS project.
     
    CCS v5.1 Project
    [attachment=2]Anaren_CCS.zip[/attachment]
    CCS v4.2 Project
    [attachment=0]Anaren_CCS_v4.zip[/attachment]
    Originally, it required you to create a new workspace in the /Firmware folder then import the project. With this project, you can import into any workspace.
     
    2 warnings exist after compiling but don't seem to cause malfunction.
    [attachment=1]warning.JPG[/attachment]
     
    Consider this repair in the BETA stages, there are a few more changes that should be made for all-round usability but it works to get it going and test it.
     
    NOTE: This is a CCS project you need to import. In CCS, click "Project -> Import Existing CCS Project" then browse to the unzipped project folder.
  10. Like
    gwdeveloper got a reaction from abecedarian in Tooth brushing minder.   
    Cool.  Are you involving him in the project? 
     
    Also, have you thought about adding a parental alert system?  Something simple that sounds an alarm when, for example, said nephew is actually planking between the tub and sink with the toothbrush hanging idly from his mouth instead of brushing.  Or maybe that's only my kid...
  11. Like
    gwdeveloper got a reaction from metyo in One last BMP085 Project...   
    Ok, so the MSP-EXP430F5529 dev board may not provide me with optimal hardware I/O for my greenhouse controller. Basically, I'd want the power/speed of the F5529 without the accelerometer. If I were rebuilding this board, I'd move the LCD SPI over to UCA1 and free up UCB1 for an I2C channel. UCB0 is being used for the RF2500t interface. So...
     
    My solution (for now) is to use a standalone G2553 as an I2C to UART translator. It actually works out well but not my optimal hardware configuration. This project may not be useful for many but some might find bits of the code helpful. The kicker, though, is I configured all of the hardware using Grace. :crazy:
     
    If you have a BMP085, you can open a terminal on your launchpad port and receive temperature and barometric pressure.
     

    /****************************************************************/ /* Greg Whitmore */ /* greg@gwdeveloper.net */ /* www.gwdeveloper.net */ /****************************************************************/ /* released under the "Use at your own risk" license */ /* use it how you want, where you want and have fun */ /* debugging the code. */ /* MSP-EXP430G2553 */ /****************************************************************/ /* includes */ #include #include #include #include "itoa.h" /* bmp085 defines */ #define BMP085_ADDR 0x77 #define BMP085_CTRL_REG 0xF4 #define BMP085_TEMP_REG 0x2E #define BMP085_PRESSURE_REG 0x34 // oss =0 //#define BMP085_PRESSURE_REG_OSS1 0x74 // oss =1, longer delays needed 7.5ms //#define BMP085_PRESSURE_REG_OSS2 0xB4 // oss =2, 13.5ms //#define BMP085_PRESSURE_REG_OSS3 0xF4 // oss =3, 25.5ms #define BMP085_MSB_REG 0xF6 #define BMP085_LSB_REG 0xF7 #define BMP085_CONV_REG_XLSB 0xF8 /* prototypes */ // bmp085 void bmp085_cal(void); unsigned int bmp085_ut(void); unsigned long bmp085_up(void); void get_bmp085(void); // iic void iic_init(void); void iic_tx_init(void); void iic_rx_init(void); void start_TX(void); void start_RX(void); int sendByte_getBytes(unsigned char reg_2_read, int bytes_to_rx); //uart void TXString( char* string, int length ); /* variables */ // bmp085 // cal data int ac1; int ac2; int ac3; unsigned int ac4; unsigned int ac5; unsigned int ac6; int b1; int b2; int mb; int mc; int md; // true temp long ut; long x1; long x2; long b5; int bmp_temp = 0; //true pressure long up; long x3; long b3; unsigned long b4; long b6; unsigned long b7; long p; long bmp_pres = 0; // adjusters long b6Temp; long x1Temp; //unsigned int i; unsigned char temp_buffer[8]; unsigned char pres_buffer[8]; // tx constants const unsigned char utTxData[] = { BMP085_CTRL_REG, BMP085_TEMP_REG }; // uncomp temp reg const unsigned char upTxData[] = { BMP085_CTRL_REG, BMP085_PRESSURE_REG }; // oss =0 see bmp085.h const unsigned char msbData[] = { BMP085_MSB_REG }; // iic unsigned char *PTxData; // Pointer to TX data unsigned char TXByteCtr; unsigned char *PRxData; // Pointer to RX data unsigned char RXByteCtr; volatile unsigned char RxBuffer[3]; // Allocate 3 byte of RAM void main(void) { CSL_init(); // Activate Grace-generated configuration __enable_interrupt(); // Set global interrupt enable bmp085_cal(); // load calibration data get_bmp085(); // loop to collect temp & pressure // and TX via UART } // store PROM data into usable variables void bmp085_cal(void) { ac1 = sendByte_getBytes(0xAA, 2); __delay_cycles(1000); ac2 = sendByte_getBytes(0xAC, 2); __delay_cycles(1000); ac3 = sendByte_getBytes(0xAE, 2); __delay_cycles(1000); ac4 = sendByte_getBytes(0xB0, 2); __delay_cycles(1000); ac5 = sendByte_getBytes(0xB2, 2); __delay_cycles(1000); ac6 = sendByte_getBytes(0xB4, 2); __delay_cycles(1000); b1 = sendByte_getBytes(0xB6, 2); __delay_cycles(1000); b2 = sendByte_getBytes(0xB8, 2); __delay_cycles(1000); mb = sendByte_getBytes(0xBA, 2); __delay_cycles(1000); mc = sendByte_getBytes(0xBC, 2); __delay_cycles(1000); md = sendByte_getBytes(0xBE, 2); __delay_cycles(1000); } // read uncompensated temperature and return msb & lsb unsigned int bmp085_ut(void) { iic_tx_init(); __delay_cycles(1000); PTxData = (unsigned char *)utTxData; // send control reg and temp reg TXByteCtr = 2; // Load TX byte counter start_TX(); __delay_cycles(200000); // long delay here or it hangs on the valueline mcus return (sendByte_getBytes(BMP085_MSB_REG, 2)); } // read uncompensated pressure and return msb, lsb & xlsb unsigned long bmp085_up(void) { iic_tx_init(); __delay_cycles(1000); PTxData = (unsigned char *)upTxData; // send control reg and temp reg TXByteCtr = 2; // Load TX byte counter start_TX(); __delay_cycles(200000); // long delay here or it hangs on the valueline mcus PTxData = (unsigned char *)msbData; // send msb read register TXByteCtr = 1; start_TX(); iic_rx_init(); // set RX interrupt __delay_cycles(200000); // long delay here or it hangs on the valueline mcus PRxData = (unsigned char *)RxBuffer; // rx buffer RXByteCtr = 3; // number of bytes to receive start_RX(); // returning longs instead of ints to allow 2^16 shifts // sendByte_getBytes not used here due to long shifts return ( (( (long)RxBuffer[0] << 16) | ( (long)RxBuffer[1] << 8) | (long)RxBuffer[2]) >> 8); } // collect uncompensated temp and pressure // calculate compensated temp and pressure then transmit via UART void get_bmp085() { while (1){ ut = bmp085_ut(); up = bmp085_up(); // calc true temp x1 = ((long)ut - ac6) * ac5 >> 15; x2 = ((long)mc << 11) / (x1 + md); b5 = x1 + x2; bmp_temp = (b5 + 8) >> 4; // itoa function added itoa(bmp_temp, (char*)temp_buffer); // move integer into char buffer // calc true pressure b6 = b5 - 4000; //x1 = (b2 * (b6 * b6) >> 12) >> 11; // won't work this way on the value line LSR_23 error b6Temp = b6 * b6; x1Temp = b2 * b6Temp; x1Temp = x1Temp >> 12; x1 = x1Temp >> 11; x2 = (ac2 * b6) >> 11; x3 = x1 + x2; b3 = ((long)ac1 * 4 + x3 + 2) >> 2; // ???? so many 'corrections' on the web this one works though x1 = ac3 * b6 >> 13; x2 = (b1 * ((b6 * b6) >> 12)) >> 16; x3 = ((x1 + x2) + 2) >> 2; b4 = (ac4 * (unsigned long)(x3 + 32768)) >> 15; b7 = ((unsigned long)up - b3) * 50000; if (b7 < 0x80000000) { p = (b7 * 2) / b4;} else {p = (b7 / b4) *2;} x1 = (p >> 8) * (p >> 8); x1 = (x1 * 3038) >> 16; x2 = (-7357 * p) >> 16; bmp_pres = p + ((x1 + x2 + 3791) >> 4); // ltoa part of stdlib.h ltoa(bmp_pres, (char*)pres_buffer); TXString((char*)temp_buffer, sizeof temp_buffer); TXString("\r\n", 2); TXString((char*)pres_buffer, sizeof pres_buffer); TXString("\r\n", 2); __delay_cycles(500000); } } void iic_tx_init() { UCB0I2CSA = BMP085_ADDR; UCB0I2CIE |= UCB0TXIE; // Enable TX interrupt } void iic_rx_init(void) { UCB0I2CIE |= UCB0RXIE; // enable RX interrupt } // send 1 byte, return 2 bytes - needs the return expanded for X bytes int sendByte_getBytes(unsigned char reg_2_read, int bytes_to_rx) { // transmit slave address and register to read iic_tx_init(); __delay_cycles(1000); PTxData = (unsigned char *)&reg_2_read; // TX array start address TXByteCtr = sizeof reg_2_read; // Load TX byte counter start_TX(); // // receive requested bytes iic_rx_init(); // set RX interrupt __delay_cycles(1000); PRxData = (unsigned char *)RxBuffer; // rx buffer RXByteCtr = bytes_to_rx; // number of bytes to receive start_RX(); // return ((int)RxBuffer[0] << 8) | (int)RxBuffer[1]; // currently only returning 2 bytes } // iic start transmitting void start_TX(void) { UCB0CTL1 |= UCTR + UCTXSTT; // I2C TX, start condition __bis_SR_register(LPM0_bits + GIE); // Enter LPM0, enable interrupts __no_operation(); // Remain in LPM0 until all data // is TX'd while (UCB0CTL1 & UCTXSTP); // Ensure stop condition got sent } // iic restart and receive void start_RX(void) { while (UCB0CTL1 & UCTXSTP); // wait for stop UCB0CTL1 &= ~UCTR; // restart, set as receiver UCB0CTL1 |= UCTXSTT; // start condition __bis_SR_register(LPM0_bits + GIE); while (UCB0CTL1 & UCTXSTP); } // interrupt pragma is defined in grace void iic_TX_isr(void) { if (TXByteCtr) // Check TX byte counter { UCB0TXBUF = *PTxData++; // Load TX buffer TXByteCtr--; // Decrement TX byte counter } else { UCB0CTL1 |= UCTXSTP; // I2C stop condition IFG2 &= ~UCB0TXIFG; // Clear USCI_B0 TX int flag } } // interrupt pragma is defined in grace void iic_RX_isr(void) { RXByteCtr--; // Decrement RX byte counter if (RXByteCtr) { P1OUT ^= 0x10; *PRxData++ = UCB0RXBUF; // Move RX data to address PRxData if (RXByteCtr == 1) // Only one byte left? UCB0CTL1 |= UCTXSTP; // Generate I2C stop condition } else { *PRxData = UCB0RXBUF; // Move final RX data to PRxData } } // tx function borrowed from TI's virtual_com_cmds.c void TXString( char* string, int length ) { int pointer; for( pointer = 0; pointer < length; pointer++) { volatile int i; UCA0TXBUF = string[pointer]; while (!(IFG2&UCA0TXIFG)); // USCI_A0 TX buffer ready? } } // timer A isr is simply toggling activity light for now. // future pwm functions to go here void timer_A_ISR(void) { P1OUT ^= BIT0; }
  12. Like
    gwdeveloper got a reaction from MarkusR in SimpiciTI Tutorial for CC2500   
    @@MarkusR
     
    1a) Yes, SPI activation is done by the Simpliciti BSP.
     
    1b) You have no connection for GDO0 or GDO2.
     
    Check:
    ./LP_2553/bsp_external/mrfi_board_defs.h   There you will find the SPI init macro as well as the pin definitions.
  13. Like
    gwdeveloper reacted to B@tto in Adding CC430 support   
    Hi everyone,
     
    I'm working on Energia CC430 support. It's the first time I do this kind of work, it allowed me to understand a lot of things but not everything of course So I have a lot of questions !
     
    So for now where I am : I'm working on a eZ430 - Chronos 433 mhz (==> CC430F6137). I program it with the ez430 USB stick (I will see later for upload using radio BSL). 
     
    For now I just tried to get something working, I made a pin_energia.h creating a new MSP430 variant. I edited the board.h and I had to modify wiring.c to get the clock system working  :
     
    Original line 168 :
     
    #if defined(__MSP430_HAS_UCS__)
     
    Modified to :
     
    #if defined(__MSP430_HAS_UCS__) || defined(__MSP430_HAS_UCS_RF__)
     
    I used some function from the eZChronos firmware provided by TI to test if the system was running, here is the code : 
    https://github.com/battosai30/CC430_EnergiaSupport/blob/master/Test/Heart.cpp
     
    Upload using Energia integrated in CCS v6 ==> IT WORKS the heart on the LCD is beating !
     
    Now I am trying to understand if my modification of wiring.c is enought, and if other Energia features are OK.
     
    All files are here : https://github.com/battosai30/CC430_EnergiaSupport
     
    Now my questions :
     
    1) What is interesting me the most is the radio core. TI provides some interesting low level libraries I can re-use, but I don't know how to integrate it directly in the core. I plans to work on others features like LCD_B, AES ... I think it would be better to directly integrate it and to do not have to add a library each time.
     
    2) I found some defines in msp430's pins_energia.h :
     
    #define TWISDA_SET_MODE  (PORT_SELECTION0 | PORT_SELECTION1 /* | INPUT_PULLUP*/) /* do not enable the pull ups for this device */ #define TWISCL_SET_MODE  (PORT_SELECTION0 | PORT_SELECTION1 /* | INPUT_PULLUP*/) #define DEBUG_UARTRXD_SET_MODE (PORT_SELECTION0 | PORT_SELECTION1 | INPUT) #define DEBUG_UARTTXD_SET_MODE (PORT_SELECTION0 | PORT_SELECTION1 | OUTPUT) #define SPISCK_SET_MODE (PORT_SELECTION0 | PORT_SELECTION1) #define SPIMOSI_SET_MODE (PORT_SELECTION0 | PORT_SELECTION1) #define SPIMISO_SET_MODE (PORT_SELECTION0 | PORT_SELECTION1) #define DEBUG_UART_MODULE_OFFSET 0x0 I don't really understand what they mean ...
     
    3) How the PMAP is used in Energia ? I found a PMAP maping in fraunchpad pins_energia.h but I did not found where it's used.
     
    4) I just need a confirmation : function "const uint8_t digital_pin_to_timer[]" is used to define pins PWM compatible ?
     
    5) In wiring.c init() :
     
    /* Clear P2.6 and P2.7 bits to default to GPIO */ #ifdef P2SEL2 P2SEL &= ~(BIT6|BIT7); #endif Why this lines ? Thanks !
     
  14. Like
    gwdeveloper reacted to Jaspreet@DTU in Web UI for MSP430 launchpad using node.js   
    Hi all!
    I recently worked upon a weather station project where we were required to display the data on a website. I finally decided to create a web UI for MSP430FR5739 launchpad as well.
     

    The web UI is created using Node.js for the server end. The graphs update at every 100ms period. For testing online, i have used localtunnel which allowed me to convert the intranet to internet. The UI receives the data from a MSP430FR5739 launchpad and the data is then displayed on the website. Also, you can transmit data from UI to the launchpad as well.
      Youtube demonstration video:
      The detailed instructions and the source files are there on my github repository: https://github.com/jaspreetsingh009/webui_msp430  
  15. Like
    gwdeveloper got a reaction from pine in System76 Notebooks?   
    Galago UltraPro arrived yesterday evening.  Very nice machine.  The display is bright and crisp.  My only complaint is the trackpad is a bit touchy; never been too fond of them anyway so wireless mouse it is.  Already up and running with CCS v6 too.
     

  16. Like
    gwdeveloper reacted to chicken in Help me port energia to msp430f2274   
    @@gwdeveloper This is my branch of Energia 0012 on Github: https://github.com/astuder/Energia/tree/ez430-rf2500t
    The related pull-request in the main project is here: https://github.com/energia/Energia/pull/344
     
    Fade works, but unfortunately none of the LED pins is able to PWM. T0A0 and T0B0 are used as period registers, see comments in wiring_analog.c. I also needed to do a minor change in wiring_analog.c to adapt to a slightly different peripheral name.
     
    Attached all files that I changed from Energia 0012.
     
    E0012 344 Pull.zip
  17. Like
    gwdeveloper got a reaction from chicken in Help me port energia to msp430f2274   
    @chicken  No, I surely did not.  That's where I was at with the RF2500 when I started having pc issues.  From your last post, it seems that you have it working(?)  I'll check it out over the weekend.
  18. Like
    gwdeveloper reacted to spirilis in Mailbag   
    Got a DLP Design NFC/RFID boosterpack from the POTM gifts. Excited to play around soon and see what it's capable of! Also need to look for RFID tags & see how much it is to get a bunch.
     

  19. Like
    gwdeveloper reacted to pabigot in System76 Notebooks?   
    Bought a lemur4 two years ago; works great.  They even upgraded me to a faster processor because I bought just before Ubuntu 12.04 came out and they had to delay shipment by a week or two.  I'll probably go with them again next laptop, but that won't be for another year or so I think.
  20. Like
    gwdeveloper reacted to username in DIY Walking Desk (WIP)   
    Use information from this tutorial at your own risk to yourself and your device
     
    Its no secret that most of us nerds don't get enough exercise. A handy way to get that is exercising while nerding out on the PC which treadmill desk. Or a dog.... http://xkcd.com/1329/ .  The issue is that with most treadmill desk tutorials out there is that there all about building a desk platform on the existing bars/display of the treadmill. This is annoying cause I already got a desk that I like and I don't want to make another one on top of a treadmill. I kinda suck at mechanical stuff anyways so I figured it be easier to hack the controls of the internal controller. Turns out, it wasn't so bad. 
     
    I'm using the Gold Gym 420 treadmil from walmart. This thing costs about 380 something USD (ouch!). I couldn't find a good cheapie on cregs list and the beauty of the 420 treadmill is that it doesn't rely on the vertical bars to support the platform thus making it insanely simply to convert to a treadmill desk. One simply skips the assembly and designs a simple control board and presto you are done!
     
    http://www.walmart.com/ip/Gold-s-Gym-Trainer-420-Treadmill/27407264

     
    Thankfully this treadmill is well designed and consequently is easy to control. It uses a standard 100mil spaced header and only uses 8 wires. See picture:

     
    Starting from right to left, here is the pinout:
    1. Black --> GND
    2. Pink --> 12V
    3. Green --> 3.3V (you must source this, ideally get it from the 12V)
    4. Blue --> Speed Control, 1.5V Signal, PWM (3.3V IO through 1kohm resistor seems to work)
    5. Orange --> Incline Control Drive+
    6. Yellow --> Incline Control Drive-
    7. Purple --> Incline Control Encoder Feedback
    8. Black --> Ground
     
    Speed Control
     
    The speed control on this device is elegant and simple. It is controlled through a
    simple PWM controller where the +%duty cycle correlates to the speed. The frequency
    is 20hz and 10ms on correlates to 1mph. The speed then increases by 0.4ms per 0.1mph
    increase. Consequently, 3mph = 10ms + (3-1mph)*10*0.4ms = 18ms positive pulse width.
    See screenshot below for reference. This screenshot is going at 1.3mph
     

     
    Todo
     
    Incline control walkthrough
    Add distance & Calorie burn support
    Add 802.11 support to send exercise information to the cloud / Xlivley
     
    Interface Control board
     
    Commands will be sent through a NRF24L 2.4 GHz to a dumb controller that will simply pulse width modulate accordingly  to the speed sent. The main controller will be the same controller I designed for my smart Scale. It has 2.2" touch support, 2.4Ghz NRFL24 support, as well as 802.11 support.
     
    Controller back

     
    Controller front

    ^^^ I'm happy with this control board I designed. It can control my reflow oven, works as a lazer power meter, works for my smart scale, and it works for my smart treadmill among many other applications.
     
    Driver Board:
    This was a small wireless IO board I made in senior design to control my coffee maker. Turns out it works perfectly for the treadmill as well. This device is what communicates through the NRF24L module to my display board. This basically goes inside the treadmill to eliminate wire mess.
     

     
     
    Desk View (sorry for the mess... haven't quite situated everything yet)
     

     
    More to come as I have time to post it...
  21. Like
    gwdeveloper reacted to zlalanne in Serial Data GUI   
    I created a quick project to start learning nodejs. To those that are unfamiliar nodejs allows you to write javascript for the server side. So I decided to write a small gui that plots serial data. The GUI itself is written in javscript/html and uses node-webkit to package it into a .exe file (or the correct package for your os).
     
    This could easily be extended to visualize a lot more I/O from the launchpad, and given that the GUI is written in html/javascript it is really easy to create new elements.
     

     
    Here is the source:
    https://github.com/zlalanne/node-serial-gui
     
    The repository includes the nodejs code as well as a simple Energia sketch to send a random value over serial.
  22. Like
    gwdeveloper reacted to Fred in Mailbag   
    The postman just bought me a NFC-enabled Samsung Ezon SHS 2320 lock for my workshop. I had to get it eBayed direct from Korea as you can't seem to get them in the UK. Why? Because my implantable NFC tag should be on its way soon. Not directly MSP430-related, but expect to see more NFC projects from me once I'm chipped. My wife wasn't impressed and thinks it's creepy.
     
    I did think about making my own. I'm OK with the NFC bit but a decent motorised lock is hard to come by. Plus, if my wife can't get in because of a by a bug in my code I'd be in trouble!

  23. Like
    gwdeveloper reacted to spirilis in Mailbag   
    Working on a (somewhat fat) library for those puppies with DHCP code begun just yesterday  
    Sent from my Galaxy Note II with Tapatalk 4
     
     
  24. Like
    gwdeveloper got a reaction from RobG in Mailbag   
    Today, I received an order from RobG's Tindie Store; the Ethernet Booster Pack. Thanks @@RobG
     

  25. Like
    gwdeveloper got a reaction from spirilis in Mailbag   
    Today, I received an order from RobG's Tindie Store; the Ethernet Booster Pack. Thanks @@RobG
     

×
×
  • Create New...