Esempio n. 1
0
void sys_time_init(void) {
	struct rtc_time tm_rtc;
	struct tm tmbuf;

	sys_time_init_startup_micros = bcm2835_st_read();

	if (mcp7941x_start(0x00) == MCP7941X_ERROR) {
		tmbuf.tm_hour = 0;
		tmbuf.tm_min = 0;
		tmbuf.tm_sec = 0;
		tmbuf.tm_mday = 1;
		tmbuf.tm_wday = 1;
		tmbuf.tm_mon = 0;
		tmbuf.tm_year = 18;
		tmbuf.tm_isdst = 0; // 0 (DST not in effect, just take RTC time)
		//tmbuf.tm_yday = 0;

		rtc_startup_seconds = mktime(&tmbuf);
		return;
	}

	mcp7941x_get_date_time(&tm_rtc);

	tmbuf.tm_hour = tm_rtc.tm_hour;
	tmbuf.tm_min = tm_rtc.tm_min;
	tmbuf.tm_sec = tm_rtc.tm_sec;
	tmbuf.tm_mday = tm_rtc.tm_mday;
	tmbuf.tm_wday = tm_rtc.tm_mday;
	tmbuf.tm_mon = tm_rtc.tm_mon;
	tmbuf.tm_year = tm_rtc.tm_year;
	tmbuf.tm_isdst = 0; // 0 (DST not in effect, just take RTC time)

	rtc_startup_seconds = mktime(&tmbuf);
}
Esempio n. 2
0
int main(int argc, char **argv) {
	// RTC time
	struct rtc_time tm_rtc, tm_rtc_set;
	// Linux current time
	time_t ltime;
	struct tm *tm_linux;

	printf("rtc_start\n");
	if (mcp7941x_start(0) != MCP7941X_OK) {
		printf("Cannot start I2C_RTC\n");
		exit(EXIT_FAILURE);
	}

	// Get current localtime from Linux
	ltime = time(NULL);
	tm_linux = localtime(&ltime);

	printf("Linux time:\n\tsecs=%d, mins=%d, hours=%d, mday=%d, mon=%d, year=%d, wday=%d\n", tm_linux->tm_sec, tm_linux->tm_min, tm_linux->tm_hour, tm_linux->tm_mday, tm_linux->tm_mon, tm_linux->tm_year, tm_linux->tm_wday);

	tm_rtc_set.tm_sec = tm_linux->tm_sec;
	tm_rtc_set.tm_min = tm_linux->tm_min;
	tm_rtc_set.tm_hour = tm_linux->tm_hour;
	tm_rtc_set.tm_mday = tm_linux->tm_mday;
	tm_rtc_set.tm_mon = tm_linux->tm_mon;
	tm_rtc_set.tm_year = tm_linux->tm_year - 100;
	tm_rtc_set.tm_wday = tm_linux->tm_wday;

	mcp7941x_set_date_time(&tm_rtc_set);

	mcp7941x_get_date_time(&tm_rtc);

	printf("RTC time:\n\tsecs=%d, mins=%d, hours=%d, mday=%d, mon=%d, year=%d, wday=%d\n", tm_rtc.tm_sec, tm_rtc.tm_min, tm_rtc.tm_hour, tm_rtc.tm_mday, tm_rtc.tm_mon, tm_rtc.tm_year, tm_rtc.tm_wday);

	printf("rtc_end\n");
	mcp7941x_end();

	return EXIT_SUCCESS;
}
Esempio n. 3
0
int main(void)
{
	device_info_t device_info;

	UART_BEGIN();

	device_info.slave_address = BW_LCD_DEFAULT_SLAVE_ADDRESS;

	/** SPI **/
	printf("bw_spi_lcd_start\n");
	bw_spi_lcd_start(&device_info);

	printf("bw_spi_read_id\n");
	bw_spi_read_id(&device_info);

	printf("bw_spi_lcd_reinit\n");
	bw_spi_lcd_reinit(&device_info);

	uint8_t backlight;
	printf("bw_spi_lcd_get_backlight := ");
	bw_spi_lcd_get_backlight(&device_info, &backlight);

	printf("%d\n", backlight);

	uint8_t contrast;
	printf("bw_spi_lcd_get_contrast := ");
	bw_spi_lcd_get_contrast(&device_info,&contrast);

	printf("%d\n", contrast);

	printf("bw_spi_lcd_cls\n");
	bw_spi_lcd_cls(&device_info);

	printf("bw_spi_lcd_text_line_1\n");
	bw_spi_lcd_text_line_1(&device_info, "AVR Atmel", 9);

	printf("bw_spi_lcd_text_line_2\n");
	bw_spi_lcd_text_line_2(&device_info, "Arduino Uno", 11);

	/** I2C **/
	printf("bw_i2c_lcd_start\n");
	bw_i2c_lcd_start(BW_LCD_DEFAULT_SLAVE_ADDRESS);

	printf("bw_i2c_read_id\n");
	bw_i2c_read_id(&device_info);

	printf("bw_i2c_lcd_reinit\n");
	bw_i2c_lcd_reinit();

	printf("bw_i2c_lcd_cls\n");
	bw_i2c_lcd_cls();

	printf("bw_i2c_lcd_text_line_1\n");
	bw_i2c_lcd_text_line_1("AVR Atmel", 9);

	/** RTC **/
	struct rtc_time tm_rtc;
	printf("mcp7941x_start\n");
	mcp7941x_start(0x00);

	printf("mcp7941x_get_date_time\n");
	mcp7941x_get_date_time(&tm_rtc);

	printf("%.2d:%.2d:%.2d %.2d-%.2d-%.2d\n", tm_rtc.tm_hour, tm_rtc.tm_min, tm_rtc.tm_sec, tm_rtc.tm_mday, tm_rtc.tm_mon, tm_rtc.tm_year);

	device_info.slave_address = BW_DIO_DEFAULT_SLAVE_ADDRESS;

	printf("bw_i2c_dio_start\n");
	bw_i2c_dio_start(&device_info);

	printf("bw_i2c_read_id\n");
	bw_i2c_read_id(&device_info);

	printf("bw_i2c_dio_fsel_mask\n");
	bw_i2c_dio_fsel_mask(&device_info, 0x7F);

	char buf[9];
	while (1)
	{
		mcp7941x_get_date_time(&tm_rtc);
		sprintf(buf, "%.2d:%.2d:%.2d", tm_rtc.tm_hour, tm_rtc.tm_min, tm_rtc.tm_sec);
		bw_i2c_lcd_text_line_2(buf, 8);

		device_info.slave_address = BW_DIO_DEFAULT_SLAVE_ADDRESS;
		bw_i2c_dio_output(&device_info, BW_DIO_PIN_IO0 | BW_DIO_PIN_IO2 | BW_DIO_PIN_IO4 | BW_DIO_PIN_IO6);
		_delay_ms(500);

		bw_i2c_dio_output(&device_info, BW_DIO_PIN_IO1 | BW_DIO_PIN_IO3 | BW_DIO_PIN_IO5);
		_delay_ms(500);
	}
}