Jump to content


  • Content Count

  • Joined

  • Last visited

About diggz2k

  • Rank
    Noob Class

Profile Information

  • Location
  1. Hello, I'm a beginner so I think the answer is simple. I have an HC-SR04 connected to 4 AA batteries at 5.4V. The echo from the ultrasonic sensor goes through a voltage divider with 20k and 10k ohm resistors before going into P1.1. My f2013 is being powered by the usb programming tool and is using P1.2 as the out/trigger pin for the hc-sr04. I beleive the sr04 can take a 3.3V trigger. This is my code below, I just can't figure out why my interrupt isn't triggering. I borrowed some code from the internet. I can't remember his username, but the guy with the wall racer with two hc-sr04's. For quick reference: F2013 Datasheet #define LED0 BIT0 #define ECHO BIT1 #define TRIG BIT2 #include <msp430f2013.h> volatile unsigned distance_in_cm=0; volatile unsigned int start_time; volatile unsigned int total_time; volatile unsigned int up=0; void main(void) { //setup ports, cpu speed, timers //send 2 microseconds of off to p1.1 //send 10 microseconds of on to p1.1 //wait 60 microseconds // listen and count time on p1.0 //distance in cm is counted time/58 WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer BCSCTL1 = CALBC1_1MHZ; DCOCTL = CALDCO_1MHZ; //set speed to 1 megahertz TACTL = 0; //stop the clock P1DIR = (LED0 + TRIG); // set all of P1.0 P1.2 to output and P1.1 to input P1SEL = ECHO; //select echo pin as input for timerA TACCTL0 |= CM_3 + SCS + CAP + CCIE + CCIS_0; //capture rising and falling edge, syncronize(always do this),capture mode, interrupt enabled TACTL = TASSEL_2 + ID_0 + MC_2; // SMCLK,/1, continuous up mode, clear _BIS_SR(GIE); // general interrupt enable while (1) { volatile unsigned int i = 0; up = 1; //Next catch on Timer1A0 should be rising edge - helps with capture timer P1OUT |= TRIG; //turn trig on _delay_cycles(20); //double the required 10 microseconds for good measure //TODO set to 10 again if possible P1OUT &= ~TRIG; //turn trig off _delay_cycles(60000); //wait 60ms before testing again. the interrupt should happen somewhere here } } #pragma vector=TIMERA0_VECTOR __interrupt void timerA0 (){ if (up){ start_time = TACCR0; } else { total_time = TACCR0 - start_time; distance_in_cm = total_time/58; if (distance_in_cm < 20){ P1OUT |= LED0; } else{ P1OUT &= ~LED0; } } up=!up; //if this was the rising edge, the next one will be a falling edge, and vice-versa TA0CTL &= ~TAIFG; //clear timer A interrupt flag, so the chip knows we handled the interrupt TACCTL0 &= ~CCIFG;//clears capture interrupt flag, should already be done automatically though TODO } /* #define MC_0 (0*0x10u) Timer A mode control: 0 - Stop #define MC_1 (1*0x10u) Timer A mode control: 1 - Up to CCR0 #define MC_2 (2*0x10u) Timer A mode control: 2 - Continous up #define MC_3 (3*0x10u) Timer A mode control: 3 - Up/Down #define ID_0 (0*0x40u) Timer A input divider: 0 - /1 #define ID_1 (1*0x40u) Timer A input divider: 1 - /2 #define ID_2 (2*0x40u) Timer A input divider: 2 - /4 #define ID_3 (3*0x40u) Timer A input divider: 3 - /8 #define TASSEL_0 (0*0x100u) Timer A clock source select: 0 - TACLK #define TASSEL_1 (1*0x100u) Timer A clock source select: 1 - ACLK #define TASSEL_2 (2*0x100u) Timer A clock source select: 2 - SMCLK #define TASSEL_3 (3*0x100u) Timer A clock source select: 3 - INCLK #define CCIS_0 (0*0x1000u) Capture input select: 0 - CCIxA #define CCIS_1 (1*0x1000u) Capture input select: 1 - CCIxB #define CCIS_2 (2*0x1000u) Capture input select: 2 - GND #define CCIS_3 (3*0x1000u) Capture input select: 3 - Vcc #define CM_0 (0*0x4000u) Capture mode: 0 - disabled #define CM_1 (1*0x4000u) Capture mode: 1 - pos. edge #define CM_2 (2*0x4000u) Capture mode: 1 - neg. edge #define CM_3 (3*0x4000u) Capture mode: 1 - both edges */
  • Create New...