Jump to content


  • Content Count

  • Joined

  • Last visited

  • Days Won


Reputation Activity

  1. Like
    abecedarian reacted to blankfield in ATX2CHARGER - switch your ATX into a car battery charger with MSP430 [UPDATED]   
    I've edited first post, now all materials are included.
  2. Like
    abecedarian reacted to blankfield in ATX2CHARGER - switch your ATX into a car battery charger with MSP430 [UPDATED]   
    In case of wrong polarity with mosfet switched on, a car battery can provide lot more amps. In this case current is limited only by series resistance of battery, wires, Rds(ON), atx transformer secondary side winding etc.
    I've made some simulations and conclusion is only one: don't switch this mosfet when battery is in wrong polarity, it's easy to make software protections for this situation. Wrong polarity for circuit is safety, I don't want to add reverse protection diode on high current path because of power losses.

  3. Like
    abecedarian reacted to blankfield in ATX2CHARGER - switch your ATX into a car battery charger with MSP430 [UPDATED]   
    Hi everyone,

    I have idea to use msp430 and hacked atx power supply as a car battery charger. Simply msp430 will be used to control of charge process, different charging current, time, precharging and swichable load for accurate voltage measurement will be available.


    * hacked atx to 17V
    * enclosure
    * schematics
    * pcb
    * functional code

    To do:
    * firmware development

    If anyone have some suggestions fell free to post within this topic, I'll be grateful.

    Simple description of operation:

    At first voltage measurement is initiated, user set type of car battery, capacity and charge strategy. While charging is started PWM signal control P-MOSFET to set correct current, feedback is taken from 5mR shunt resistor trough RC low-pass filter and software implementation of 3 order Chebyshev LP filter. Every 5 minutes charge process stops, load resistor is applied and voltage reading is taken. During charge process user can see actual voltage, current, elapsed time and estimated period to end of charging. If battery will be accidentally disconnected mcu stops charging process.  
    [uPDATE] 22.12.2012 ======================================================
    ATX2CHARGER is now working, I've successfully charged some car batteries. In near future I need to finish firmware, add rest of options etc. Tomorrow I'll add attachments (sorce of firmware and gerbers).
    Final schematics:
        PCB:     Tests of working unit:  
    All media:
    /*==================================================================== * * ATX2CHARGER v1.0 * 2012 by blankfield <blank0field@gmail.com> * MSP430G2553 @ 16MHz, 3,3V * ===================================================================*/ /*==================================================================== * * headers and includes * ===================================================================*/ #include <msp430.h> #include <ti/mcu/msp430/csl/CSL.h> #include <stdio.h> #include <string.h> #include "msp430g2553.h" #include "main.h" #include "LCD2x16.h" /*==================================================================== * * constants and definitions * ===================================================================*/ //charge indicator animation const char bat0[8] = {0x0A, 0x1F, 0x11, 0x11, 0x11, 0x11, 0x11, 0x1F}; const char bat1[8] = {0x0A, 0x1F, 0x11, 0x11, 0x11, 0x11, 0x1F, 0x1F}; const char bat2[8] = {0x0A, 0x1F, 0x11, 0x11, 0x11, 0x1F, 0x1F, 0x1F}; const char bat3[8] = {0x0A, 0x1F, 0x11, 0x11, 0x1F, 0x1F, 0x1F, 0x1F}; const char bat4[8] = {0x0A, 0x1F, 0x11, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F}; const char bat5[8] = {0x0A, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F}; #define SWSTART BIT7 //P2.7 - START #define SWF1 BIT7 //P1.7 - F1 #define SWF2 BIT6 //P1.6 - F2 #define FIRNtap 15 //fir lp filter number of tap #define Vref (float)3.3 #define ADCRES (float)1023 #define R7resistor (float)4650 #define R9resistor (float)1005 #define R15resistor (float)0.005 #define Uconstant (float)((Vref/ADCRES)*((R7resistor+R9resistor)/R9resistor)) #define Iconstant (float)((Vref/ADCRES)/(R15resistor)) enum enumdisplay_menu {startup, measure_acc, settings, chargeing_params, chargeing_time, summary}; enum enumcharge_type {emergency, normal, mainterance_free}; enum enumaccu_voltage {U6V, U12V}; enum enumstate {idle, charge, discharge}; #pragma DATA_SECTION(ee_charge_type, ".mydata"); #pragma DATA_SECTION(ee_accu_capacity, ".mydata"); #pragma DATA_SECTION(ee_accu_voltage, ".mydata"); #pragma DATA_ALIGN(ee_charge_type, 1); #pragma DATA_ALIGN(ee_accu_capacity, 1) #pragma DATA_ALIGN(ee_accu_voltage, 1); /*==================================================================== * * variables * ===================================================================*/ //FLASH "EEPROM" VALUES unsigned char ee_charge_type; unsigned char ee_accu_capacity; unsigned char ee_accu_voltage; struct timeformat { char hours; char minutes; char seconds; }time; int time_prescale=0; int measurments[4]; float measured_charge_current = 0; float measured_charge_voltage = 0; float measured_discharge_current = 0; float measured_discharge_voltage = 0; float measured_idle_current = 0; float measured_idle_voltage = 0; float Iavg = 0; float Imax = 0; float Ucellmax = 2.5; float Ucelloptimum = 2.4; char accu_capacity = 75; char accu_voltage = U12V; char charge_type = normal; //char charge_time = 0; char charge_progress = 0; char elapsed_1s = false; char tempstring[20]; float DCV[10]; char display_level = startup; char state = idle; /*==================================================================== * * main() * ===================================================================*/ int main(int argc, char *argv[]){ CSL_init();// Activate Grace-generated configuration __delay_cycles(5000); init_mcu(); _delay_cycles(1000000); LCD2x16_Initialize(); __delay_cycles(5000); LCD2x16_WriteCommand(0x01); __delay_cycles(5000); ADC10CTL0 |= ENC;//Start ADC TA1CCR1 = 0; while(1){ control(); if (elapsed_1s){ sprintf(tempstring,"%1.2f;%1.2f;%1.2f;%1.2f;%1.2f;%1.2f;", measured_idle_voltage,measured_idle_current, measured_charge_voltage,measured_charge_current, measured_discharge_voltage,measured_discharge_current); int i; for (i=0; i<sizeof(tempstring); i++) { while (!(IFG2 & UCA0TXIFG)); UCA0TXBUF = tempstring[i]; } elapsed_1s=false; } switch(display_level){ case startup: menu_redraw(); __delay_cycles(25000000); display_level = measure_acc; menu_redraw(); break; case measure_acc: menu_redraw(); if (!(P2IN & SWSTART)) { beep_sound(); display_level=settings; menu_redraw(); } if (!(P1IN & SWF1)) { beep_sound(); if (accu_voltage == U12V) accu_voltage = U6V; else accu_voltage = U12V; menu_redraw(); } break; case settings: if (!(P2IN & SWSTART) && true) { beep_sound(); time.seconds=0; time.minutes=0; time.hours=0; Iavg=0; display_level = chargeing_params; state = charge; menu_redraw(); } if (!(P1IN & SWF1)) { beep_sound(); accu_capacity += 5; if (accu_capacity > 200) accu_capacity = 5; menu_redraw(); } if (!(P1IN & SWF2)) { beep_sound(); charge_type++; if (charge_type>=3) charge_type=0; menu_redraw(); } break; case chargeing_params: if (!(P2IN & SWSTART)) { beep_sound(); display_level=summary; state = idle; menu_redraw(); } if (!(P1IN & SWF1)) { beep_sound(); display_level=chargeing_time; menu_redraw(); } break; case chargeing_time: if (!(P2IN & SWSTART)) { beep_sound(); display_level=summary; state = idle; menu_redraw(); } if (!(P1IN & SWF1)) { beep_sound(); display_level=chargeing_time; menu_redraw(); } break; case summary: if (!(P2IN & SWSTART)) { beep_sound(); display_level=measure_acc; menu_redraw(); } break; } } } /*==================================================================== * * menu_redraw() * ===================================================================*/ void menu_redraw(void){ LCD2x16_GoTo(0,0); switch(display_level){ case startup: LCD2x16_WriteText("ATX2CHARGER v1.0"); LCD2x16_GoTo(0,1); LCD2x16_WriteText(" by blankfield"); break; case measure_acc: if (measured_idle_voltage <=1){ LCD2x16_WriteText("Check battery, "); LCD2x16_GoTo(0,1); sprintf(tempstring,"%01.2fV is too low ",measured_idle_voltage); LCD2x16_WriteText(tempstring); } else{ sprintf(tempstring,"Battery U=%02.2fV ",measured_idle_voltage); LCD2x16_WriteText(tempstring); LCD2x16_GoTo(0,1); //sprintf(tempstring,"P=%01.0f I= %02.2fA ", TA1CCR1*0.05, measured_idle_current); sprintf(tempstring,"Type F1:%02.0dV ",(accu_voltage*6)+6); LCD2x16_WriteText(tempstring); } break; case settings: sprintf(tempstring,"Set cap F1:%03.0dAh ",accu_capacity); LCD2x16_WriteText(tempstring); LCD2x16_GoTo(0,1); if (charge_type==normal) LCD2x16_WriteText("F2: standard "); if (charge_type==mainterance_free) LCD2x16_WriteText("F2: mainter.free"); if (charge_type==emergency) LCD2x16_WriteText("F2: emerg.charg."); break; case chargeing_params: sprintf(tempstring,"U=%02.1fV I=%02.1fA", measured_charge_voltage, measured_charge_current); LCD2x16_WriteText(tempstring); LCD2x16_GoTo(0,1); sprintf(tempstring,"U=%02.1fV I=%02.1fA", measured_discharge_voltage, measured_discharge_current); break; case chargeing_time: sprintf(tempstring,"Elapsed %2.0f:%2.0f:%2.0f", time.hours, time.minutes, time.seconds); LCD2x16_WriteText(tempstring); LCD2x16_GoTo(0,1); sprintf(tempstring,"Iavg=%2.2f ", Iavg); LCD2x16_WriteText(tempstring); break; case summary: LCD2x16_WriteText("Finished! "); LCD2x16_GoTo(0,1); sprintf(tempstring,"%2.0f:%2.0f:%2.0f @ %2.2f", time.hours, time.minutes, time.seconds, Iavg); LCD2x16_WriteText(tempstring); break; } } /*==================================================================== * * control() * ===================================================================*/ void control(void){ switch (state){ case idle: TA1CCR1=0; TA1CCR2=0; break; case charge: TA1CCR2=0; if ((measured_charge_voltage < (Ucelloptimum*3*(accu_voltage+1))) && (measured_charge_current < (accu_capacity/5/(charge_type+1))) && (TA1CCR1<1999)){ TA1CCR1++; } if (((measured_charge_voltage > (Ucelloptimum*3*(accu_voltage+1))) || (measured_charge_current > (accu_capacity/5/(charge_type+1)))) && (TA1CCR1>1)){ TA1CCR1--; } if (TA1CCR1 <=100 && measured_charge_voltage >= (Ucelloptimum*3*(accu_voltage+1))){ state = idle; display_level = summary; beep_sound(); } break; case discharge: TA1CCR1=0; TA1CCR2=1000; break; } } /*==================================================================== * * init_mcu() * ===================================================================*/ void init_mcu(void){ WDTCTL = WDTPW + WDTHOLD; char name[18]="AT+NAMEATX2CHARGER"; int i; for (i=0; i<18; i++) { while (!(IFG2 & UCA0TXIFG)); UCA0TXBUF = name[i]; } } /*==================================================================== * * measure() * interrupts from ADC * ===================================================================*/ void measure(void){ time_prescale++; if (time_prescale==999){ elapsed_1s=true; time.seconds++; //increase every 1s if(time.seconds==60){ time.seconds=0; time.minutes++; if(time.minutes==60){ time.minutes=0; time.hours++; } } } switch (state){ case idle: measured_idle_current = measurments[3]*Iconstant; measured_idle_voltage = measurments[0]*Uconstant; break; case charge: measured_charge_current = measurments[3]*Iconstant; Iavg = (Iavg + measured_charge_current)/2; measured_charge_voltage = measurments[0]*Uconstant; break; case discharge: measured_discharge_current = measurments[3]*Iconstant; measured_discharge_voltage = measurments[0]*Uconstant; break; } return; } /*==================================================================== * * beep_sound() * ===================================================================*/ void beep_sound(void){ TA0CCR1 = 1000; __delay_cycles(500000); TA0CCR1 = 0; return; } /*==================================================================== * * fir() * ===================================================================== WinFilter version 0.8 http://www.winfilter.20m.com akundert@hotmail.com Filter type: Low Pass Filter model: Chebyshev Filter order: 3 Sampling Frequency: 1000 Hz Cut Frequency: 6.000000 Hz Pass band Ripple: 1.000000 dB Coefficents Quantization: float Z domain Zeros z = -1.000000 + j 0.000000 z = -1.000000 + j 0.000000 z = -1.000000 + j 0.000000 Z domain Poles z = 0.981540 + j -0.000000 z = 0.990073 + j -0.036073 z = 0.990073 + j 0.036073 ***************************************************************/ float fir(float NewSample) { float FIRCoef[FIRNtap] = { 0.06499156895458164900, 0.06567519555537033900, 0.06626048168634461600, 0.06674435292740793500, 0.06712913054423083600, 0.06742809591680600000, 0.06768722943723189100, 0.06816788995605341200, 0.06768722943723189100, 0.06742809591680600000, 0.06712913054423083600, 0.06674435292740793500, 0.06626048168634461600, 0.06567519555537033900, 0.06499156895458164900 }; static float x[FIRNtap]; //input samples float y=0; //output sample int n; //shift the old samples for(n=FIRNtap-1; n>0; n--) x[n] = x[n-1]; //Calculate the new output x[0] = NewSample; for(n=0; n<FIRNtap; n++) y += FIRCoef[n] * x[n]; return y; } /*==================================================================== * * flashEraseSegment(int FarPtr) * ===================================================================*/ void flashEraseSegment(int FarPtr){ int *Flash_ptr; // local Flash pointer Flash_ptr = (int *) FarPtr; // Initialize Flash pointer FCTL1 = FWKEY + ERASE; FCTL3 = FWKEY; *Flash_ptr = 0; // dummy write to start erase while (FCTL3 & BUSY ); FCTL1 = FWKEY; FCTL3 = FWKEY + LOCK; } /*==================================================================== * * saveSettings(void) * ===================================================================*/ void saveSettings(void){ flashEraseSegment((int) 0xC000); FCTL1 = FWKEY + WRT; FCTL3 = FWKEY; ee_charge_type = (char)charge_type; ee_accu_capacity = (char)accu_capacity; ee_accu_voltage = (char)accu_voltage; FCTL1 = FWKEY; FCTL3 = FWKEY + LOCK; } /*==================================================================== * * loadSettings(void) * ===================================================================*/ void loadSettings(void){ charge_type = (char)ee_charge_type; accu_capacity = (char)ee_accu_capacity; accu_voltage = (char)ee_accu_voltage; }  
    #ifndef MAIN_H_ #define MAIN_H_ #define false 0 #define true 1 void menu_redraw(void); void control(void); void init_mcu(void); void buttons(void); void measure(void); void beep_sound(void); float fir(float NewSample); void flashEraseSegment(int FarPtr); void saveSettings(void); void loadSettings(void); #endif /* MAIN_H_ */  
    // ----------------------------------------------------------------#include "LCD2x16.h"#include "msp430g2553.h"#define RS BIT3 // RS - P2.3 RW - GND#define EN BIT5 // EN - P2.5#define D4 BIT4 // D4 - P1.4#define D5 BIT5 // D5 - P1.5#define D6 BIT0 // D6 - P2.0#define D7 BIT1 // D7 - P2.1//Polish language characters//E6 B9 B3 EA F3 F1 9F 9C A5 BF CA C6 D1 A3 8C D3 AF 8F//? ? ? ? ?

  4. Like
    abecedarian reacted to bluehash in Better Documentation for Store BoosterPacks   
    Yes.. I installed a wiki when I had some time last week. Still in progress.
    For links that are ending up in an error, make sure you remove the part after the last /, especially something linke p#763836
  5. Like
    abecedarian reacted to RobG in Dumping EPROM contents.   
    How about this: 2 LaunchPads, one for address line A0-A10, and one for data/control line O0-O7.
    LP2 will reset and clock LP1, LP1 will set address to 0 on reset and increase it every clock.
    LP2 will pull CE low (OE should be tied to GND) and will read outputs.
    LP2 will then send address and data over to PC via UART pin.
    MBM2716 is a 5V device, so you may have to use some buffers. 
    However, I would try with 3.6V first. Read several times and confirm that the readings are the same. If not, use 5V.
  6. Like
    abecedarian reacted to chibiace in It's the end of the world as we know it   
    we're all going to die!! oh the humanity wont somebody think of the children!!
  7. Like
    abecedarian got a reaction from jsolarski in Countdown to 21 of December with MSP430 :]   
    Not true.
    It was a very early alpha Linux kernel named "Gritty Granite". When they tried to mount more hard disk space to extend the calendar there was a kernel panic which in turn fried the RTC. Therefore, the Mayan calendar doesn't project any farther into the future. ;-)
  8. Like
    abecedarian got a reaction from jsolarski in It's the end of the world as we know it   
    ... and I feel fine.
    ... in response to the "headline" at the top of the site.
    "That's great it starts with an earthquake, birds and snakes, an airplane and Lenny Bruce is not afraid...."
  9. Like
    abecedarian reacted to NullColaShip in Display based on LPD8806 RGB LED strips   
    I guess it really depends on how quickly you can take and process your samples.  I've currently got a frame delay of about 40ms, which means it'd be 25fps if it was able to calculate each frame and push it out instantaneously - so it could easily go quite a bit faster.  The video in the first post in this thread should give some idea of how fast it is - particularly the rainbow fade sequences, which run very smoothly (at least in person - the video might not look quite as smooth given its limited framerate).
  10. Like
    abecedarian reacted to EuphonistiHack in Frequency analyzer built from the new Stellaris Launchpad   
    Well, with 5.3, the CCS guys changed around a bunch of tool names, including the tms470 compiler that is used for the Stellaris line (they now call it the ARMv5 compiler).  That's why you're seeing the "Please install the ARMv5.0 Compiler" message... if it were just that my project was using a newer version of the tms470, CCS would still let you import, but give you a warning.  Since my project is using a compiler with both a different version and a different name from the one you have, it's outright not letting you import the project.  I'll push an update sometime today or tomorrow with the compiler set to the tms470... in the meantime, you can try poking around the .project files in the ccs directory to see if you can find out where the compiler is declared and switch that to whatever you're using.
  11. Like
    abecedarian reacted to Rei Vilo in StellarPad Pins Assignment   
    Please refer to LaunchPads and BoosterPacks Pins Maps for the updated and maintained pins maps. 
    Thank you!
    Please find the map for the pins on the StellarPad (aka. LaunchPad Stellaris LM4F).


    Originals are in Energia wiki at https://github.com/e...a/wiki/Hardware
  12. Like
    abecedarian reacted to Rei Vilo in LaunchPad Pin Assignment   
    The pins for the I
  13. Like
    abecedarian reacted to EuphonistiHack in Frequency analyzer built from the new Stellaris Launchpad   
    Hey everybody,
    I don't know if I should make this a new post or just update here, but I just released a pretty heavy duty update to my project.  Let me know what you think!

  14. Like
    abecedarian reacted to CorB in Frequency analyzer built from the new Stellaris Launchpad   
    Hi Euphonistichack,
    Thanks for answering. I am using a pre-amp scheme I have used before for a heterodyne batdetector. Nothing excotic, Options are to use a 40khz ultrasonic transducer (ive used those sucessfully) or to use an electret micro with some additional filtering. Theres many schemes around.
    I wont need that many bins in the FFT as I am planning to display the data directly on an LCD and a resolution of 1 bin/khz would deliver enough information to determine the species by. Recording data is indeed not easy unless I would simply store the "footprint" with the data /bin. 
    Thanks for confirming the possibility to use the stellaris to do this.
  15. Like
    abecedarian reacted to cubeberg in 43oh PCB Logo   
    Ooh - didn't think about vias.  They could be tented, but the possibility of that getting messed up is probably pretty decent.  I may still try it on a board sometime.  
    Ideally, my plan is to offer several versions - people can pick whatever they want.  I've got a couple in the works - I'll post a library when I've got some ready.
  16. Like
    abecedarian got a reaction from xpg in [ ENDED ] Jan-Feb 2013 - Stellarisiti Project of the Month Contest   
    Might want to change the banner / announcement headline from:
    "Stellariti POTM Contest is Open. Win 10 LM3S8962 OLED Evaluation Kits!"
    "Stellarisiti POTM Contest is Open. Win one of 10 LM3S8962 OLED Evaluation Kits!"
    To correct the site name ( ), and to make sure no one claims false advertising.
  17. Like
    abecedarian got a reaction from bluehash in [ ENDED ] Jan-Feb 2013 - Stellarisiti Project of the Month Contest   
    Might want to change the banner / announcement headline from:
    "Stellariti POTM Contest is Open. Win 10 LM3S8962 OLED Evaluation Kits!"
    "Stellarisiti POTM Contest is Open. Win one of 10 LM3S8962 OLED Evaluation Kits!"
    To correct the site name ( ), and to make sure no one claims false advertising.
  18. Like
    abecedarian got a reaction from pine in Project idea seeking comments - golf swing   
    You'll need more than 3 axes to calculate a golf swing. Besides the obvious swing itself in 3 dimensions, you also have to consider the physical orientation of the club head throughout the swing, at least at the point where the club head impacts the ball.
    In my opinion, you would need 3 gyroscopes and 3 accelerometers to get a close to accurate representation of the swing. The gyro's would measure the orientation of the club head throughout the swing and the accelerometers would measure the forces applied in 3 dimensions during the swing. I might also suggest some sort of proximity sensor on the club head so you could measure the distance from the club head to the ground when the club is in the all-so-important position where it smacks the ball. ... and maybe some pressure sensor to measure how much energy is actually transferred to the ball.
    And then you have to correlate the gyro's with the accelerometers... and as mentioned, have some way to compare whatever data you capture to a "perfect" swing, or at least good knowledge of golf-swing physics, in order to give advice.
  19. Like
    abecedarian reacted to simpleavr in EZ430Trainer - a retro style single board computer   
    A Retro Style Basic Computer
            The EZ430trainer system turns the low-cost TI LaunchPad into a microcontroller trainer via simple hardware and software enrichments.
              The EZ430trainer is made up of a         . TI LaunchPad, w/ msp430g2553 mcu         . A "Paradiso UI Shield", adding basic I/O capabilites.         . A "Eztrainer Monitor" firmware, providing monitor and assembler capabilites.  
            The intention of the EZ430trainer is to bring in a "low-cost" computer training system that resembles the 1st generation hobby based microprocessor systems that surfaced in the mid-70's. These systems offer the best computer training as users interacts w/ the CPU almost directly. Programming are done via entering machine code directly or via simple assemblers. Users need to understand very well the cpu architecture in order to work on such systems.
      Parts / Bill of Materials           . TI Launchpad V1.5 kit (w/ msp430g2553 mcu)         . 4 digit 7 segment LED display Common Anode         . 4 digit 7 segment LED display Common Cathode         . 20 x tactile button         . buzzer 3V (Optional)      
                  the LED display is commonly available in ebay, look for those 0.4" or 0.36" 4 digit displays, you will want to make sure it's common cathode and the pin layout matches (most do)
             ___a__       |      |        (0) A  F (1)(2) B      f|      | b      -+--+--+--+--+--+        ___g__        |                 |      e|      | c     |Pin1             |       |      |        -+--+--+--+--+--+        ___d__          E  D  .  C  G (3)     Paradiso UI Shield Schematic                  MSP430G2553 on TI Launchpad              -----------------          /|\|                 |           | |                 |           --|RST              |             |                 |     +---------------+  +---------------+             |  as digit 0 P2.2|-----| _   _   _   _ |  | _   _   _   _ | led modules             |  as digit 1 P2.4|-----|| | | | | | | ||  || | | | | | | || 1x common cathode             |  as digit 2 P2.5|-----||-| |-| |-| |-||  ||-| |-| |-| |-|| 2x common anode             |  as digit 3 P2.7|-----||_|.|_|.|_|.|_||  ||_|.|_|.|_|.|_||             |                 |     +---------------+  +---------------+             |                 |        | segment a to g + dot........             |                 |       /                                 ....\             |                 |      /                                       \             |   segment A P1.7|-----+-----+-----+-----+-----+-----+-----+-----+             |                 | _=_ | _=_ | _=_ | _=_ | _=_ | _=_ | _=_ | _=_ |             |   segment B P2.3|-o o-+-o o-+-o o-+-o o-+-o o-+-o o-+-o o-+-o o-+             |                 | _=_ | _=_ | _=_ | _=_ | _=_ | _=_ | _=_ |             |   segment c P1.7|-o o-+-o o-+-o o-+-o o-+-o o-+-o o-+-o o-+             |                 | _=_ | _=_ | _=_ | _=_ | _=_ | _=_ |             |   segment D P2.0|-o o-+-o o-+-o o-+-o o-+-o o-+-o o-+             |                 | _=_ | _=_ | _=_ | _=_ | _=_ |             |   segment E P2.6|-o o-+-o o-+-o o-+-o o-+-o o-+             |                 | _=_ | _=_ | _=_ | _=_ |             |   segment F P1.6|-o o-+-o o-+-o o-+-o o-+             |                 | _=_ | _=_ | _=_ |             |   segment G P2.7|-o o-+-o o-+-o o-+             |                 | _=_ |             |   segment H P1.5|-o o-+           (not all buttons populated)             |                 |              -----------------            
       mapping of buttons. Ex. A-F .. buon across segment A and F pins
                      [A-F] [A-.] [A-G] [b-A] [D-A] [C-A]                   [A-E] [b-F] [b-.] [b-G] [D-B] [C-B]                         [b-E] [D-F] [D-.] [D-G] [C-D]                         [D-E] [C-E] [C-F] [C-.] [C-G]             +-----------------------------------------+           | +-----------------+ +-----------------+ |           | |  _   _   _   _  | |  _   _   _   _  | |           | | | | | | | | | | | | | | | | | | | | | |           | | |-| |-| |-| |-| | | |-| |-| |-| |-| | |           | | |_|.|_|.|_|.|_|.| | |_|.|_|.|_|.|_|.| |           | +-----------------+ +-----------------+ |           |                mnp  rtx  s    j         |           |           [  ] [7 ] [8 ] [9 ] [F ] [Ad] | Address           |                          b/w  ei     << |           |           [  ] [4 ] [5 ] [6 ] [E ] [Md] | Mode / Last           |                               d    . >> |           |                [1 ] [2 ] [3 ] [D ] [Rg] | Register / Next           |                     a    b    c         |           |                [0 ] [A ] [b ] [C ] [+ ] | Advance / Enter           |                                         |           +-----------------------------------------+   Paradiso UI Shield features           . 8 x 7 segment display         . 22 tactile switch positions w/ 20 switch filled         . Prototyping area         . requires software mutliplexing to drive segments         . requires software matrix scanning for key inputs         . has no led driving / current limiting capabilities   EZ430trainer Monitor features       . (1) LMC Little Man Computer emulator built-in     . (2) One-pass assembler generating msp430 machine code     . (3) Direct machine code entry for msp430     . Correct support for pseudo-op codes, ex. RET implemented as MOV @SP+,PC     . Interface w/ Paradiso UI Shield and UART terminal     . Program storage starts at flash 0xe000 at 256 byte blocks     . Program edit at ram 0x0280 for each 256 byte blocks     . Basic IO routines       . number printing       . string printing       . wait key w/       . timer at 1/100 sec intervals
        Memory Space             +------------------------------------------------+           |0x0000-0x0007   Special Func Registers          |           |0x0008-0x00ff    8-bit Periphercals             |           |0x0100-0x01ff   16-bit Periphercals             |           |0x0200        + 512 byte RAM -------------------|           |  0200-  027f | Monitor Use                     |           |  0280-  037f | Program Edit Buffer             |           |  0380-  03ff | Monitor Use, Stack              |           |       0x03ff-+---------------------------------|           | ....                                           |           |0x1000        + Data Flash ---------------------|           |  1000-  103f | Data Flash Bank 0               |           |  1040-  107f | Data Flash Bank 0               |           |  1080-  10bf | Data Flash Bank 0               |           |  10c0-  10ff | Data Flash Bank 0 (Factory Data)|           |       0x10ff +---------------------------------|           | ....                                           |           |0xc000        + Program Flash ------------------|           |  c000-  deff-| Monitor Code                    |           |  dd00-  dfff-| Bios code / dd00 is entry point |           |  e000-  efff-| 16 banks of User Code           |           |  f000-  ffbf-| 16 banks of LMC code            |           |  ffc0-  ffff | Interrupt Vectors               |           |       0xffff +---------------------------------|           +------------------------------------------------+    

      more details at http://www.simpleavr.com/msp430-projects/ez430trainer full operating instructions can be found here if u are interested in the details.   /EDIT Dec 12, 2012 furnishing source and gerber files.  

    D55524_5x10.zip is the production ready seeedstudio compliance file package


    ez430trainer.tgz are source files in tgz format (tarred, gzipped)

    (*) this project can only be built with msp430gcc (cygwin or linux)

    lmc.c contains only the LMC machine (compiles on mps430gcc and CCSV4), for CCS, create a lmc project and rename lmc.c to main.c to build      
  20. Like
    abecedarian reacted to simpleavr in EZ430Trainer - a retro style single board computer   
    i know it's incomplete. i am working on making sure the source code also compiles on CCS. it will be done and uploaded (along w/ seeed files) within the next few days.
    i don't want to hold it off too much for the POTM entry. this project has been 90% complete for a few weeks already. i got some free time (spared from christmas shopping from wife) this weekend so i did the web page, pull together the write-ups, photos, videos, etc.
    will refine the write-up and what ever based on your comments.
  21. Like
    abecedarian reacted to energia in New Energia release 0101E0009 - 12/06/2012 with Stellaris support   
    After 4 months (to the day) of hard work by the Energia team, Energia release 0101E0009 - 12/06/2012 it is ready to go! A full list of new features and bug fixes will be posted on the github wiki page later this week.
    Highlights for this release are:
    - StellarPad aka EK-LM4F120XL support (http://www.ti.com/tool/EK-LM4F120XL).
    - FraunchPad aka MSP-EXP430FR5739 FRAM support (http://www.ti.com/tool/MSP-EXP430FR5739).
    - Lots of bug fixes.
    The release is available for download @ http://energia.nu/download/
    Pin mapping for the new boards is posted here: https://github.com/energia/Energia/wiki/Hardware courtesy of @rei-vilo.
    Thanks to all Energia users for your continued support and providing us with invaluable feedback!
    Thanks to Energia team members @StefanS, @ReaganR, @rei-vilo, @Rickta59, @pbrier, @clyvb for making this release possible.
    Special thanks to @bluehash for his continued support with 43oh.com.
    Enjoy the new release!
  22. Like
    abecedarian reacted to G0XAR in Gender bending headers   
    Hi guys,
    For those of you who find the male headers on the Launchpad 430 board annoying and do not want to go to the bother of unsoldering them and replacing them with female ones there is a solution. You can get male to female wires for breadboard use from any number of people on EBay for not a lot of cash. One example advert is here (this is not an endorsement and I don't know the trader but a picture is worth a thousand words):
    The female ends on the ones I have are slim enough to fit on a single male pin without obstructing the next pin so you can use all the pins :-)
    These are really useful if you like to work with breadboards. You can also find male, to male, female to female and some with "butchers hooks" on them which will clip to leaded components. 
    If anyone from Ti is reading this it would be really neat if you included both male and female headers as now but left them unsoldered to give us more choice. 
    Hope this helps....
  23. Like
    abecedarian reacted to chibiace in Controlling a Relay   
    wait didnt you want to use a 12v relay?
    anyway same thing, 
    12v Positive to Relay+
    Diode from Relay- to Relay+
    Relay- To Transistor Collector
    Msp430 P1.0 to Resistor
    Resistor to Transistor Base
    Transistor Emitter to 12v Ground and Msp430 Ground connected together
  24. Like
    abecedarian reacted to chibiace in Controlling a Relay   
    if you have a 5v relay, you will need to supply it 5v from a separate 5v supply.
    connect both the gnds together from the 5v supply and msp430, p1.0 connects through a resistor to the base of the npn transistor.
    when p1.0 goes high it will allow the 5v to flow through the relay then through the transistor to gnd which will turn on your relay.
    the 3.3v and 5v are not connected as the transistor keeps them apart. but the grounds need to be connected.
  25. Like
    abecedarian reacted to simpleavr in Paradiso UI Boost (and win one)   
    here is a short clip showing a "Lunar Lander" implementation.
    it's an interactive version, not the original "wait for input" version. of course not the later graphic versions as we only have 7-segment leds for display.

  • Create New...