write gps time to rtc

master
Eggert Jung 6 years ago
parent fd31f5acd1
commit d3af329ec6

@ -4,5 +4,6 @@
#include <avr/io.h>
uint32_t DS3231_read(void);
void DS3231_write(uint8_t inbuffer[3]);
#endif

@ -15,3 +15,12 @@ uint32_t DS3231_read(){
i2c_stop();
return ((uint32_t)std<<16) | ((uint32_t)min<<8) | sec;
}
void DS3231_write(uint8_t inbuffer[3]){
i2c_start_wait(0xD0);
i2c_write(0x00);
i2c_write(inbuffer[0]);
i2c_write(inbuffer[1]);
i2c_write(inbuffer[2]);
i2c_stop();
}

@ -42,14 +42,14 @@ uint8_t parse_nmea_gps(char input_string[RX_INPUT_BUFFER_SIZE], uint8_t output_b
}
// craft bcd values
output_buffer[0] = (time[0] - 48) << 4;
output_buffer[0] |= time[1] - 48;
output_buffer[2] = (time[0] - 48) << 4;
output_buffer[2] |= time[1] - 48;
output_buffer[1] = (time[2] - 48) << 4;
output_buffer[1] |= time[3] - 48;
output_buffer[2] = (time[4] - 48) << 4;
output_buffer[2] |= time[5] - 48;
output_buffer[0] = (time[4] - 48) << 4;
output_buffer[0] |= time[5] - 48;
return 0;
}
@ -262,8 +262,10 @@ ISR(USART0_RX_vect)
async_buffer_pointer=0;
PORTB ^=STATUS_LED_C;
uint8_t test[3];
if(!parse_nmea_gps(async_input_buffer, test))
printf("parse: %x %x %x\n\r", test[0], test[1], test[2]);
if(!parse_nmea_gps(async_input_buffer, test)){
printf("parse: %x %x %x\n\r", test[2], test[1], test[0]);
DS3231_write(test);
}
}
}

Loading…
Cancel
Save