ATmega8GPSLoggerBasismodul  20131018
atmega8_gps_logger_basismodul.c
Go to the documentation of this file.
1 
43 #include <avr/io.h>
44 #include <util/delay.h>
45 #include "gps.h"
46 #include "mmc.h"
47 #include "fat16.h"
48 
49 //Definitionen ###########################################################################################
50 
51 #define F_CPU 16000000L
52 
53 #define LED_PORT PORTD
54 #define LED_STAT PD6
55 #define LED_WARN PD7
56 
57 #define LEDCODE_OFF LED_PORT &= ~((1 << LED_WARN) | (1 << LED_STAT)) //0x00
58 #define LEDCODE_OK LED_PORT = (LED_PORT & ~(1 << LED_WARN)) | (1 << LED_STAT) //0x01
59 #define LEDCODE_WARNING LED_PORT = (LED_PORT & ~(1 << LED_STAT)) | (1 << LED_WARN) //0x02
60 #define LEDCODE_PROCESSING LED_PORT |= (1 << LED_WARN) | (1 << LED_STAT) //0x03
61 #define LEDCODE_BLINK LED_PORT ^= (1 << LED_STAT)
62 
63 struct
64 {
65  unsigned record:1;
66  unsigned keydown:1;
67 } status;
68 
74 int main (void)
75 {
76 
77  // Ports als Ausgänge definieren
78  DDRD = DDRD | (1 << DDD6) | (1 << DDD7);
79 
81 
82  // SD Karte + FAT initalisieren
83  if ((mmc_init() != 0) || (InitFat16() != 0))
84  {
86  while(1);
87  }
88 
89  LEDCODE_OK;
90 
91  // Log-Datei suchen und Position merken
92  File logFile;
93 
94  // GPS Modul initalisieren
95  gps_init();
96 
97  // Variablen initalisieren
99  status.record = 0;
100  status.keydown = 0;
101  char nmea_string[128];
102 
104  while(1)
105  {
106  // taster gedrückt oder taster war gedrückt
107  if ((PIND & (1 << PIND2)) || (status.keydown == 1) )
108  {
110 
111  // taster war im letzten durchlauf noch nicht gedrückt
112  if (status.keydown == 0)
113  {
114  status.keydown = 1;
115  _delay_ms(2000);
116  }
117  else // taster war im letzen durchlauf gedrückt
118  {
120  status.keydown = 0;
121 
122  // es wurde nicht aufgezeichnet
123  if(status.record == 0)
124  {
125  fopen_((unsigned char*)"nmea.log",'a',&logFile);
126  fputs_(&logFile,"***START***");
127  status.record = 1;
128  }
129  else // es wurde aufgezeichnet
130  {
131  fputs_(&logFile,"***STOP***");
132  fclose_(&logFile);
133  status.record = 0;
134  }
135 
136  _delay_ms(500);
137  LEDCODE_OFF;
138  }
139  }
140 
141  // es soll aufgezeichnet werden
142  if (status.record == 1)
143  {
144  gps_get_nmea(nmea_string, sizeof(nmea_string));
145  fputs_(&logFile, nmea_string);
147  }
148  else // es soll nicht aufgezeichnet werden
149  {
150  _delay_ms(950);
152  _delay_ms(50);
153  LEDCODE_OFF;
154  }
155  }
156 }
unsigned record
void gps_get_nmea(char *buf, uint8_t bufSize)
Empfängt einen vollständige NMEA-Befehl und gibt diesen dann zurück.
Definition: gps.c:69
int main(void)
Hauptfunktion.
#define LEDCODE_OFF
#define LEDCODE_OK
Definition: fat16.h:10
#define LEDCODE_BLINK
void gps_init()
Routine zur Initialisierung des GPS Moduls.
Definition: gps.c:41
unsigned char mmc_init()
Definition: mmc.c:32
#define LEDCODE_PROCESSING
void fclose_(File *file)
Definition: fat16.c:195
Include File für gps.c.
unsigned char InitFat16(void)
Definition: fat16.c:71
unsigned char fputs_(File *file, char *string)
Definition: fat16.c:443
#define LEDCODE_WARNING
unsigned keydown
unsigned char fopen_(unsigned char *fname, char mode, File *file)
Definition: fat16.c:97
struct @0 status