Jump to content
43oh

Automate

Members
  • Content Count

    253
  • Joined

  • Last visited

  • Days Won

    7

Reputation Activity

  1. Like
    Automate reacted to opcode in New Stellaris Launchpad?   
    This looks like good news.. only $5!
     

    http://youtu.be/teZyF1IDtCM
  2. Like
    Automate reacted to oPossum in AC power usage Booster Pack   
    The C2000 also has an isolated programmer/debugger/serial port so the voltage measurement could be done with a resistor divider rather than a transformer. Overall it is a much better platform for energy measurement and high resolution data acquisition. The C2000 can easily keep up with the full ADC sample rate while doing RMS calculations on each sample. It also has dedicated analog pins. One of the problems with the MSP430 launchpad is that the 8 analog channels are on pins used for other peripherals like UART, SPI, Timer and such. So there aren't many analog channels that are really available. That is why I used the 12 bit ADC chip.
     
    Overall I think the new C2000 lauchpad with a simple passive front end and the internal ADC would be a good place to start. You can always move up to a 16 or 24 bit external ADC if needed.
     
    Eagle schematics attached. Be aware the MCP3909 probably has the wrong package - I just grabbed something so I could make a library part.
    power12.sch
    power24.sch
  3. Like
    Automate got a reaction from RobG in Ethernet Booster Pack   
    Or if you want to test TCP, here is a Java app that does TCP and UDP as either client or server.http://sourceforge.net/projects/sockettest/
  4. Like
    Automate got a reaction from bluehash in STM32-H407 low cost Cortex-M4 development kit from Olimex   
    Ethernet version is now available http://olimex.wordpr...ernet-in-stock/
    Here is a comparison with the STM32F4-Discovery http://www.chibios.o...scovery_vs_e407
  5. Like
    Automate reacted to CorB in AIR Boosterpack RF spectrum display   
    Hi all,
     
    One of the things I wanted to build using the Anaren AIR boosterpack was a mini spectrum "analyzer" or spectrum display. During my holiday i found time to play around with both the AIR boosterpack and the LCD module Lars has produced.
     
    Although the AIR boosterpack was designed for 868/915 Mhz it seems the receiver inside (CC110L) is sensitive also in the 433Mhz region. The code I share with this mail allows the user (by changing a define) to switch between 3 frequencybands. Two buttons of the LCD package allow change of RX bandwidth and channelwidth.
     
    THe screenshot below shows a typical readout in the 433 Mhz band in a room where a Lacross TX3TH temperature/humidity sensor is sending data every minute using an OOK protocol (Request: if anybody knows how to receive/decode OOK using a CC110L please inform me). The display shows the low and high frequency in Mhz and shows the frequency with the highest readout (RSSI in dB) in kHz and as a blinking line in the graph.
     

     
    If you want to know more about this mini spectrum display or have other comments, feel free to share them.
     
    regards
    CorB
    spectrum.zip
    glcd.zip
  6. Like
    Automate reacted to CorB in MSP430 meets LaCrosse Temperature/Humidity sensor TX3TH   
    Hi,
     
    Excuses for the long post !!
     
    After I found out that I could detect signals in the 433Mhz band using an AIR Boosterpack (See viewtopic.php?f=9&t=2944 AIR Boosterpack RF spectrum display) I wanted to display the data I was receiving on the 433 Mhz band.
    Ive got a Lacrosse temperature/humidity logger WS8610 that can read up to 3 external sensors and log the data. These sensors broadcast their data every minute or so.
     
    Since I have a logger and I have a display you might ask why do you want to read the data ? My motivation for this is simple, the datalogger can only capture data for about 1.5 weeks and then the oldest readings are overwritten and I need to connect the datalogger to an old PC (that still has a USB-DB9 connector) to be able to store the data. If I can read the data directly from the sensors I can hook them up in a system I allready have running with several other sensors (gas, electricityusage, inside temperature) and store the data on the internet. For those that are interested I am using Thingspeak to store my data.
     
    So last week I started to look at a way to decode the signals I saw coming in using my spectrum display. Luckily other people had allready done a lot of work on the protocol used by the sensors. The sensordata is send using On/Off keying (OOK).
    See http://ftp.f6fbb.org/domo/sensors/tx_signals.php and http:/ftp.f6fbb.org/domo/sensors/tx3_th.php
     
    After a few days of trial-and-error approach (thanks go to larsie for the feedback and ideas !) I actually was getting signals that could be the sensordata. To cut a long story short, using asynchronous CarrierSense detection on the AIR BOOSTERPACK and timing the length of the pulse coming in I can read the incoming data from several sensors. The software is definitely in its alpha stages. I can read one sensor properly but reading multiple sensors does give problems, if I set the RF registers to read the nearby sensor (3-4 meters away) the far away sensor (>10m) doesnt get picked up. When I set to register to read the far away, the nearby gets picked up but the data isnt as it should be anymore.
     
    Here's an image to show that I get results that are the same as my LaCrosse display shows (from left to right : MSP430 sandwich, Lacrosse display and a not active TX3TX sensor).
     

     
    The code below is based on the same GLCD and TI libraries as I used for my spectrum display project.
     
    regards
    CorB
     
     

    /* * This file is licensed under BSD. The simplicity code is originally copyright Texas Instruments, * but has been adapted by Lars Kristian Roland/Cor Berrevoets * the glcd code is by Lars Kristian Roland/Cor Berrevoets * the tx3th sensor information can be found at http://ftp.f6fbb.org/domo/sensors/tx3_th.php * the sensor first sends temperature information consisting of 11 blocks of 4 bits repeated once * the sensor secondly sends humidity information consisting of 11 blocks of 4 bits repeated once * block 0 is 0000 * block 1 is 1010 (preamble) * block 2 is sensortype 0=temperature E=humidity * block 3 is 4 bits sensorID * block 4 is 3 bits sensorID and another bit (unknown purpose) * block 5/6/7 is temperature in tenths degrees BCD +50 degrees * block 5/6/7 is humidity in tenths percent BCD (always ending at 0) * block 8 = block 6 * block9 = block 7 * block10 = CRC * */ //******************************************************************* // // G2553 // // ----------------- // | | // |VCC GND | // S1/GDO2 |P1.0 P2.6|-RF-GDO0 // S2 |P1.1 P2.7|-RF-CS // SW1 |P1.2 | // LED |P1.3 | // glcd-cs |P1.4 P1.7|<-------| glcd/RF-MISO //glcd/RF-CLK |P1.5 P1.6|------->| glcd/RF-SOMI // S3 |P2.0 P2.5| // S4 |P2.1 P2.4| // |P2.2 P2.3| // | | // ----------------- //******************************************************************* #include "ti/include.h" #include "../library/glcd_charset.c" #include "../library/glcd.c" unsigned long clockcnt=0,lastclock=0; unsigned long lastpulsecnt, pulsecnt=0,faultcount=0, pulselength=0; unsigned char bit; // bitcounter 0..3 unsigned char bitdata[4]={8,4,2,1}; // to create a nibble readout with MSB first coming in char pulseindx; // nibblecounter unsigned char pulsetrain[50],oldpulse[50]; // datapackage storage unsigned char line=4; // display of temperature datapackage int rssi; #define signal BIT2 void setup433MhzOOKreader() { TI_CC_SPIStrobe(TI_CCxxx0_SIDLE); // set IDLE TI_CC_SPIWriteReg(TI_CCxxx0_FREQ2, 0x10); // Freq control word, high byte TI_CC_SPIWriteReg(TI_CCxxx0_FREQ1, 0x00); //Freq control word, mid byte. TI_CC_SPIWriteReg(TI_CCxxx0_FREQ0, 0x00); //Freq control word, low byte. TI_CC_SPIWriteReg(TI_CCxxx0_MDMCFG4, 0x06); // RX bandwidth and datarate MSB TI_CC_SPIWriteReg(TI_CCxxx0_MDMCFG3, 0x37); // datarate LSB TI_CC_SPIWriteReg(TI_CCxxx0_MDMCFG2, 0x00); // no preamble/sync TI_CC_SPIWriteReg(TI_CCxxx0_MDMCFG1, 0x00); // CHANNEL SPACING and channelspacing MSB TI_CC_SPIWriteReg(TI_CCxxx0_MDMCFG0, 0xe5); // x2E5=200Khz x1E5=100Khz x0E5=50Khz x000=25Khz, CHANNEL SPACING LSB TI_CC_SPIWriteReg(TI_CCxxx0_FOCCFG, 0x00); // no IF compensation for OOK TI_CC_SPIWriteReg(TI_CCxxx0_AGCCTRL2,0xc3); // receiver gain 0xAB A B TI_CC_SPIWriteReg(TI_CCxxx0_PKTCTRL0, 0x32); //asynchronous mode TI_CC_SPIWriteReg(TI_CCxxx0_IOCFG0, 0x0E); //GDO0Output Pin Configuration asynchronous output TI_CC_SPIWriteReg(TI_CCxxx0_CHANNR, 48); // change radio to channel 48 in 432Mhz band (50khz spacing) TI_CC_SPIStrobe(TI_CCxxx0_SRX); // goto receivermode } void main (void) { WDTCTL = WDT_MDLY_0_064; // WDT ~0.064ms interval timer IE1 |= WDTIE; // Enable WDT interrupt P1DIR |=signal; TI_CC_GDO0_PxIES &= ~TI_CC_GDO0_PIN; // Int on falling edge (end of pkt) TI_CC_GDO0_PxIFG &= ~TI_CC_GDO0_PIN; // Clear flag for GDO0 TI_CC_GDO0_PxIE |= TI_CC_GDO0_PIN; // Enable interrupt on end of packet RF_init(); // SETUP ANAREN AIR RF __delay_cycles(50000); SPISetup(); // Initialize SPI Display __delay_cycles(100000); clear(); __delay_cycles(100000); //reset the pulsetrain indices and storage arrays for (pulseindx=0; pulseindx<49; pulseindx++) { pulsetrain[pulseindx]=0; oldpulse[pulseindx]=0; } pulsecnt=0; pulseindx=0; bit=0; lastpulsecnt=0; writeInt(0,2,faultcount,3); // display faults writeInt(48,2,pulsecnt,3); // display how many packages have been read setup433MhzOOKreader(); __enable_interrupt(); // enable all interrupts while (1) // do for ever { if (pulsecnt>lastpulsecnt) // display data only of we have received a package { setcharmode(1); // switch to large characters if ((oldpulse[1]==0x0a) && (oldpulse[12]==0x0a)) { unsigned int temperature; unsigned int humidity; temperature=(oldpulse[5]-5)*100+oldpulse[6]*10+oldpulse[7]; writeInt(0,0,temperature,3); humidity=oldpulse[27]*10+oldpulse[28]; writeInt(48,0,humidity,3); lastpulsecnt=pulsecnt; } writeInt(0,2,faultcount,3); // display faults writeInt(48,2,pulsecnt,3); // display how many packages have been read setcharmode(0); // switch to small characters unsigned char temp; char i,x; x=0; // show the 11 nibbles of the temperature part of the package for (i=0; i<11; i++) { temp = oldpulse[i]; temp += (temp > 9) ? 'A' - 10 : '0'; writeChar(x,line,temp); x=x+6; } writeInt(x+6,line,rssi,4); } } } #pragma vector = WDT_VECTOR // - Watchdog timer interrupt vector __interrupt void wdt_isr(void) // This interrupt will occur once per second { // clockcnt++; } #pragma vector=PORT2_VECTOR __interrupt void Port_2(void) { // REALLY cheap debounce. // We can get away with this because we're edge triggering but reading the level. if(TI_CC_GDO0_PxIFG & TI_CC_GDO0_PIN) { pulselength=clockcnt-lastclock; lastclock=clockcnt; if (pulselength<30) {pulsetrain[pulseindx]|=bitdata[bit];} bit++; if (bit==4) {bit=0; pulseindx++;} if (pulseindx>43) // we got all 44 bits in { rssi=TI_CC_SPIReadStatus(TI_CCxxx0_RSSI); __delay_cycles(100); if(rssi < 128) // convert RSSI readout to dB { rssi = -((rssi/2) - 74); } else{ rssi = -(((rssi - 256)/2) - 74); } char j; for (j=0; j<45; j++) {oldpulse[j]=pulsetrain[j]; pulsetrain[j]=0; } //reset indices pulseindx=0; bit=0; //increment the line to display the datapackage line++; if (line>7) {line=4;} if (oldpulse[1]==0x0a) {pulsecnt++;} else {faultcount++; pulsecnt++;} // add a long delay after reading the 44th nibble, corrects possible mistakes also __delay_cycles(10000000); } TI_CC_GDO0_PxIFG &= ~TI_CC_GDO0_PIN; // After pkt RX, this flag is set. } }
  7. Like
    Automate got a reaction from opcode in STM32-H407 low cost Cortex-M4 development kit from Olimex   
    Ethernet version is now available http://olimex.wordpr...ernet-in-stock/
    Here is a comparison with the STM32F4-Discovery http://www.chibios.o...scovery_vs_e407
  8. Like
    Automate reacted to RobG in WIZ820io Booster Pack and Server boards   
    Store links:
    WizIO 2553 Server Board PCB.
     
    Here are 3 more boards I am working on.
     
    WIZ820io Booster Pack
    Besides 820, the board has a room for 2 opto couplers, 2 ADC input dividers with capacitor and protection diodes, ULN2003 (high current outs,) and MAX3232 (RS-232 in/out.)
    This is not in production yet, so any suggestions are welcome.
     
    WIZ820io "Server" boards, one with MSP430G2553 and one with MSP430FR5739 (I might make one with MSP430F5310 later on.)
    They fit right under 820 and have an on board LDO. Available next week.
     


  9. Like
    Automate reacted to RobG in MSP430F5510 USB Development Board   
    MSP430F5510 development board, inspired by xpg, with LaunchPad compatible headers.
     




  10. Like
    Automate reacted to oPossum in AC power usage Booster Pack   
    Here are two design proposals. Up to 6 of each can be stacked to increase channel count.
     
    The first uses a 12 bit ADC and has 2 channels that can be used for voltage or current and 5 channels that are current only. This could be used for single or split phase applications. Accuracy would be poor at low load due to limited ADC resolution.
     
    A 2.5 V reference voltage is supplied by the MSP430 and buffered by IC1A. The buffered reference is used by the ADC and also divided by 2 and buffered by IC1B to create a bias for the sensors. The first ADC channel reads the bias voltage so it can be subtracted from the other 7 channels and produce a signed result representing voltages above and below 'zero'.
     
    Each input has a simple passive first order low pass filter to reduce aliasing. A second or higher order filter would be better, but require many more components.
     

     
    The second uses a 24 bit (max) ADC and has 3 channels that can be used for voltage or current and 3 channels that are current only. It could be used for single, split, or 3 phase applications. Accuracy would probably be limited by the voltage and current transformers used. It could approach 'utility grade' precision with careful hardware and firmware design.
     
    Each input is balanced and ground referenced. TP or STP cable would be used to minimize pickup of unwanted signals in the wiring. Passive first order low pass filter to reduce aliasing.
     
    The MCP3903 ADC is made for power monitoring applications and has hardware assist for phase lead/lag compensation. This would be a SMD design to ensure maximum performance - ground planes and guarding are critical for high resolution measurement.
     

  11. Like
    Automate reacted to campbellsan in YABB - Breadboard Booster on steroids   
    YABB - Yet Another Breadboard Booster (this time on steroids)
     
    Launchpad Booster integrated breadboards are undoubtedly very handy for learning and experimentation. However, there is no denying the obvious; you can't squeeze very many components onto a breadboard this size.
     
    So, what about this? A breadboard Booster Pack with a CPLD lurking beneath?
    I chose a Xilinx XC9572XL which is very inexpensive and puts 3,200 re-programmable logic gates at your fingertips. You'd need a breadboard the size of a desktop to lay out that much logic on a traditional breadboard!
     
    Because the CPLD is mounted on the reverse side of the board, it has exactly the same 50mm form factor as other conventional breadboard Boosters. It therefore leaves access to the Launchpad LEDs and buttons. I included space for an optional crystal to clock the programmable logic. SInce this can theoretically go up to 178 MHz, it gives access to solving problems an MSP430 on its own could never tackle.
     
    Even if you're not ready to start playing with programmable logic, this board would be worth having. The default CPLD configuration will be for the MSP430 pins to pass straight through, so it will be just like using a regular breadboard Booster. However once you're ready, this little board will grow with you.
     
    I have based the layout around a little breadboard from Seeed Studio which measures 3.5 x 4.5 cm, but of course I would be open to better suggestions.
     
    Let me know what you think. If there is interest, I will post the schematic and board files I have so far.
  12. Like
    Automate reacted to RobG in Ethernet Booster Pack   
    [EDIT] The newest version of this BP is here
     
    [EDIT] This project is finished
    Available in the 43oh Store.

    This is still in it's early phase, so I need your input.

    Here are some specs so far:
    1. WIZnet's W5200 Ethernet controller chip (W5100 or W5300 is an option.)
    2. MagJack
    3. LDO + power header
    4. Opto isolators (2 or more) + output header
    5. Input/output header for switches/keypad/display
    6. DIP or SMD MSP430G

    I have decided to use W5200 because...
    "W5200 chip is a Hardwired TCP/IP embedded Ethernet controller that enables easier internet connection for embedded systems using SPI (Serial Peripheral Interface). The W5200 is composed of a fully hardwired market-proven TCP/IP stack and an integrated Ethernet MAC & PHY. Hardwired TCP/IP stack supports TCP, UDP, IPv4, ICMP,
    ARP, IGMP, and PPPoE. By using W5200, users can implement the Ethernet application they need by using a simple socket
    program instead of handling a complex Ethernet Controller."

    In other words, you do not have to deal with or waste resources on TCP/IP stack.

    The board could be used as a booster pack or free standing, hence MSP430G and LDO.
    The total cost should be around $10 or less.

    Few decisions I have to make:
    2 or more opto couplers?
    DIP, SMD or both (MSP430G?)

    Any suggestions?


  13. Like
    Automate reacted to RobG in WIZ820io Booster Pack and Server boards   
    175mA for the W5200 plus current needed to drive whatever you are attaching to this board. MSP430 consumption is insignificant.
  14. Like
    Automate reacted to oPossum in AC power usage Booster Pack   
    There are some good design ideas in that Instructable, but the implementation is weak. For example the current sensors are biased to allow the ADC to read the AC signal they produce - that is OK. The problem is that the bias voltage is not measured, it is assumed to be 1/2 of supply, so there can be a DC offset in the current measurement. There is also no anti-aliasing filter on the ADC. The way AC voltage is measured also has a few problems.
     
    Give me a few days and I'll draw up a schematic that fixes these design problems.
×
×
  • Create New...