Beispiel #1
0
int
main ()
{
  uint8_t t;
  nrk_setup_ports();
  nrk_setup_uart(UART_BAUDRATE_115K2);
  oled_setup();
  nrk_init();

  nrk_gpio_direction(NRK_DEBUG_0, NRK_PIN_INPUT);
  nrk_gpio_direction(NRK_DEBUG_1, NRK_PIN_OUTPUT);
  oled_off();
  nrk_gpio_direction(NRK_DEBUG_2, NRK_PIN_INPUT);
  nrk_gpio_direction(NRK_DEBUG_3, NRK_PIN_INPUT);
  nrk_led_clr(ORANGE_LED);
  nrk_led_clr(BLUE_LED);
  nrk_led_clr(GREEN_LED);
  nrk_led_clr(RED_LED);
 
  nrk_time_set(0,0);
  bmac_task_config ();
  nrk_create_taskset ();
  nrk_start();
  
  return 0;
}
Beispiel #2
0
void Task1()
{
uint16_t cnt;
int8_t fd,val,chan;
uint16_t sample;


   printf( "Task1 PID=%d\r\n",nrk_get_pid());

  nrk_gpio_direction(NRK_BUTTON, NRK_PIN_INPUT);
  nrk_gpio_direction(NRK_DEBUG_0, NRK_PIN_OUTPUT);

  nrk_led_set(RED_LED);
  do{} while(nrk_gpio_get(NRK_BUTTON)==1);
  nrk_led_clr(RED_LED);
  nrk_led_set(GREEN_LED);

   // Initialize values here
   ADC_INIT ();
   ADC_ENABLE ();
   ADC_SET_CHANNEL (2);

  while(1) {
	ADC_SAMPLE_SINGLE();
	ADC_GET_SAMPLE_10(sample);
  	// Send sync byte
  	putchar(0x55);
	putchar(sample>>8);
	putchar(sample&0xff);
  	}
}
Beispiel #3
0
void Task1()
{
uint16_t cnt;
int8_t fd;
nrk_kprintf( PSTR("Nano-RK Version ") );
printf( "%d\r\n",NRK_VERSION );

//while(1) nrk_wait_until_next_period();


nrk_gpio_direction(NRK_MMC_9,NRK_PIN_INPUT);
nrk_gpio_direction(NRK_MMC_10,NRK_PIN_INPUT);
nrk_gpio_direction(NRK_MMC_11,NRK_PIN_INPUT);

bpm_index=0;

nrk_gpio_pullups(1);

nrk_ext_int_configure(NRK_PC_INT_5, NULL, &button_press_int);
nrk_ext_int_configure(NRK_PC_INT_6, NULL, &button_press_int);
nrk_ext_int_configure(NRK_PC_INT_7, NULL, &button_press_int);
nrk_ext_int_enable(NRK_PC_INT_5);
nrk_ext_int_enable(NRK_PC_INT_6);
nrk_ext_int_enable(NRK_PC_INT_7);

nrk_ext_int_configure(NRK_EXT_INT_0, NRK_RISING_EDGE, &heart_rate_int);
nrk_ext_int_enable(NRK_EXT_INT_0);

cnt=0;
printf( "My node's address is %u\r\n",NODE_ADDR );
  
fd=nrk_open(FIREFLY_SENSOR_BASIC,READ);
        if(fd==NRK_ERROR) nrk_kprintf(PSTR("Failed to open sensor driver\r\n"));

printf( "Task1 PID=%u\r\n",nrk_get_pid());

  while(1) {
	//printf( "Task1 cnt=%u\r\n",cnt );
	nrk_wait_until_next_period();
	printf( "9=%d ",nrk_gpio_get(NRK_MMC_9));
	printf( "10=%d ",nrk_gpio_get(NRK_MMC_10));
	printf( "11=%d ",nrk_gpio_get(NRK_MMC_11));
	printf( "%d %d\r\n",cnt,hrm_get_value() );
	nrk_led_toggle(GREEN_LED);
        // Uncomment this line to cause a stack overflow
	cnt++;
	}
}
Beispiel #4
0
void power_init ()
{
  ADC_INIT ();
  ADC_ENABLE ();
  ADC_VREF_VCC();
  nrk_timer_int_configure( NRK_APP_TIMER_0, 1, 7373, calc_power);
  ticks=0;
  cycle_state=CYCLE_HIGH;
  //cycle_state_last=CYCLE_UNKNOWN;
  cycle_cnt=0;
  cycle_avg=0;
  cycle_started=0;
  c1_center=496;
  v_p2p_low=2000;
  v_p2p_high=0;
  c_p2p_low=2000;
  c_p2p_high=0;
  c_p2p_low2=2000;
  c_p2p_high2=0;
  rms_current=0;
  rms_current2=0;
  rms_voltage=0;
  energy_total2=0;
  energy_total=0;
  energy_cycle2=0;
  energy_cycle=0;
  cummulative_energy2=0;
  cummulative_energy=0;
  total_secs=0;
  v_last=VOLTAGE_LOW_THRESHOLD+10;
  triggered=0;

  nrk_gpio_direction(NRK_DEBUG_2, NRK_PIN_OUTPUT);

  //startup_sock_state=nrk_eeprom_read_byte(0x100);
  //if((startup_sock_state&0x01)==0x01)
  //      {
                nrk_timer_int_start(NRK_APP_TIMER_0);
                power_mon_enable();
                socket_0_enable();
                socket_0_active=1;
  //      }
  //else {
  //socket_0_active=0;
  //power_mon_disable();
  //              nrk_kprintf( PSTR("Socket inactive\r\n"));
  //}
  //if((startup_sock_state&0x02)==0x02)
  //      {
                socket_1_enable();
                socket_1_active=1;
  //      }
  // else {
  // socket_1_active=0;
  // }



}
Beispiel #5
0
void Task1()
{
  nrk_time_t t;
  uint16_t cnt;
  uint8_t val;
  cnt=0;
  nrk_kprintf( PSTR("Nano-RK Version ") );
  printf("b");
  printf( "%d\r\n",NRK_VERSION );
  
  printf( "My node's address is %u\r\n",NODE_ADDR );
  
  printf( "Task1 PID=%u\r\n",nrk_get_pid());
  t.secs=30;
  t.nano_secs=0;
  
  // setup a software watch dog timer
 nrk_sw_wdt_init(0, &t, NULL);
 nrk_sw_wdt_start(0);
 
 nrk_gpio_direction(BUTTON, NRK_PIN_INPUT);
 
 while(1) {
   // Update watchdog timer
   nrk_sw_wdt_update(0);
   nrk_led_toggle(ORANGE_LED);
   val=nrk_gpio_get(BUTTON);
   
   // Button logic is inverter 0 means pressed, 1 not pressed
   printf( "Task1 cnt=%u button state=%u\r\n",cnt,val );
   nrk_wait_until_next_period();
   // Uncomment this line to cause a stack overflow
   // if(cnt>20) kill_stack(10);
   
   // At time 50, the OS will halt and print statistics
   // This requires the NRK_STATS_TRACKER #define in nrk_cfg.h
   if(cnt==50)  {
     nrk_stats_display_all();
     nrk_halt();
   }
   
   
   cnt++;
 }
}
Beispiel #6
0
void Task1()
{
nrk_time_t t;
uint8_t val;

nrk_kprintf( PSTR("Nano-RK Version ") );
printf( "%d\r\n",NRK_VERSION );

nrk_gpio_direction(NRK_BUTTON, NRK_PIN_INPUT);

  while(1) {
	// Update watchdog timer
	nrk_led_toggle(GREEN_LED);

	val=nrk_gpio_get(NRK_BUTTON);
	// Button logic is inverter 0 means pressed, 1 not pressed
	if(val==0) nrk_led_set(BLUE_LED);
	else nrk_led_clr(BLUE_LED);
	printf( "button state=%u\r\n",val );
	nrk_wait_until_next_period();

	}
}
Beispiel #7
0
void tx_task ()
{
    uint8_t j, i, val, cnt;
    int8_t len;
    int8_t v;
    nrk_sig_t tx_done_signal;
    nrk_sig_mask_t ret;


    send_ack=0;
    cal_done=0;
    printf ("tx_task PID=%d\r\n", nrk_get_pid ());

    // Wait until the tx_task starts up bmac
    // This should be called by all tasks using bmac that


    power_init ();

#ifndef DISABLE_BUTTON
    nrk_gpio_direction(NRK_BUTTON,NRK_PIN_INPUT );
    nrk_ext_int_configure(NRK_EXT_INT_0, NRK_FALLING_EDGE, &button_handler );
    nrk_ext_int_enable(NRK_EXT_INT_0);
#endif

    v_center=((uint16_t)nrk_eeprom_read_byte(EEPROM_CAL_V_MSB_ADDR))<<8 | (uint16_t)nrk_eeprom_read_byte(EEPROM_CAL_V_LSB_ADDR);
    c_center=((uint16_t)nrk_eeprom_read_byte(EEPROM_CAL_C1_MSB_ADDR))<<8 | (uint16_t)nrk_eeprom_read_byte(EEPROM_CAL_C1_LSB_ADDR);
    c2_center=((uint16_t)nrk_eeprom_read_byte(EEPROM_CAL_C2_MSB_ADDR))<<8 | (uint16_t)nrk_eeprom_read_byte(EEPROM_CAL_C2_LSB_ADDR);


    if(((PIND & 0x1) == 0) || (v_center==0xffff) || (v_center==0x0) )
    {
        // Get v_center and c_centers enough to grab calibration values
        v_center=512;
        c_center=512;
        c2_center=512;
        power_socket_enable(0);
        socket_0_disable();

        plug_led_green_clr();
        plug_led_red_clr();
        for(i=0; i<3; i++ ) {
            plug_led_green_set();
            nrk_wait_until_next_period();
            plug_led_green_clr();
            nrk_wait_until_next_period();
        }
        plug_led_green_clr();
        plug_led_red_clr();
        for(i=0; i<5; i++ )
            nrk_wait_until_next_period();

        v_center=(v_p2p_high+v_p2p_low)/2;
        c_center=(c_p2p_high+c_p2p_low)/2;
        c2_center=(c_p2p_high2+c_p2p_low2)/2;
        nrk_eeprom_write_byte(EEPROM_CAL_V_MSB_ADDR, (uint8_t)(v_center>>8));
        nrk_eeprom_write_byte(EEPROM_CAL_V_LSB_ADDR, (uint8_t)v_center&0xff);
        nrk_eeprom_write_byte(EEPROM_CAL_C1_MSB_ADDR, (uint8_t)(c_center>>8));
        nrk_eeprom_write_byte(EEPROM_CAL_C1_LSB_ADDR, (uint8_t)c_center&0xff);
        nrk_eeprom_write_byte(EEPROM_CAL_C2_MSB_ADDR, (uint8_t)(c2_center>>8));
        nrk_eeprom_write_byte(EEPROM_CAL_C2_LSB_ADDR, (uint8_t)c2_center&0xff);
        nrk_eeprom_write_byte(EEPROM_ENERGY1_0_ADDR, 0);
        nrk_eeprom_write_byte(EEPROM_ENERGY1_1_ADDR, 0);
        nrk_eeprom_write_byte(EEPROM_ENERGY1_2_ADDR, 0);
        nrk_eeprom_write_byte(EEPROM_ENERGY1_3_ADDR, 0);
        nrk_eeprom_write_byte(EEPROM_ENERGY1_4_ADDR, 0);
        nrk_eeprom_write_byte(EEPROM_ENERGY1_5_ADDR, 0);
        nrk_eeprom_write_byte(EEPROM_ENERGY1_6_ADDR, 0);
        nrk_eeprom_write_byte(EEPROM_ENERGY1_7_ADDR, 0);
        nrk_eeprom_write_byte(EEPROM_ENERGY2_0_ADDR, 0);
        nrk_eeprom_write_byte(EEPROM_ENERGY2_1_ADDR, 0);
        nrk_eeprom_write_byte(EEPROM_ENERGY2_2_ADDR, 0);
        nrk_eeprom_write_byte(EEPROM_ENERGY2_3_ADDR, 0);
        nrk_eeprom_write_byte(EEPROM_ENERGY2_4_ADDR, 0);
        nrk_eeprom_write_byte(EEPROM_ENERGY2_5_ADDR, 0);
        nrk_eeprom_write_byte(EEPROM_ENERGY2_6_ADDR, 0);
        nrk_eeprom_write_byte(EEPROM_ENERGY2_7_ADDR, 0);
        //plug_led_green_set();
        //socket_0_enable();
        //power_socket_enable(0);


        // Set default power threshold
        set_power_thresh(DEFAULT_POWER_THRESH);
        power_socket_disable(0);
        socket_0_disable();
    }
Beispiel #8
0
void deep_sleep_button()
{
    int i,cnt;
    nrk_int_disable();
    nrk_eeprom_write_byte(EEPROM_SLEEP_STATE_ADDR,1);
    nrk_led_set(0);
    nrk_spin_wait_us(50000);
    nrk_led_clr(0);
    nrk_led_clr(1);
    nrk_led_clr(2);
    nrk_led_clr(3);
    nrk_watchdog_disable();
    nrk_int_disable();
    _nrk_os_timer_stop();
    nrk_gpio_direction(NRK_BUTTON, NRK_PIN_INPUT);
    rf_power_down();
    // Enable Pullup for button
    //PORTD = 0xff;
    nrk_gpio_set(NRK_BUTTON);
    nrk_ext_int_configure( NRK_EXT_INT_1,NRK_LEVEL_TRIGGER, &wakeup_func);
    EIFR=0xff;
    nrk_ext_int_enable( NRK_EXT_INT_1);
    nrk_int_enable();
    DDRA=0x0;
    DDRB=0x0;
    DDRC=0x0;
    ASSR=0;
    TRXPR = 1 << SLPTR;
    set_sleep_mode(SLEEP_MODE_PWR_DOWN);
    sleep_enable();
    sleep_cpu();
    // reboot
    while(1) {
        //printf( "awake!\r\n" );
        nrk_led_clr(0);
        nrk_led_clr(1);
        nrk_led_set(1);
        cnt=0;
        for(i=0; i<100; i++ )
        {
            //if((PIND & 0x2)==0x2)cnt++;
            if(nrk_gpio_get(NRK_BUTTON)==0)cnt++;
            nrk_spin_wait_us(10000);
        }
        printf( "cnt=%d\n",cnt );
        if(cnt>=50 ) {
            // reboot
            nrk_led_clr(1);
            nrk_led_set(0);
            nrk_eeprom_write_byte(EEPROM_SLEEP_STATE_ADDR,0);
            nrk_spin_wait_us(50000);
            nrk_spin_wait_us(50000);
            nrk_watchdog_enable();
            while(1);

        }
        nrk_led_clr(0);
        nrk_led_clr(1);
        TRXPR = 1 << SLPTR;
        set_sleep_mode(SLEEP_MODE_PWR_DOWN);
        sleep_enable();
        sleep_cpu();
    }
}
Beispiel #9
0
void tx_task ()
{
    uint8_t j, i, val, cnt;
    int8_t len;
    int8_t v,fd;
    nrk_sig_mask_t ret;
    nrk_time_t t;



    // Set Port D.0 as input
    // On the FireFly nodes we use this for motion or syntonistor input
    // It can be interrupt driven, but we don't do this with TDMA since updates are so fast anyway



    printf ("tx_task PID=%d\r\n", nrk_get_pid ());

    // setup a software watch dog timer
    t.secs=10;
    t.nano_secs=0;
    nrk_sw_wdt_init(0, &t, NULL);
    nrk_sw_wdt_start(0);

    while (!tdma_started ())
        nrk_wait_until_next_period ();

    // set port G as input for gpio
    nrk_gpio_direction(NRK_PORTG_0,NRK_PIN_INPUT );

    send_ack=0;

    while (1) {
        nrk_led_clr(RED_LED);

        tx_pkt.payload[0] = 1;  // ELEMENTS
        tx_pkt.payload[1] = 4;  // Key
        tx_pkt.payload[2] = nrk_gpio_get(NRK_PORTG_0);  // Key
        tx_pkt.payload_len=3;
        tx_pkt.src_mac=mac_address;
        tx_pkt.dst_mac=0;
        tx_pkt.type=APP;

        if(send_ack==1)
        {
            tx_pkt.type=ACK;
            tx_pkt.payload_len=0;
            send_ack=0;
        }


        len=pkt_to_buf(&tx_pkt,&tx_buf );

        if(len>0)
        {
            v = tdma_send (&tx_tdma_fd, &tx_buf, len, TDMA_BLOCKING);
            if (v == NRK_OK) {
            }
        } else {
            nrk_kprintf(PSTR("Pkt tx error\r\n"));
            nrk_wait_until_next_period();
        }


        nrk_sw_wdt_update(0);
    }



}