read time from gps
This commit is contained in:
115
code/src/main.c
115
code/src/main.c
@@ -4,6 +4,7 @@
|
|||||||
#include <util/delay.h>
|
#include <util/delay.h>
|
||||||
#include <avr/interrupt.h> //interrupts
|
#include <avr/interrupt.h> //interrupts
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
#include "pinout.h"
|
#include "pinout.h"
|
||||||
#include "print.h"
|
#include "print.h"
|
||||||
#include "adc.h"
|
#include "adc.h"
|
||||||
@@ -11,6 +12,7 @@
|
|||||||
#include "i2cmaster.h"
|
#include "i2cmaster.h"
|
||||||
#include "DS3231.h"
|
#include "DS3231.h"
|
||||||
|
|
||||||
|
#define RX_INPUT_BUFFER_SIZE 92
|
||||||
|
|
||||||
/*README
|
/*README
|
||||||
DIP1 aktiviert Röhren-Schaltregler
|
DIP1 aktiviert Röhren-Schaltregler
|
||||||
@@ -30,11 +32,32 @@ void check_buttons(void);
|
|||||||
void setup(void);
|
void setup(void);
|
||||||
void set_PWM_duty(int dutycycle);
|
void set_PWM_duty(int dutycycle);
|
||||||
|
|
||||||
|
uint8_t parse_nmea_gps(char input_string[RX_INPUT_BUFFER_SIZE], uint8_t output_buffer[3]){
|
||||||
|
char* token = strsep(&input_string, ",");
|
||||||
|
if(!strcmp("$GPRMC", token)){
|
||||||
|
char* time = strsep(&input_string, ",");
|
||||||
|
if(!strlen(time)){
|
||||||
|
// no valid time available
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// craft bcd values
|
||||||
|
output_buffer[0] = (time[0] - 48) << 4;
|
||||||
|
output_buffer[0] |= 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;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
int main(void){
|
int main(void){
|
||||||
setup();
|
setup();
|
||||||
|
|
||||||
printf("test\n\r");
|
|
||||||
|
|
||||||
while(1){
|
while(1){
|
||||||
_delay_ms(500);
|
_delay_ms(500);
|
||||||
|
|
||||||
@@ -154,10 +177,10 @@ void setup(){
|
|||||||
TCCR1B = (0 << WGM02);
|
TCCR1B = (0 << WGM02);
|
||||||
|
|
||||||
|
|
||||||
//Prescaler von 1024
|
////Prescaler von 1024
|
||||||
TCCR1B |= (1 << CS02) |
|
//TCCR1B |= (1 << CS02) |
|
||||||
(0 << CS01) |
|
// (0 << CS01) |
|
||||||
(1 << CS00) ;
|
// (1 << CS00) ;
|
||||||
|
|
||||||
|
|
||||||
//Output compare Regsiter (Setzt Zeit bei der Interrupt auslösen soll)
|
//Output compare Regsiter (Setzt Zeit bei der Interrupt auslösen soll)
|
||||||
@@ -186,6 +209,12 @@ void setup(){
|
|||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void set_PWM_duty(int dutycycle){
|
||||||
|
OCR2A = dutycycle;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
//Timer 1 Interrupt
|
//Timer 1 Interrupt
|
||||||
ISR (TIMER1_OVF_vect) // Timer1 ISR
|
ISR (TIMER1_OVF_vect) // Timer1 ISR
|
||||||
{
|
{
|
||||||
@@ -218,63 +247,23 @@ ISR(INT1_vect) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
ISR (USART0_RX_vect){
|
ISR(USART0_RX_vect)
|
||||||
/*
|
{
|
||||||
//while ( !(UCSR0A & (1<<RXC0)) ){}; //RXC = Recive complete
|
static char async_input_buffer[RX_INPUT_BUFFER_SIZE];
|
||||||
char uart_Buffer[500];
|
static uint8_t async_buffer_pointer = 0;
|
||||||
char time_string[6];
|
|
||||||
char sat_string[2];
|
|
||||||
sat_string[0]='1';
|
|
||||||
sat_string[1]= '1';
|
|
||||||
|
|
||||||
for(int k = 0; k < 6; k++){
|
uint8_t data = UART_DATA_REG;
|
||||||
time_string[k] = '8';
|
if(!(data == '\n' || data == '\r')){
|
||||||
}
|
async_input_buffer[async_buffer_pointer]=data;
|
||||||
int i = 0;
|
async_buffer_pointer++;
|
||||||
|
}
|
||||||
while(UDR0 != '\r' && i < 500){
|
else if(async_buffer_pointer>0){
|
||||||
uart_Buffer[i] = UDR0;
|
async_input_buffer[async_buffer_pointer] = 0; // Null terminate string
|
||||||
i++;
|
async_buffer_pointer=0;
|
||||||
PORTB ^=STATUS_LED_B;
|
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]);
|
||||||
|
}
|
||||||
for(int j = 0; j < 500; j++){
|
|
||||||
|
|
||||||
//if(uart_Buffer[j] == '$'){
|
|
||||||
if(uart_Buffer[j+1] == 'G'){
|
|
||||||
if(uart_Buffer[j+2] == 'P'){
|
|
||||||
if(uart_Buffer[j+3] == 'Z'){
|
|
||||||
if(uart_Buffer[j+4] == 'D'){
|
|
||||||
if(uart_Buffer[j+5] == 'A'){
|
|
||||||
//j++;
|
|
||||||
|
|
||||||
sat_string[0] = uart_Buffer[1];
|
|
||||||
sat_string[1] = uart_Buffer[100];
|
|
||||||
|
|
||||||
//time_string[0] = uart_Buffer[j+36];
|
|
||||||
//time_string[1] = uart_Buffer[j+37];
|
|
||||||
//time_string[2] = uart_Buffer[j+8];
|
|
||||||
//time_string[3] = uart_Buffer[j+9];
|
|
||||||
//time_string[5] = uart_Buffer[j+10];
|
|
||||||
//time_string[6] = uart_Buffer[j+11];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// }
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
print_String(sat_string);
|
|
||||||
|
|
||||||
*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void set_PWM_duty(int dutycycle){
|
|
||||||
OCR2A = dutycycle;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user