robocat
19.07.2007, 23:54
von einem projekt kann man eigentlich kaum reden, und fertig ist es auch noch nicht, aber vielleicht hilft es ja jemandem..
die GNS9810 wird nicht mehr hergestellt, besitzt nur einen sirfII chipsatz (+TMC empfänger, das ist für verkehrsdaten, wird hier aber ignoriert), ist aber inzwischen beim onlineauktionshaus recht günstig zu bekommen, und ist für manche anwendungen völlig ausreichend.
abschirmung des kabels auf masse und pin 5 eines rs232 kabels
rotes kabelchen an +5V
schwarzes kabelchen ist ausgang der maus, kommt an RXD (pin 2 am 9poligen sub-d des PCs)
weisses kabelchen ist eingang der maus, kommt an TXD (pin 3 am 9poligen sub-d des PCs)
einstellungen für den com-port: 38400 baud, 8 datenbits, 1 stopbit, kein parity, kein handshake
man muss der maus nun ein paar bytes senden, damit sie beginnt, nmea-daten zu übertragen. dies kann mit einem terminal-programm (wie HTerm http://www.der-hammer.info/terminal/) geschehen, oder auch mit einem selbstgeschriebenen programm. folgende bytecodes funtionieren bei mir:
13,10,13,10,13,10 dez. (entspricht "\r\n\r\n\r\n" in c)
255,86,120,120,86 dez.
es kann sein, dass dann noch tmc-daten in die (als ascii lesbaren) NMEA-daten eingestreut sind. ich habe die antenne ausgesteckt, und hatte seither keine probleme mehr damit. im notfall gibt es aber hier http://www.gns-gmbh.com/support/gpsmouse/files/GpsRdsRun_PC.zip ein programm, das abhilfe schaffen soll (die maus sendet dann reine NMEA-daten).
hier ist ein kleines konsolenprogramm für win32, um daten von der maus zu empfangen und darzustellen:
// free code for reading gns9810 gps mouse attached to COM1 port done by robocat
// compiler: bcc32, platform: xp
#include <stdio.h>
#include <windows.h>
#include "signal.h" // für abbruch mit strg+c
#include <conio.h> // fuer warten auf taste mit getch()
int run=1;
void sigfunc(int sig) // für abbruch mit strg+c
{
if(sig == SIGINT)
{
printf("Got Ctrl-c.\n");
run=0;
}
return;
}
int main(void)
{
HANDLE port;
DCB dcb;
unsigned long dwNum;
unsigned char c, string[6];
signal(SIGINT,sigfunc); // für abbruch mit strg+c
port=CreateFile("COM1", // hier com-port einstellen
GENERIC_READ | GENERIC_WRITE,
0,
NULL,
OPEN_EXISTING,
0,
NULL); // serielle Schnittstelle öffnen
if(!port)
{
printf("failed to open port!\n");
getch();
exit(1);
}
if(!GetCommState(port, &dcb))
{
CloseHandle(port);
printf("failed to get port!\n");
getch();
exit(1);
}
dcb.DCBlength=sizeof(dcb);
dcb.BaudRate = CBR_38400;
dcb.ByteSize = 8; // 8 Datenbits
dcb.Parity = 0; // kein Paritätsbit
dcb.StopBits = ONESTOPBIT; // 1 Stoppbit
dcb.fBinary = TRUE;
dcb.fParity = 0;
dcb.fNull=TRUE;
if(!SetCommState(port, &dcb))
{
CloseHandle(port);
printf("failed to set port!\n");
getch();
exit(1);
}
sprintf(string,"%c%c%c%c%c",255,86,120,120,86);
if(WriteFile(port,string,5,&dwNum,NULL))printf("init ok!\n");
while(run)
{
ReadFile(port,&c,1,&dwNum,NULL);
printf("%c",c);
}
CloseHandle(port); // serielle Schnittstelle schließen
return(0);
}
ich bin sicher, dass es nicht allzuschwierig ist, die maus an einem atmega oder anderem µC zu betreiben (was für robotikanwendungen interessanter ist als ein pc), ich habe es nur bisher nicht versucht. man muss dann einen max232 als pegelwandler verwenden, +/-10V mögen die atmegas nicht.
die maus sendet ihre nmea-daten im sekundentakt, zur auswertung der daten ist vielleicht folgende seite interessant: http://www.kowoma.de/gps/zusatzerklaerungen/NMEA.htm
gruesse von der katz
die GNS9810 wird nicht mehr hergestellt, besitzt nur einen sirfII chipsatz (+TMC empfänger, das ist für verkehrsdaten, wird hier aber ignoriert), ist aber inzwischen beim onlineauktionshaus recht günstig zu bekommen, und ist für manche anwendungen völlig ausreichend.
abschirmung des kabels auf masse und pin 5 eines rs232 kabels
rotes kabelchen an +5V
schwarzes kabelchen ist ausgang der maus, kommt an RXD (pin 2 am 9poligen sub-d des PCs)
weisses kabelchen ist eingang der maus, kommt an TXD (pin 3 am 9poligen sub-d des PCs)
einstellungen für den com-port: 38400 baud, 8 datenbits, 1 stopbit, kein parity, kein handshake
man muss der maus nun ein paar bytes senden, damit sie beginnt, nmea-daten zu übertragen. dies kann mit einem terminal-programm (wie HTerm http://www.der-hammer.info/terminal/) geschehen, oder auch mit einem selbstgeschriebenen programm. folgende bytecodes funtionieren bei mir:
13,10,13,10,13,10 dez. (entspricht "\r\n\r\n\r\n" in c)
255,86,120,120,86 dez.
es kann sein, dass dann noch tmc-daten in die (als ascii lesbaren) NMEA-daten eingestreut sind. ich habe die antenne ausgesteckt, und hatte seither keine probleme mehr damit. im notfall gibt es aber hier http://www.gns-gmbh.com/support/gpsmouse/files/GpsRdsRun_PC.zip ein programm, das abhilfe schaffen soll (die maus sendet dann reine NMEA-daten).
hier ist ein kleines konsolenprogramm für win32, um daten von der maus zu empfangen und darzustellen:
// free code for reading gns9810 gps mouse attached to COM1 port done by robocat
// compiler: bcc32, platform: xp
#include <stdio.h>
#include <windows.h>
#include "signal.h" // für abbruch mit strg+c
#include <conio.h> // fuer warten auf taste mit getch()
int run=1;
void sigfunc(int sig) // für abbruch mit strg+c
{
if(sig == SIGINT)
{
printf("Got Ctrl-c.\n");
run=0;
}
return;
}
int main(void)
{
HANDLE port;
DCB dcb;
unsigned long dwNum;
unsigned char c, string[6];
signal(SIGINT,sigfunc); // für abbruch mit strg+c
port=CreateFile("COM1", // hier com-port einstellen
GENERIC_READ | GENERIC_WRITE,
0,
NULL,
OPEN_EXISTING,
0,
NULL); // serielle Schnittstelle öffnen
if(!port)
{
printf("failed to open port!\n");
getch();
exit(1);
}
if(!GetCommState(port, &dcb))
{
CloseHandle(port);
printf("failed to get port!\n");
getch();
exit(1);
}
dcb.DCBlength=sizeof(dcb);
dcb.BaudRate = CBR_38400;
dcb.ByteSize = 8; // 8 Datenbits
dcb.Parity = 0; // kein Paritätsbit
dcb.StopBits = ONESTOPBIT; // 1 Stoppbit
dcb.fBinary = TRUE;
dcb.fParity = 0;
dcb.fNull=TRUE;
if(!SetCommState(port, &dcb))
{
CloseHandle(port);
printf("failed to set port!\n");
getch();
exit(1);
}
sprintf(string,"%c%c%c%c%c",255,86,120,120,86);
if(WriteFile(port,string,5,&dwNum,NULL))printf("init ok!\n");
while(run)
{
ReadFile(port,&c,1,&dwNum,NULL);
printf("%c",c);
}
CloseHandle(port); // serielle Schnittstelle schließen
return(0);
}
ich bin sicher, dass es nicht allzuschwierig ist, die maus an einem atmega oder anderem µC zu betreiben (was für robotikanwendungen interessanter ist als ein pc), ich habe es nur bisher nicht versucht. man muss dann einen max232 als pegelwandler verwenden, +/-10V mögen die atmegas nicht.
die maus sendet ihre nmea-daten im sekundentakt, zur auswertung der daten ist vielleicht folgende seite interessant: http://www.kowoma.de/gps/zusatzerklaerungen/NMEA.htm
gruesse von der katz