Esempio n. 1
0
int main(int argc, char **argv)
{
  ros::init(argc, argv, "vbat_publisher");
  ros::NodeHandle n;

  vbat_struct vbat;

  if(vbat_init(&vbat)) return 1;

  ros::Publisher batter_pub = n.advertise<std_msgs::Float32>("battery_voltage", 1000);

  ros::Rate loop_rate(1.0);

  while (ros::ok())
  {
    std_msgs::Float32 msg;
  
    vbat_read(&vbat);
    msg.data=vbat.vbat;
  
    batter_pub.publish(msg);
    printf("VBAT is %f\n",vbat.vbat);


    ros::spinOnce();

    loop_rate.sleep();
  }

  return 0;
}
Esempio n. 2
0
/**
 * \brief Initialize the 32kHz oscillator and RTC32
 *
 * Starts up the 32kHz oscillator in the backup system and initializes the
 * RTC32.
 *
 * \note When the backup system is used, the function \ref
 * rtc_vbat_system_check should be called to determine if a re-initialization
 * must be done.
 */
void rtc_init(void)
{
	sysclk_enable_module(SYSCLK_PORT_GEN, SYSCLK_RTC);
	// Set up VBAT system and start oscillator
	vbat_init();

	// Disable the RTC32 module before setting it up
	RTC32.CTRL = 0;

	while (rtc_is_busy());

	// Set up maximum period and start at 0
	RTC32.PER = 0xffffffff;
	RTC32.CNT = 0;

	while (rtc_is_busy());

	RTC32.INTCTRL = 0;
	RTC32.CTRL = RTC32_ENABLE_bm;

	// Make sure it's sync'ed before return
	while (rtc_is_busy());
}
Esempio n. 3
0
int main(void)
{
	uint8_t vbat_status;

	chip_init();
	vbat_status = vbat_system_check(true);
	
	/* 
	* Depending on the VBAT system check appropriate actions need to 
	* be taken.
	* In this example we re-initialize the VBAT system in all
	* error cases.
	*/
	switch (vbat_status)
	{
	case VBAT_STATUS_OK:
		// Interrupts must be re-enabled
		RTC32_SetCompareIntLevel(RTC32_COMPINTLVL_LO_gc);
		break;
	case VBAT_STATUS_NO_POWER: // fall through
	case VBAT_STATUS_BBPOR: // fall through
	case VBAT_STATUS_BBBOD: // fall through
	case VBAT_STATUS_XOSCFAIL: // fall through
	default:
		vbat_init();
		break;
	}

	sei();
	
	while (true) {
        	RTC32_SetAlarm(2);
        	PORTA.OUTTGL = 0x02;
		SLEEP.CTRL = SLEEP_SMODE_PSAVE_gc | SLEEP_SEN_bm;
		cpu_sleep();
	}
}