UKHAS Wiki

UK High Altitude Society

User Tools

Site Tools


code:interrupt_driven_ubx

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
code:interrupt_driven_ubx [2009/05/11 06:30] laurencebcode:interrupt_driven_ubx [2009/05/11 20:17] (current) laurenceb
Line 1: Line 1:
 under construction... under construction...
  
-<code c> 
  
 +
 +
 +
 +===== demo code =====
 +
 +<code c>
 #include <stdlib.h> #include <stdlib.h>
 #include <stdio.h> #include <stdio.h>
Line 11: Line 16:
  
 volatile ubx_gps_type Gps; volatile ubx_gps_type Gps;
-volatile u08 sats;+
 int uart_putchar(char c, FILE *stream) int uart_putchar(char c, FILE *stream)
 { {
Line 37: Line 42:
  if(Gps.packetflag==REQUIRED_DATA)  if(Gps.packetflag==REQUIRED_DATA)
  {  {
- printf("%d,%d,%d,%d,%d\n",Gps.latitude,Gps.longitude,Gps.altitude,Gps.status,Gps.nosats);+ printf("%li,%li,%li,%2X,%2X\n",Gps.latitude,Gps.longitude,Gps.altitude,Gps.status,Gps.nosats);
  Gps.packetflag=0; //unlock the data  Gps.packetflag=0; //unlock the data
  }  }
Line 45: Line 50:
 ISR(USART_RX_vect) //UART interrupt on mega xx8 series ISR(USART_RX_vect) //UART interrupt on mega xx8 series
 { {
- static u08 state,class,id,checksum_1,checksum_2;+ static u08 state,class,id,checksum_1,checksum_2,counter;
  static u16 lenght;  static u16 lenght;
  static ubx_gps_type gps;  static ubx_gps_type gps;
Line 77: Line 82:
  case 5: //the most significant byte  case 5: //the most significant byte
  lenght|=c<<8;  lenght|=c<<8;
 + counter=0;
  state=6;  state=6;
  break;  break;
Line 94: Line 100:
  if(id==SOL_DATA && lenght==SOL_POS)  if(id==SOL_DATA && lenght==SOL_POS)
  gps.status=c;  gps.status=c;
- if(id==SVINFO_DATA && lenght==SATS_POS) + if(id==SOL_DATA && lenght==SATS_POS) 
- gps.nosats=c;+ gps.nosats=c;  
 + /*if(id==SVINFO_DATA)//this appears to find the number of hardware channels avaliable 
 +
 + counter++;//this counts from the start of data 
 + if(counter==SATS_POS) 
 + gps.nosats=c; 
 + }*/
  }  }
  lenght--;  lenght--;
Line 142: Line 154:
 } }
 </code> </code>
 +
 +
 +===== header =====
 +<code c>typedef unsigned char u08;
 +typedef uint16_t u16;
 +typedef uint32_t u32;
 +typedef int32_t s32;
 +typedef struct
 +{
 + u32 time; //milliseconds/week
 + s32 vnorth; //cm/s
 + s32 veast;
 + s32 vdown;
 + s32 longitude; //degrees/10^-7
 + s32 latitude;
 + s32 altitude; //height/mm
 + u08 packetflag; //packetflag lets us see when our packet has been updated
 + u08 status; //type of fix
 + u08 nosats; //number of tracked satellites
 +} ubx_gps_type;
 +#define REQUIRED_DATA 0x0F
 +#define LLH_DATA 0x02
 +#define VELNED_DATA 0x12
 +#define SVINFO_DATA 0x30
 +#define SOL_DATA 0x06
 +#define NAV_CLASS 0x01
 +#define SATS_POS 5
 +#define SOL_POS 42
 +#define POS_OFFSET 40
 +#define POS_START 12
 +#define POS_END 25
 +#define VEL_OFFSET 36 
 +#define VEL_START 20
 +#define VEL_END 37
 +#define SYNC_1 0xB5
 +#define SYNC_2 0x62
 +
 +#define BAUDRATE 38400UL
 +#define BAUDDIV 32
 +//#define BAUDDIV  (u16)( ((float)F_CPU/(BAUDRATE*16UL)) -1 )//baud divider
 +#define TOGGLE_PIN PIND=0x20 //led on port D.5
 +
 +
 +</code>
 +
code/interrupt_driven_ubx.1242023405.txt.gz · Last modified: 2009/05/11 06:30 by laurenceb

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki