odongkerz
Newbie level 6
- Joined
- May 8, 2013
- Messages
- 11
- Helped
- 1
- Reputation
- 2
- Reaction score
- 1
- Trophy points
- 1,283
- Location
- Indonesia
- Activity points
- 1,374
Hi :lol:
I would like to ask about Neo GPS starter kit programing.
I was able to get coordinat GPS when i'm using GPS Leadtek LR9548S. Here's my GPS Leadtek LR9548S code base on ATMega128 using codevisionAVR
All i know about Neo GPS starter kit was that Neo GPS is in SLEEP mode by default. And i already have make it wake up. And after it Wake Up, i try to catch NMEA output from it like this.
But there is no any coordinate received.
Please help me..
I would like to ask about Neo GPS starter kit programing.
I was able to get coordinat GPS when i'm using GPS Leadtek LR9548S. Here's my GPS Leadtek LR9548S code base on ATMega128 using codevisionAVR
Code:
#include <mega128.h>
#include <delay.h>
#include <stdio.h>
// Alphanumeric LCD Module functions
#include <alcd.h>
#ifndef RXB8
#define RXB8 1
#endif
#ifndef TXB8
#define TXB8 0
#endif
#ifndef UPE
#define UPE 2
#endif
#ifndef DOR
#define DOR 3
#endif
#ifndef FE
#define FE 4
#endif
#ifndef UDRE
#define UDRE 5
#endif
#ifndef RXC
#define RXC 7
#endif
#define FRAMING_ERROR (1<<FE)
#define PARITY_ERROR (1<<UPE)
#define DATA_OVERRUN (1<<DOR)
#define DATA_REGISTER_EMPTY (1<<UDRE)
#define RX_COMPLETE (1<<RXC)
// USART1 Receiver buffer
#define RX_BUFFER_SIZE1 100
char rx_buffer1[RX_BUFFER_SIZE1];
#if RX_BUFFER_SIZE1 <= 256
unsigned char rx_wr_index1,rx_rd_index1,rx_counter1;
#else
unsigned int rx_wr_index1,rx_rd_index1,rx_counter1;
#endif
// This flag is set on USART1 Receiver buffer overflow
bit rx_buffer_overflow1;
// USART1 Receiver interrupt service routine
interrupt [USART1_RXC] void usart1_rx_isr(void)
{
char status,data;
status=UCSR1A;
data=UDR1;
if ((status & (FRAMING_ERROR | PARITY_ERROR | DATA_OVERRUN))==0)
{
rx_buffer1[rx_wr_index1++]=data;
#if RX_BUFFER_SIZE1 == 256
// special case for receiver buffer size=256
if (++rx_counter1 == 0)
{
#else
if (rx_wr_index1 == RX_BUFFER_SIZE1) rx_wr_index1=0;
if (++rx_counter1 == RX_BUFFER_SIZE1)
{
rx_counter1=0;
#endif
rx_buffer_overflow1=1;
}
}
}
// Get a character from the USART1 Receiver buffer
#pragma used+
char getchar1(void)
{
char data;
while (rx_counter1==0);
data=rx_buffer1[rx_rd_index1++];
#if RX_BUFFER_SIZE1 != 256
if (rx_rd_index1 == RX_BUFFER_SIZE1) rx_rd_index1=0;
#endif
#asm("cli")
--rx_counter1;
#asm("sei")
return data;
}
#pragma used-
// Write a character to the USART1 Transmitter
#pragma used+
void putchar1(char c)
{
while ((UCSR1A & DATA_REGISTER_EMPTY)==0);
UDR1=c;
}
#pragma used-
// Declare your global variables here
unsigned char utc[11];
unsigned char lat[10];
unsigned char jumlah[2];
char NS,EW,ch,PFI;
unsigned char longt[11];
int hour,i,j,k;
void jam()
{
hour=(((utc[1]-48)*10)+(utc[2]-48))+7;
if (hour>24)
hour=hour-24;
utc[1]=((hour/10)+48);
utc[2]=((hour%10)+48);
lcd_gotoxy(0,0); lcd_putsf("JAM"); lcd_gotoxy(0,1);
lcd_putchar(utc[1]);lcd_putchar(utc[2]);
lcd_putsf(" : ");
lcd_putchar(utc[3]);lcd_putchar(utc[4]);
lcd_putsf(" : ");
lcd_putchar(utc[5]);lcd_putchar(utc[6]);
}
void latitude()
{
if (NS=='N')
{
lcd_gotoxy(0,0); lcd_putsf("North"); lcd_putsf (" ");
lcd_putchar(lat[1]);lcd_putchar(lat[2]);lcd_putchar(223);
lcd_gotoxy(0,1); lcd_putsf ("menit");lcd_putsf (" ");
lcd_putchar(lat[3]);lcd_putchar(lat[4]);lcd_putsf (",");
lcd_putchar(lat[6]);lcd_putchar(lat[7]);
lcd_putchar(lat[8]);lcd_putchar(lat[9]);
}
else if (NS=='S')
{
lcd_gotoxy(0,0); lcd_putsf("South"); lcd_putsf (" ");
lcd_putchar(lat[1]);lcd_putchar(lat[2]);lcd_putchar(223);
lcd_gotoxy(0,1); lcd_putsf ("menit");lcd_putsf (" ");
lcd_putchar(lat[3]);lcd_putchar(lat[4]);lcd_putsf (",");
lcd_putchar(lat[6]);lcd_putchar(lat[7]);
lcd_putchar(lat[8]);lcd_putchar(lat[9]);
}
else
{
lcd_gotoxy(0,0); lcd_putsf("Are you lost?");
}
}
void longitude()
{
if (EW=='E')
{
lcd_gotoxy(0,0); lcd_putsf("East");lcd_putsf (" ");
lcd_putchar(longt[1]);lcd_putchar(longt[2]);lcd_putchar(longt[2]);lcd_putchar(223);
lcd_gotoxy(0,1); lcd_putsf ("menit");lcd_putsf (" ");
lcd_putchar(longt[4]);lcd_putchar(longt[5]);lcd_putsf (",");
lcd_putchar(longt[7]);lcd_putchar(longt[8]);
lcd_putchar(longt[9]);lcd_putchar(longt[10]);
}
else if (EW=='W')
{
lcd_gotoxy(0,0); lcd_putsf("West");lcd_putsf (" ");
lcd_putchar(longt[1]);lcd_putchar(longt[2]);lcd_putchar(longt[2]);lcd_putchar(223);
lcd_gotoxy(0,1); lcd_putsf ("menit");lcd_putsf (" ");
lcd_putchar(longt[4]);lcd_putchar(longt[5]);lcd_putsf (",");
lcd_putchar(longt[7]);lcd_putchar(longt[8]);
lcd_putchar(longt[9]);lcd_putchar(longt[10]);
}
else
{
lcd_gotoxy(0,0); lcd_putsf("Are you lost?");
}
}
void position_fix_indicator()
{
lcd_gotoxy(0,0); lcd_putsf("Position Fix");
lcd_gotoxy(0,1); lcd_putchar(PFI);
}
void jumlah_satelit()
{
lcd_gotoxy(0,0); lcd_putsf("Jumlah Satelit");
lcd_gotoxy(0,1); lcd_puts(jumlah);
}
void tampil()
{
jam();
delay_ms(1000); lcd_clear();
latitude();
delay_ms(1000); lcd_clear();
longitude();
delay_ms(1000); lcd_clear();
position_fix_indicator();
delay_ms(1000); lcd_clear();
jumlah_satelit();
delay_ms(1000); lcd_clear();
}
void main(void)
{
// USART1 initialization
// Communication Parameters: 8 Data, 1 Stop, No Parity
// USART1 Receiver: On
// USART1 Transmitter: On
// USART1 Mode: Asynchronous
// USART1 Baud Rate: 4800
UCSR1A=0x00;
UCSR1B=0x98;
UCSR1C=0x06;
UBRR1H=0x00;
UBRR1L=0x81;
// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;
// ADC initialization
// ADC disabled
ADCSRA=0x00;
// SPI initialization
// SPI disabled
SPCR=0x00;
// TWI initialization
// TWI disabled
TWCR=0x00;
lcd_init(16);
// Global enable interrupts
#asm("sei")
while (1)
{
if (rx_counter1>0)
{ ch= getchar1();
if (ch=='$')
{
ch= getchar1();
if (ch=='G')
{
ch= getchar1();
if (ch=='P')
{
ch= getchar1();
if (ch=='G')
{
ch= getchar1();
if (ch=='G')
{
ch= getchar1();
if (ch=='A')
{
ch=getchar1();
if (ch==',')
{
for(i=1;i<11;i++)
{
utc[i]=getchar1();
}
getchar1();
for(j=1;j<10;j++)
{
lat[j]=getchar1();
}
getchar1();
NS=getchar1();
getchar1();
for(k=1;k<11;k++)
{
longt[k]=getchar1();
}
getchar1();// ,
EW=getchar1();
getchar1(); // ,
PFI=getchar1();
getchar1(); // ,
jumlah[0]=getchar1();
jumlah[1]=getchar1();
tampil();
}
}
}
}
}
}
}
}
}
}
All i know about Neo GPS starter kit was that Neo GPS is in SLEEP mode by default. And i already have make it wake up. And after it Wake Up, i try to catch NMEA output from it like this.
Code:
/*****************************************************
This program was produced by the
CodeWizardAVR V2.05.0 Professional
Automatic Program Generator
© Copyright 1998-2010 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com
Project :
Version :
Date : 18/07/2013
Author :
Company :
Comments:
Chip type : ATmega128
Program type : Application
AVR Core Clock frequency: 16,000000 MHz
Memory model : Small
External RAM size : 0
Data Stack size : 1024
*****************************************************/
#include <mega128.h>
#include <delay.h>
#include <stdio.h>
#define RTS PORTA.0
#define CTS PINA.1
#define WU PINA.2
#define OO PORTA.3
#define RST PORTA.4
#define TM PINA.5
// Alphanumeric LCD Module functions
#include <alcd.h>
#ifndef RXB8
#define RXB8 1
#endif
#ifndef TXB8
#define TXB8 0
#endif
#ifndef UPE
#define UPE 2
#endif
#ifndef DOR
#define DOR 3
#endif
#ifndef FE
#define FE 4
#endif
#ifndef UDRE
#define UDRE 5
#endif
#ifndef RXC
#define RXC 7
#endif
#define FRAMING_ERROR (1<<FE)
#define PARITY_ERROR (1<<UPE)
#define DATA_OVERRUN (1<<DOR)
#define DATA_REGISTER_EMPTY (1<<UDRE)
#define RX_COMPLETE (1<<RXC)
// USART1 Receiver buffer
#define RX_BUFFER_SIZE1 100
char rx_buffer1[RX_BUFFER_SIZE1];
#if RX_BUFFER_SIZE1 <= 256
unsigned char rx_wr_index1,rx_rd_index1,rx_counter1;
#else
unsigned int rx_wr_index1,rx_rd_index1,rx_counter1;
#endif
// This flag is set on USART1 Receiver buffer overflow
bit rx_buffer_overflow1;
// USART1 Receiver interrupt service routine
interrupt [USART1_RXC] void usart1_rx_isr(void)
{
char status,data;
status=UCSR1A;
data=UDR1;
if ((status & (FRAMING_ERROR | PARITY_ERROR | DATA_OVERRUN))==0)
{
rx_buffer1[rx_wr_index1++]=data;
#if RX_BUFFER_SIZE1 == 256
// special case for receiver buffer size=256
if (++rx_counter1 == 0)
{
#else
if (rx_wr_index1 == RX_BUFFER_SIZE1) rx_wr_index1=0;
if (++rx_counter1 == RX_BUFFER_SIZE1)
{
rx_counter1=0;
#endif
rx_buffer_overflow1=1;
}
}
}
// Get a character from the USART1 Receiver buffer
#pragma used+
char getchar1(void)
{
char data;
while (rx_counter1==0);
data=rx_buffer1[rx_rd_index1++];
#if RX_BUFFER_SIZE1 != 256
if (rx_rd_index1 == RX_BUFFER_SIZE1) rx_rd_index1=0;
#endif
#asm("cli")
--rx_counter1;
#asm("sei")
return data;
}
#pragma used-
// Write a character to the USART1 Transmitter
#pragma used+
void putchar1(char c)
{
while ((UCSR1A & DATA_REGISTER_EMPTY)==0);
UDR1=c;
}
#pragma used-
// Declare your global variables here
unsigned char utc[11];
unsigned char lat[10];
unsigned char jumlah[3];
char NS,EW,ch,PFI;
unsigned char longt[11];
int hour;
void jam()
{
hour=(((utc[0]-48)*10)+(utc[1]-48))+7;
if (hour>24)
hour=hour-24;
utc[0]=((hour/10)+48);
utc[1]=((hour%10)+48);
lcd_gotoxy(0,0); lcd_putsf("JAM RTC"); lcd_gotoxy(0,1);
lcd_putchar(utc[0]);lcd_putchar(utc[1]);
lcd_putsf(" : ");
lcd_putchar(utc[2]);lcd_putchar(utc[3]);
lcd_putsf(" : ");
lcd_putchar(utc[4]);lcd_putchar(utc[5]);
}
void latitude()
{
if (NS=='N')
{
lcd_gotoxy(0,0); lcd_putsf("North");
lcd_gotoxy(0,1); lcd_puts(lat);
}
else if (NS=='S')
{
lcd_gotoxy(0,0); lcd_putsf("South");
lcd_gotoxy(0,1); lcd_puts(lat);
}
else
{
lcd_gotoxy(0,0); lcd_putsf("Are you lost?");
}
}
void longitude()
{
if (EW=='E')
{
lcd_gotoxy(0,0); lcd_putsf("East");
lcd_gotoxy(0,1); lcd_puts(longt);
}
else if (EW=='W')
{
lcd_gotoxy(0,0); lcd_putsf("West");
lcd_gotoxy(0,1); lcd_puts(longt);
}
else
{
lcd_gotoxy(0,0); lcd_putsf("Are you lost?");
}
}
void position_fix_indicator()
{
lcd_gotoxy(0,0); lcd_putsf("Position Fix");
lcd_gotoxy(0,1); lcd_putchar(PFI);
}
void jumlah_satelit()
{
lcd_gotoxy(0,0); lcd_putsf("Jumlah Satelit");
lcd_gotoxy(0,1); lcd_puts(jumlah);
}
void tampil()
{
lcd_clear();
jam();
delay_ms(1000);
lcd_clear();
latitude();
delay_ms(1000);
lcd_clear();
longitude();
delay_ms(1000);
lcd_clear();
position_fix_indicator();
delay_ms(1000);
lcd_clear();
jumlah_satelit();
delay_ms(1000);
}
void main(void)
{
// Declare your local variables here
// Input/Output Ports initialization
// Port A initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTA=0b11110111;
DDRA=0b00011001;
// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTB=0x00;
DDRB=0x00;
// Port C initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTC=0x00;
DDRC=0x00;
// Port D initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTD=0x00;
DDRD=0x00;
// Port E initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTE=0x00;
DDRE=0x00;
// Port F initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTF=0x00;
DDRF=0x00;
// Port G initialization
// Func4=In Func3=In Func2=In Func1=In Func0=In
// State4=T State3=T State2=T State1=T State0=T
PORTG=0x00;
DDRG=0x00;
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=0xFF
// OC0 output: Disconnected
ASSR=0x00;
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer1 Stopped
// Mode: Normal top=0xFFFF
// OC1A output: Discon.
// OC1B output: Discon.
// OC1C output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
// Compare C Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
OCR1CH=0x00;
OCR1CL=0x00;
// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer2 Stopped
// Mode: Normal top=0xFF
// OC2 output: Disconnected
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
// Timer/Counter 3 initialization
// Clock source: System Clock
// Clock value: Timer3 Stopped
// Mode: Normal top=0xFFFF
// OC3A output: Discon.
// OC3B output: Discon.
// OC3C output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer3 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
// Compare C Match Interrupt: Off
TCCR3A=0x00;
TCCR3B=0x00;
TCNT3H=0x00;
TCNT3L=0x00;
ICR3H=0x00;
ICR3L=0x00;
OCR3AH=0x00;
OCR3AL=0x00;
OCR3BH=0x00;
OCR3BL=0x00;
OCR3CH=0x00;
OCR3CL=0x00;
// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
// INT2: Off
// INT3: Off
// INT4: Off
// INT5: Off
// INT6: Off
// INT7: Off
EICRA=0x00;
EICRB=0x00;
EIMSK=0x00;
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x00;
ETIMSK=0x00;
// USART0 initialization
// USART0 disabled
UCSR0B=0x00;
// USART1 initialization
// Communication Parameters: 8 Data, 1 Stop, No Parity
// USART1 Receiver: On
// USART1 Transmitter: On
// USART1 Mode: Asynchronous
// USART1 Baud Rate: 4800
UCSR1A=0x00;
UCSR1B=0x98;
UCSR1C=0x06;
UBRR1H=0x00;
UBRR1L=0xCF;
// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;
// ADC initialization
// ADC disabled
ADCSRA=0x00;
// SPI initialization
// SPI disabled
SPCR=0x00;
// TWI initialization
// TWI disabled
TWCR=0x00;
// Alphanumeric LCD initialization
// Connections specified in the
// Project|Configure|C Compiler|Libraries|Alphanumeric LCD menu:
// RS - PORTB Bit 0
// RD - PORTB Bit 1
// EN - PORTB Bit 2
// D4 - PORTB Bit 4
// D5 - PORTB Bit 5
// D6 - PORTB Bit 6
// D7 - PORTB Bit 7
// Characters/line: 16
lcd_init(16);
// Global enable interrupts
#asm("sei")
if(CTS==1)
{
lcd_clear();lcd_putsf("Clear To Send");delay_ms(500);
}
if(WU==0)
{
lcd_clear();lcd_putsf("SLEEP");delay_ms(500);
}
while(WU==0)
{
OO=0;
delay_ms(700);
OO=1;
delay_ms(200);
OO=0;
delay_ms(700);
}
RTS=0;CTS=0;
lcd_clear();lcd_putsf("WAKE UP");delay_ms(500);
lcd_clear(); lcd_putsf("Load.....");
while (1)
{
if(rx_counter1>0)
{
ch= getchar1();
if (ch=='$')
{
ch= getchar1();
if (ch=='G')
{
ch= getchar1();
if (ch=='P')
{
ch= getchar1();
if (ch=='G')
{
ch= getchar1();
if (ch=='G')
{
ch= getchar1();
if (ch=='A')
{
ch=getchar1();
if (ch==',')
{
utc[0]=getchar1();
utc[1]=getchar1();
utc[2]=getchar1();
utc[3]=getchar1();
utc[4]=getchar1();
utc[5]=getchar1();
utc[6]=getchar1();
utc[7]=getchar1();
utc[8]=getchar1();
utc[9]=getchar1();
utc[10]=0;
getchar1();
lat[0]=getchar1();
lat[1]=getchar1();
lat[2]=getchar1();
lat[3]=getchar1();
lat[4]=getchar1();
lat[5]=getchar1();
lat[6]=getchar1();
lat[7]=getchar1();
lat[8]=getchar1();
lat[9]=0;
getchar1();
NS=getchar1();
getchar1();
longt[0]=getchar1();
longt[1]=getchar1();
longt[2]=getchar1();
longt[3]=getchar1();
longt[4]=getchar1();
longt[5]=getchar1();
longt[6]=getchar1();
longt[7]=getchar1();
longt[8]=getchar1();
longt[9]=getchar1();
longt[10]=0;
getchar1();// ,
EW=getchar1();
getchar1(); // ,
PFI=getchar1();
getchar1(); // ,
jumlah[0]=getchar1();
jumlah[1]=getchar1();
jumlah[2]=0;
tampil();
}
}
}
}
}
}
}
}
}
}
Please help me..